1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-06-25 04:07:17 +08:00

完善弹幕配置部分

This commit is contained in:
xiaochong0302 2020-07-11 20:43:26 +08:00
parent 5039b7891d
commit 3e27353b26
36 changed files with 182 additions and 92 deletions

View File

@ -8,7 +8,7 @@
<a><cite>绑定邮箱</cite></a> <a><cite>绑定邮箱</cite></a>
</div> </div>
<div class="account-container container"> <div class="account-wrap wrap">
<form class="layui-form account-form" method="POST" action="{{ url({'for':'web.account.update_email'}) }}"> <form class="layui-form account-form" method="POST" action="{{ url({'for':'web.account.update_email'}) }}">
<div class="layui-form-item"> <div class="layui-form-item">
<div class="layui-input-block"> <div class="layui-input-block">

View File

@ -8,7 +8,7 @@
<a><cite>修改密码</cite></a> <a><cite>修改密码</cite></a>
</div> </div>
<div class="account-container container"> <div class="account-wrap wrap">
<form class="layui-form account-form" method="POST" action="{{ url({'for':'web.account.update_pwd'}) }}"> <form class="layui-form account-form" method="POST" action="{{ url({'for':'web.account.update_pwd'}) }}">
<div class="layui-form-item"> <div class="layui-form-item">
<div class="layui-input-block"> <div class="layui-input-block">

View File

@ -8,7 +8,7 @@
<a><cite>绑定手机</cite></a> <a><cite>绑定手机</cite></a>
</div> </div>
<div class="account-container container"> <div class="account-wrap wrap">
<form class="layui-form account-form" method="POST" action="{{ url({'for':'web.account.update_phone'}) }}"> <form class="layui-form account-form" method="POST" action="{{ url({'for':'web.account.update_phone'}) }}">
<div class="layui-form-item"> <div class="layui-form-item">
<div class="layui-input-block"> <div class="layui-input-block">

View File

@ -7,7 +7,7 @@
<a><cite>重置密码</cite></a> <a><cite>重置密码</cite></a>
</div> </div>
<div class="account-container container"> <div class="account-wrap wrap">
<form class="layui-form account-form" method="POST" action="{{ url({'for':'web.account.reset_pwd'}) }}"> <form class="layui-form account-form" method="POST" action="{{ url({'for':'web.account.reset_pwd'}) }}">
<div class="layui-form-item"> <div class="layui-form-item">
<div class="layui-input-block"> <div class="layui-input-block">

View File

@ -7,7 +7,7 @@
<a><cite>登录</cite></a> <a><cite>登录</cite></a>
</div> </div>
<div class="login-container container"> <div class="login-wrap wrap">
<div class="layui-tab layui-tab-brief login-tab"> <div class="layui-tab layui-tab-brief login-tab">
<ul class="layui-tab-title login-tab-title"> <ul class="layui-tab-title login-tab-title">
<li class="layui-this">密码登录</li> <li class="layui-this">密码登录</li>

View File

@ -7,7 +7,7 @@
<a><cite>注册</cite></a> <a><cite>注册</cite></a>
</div> </div>
<div class="account-container container"> <div class="account-wrap wrap">
<form class="layui-form account-form" method="POST" action="{{ url({'for':'web.account.do_register'}) }}"> <form class="layui-form account-form" method="POST" action="{{ url({'for':'web.account.do_register'}) }}">
<div class="layui-form-item"> <div class="layui-form-item">
<div class="layui-input-block"> <div class="layui-input-block">

View File

@ -1,23 +1,25 @@
<div class="layui-card"> <div class="sidebar-chapter-wrap wrap">
<div class="layui-card-header">课程目录</div> <fieldset class="layui-elem-field layui-field-title">
<div class="layui-card-body"> <legend>课程目录</legend>
<div class="sidebar-chapter-list"> <div class="layui-field-box">
{% for item in chapters %} <div class="sidebar-chapter-list">
<div class="chapter-title layui-elip">{{ item.title }}</div> {% for item in chapters %}
<ul class="sidebar-lesson-list"> <div class="chapter-title layui-elip">{{ item.title }}</div>
{% for lesson in item.children %} <ul class="sidebar-lesson-list">
{% set url = url({'for':'web.chapter.show','id':lesson.id}) %} {% for lesson in item.children %}
{% set active = (chapter.id == lesson.id) ? 'active' : 'normal' %} {% set url = url({'for':'web.chapter.show','id':lesson.id}) %}
<li class="lesson-title layui-elip"> {% set active = (chapter.id == lesson.id) ? 'active' : 'normal' %}
{% if lesson.me.owned == 1 %} <li class="lesson-title layui-elip">
<a class="{{ active }}" href="{{ url }}" title="{{ lesson.title|e }}">{{ lesson.title }}</a> {% if lesson.me.owned == 1 %}
{% else %} <a class="{{ active }}" href="{{ url }}" title="{{ lesson.title|e }}">{{ lesson.title }}</a>
<span class="deny" title="{{ lesson.title|e }}">{{ lesson.title }}</span> {% else %}
{% endif %} <span class="deny" title="{{ lesson.title|e }}">{{ lesson.title }}</span>
</li> {% endif %}
{% endfor %} </li>
</ul> {% endfor %}
{% endfor %} </ul>
{% endfor %}
</div>
</div> </div>
</div> </fieldset>
</div> </div>

View File

@ -17,12 +17,12 @@
<div class="layout-main"> <div class="layout-main">
<div class="layout-content"> <div class="layout-content">
<div class="player-container container"> <div class="player-wrap wrap">
<div id=player"></div> <div id=player"></div>
</div> </div>
</div> </div>
<div class="layout-sidebar"> <div class="layout-sidebar">
<div class="chat-container"> <div class="chat-wrap">
<div class="layui-tab layui-tab-brief user-tab"> <div class="layui-tab layui-tab-brief user-tab">
<ul class="layui-tab-title"> <ul class="layui-tab-title">
<li class="layui-this">讨论</li> <li class="layui-this">讨论</li>

View File

@ -13,7 +13,7 @@
<div class="layout-main clearfix"> <div class="layout-main clearfix">
<div class="layout-content"> <div class="layout-content">
<div class="read-info container">{{ chapter.content }}</div> <div class="read-info wrap">{{ chapter.content }}</div>
</div> </div>
<div class="layout-sidebar"> <div class="layout-sidebar">
{{ partial('chapter/menu') }} {{ partial('chapter/menu') }}

View File

@ -14,14 +14,14 @@
<div class="layout-main clearfix"> <div class="layout-main clearfix">
<div class="layout-content"> <div class="layout-content">
<div class="player-container container"> <div class="player-wrap wrap">
<div id="player"></div> <div id="player"></div>
<div id="danmu"></div> <div id="danmu"></div>
</div> </div>
<div class="danmu-action container"> <div class="danmu-action-wrap wrap">
<form class="layui-form" action="{{ url({'for':'web.danmu.create'}) }}"> <form class="layui-form" lay-filter="danmu.form" action="{{ url({'for':'web.danmu.create'}) }}">
<div class="layui-input-inline" style="width: 100px;"> <div class="layui-input-inline" style="width: 50px;">
<input type="checkbox" name="status" title="弹幕" checked="checked" lay-filter="danmu.status"> <a href="javascript:" class="layui-icon layui-icon-set icon-danmu-set"></a>
</div> </div>
<div class="layui-input-inline" style="width: 655px;"> <div class="layui-input-inline" style="width: 655px;">
{% if auth_user.id > 0 %} {% if auth_user.id > 0 %}
@ -39,6 +39,52 @@
</div> </div>
</div> </div>
<div id="my-danmu-set" style="display:none;">
<form class="layui-form" lay-filter="danmu.form.set" style="padding:20px 0;">
<div class="layui-form-item">
<label class="layui-form-label">显示弹幕</label>
<div class="layui-input-block">
<input type="checkbox" name="danmu.status" lay-filter="danmu.status" lay-skin="switch" lay-text="是|否" checked="checked">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">透明度</label>
<div class="layui-input-block">
<input type="radio" name="danmu.opacity" lay-filter="danmu.opacity" value="1" title="0" checked="checked">
<input type="radio" name="danmu.opacity" lay-filter="danmu.opacity" value="0.75" title="25%">
<input type="radio" name="danmu.opacity" lay-filter="danmu.opacity" value="0.5" title="50%">
<input type="radio" name="danmu.opacity" lay-filter="danmu.opacity" value="0.25" title="75%">
<input type="radio" name="danmu.opacity" lay-filter="danmu.opacity" value="0" title="100%">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">颜色</label>
<div class="layui-input-block">
<input type="radio" name="danmu.color" value="white" title="白" checked="checked">
<input type="radio" name="danmu.color" value="red" title="红">
<input type="radio" name="danmu.color" value="orange" title="黄">
<input type="radio" name="danmu.color" value="blue" title="蓝">
<input type="radio" name="danmu.color" value="green" title="绿">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">位置</label>
<div class="layui-input-block">
<input type="radio" name="danmu.position" value="0" title="滚动" checked="checked">
<input type="radio" name="danmu.position" value="1" title="顶部">
<input type="radio" name="danmu.position" value="2" title="底部">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">字号</label>
<div class="layui-input-block">
<input type="radio" name="danmu.size" value="0" title="小" checked="checked">
<input type="radio" name="danmu.size" value="1" title="大">
</div>
</div>
</form>
</div>
<div class="layui-hide"> <div class="layui-hide">
<input type="hidden" name="chapter.id" value="{{ chapter.id }}"> <input type="hidden" name="chapter.id" value="{{ chapter.id }}">
<input type="hidden" name="chapter.position" value="{{ chapter.me.position }}"> <input type="hidden" name="chapter.position" value="{{ chapter.me.position }}">

View File

@ -2,7 +2,7 @@
<span class="layui-icon layui-icon-up"></span> <span class="layui-icon layui-icon-up"></span>
</div> </div>
<div class="course-filter container"> <div class="course-filter wrap">
<div class="filter-group"> <div class="filter-group">
<div class="title">方向</div> <div class="title">方向</div>
<div class="content"> <div class="content">
@ -47,7 +47,7 @@
</div> </div>
</div> </div>
<div class="course-sort container"> <div class="course-sort wrap">
{% set sort_val = request.get('sort','trim','score') %} {% set sort_val = request.get('sort','trim','score') %}
{% for sort in sorts %} {% for sort in sorts %}
{% set class = sort_val == sort.id ? 'layui-btn layui-btn-xs' : 'none' %} {% set class = sort_val == sort.id ? 'layui-btn layui-btn-xs' : 'none' %}

View File

@ -1,5 +1,5 @@
{% if course.me.owned == 0 and course.market_price > 0 %} {% if course.me.owned == 0 and course.market_price > 0 %}
<div class="sidebar-order container"> <div class="sidebar-order wrap">
<div class="order"> <div class="order">
{% set order_url = url({'for':'web.order.confirm'},{'item_id':course.id,'item_type':'course'}) %} {% set order_url = url({'for':'web.order.confirm'},{'item_id':course.id,'item_type':'course'}) %}
<a class="layui-btn layui-btn-fluid layui-bg-red" href="{{ order_url }}">立即购买</a> <a class="layui-btn layui-btn-fluid layui-bg-red" href="{{ order_url }}">立即购买</a>

View File

@ -14,7 +14,7 @@
</span> </span>
</div> </div>
<div class="course-meta container clearfix"> <div class="course-meta wrap clearfix">
{{ partial('course/meta') }} {{ partial('course/meta') }}
</div> </div>
@ -25,7 +25,7 @@
{% set show_tab_reviews = course.review_count > 0 ? 1 : 0 %} {% set show_tab_reviews = course.review_count > 0 ? 1 : 0 %}
<div class="layout-content"> <div class="layout-content">
<div class="container"> <div class="wrap">
<div class="layui-tab layui-tab-brief course-tab"> <div class="layui-tab layui-tab-brief course-tab">
<ul class="layui-tab-title"> <ul class="layui-tab-title">
<li class="layui-this">详情</li> <li class="layui-this">详情</li>

View File

@ -2,7 +2,7 @@
{% block content %} {% block content %}
<div class="page-info container"> <div class="page-info wrap">
<fieldset class="layui-elem-field layui-field-title"> <fieldset class="layui-elem-field layui-field-title">
<legend>帮助中心</legend> <legend>帮助中心</legend>
<div class="layui-field-box"> <div class="layui-field-box">

View File

@ -2,7 +2,7 @@
{% block content %} {% block content %}
<div class="page-info container"> <div class="page-info wrap">
<fieldset class="layui-elem-field layui-field-title"> <fieldset class="layui-elem-field layui-field-title">
<legend>{{ help.title }}</legend> <legend>{{ help.title }}</legend>
<div class="layui-field-box page-content"> <div class="layui-field-box page-content">

View File

@ -2,7 +2,7 @@
{% block content %} {% block content %}
<div class="im-search-container"> <div class="im-search-wrap">
<div class="im-search"> <div class="im-search">
<form class="layui-form" method="get" action="{{ url({'for':'web.im.search'}) }}"> <form class="layui-form" method="get" action="{{ url({'for':'web.im.search'}) }}">
<input class="layui-input" type="text" name="query" placeholder="请输入关键字..."> <input class="layui-input" type="text" name="query" placeholder="请输入关键字...">

View File

@ -31,7 +31,7 @@
</div> </div>
{%- endmacro %} {%- endmacro %}
<div class="index-container index-carousel container"> <div class="index-wrap index-carousel wrap">
<div class="layui-carousel" id="carousel"> <div class="layui-carousel" id="carousel">
<div class="carousel" carousel-item> <div class="carousel" carousel-item>
{% for slide in slides %} {% for slide in slides %}
@ -45,21 +45,21 @@
</div> </div>
</div> </div>
<div class="index-container container"> <div class="index-wrap wrap">
<div class="header">新上课程</div> <div class="header">新上课程</div>
<div class="content"> <div class="content">
{{ category_courses(new_courses) }} {{ category_courses(new_courses) }}
</div> </div>
</div> </div>
<div class="index-container container"> <div class="index-wrap wrap">
<div class="header">免费课程</div> <div class="header">免费课程</div>
<div class="content"> <div class="content">
{{ category_courses(free_courses) }} {{ category_courses(free_courses) }}
</div> </div>
</div> </div>
<div class="index-container container"> <div class="index-wrap wrap">
<div class="header">会员课程</div> <div class="header">会员课程</div>
<div class="content"> <div class="content">
{{ category_courses(vip_courses) }} {{ category_courses(vip_courses) }}

View File

@ -9,7 +9,7 @@
<div class="layout-main"> <div class="layout-main">
<div class="layout-sidebar">{{ partial('my/menu') }}</div> <div class="layout-sidebar">{{ partial('my/menu') }}</div>
<div class="layout-content"> <div class="layout-content">
<div class="container"> <div class="wrap">
<div class="my-nav-title">账号安全</div> <div class="my-nav-title">账号安全</div>
<div class="security-item-list"> <div class="security-item-list">
<div class="security-item"> <div class="security-item">

View File

@ -7,7 +7,7 @@
{% endif %} {% endif %}
{%- endmacro %} {%- endmacro %}
<div class="my-profile-card container"> <div class="my-profile-card wrap">
<div class="avatar"> <div class="avatar">
<a href="javascript:"><img src="{{ auth_user.avatar }}" alt="{{ auth_user.name }}"></a> <a href="javascript:"><img src="{{ auth_user.avatar }}" alt="{{ auth_user.name }}"></a>
</div> </div>

View File

@ -11,7 +11,7 @@
<a><cite>我的订单</cite></a> <a><cite>我的订单</cite></a>
</div> </div>
<div class="container"> <div class="wrap">
<div class="order-filter"> <div class="order-filter">
{% set status = request.get('status','trim','all') %} {% set status = request.get('status','trim','all') %}
{% for key,value in status_types %} {% for key,value in status_types %}

View File

@ -5,7 +5,7 @@
<div class="layout-main"> <div class="layout-main">
<div class="layout-sidebar">{{ partial('my/menu') }}</div> <div class="layout-sidebar">{{ partial('my/menu') }}</div>
<div class="layout-content"> <div class="layout-content">
<div class="container"> <div class="wrap">
<div class="my-nav-title">个人信息</div> <div class="my-nav-title">个人信息</div>
<form class="layui-form my-form" method="post" action="{{ url({'for':'web.my.update_profile'}) }}"> <form class="layui-form my-form" method="post" action="{{ url({'for':'web.my.update_profile'}) }}">
<div class="layui-form-item"> <div class="layui-form-item">

View File

@ -11,7 +11,7 @@
<a><cite>我的退款</cite></a> <a><cite>我的退款</cite></a>
</div> </div>
<div class="container"> <div class="wrap">
<div class="order-filter"> <div class="order-filter">
{% set status = request.get('status','trim','all') %} {% set status = request.get('status','trim','all') %}
{% for key,value in status_types %} {% for key,value in status_types %}

View File

@ -63,7 +63,7 @@
<a><cite>确认订单</cite></a> <a><cite>确认订单</cite></a>
</div> </div>
<div class="cart-item-list container"> <div class="cart-item-list wrap">
{% if confirm.item_type == 'course' %} {% if confirm.item_type == 'course' %}
{% set course = confirm.item_info.course %} {% set course = confirm.item_info.course %}
{{ cart_course_card(course, auth_user) }} {{ cart_course_card(course, auth_user) }}
@ -79,7 +79,7 @@
{% endif %} {% endif %}
</div> </div>
<div class="cart-stats container clearfix"> <div class="cart-stats wrap clearfix">
<div class="info"> <div class="info">
商品总价:<span class="amount">{{ '¥%0.2f'|format(confirm.total_amount) }}</span> 商品总价:<span class="amount">{{ '¥%0.2f'|format(confirm.total_amount) }}</span>
优惠金额:<span class="amount">{{ '¥%0.2f'|format(confirm.discount_amount) }}</span> 优惠金额:<span class="amount">{{ '¥%0.2f'|format(confirm.discount_amount) }}</span>

View File

@ -11,7 +11,7 @@
<a><cite>{{ order.subject }}</cite></a> <a><cite>{{ order.subject }}</cite></a>
</div> </div>
<div class="container"> <div class="wrap">
<table class="layui-table kg-table order-table" lay-size="lg"> <table class="layui-table kg-table order-table" lay-size="lg">
<tr> <tr>
<td>基本信息</td> <td>基本信息</td>

View File

@ -7,7 +7,7 @@
<a><cite>支付订单</cite></a> <a><cite>支付订单</cite></a>
</div> </div>
<div class="payment container"> <div class="payment wrap">
<div class="header"> <div class="header">
订单名称:<span>{{ order.subject }}</span> 订单名称:<span>{{ order.subject }}</span>
订单编号:<span>{{ order.sn }}</span> 订单编号:<span>{{ order.sn }}</span>

View File

@ -2,7 +2,7 @@
{% block content %} {% block content %}
<div class="page-info container"> <div class="page-info wrap">
<fieldset class="layui-elem-field layui-field-title"> <fieldset class="layui-elem-field layui-field-title">
<legend>{{ page.title }}</legend> <legend>{{ page.title }}</legend>
<div class="layui-field-box page-content"> <div class="layui-field-box page-content">

View File

@ -31,7 +31,7 @@
<a><cite>{{ order.subject }}</cite></a> <a><cite>{{ order.subject }}</cite></a>
</div> </div>
<div class="container"> <div class="wrap">
<table class="layui-table kg-table order-table" lay-size="lg"> <table class="layui-table kg-table order-table" lay-size="lg">
<tr> <tr>
<td>订单编号:{{ order.sn }}</td> <td>订单编号:{{ order.sn }}</td>

View File

@ -11,7 +11,7 @@
<a><cite>{{ refund.subject }}</cite></a> <a><cite>{{ refund.subject }}</cite></a>
</div> </div>
<div class="container"> <div class="wrap">
<table class="layui-table kg-table order-table" lay-size="lg"> <table class="layui-table kg-table order-table" lay-size="lg">
<tr> <tr>
<td>退款项目</td> <td>退款项目</td>

View File

@ -16,7 +16,7 @@
<div class="layout-main clearfix"> <div class="layout-main clearfix">
<div class="layout-content"> <div class="layout-content">
{% if pager.total_pages > 0 %} {% if pager.total_pages > 0 %}
<div class="container"> <div class="wrap">
{% if type == 'course' %} {% if type == 'course' %}
{{ partial('search/content_course') }} {{ partial('search/content_course') }}
{% elseif type == 'other' %} {% elseif type == 'other' %}
@ -25,7 +25,7 @@
</div> </div>
{{ partial('partials/pager') }} {{ partial('partials/pager') }}
{% else %} {% else %}
<div class="search-empty container"> <div class="search-empty wrap">
<div class="icon"><i class="layui-icon layui-icon-face-surprised"></i></div> <div class="icon"><i class="layui-icon layui-icon-face-surprised"></i></div>
<div class="text">没有找到<span class="query">{{ query }}</span>相关内容,换个关键字试试吧!</div> <div class="text">没有找到<span class="query">{{ query }}</span>相关内容,换个关键字试试吧!</div>
</div> </div>

View File

@ -6,7 +6,7 @@
{% set vip_flag = user.vip ? '<i class="layui-icon layui-icon-diamond vip-icon"></i>' : '' %} {% set vip_flag = user.vip ? '<i class="layui-icon layui-icon-diamond vip-icon"></i>' : '' %}
<div class="user-profile container clearfix"> <div class="user-profile wrap clearfix">
<div class="avatar"> <div class="avatar">
<img src="{{ user.avatar }}" alt="{{ user.name }}"> <img src="{{ user.avatar }}" alt="{{ user.name }}">
</div> </div>
@ -24,7 +24,7 @@
{% set favorites_url = url({'for':'web.user.favorites','id':user.id},{'limit':12}) %} {% set favorites_url = url({'for':'web.user.favorites','id':user.id},{'limit':12}) %}
{% set friends_url = url({'for':'web.user.friends','id':user.id},{'limit':12}) %} {% set friends_url = url({'for':'web.user.friends','id':user.id},{'limit':12}) %}
<div class="tab-container"> <div class="tab-wrap">
<div class="layui-tab layui-tab-brief user-tab"> <div class="layui-tab layui-tab-brief user-tab">
<ul class="layui-tab-title"> <ul class="layui-tab-title">
<li class="layui-this">课程</li> <li class="layui-this">课程</li>

View File

@ -4,7 +4,7 @@
<div class="vip-header">会员权益</div> <div class="vip-header">会员权益</div>
<div class="vip-reason-list container"> <div class="vip-reason-list wrap">
<span class="layui-badge reason-badge">好课畅学</span> <span class="layui-badge reason-badge">好课畅学</span>
<span class="layui-badge reason-badge">会员折扣</span> <span class="layui-badge reason-badge">会员折扣</span>
<span class="layui-badge reason-badge">高清视频</span> <span class="layui-badge reason-badge">高清视频</span>
@ -33,7 +33,7 @@
{% set courses_url = url({'for':'web.vip.courses'},{'limit':12}) %} {% set courses_url = url({'for':'web.vip.courses'},{'limit':12}) %}
{% set users_url = url({'for':'web.vip.users'},{'limit':12}) %} {% set users_url = url({'for':'web.vip.users'},{'limit':12}) %}
<div class="vip-tab-container"> <div class="vip-tab-wrap">
<div class="layui-tab layui-tab-brief user-tab"> <div class="layui-tab layui-tab-brief user-tab">
<ul class="layui-tab-title"> <ul class="layui-tab-title">
<li class="layui-this">课程</li> <li class="layui-this">课程</li>

View File

@ -155,7 +155,7 @@ class Danmu extends Model
]; ];
} }
public static function posTypes() public static function positionTypes()
{ {
return [ return [
self::POSITION_MOVE => '滚动', self::POSITION_MOVE => '滚动',
@ -175,7 +175,7 @@ class Danmu extends Model
]; ];
} }
public static function randPos() public static function randPosition()
{ {
$types = self::positionTypes(); $types = self::positionTypes();

View File

@ -33,14 +33,15 @@ class DanmuCreate extends FrontendService
$data = []; $data = [];
$data['text'] = $validator->checkText($post['text']); $data['text'] = $validator->checkText($post['text']);
$data['position'] = $validator->checkPosition($post['position']);
$data['color'] = $validator->checkColor($post['color']);
$data['size'] = $validator->checkSize($post['size']);
$data['time'] = $validator->checkTime($post['time']); $data['time'] = $validator->checkTime($post['time']);
$data['course_id'] = $chapter->course_id; $data['course_id'] = $chapter->course_id;
$data['chapter_id'] = $chapter->id; $data['chapter_id'] = $chapter->id;
$data['user_id'] = $user->id; $data['user_id'] = $user->id;
$data['position'] = DanmuModel::POSITION_MOVE;
$data['color'] = DanmuModel::COLOR_WHITE;
$data['size'] = DanmuModel::SIZE_SMALL;
$data['published'] = 1; $data['published'] = 1;
$danmu->create($data); $danmu->create($data);

View File

@ -46,6 +46,17 @@ class Danmu extends Validator
return $value; return $value;
} }
public function checkColor($color)
{
$list = DanmuModel::colorTypes();
if (!isset($list[$color])) {
throw new BadRequestException('danmu.invalid_color');
}
return $color;
}
public function checkSize($size) public function checkSize($size)
{ {
$list = DanmuModel::sizeTypes(); $list = DanmuModel::sizeTypes();

View File

@ -36,7 +36,7 @@
margin-bottom: 20px; margin-bottom: 20px;
} }
.container { .wrap {
padding: 20px; padding: 20px;
margin-bottom: 20px; margin-bottom: 20px;
background-color: #fff; background-color: #fff;
@ -138,19 +138,19 @@
margin-bottom: 15px; margin-bottom: 15px;
} }
.index-container .layui-tab { .index-wrap .layui-tab {
margin-bottom: 0; margin-bottom: 0;
} }
.index-container .layui-tab-title { .index-wrap .layui-tab-title {
border: none; border: none;
} }
.index-container .layui-tab-content { .index-wrap .layui-tab-content {
padding: 20px 0 0 0; padding: 20px 0 0 0;
} }
.index-container .header { .index-wrap .header {
text-align: center; text-align: center;
font-size: 18px; font-size: 18px;
padding-bottom: 15px; padding-bottom: 15px;
@ -735,6 +735,10 @@
margin-right: 10px; margin-right: 10px;
} }
.sidebar-chapter-wrap .layui-field-title legend {
text-align: center;
}
.sidebar-chapter-list::-webkit-scrollbar { .sidebar-chapter-list::-webkit-scrollbar {
width: 5px; width: 5px;
} }
@ -789,13 +793,13 @@
font-size: 12px; font-size: 12px;
} }
.player-container { .player-wrap {
position: relative; position: relative;
width: 760px; width: 760px;
height: 428px; height: 428px;
} }
.chat-container { .chat-wrap {
padding: 10px 20px 20px 20px; padding: 10px 20px 20px 20px;
background-color: white; background-color: white;
} }
@ -1050,7 +1054,7 @@
text-align: center; text-align: center;
} }
.account-container { .account-wrap {
padding-top: 40px; padding-top: 40px;
padding-bottom: 30px; padding-bottom: 30px;
} }
@ -1091,17 +1095,17 @@
padding-top: 30px; padding-top: 30px;
} }
.login-container .link { .login-wrap .link {
margin-bottom: 30px; margin-bottom: 30px;
font-size: 12px; font-size: 12px;
text-align: center; text-align: center;
} }
.login-container .link a { .login-wrap .link a {
color: #999; color: #999;
} }
.login-container .link .separator { .login-wrap .link .separator {
margin: 0 15px; margin: 0 15px;
color: #999; color: #999;
} }
@ -1346,7 +1350,7 @@
margin-right: 8px; margin-right: 8px;
} }
.im-search-container { .im-search-wrap {
padding: 20px; padding: 20px;
background-color: #f2f2f2; background-color: #f2f2f2;
} }

View File

@ -1,7 +1,8 @@
layui.use(['jquery', 'form', 'layer', 'helper'], function () { layui.use(['jquery', 'form', 'slider', 'layer', 'helper'], function () {
var $ = layui.jquery; var $ = layui.jquery;
var form = layui.form; var form = layui.form;
var slider = layui.slider;
var layer = layui.layer; var layer = layui.layer;
var helper = layui.helper; var helper = layui.helper;
@ -16,26 +17,29 @@ layui.use(['jquery', 'form', 'layer', 'helper'], function () {
var danmuListUrl = $('input[name="chapter.danmu_url"]').val(); var danmuListUrl = $('input[name="chapter.danmu_url"]').val();
var playUrls = JSON.parse($('input[name="chapter.play_urls"]').val()); var playUrls = JSON.parse($('input[name="chapter.play_urls"]').val());
var $danmuText = $('input[name="danmu.text"]'); var $danmuText = $('input[name="danmu.text"]');
var $danmuColor = $('input[name="danmu.color"]');
var $danmuSize = $('input[name="danmu.size"]');
var $danmuPosition = $('input[name="danmu.position"]');
var options = { var playerOptions = {
autoplay: false, autoplay: false,
width: 760, width: 760,
height: 428 height: 428
}; };
if (playUrls.od) { if (playUrls.od) {
options.m3u8 = playUrls.od.url; playerOptions.m3u8 = playUrls.od.url;
} }
if (playUrls.hd) { if (playUrls.hd) {
options.m3u8_hd = playUrls.hd.url; playerOptions.m3u8_hd = playUrls.hd.url;
} }
if (playUrls.sd) { if (playUrls.sd) {
options.m3u8_sd = playUrls.sd.url; playerOptions.m3u8_sd = playUrls.sd.url;
} }
options.listener = function (msg) { playerOptions.listener = function (msg) {
if (msg.type === 'play') { if (msg.type === 'play') {
play(); play();
} else if (msg.type === 'pause') { } else if (msg.type === 'pause') {
@ -45,7 +49,7 @@ layui.use(['jquery', 'form', 'layer', 'helper'], function () {
} }
}; };
var player = new TcPlayer('player', options); var player = new TcPlayer('player', playerOptions);
var position = parseInt(lastPosition); var position = parseInt(lastPosition);
@ -65,7 +69,11 @@ layui.use(['jquery', 'form', 'layer', 'helper'], function () {
initDanmu(); initDanmu();
form.on('checkbox(danmu.status)', function (data) { $('.icon-danmu-set').on('click', function () {
showMyDanmuSet();
});
form.on('switch(danmu.status)', function (data) {
if (data.elem.checked) { if (data.elem.checked) {
$('#danmu').danmu('setOpacity', 1); $('#danmu').danmu('setOpacity', 1);
} else { } else {
@ -73,12 +81,21 @@ layui.use(['jquery', 'form', 'layer', 'helper'], function () {
} }
}); });
form.on('radio(danmu.opacity)', function (data) {
$('#danmu').danmu('setOpacity', parseFloat(data.value));
});
form.on('submit(danmu.send)', function (data) { form.on('submit(danmu.send)', function (data) {
var setFormData = form.val('danmu.form.set');
var formData = form.val('danmu.form');
$.ajax({ $.ajax({
type: 'POST', type: 'POST',
url: data.form.action, url: data.form.action,
data: { data: {
text: $danmuText.val(), text: formData['danmu.text'],
color: setFormData['danmu.color'],
size: setFormData['danmu.size'],
position: setFormData['danmu.position'],
time: player.currentTime(), time: player.currentTime(),
chapter_id: chapterId chapter_id: chapterId
}, },
@ -150,6 +167,15 @@ layui.use(['jquery', 'form', 'layer', 'helper'], function () {
} }
} }
function showMyDanmuSet() {
layer.open({
type: 1,
title: '弹幕设置',
area: '600px',
content: $('#my-danmu-set')
});
}
function startDanmu() { function startDanmu() {
$('#danmu').danmu('danmuResume'); $('#danmu').danmu('danmuResume');
} }