mirror of
https://gitee.com/koogua/course-tencent-cloud.git
synced 2025-06-24 20:06:09 +08:00
会员页细分畅学和优惠课程
This commit is contained in:
parent
fdce89a4e7
commit
8c90b35991
@ -32,7 +32,7 @@
|
||||
<legend>上传视频</legend>
|
||||
</fieldset>
|
||||
|
||||
<form class="layui-form kg-form" method="POST" action="{{ url({'for':'admin.chapter.content','id':chapter.id}) }}">
|
||||
<form class="layui-form kg-form" id="vod-form" method="POST" action="{{ url({'for':'admin.chapter.content','id':chapter.id}) }}">
|
||||
|
||||
<div class="layui-form-item" id="upload-block">
|
||||
<label class="layui-form-label">视频文件</label>
|
||||
@ -54,7 +54,7 @@
|
||||
<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="{{ vod.file_id }}" readonly="true" lay-verify="required">
|
||||
<input class="layui-input" type="text" name="file_id" value="{{ vod.file_id }}" readonly="readonly" lay-verify="required">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -50,10 +50,9 @@
|
||||
|
||||
uploader.done().then(function (result) {
|
||||
$('input[name=file_id]').val(result.fileId);
|
||||
var chapterId = $('input[name=chapter_id]').val();
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/chapter/' + chapterId + '/content',
|
||||
url: $('#vod-form').attr('action'),
|
||||
data: {file_id: result.fileId}
|
||||
});
|
||||
});
|
||||
|
@ -18,6 +18,14 @@ class ImGroupController extends Controller
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @Get("/{id:[0-9]+}", name="web.im_group.show")
|
||||
*/
|
||||
public function showAction($id)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @Get("/{id:[0-9]+}/users", name="web.im_group.users")
|
||||
*/
|
||||
|
@ -30,11 +30,13 @@ class VipController extends Controller
|
||||
*/
|
||||
public function coursesAction()
|
||||
{
|
||||
$type = $this->request->getQuery('type', 'trim', 'discount');
|
||||
|
||||
$service = new VipCourseListService();
|
||||
|
||||
$pager = $service->handle();
|
||||
$pager = $service->handle($type);
|
||||
$pager->items = kg_array_object($pager->items);
|
||||
$pager->target = 'tab-courses';
|
||||
$pager->target = "tab-{$type}-courses";
|
||||
|
||||
$this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
|
||||
$this->view->setVar('pager', $pager);
|
||||
|
@ -30,26 +30,26 @@
|
||||
|
||||
<div class="layout-main clearfix">
|
||||
|
||||
{% set show_tab_chapters = course.lesson_count > 0 ? 1 : 0 %}
|
||||
{% set show_tab_packages = course.package_count > 0 ? 1 : 0 %}
|
||||
{% set show_tab_consults = course.consult_count > 0 ? 1 : 0 %}
|
||||
{% set show_tab_reviews = course.review_count > 0 ? 1 : 0 %}
|
||||
{% set show_tab_chapters = course.lesson_count > 0 %}
|
||||
{% set show_tab_packages = course.package_count > 0 %}
|
||||
{% set show_tab_consults = course.consult_count > 0 %}
|
||||
{% set show_tab_reviews = course.review_count > 0 %}
|
||||
|
||||
<div class="layout-content">
|
||||
<div class="course-tab-wrap wrap">
|
||||
<div class="layui-tab layui-tab-brief course-tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this">详情</li>
|
||||
{% if show_tab_chapters == 1 %}
|
||||
{% if show_tab_chapters %}
|
||||
<li>目录<span class="tab-count">{{ course.lesson_count }}</span></li>
|
||||
{% endif %}
|
||||
{% if show_tab_packages == 1 %}
|
||||
{% if show_tab_packages %}
|
||||
<li>套餐<span class="tab-count">{{ course.package_count }}</span></li>
|
||||
{% endif %}
|
||||
{% if show_tab_consults == 1 %}
|
||||
{% if show_tab_consults %}
|
||||
<li>咨询<span class="tab-count">{{ course.consult_count }}</span></li>
|
||||
{% endif %}
|
||||
{% if show_tab_reviews == 1 %}
|
||||
{% if show_tab_reviews %}
|
||||
<li>评价<span class="tab-count">{{ course.review_count }}</span></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
@ -57,19 +57,19 @@
|
||||
<div class="layui-tab-item layui-show">
|
||||
<div class="course-details">{{ course.details }}</div>
|
||||
</div>
|
||||
{% if show_tab_chapters == 1 %}
|
||||
{% if show_tab_chapters %}
|
||||
{% set chapters_url = url({'for':'web.course.chapters','id':course.id}) %}
|
||||
<div class="layui-tab-item" id="tab-chapters" data-url="{{ chapters_url }}"></div>
|
||||
{% endif %}
|
||||
{% if show_tab_packages == 1 %}
|
||||
{% if show_tab_packages %}
|
||||
{% set packages_url = url({'for':'web.course.packages','id':course.id}) %}
|
||||
<div class="layui-tab-item" id="tab-packages" data-url="{{ packages_url }}"></div>
|
||||
{% endif %}
|
||||
{% if show_tab_consults == 1 %}
|
||||
{% if show_tab_consults %}
|
||||
{% set consults_url = url({'for':'web.course.consults','id':course.id}) %}
|
||||
<div class="layui-tab-item" id="tab-consults" data-url="{{ consults_url }}"></div>
|
||||
{% endif %}
|
||||
{% if show_tab_reviews == 1 %}
|
||||
{% if show_tab_reviews %}
|
||||
{% set reviews_url = url({'for':'web.course.reviews','id':course.id}) %}
|
||||
<div class="layui-tab-item" id="tab-reviews" data-url="{{ reviews_url }}"></div>
|
||||
{% endif %}
|
||||
|
@ -5,7 +5,7 @@
|
||||
<div class="layui-col-md2">
|
||||
<div class="user-card">
|
||||
{% if item.vip == 1 %}
|
||||
<span class="vip">会员</span>
|
||||
<span class="vip">VIP</span>
|
||||
{% endif %}
|
||||
<div class="avatar">
|
||||
<a href="javascript:" title="{{ item.about|e }}"><img src="{{ item.avatar }}" alt="{{ item.name }}"></a>
|
||||
|
@ -14,6 +14,16 @@
|
||||
<div class="name">{{ auth_user.name }} {{ vip_info(auth_user) }}</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">教学中心</div>
|
||||
<div class="layui-card-body">
|
||||
<ul class="my-menu">
|
||||
<li><a href="{{ url({'for':'web.my.refunds'}) }}">我的直播</a></li>
|
||||
<li><a href="{{ url({'for':'web.my.orders'}) }}">用户咨询</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">课程中心</div>
|
||||
<div class="layui-card-body">
|
||||
|
@ -93,7 +93,7 @@
|
||||
{%- macro learning_course_card(item) %}
|
||||
{% set course_title = item.course.title|e %}
|
||||
{% set course_url = url({'for':'web.course.show','id':item.course.id}) %}
|
||||
<div class="course-card learning-course-card">
|
||||
<div class="course-card">
|
||||
<div class="cover">
|
||||
<a href="{{ course_url }}" title="{{ course_title }}">
|
||||
<img src="{{ item.course.cover }}!cover_270" alt="{{ course_title }}">
|
||||
@ -103,12 +103,10 @@
|
||||
<div class="title layui-elip">
|
||||
<a href="{{ course_url }}" title="{{ course_title }}">{{ course_title }}</a>
|
||||
</div>
|
||||
<div class="progress">
|
||||
<div class="layui-progress" lay-showPercent="yes">
|
||||
<div class="layui-progress-bar" lay-percent="{{ item.progress }}%"></div>
|
||||
</div>
|
||||
<div class="meta">
|
||||
<span>已学习 {{ item.duration|duration }}</span>
|
||||
<span>已完成 {{ item.progress }}%</span>
|
||||
</div>
|
||||
<div class="duration">已学习 {{ item.duration|duration }}</div>
|
||||
</div>
|
||||
</div>
|
||||
{%- endmacro %}
|
@ -1,17 +1,19 @@
|
||||
{% if pager.total_pages > 0 %}
|
||||
<div class="teach-user-list clearfix">
|
||||
<div class="user-list clearfix">
|
||||
<div class="layui-row layui-col-space20">
|
||||
{% for item in pager.items %}
|
||||
{% set user_title = item.title ? item.title : '小小教书匠' %}
|
||||
{% set user_about = item.about ? item.about|e : '这个人很懒,什么都没留下' %}
|
||||
{% set user_about = item.about ? item.about : '这个人很懒,什么都没留下' %}
|
||||
{% set user_url = url({'for':'web.teacher.show','id':item.id}) %}
|
||||
<div class="layui-col-md3">
|
||||
<div class="layui-col-md2">
|
||||
<div class="user-card">
|
||||
<div class="avatar">
|
||||
<a href="{{ user_url }}" title="{{ user_about }}"><img src="{{ item.avatar }}" alt="{{ item.name }}"></a>
|
||||
<a href="{{ user_url }}" title="{{ user_about }}">
|
||||
<img src="{{ item.avatar }}" alt="{{ item.name }}">
|
||||
</a>
|
||||
</div>
|
||||
<div class="name layui-elip">
|
||||
<a href="{{ user_url }}">{{ item.name }}</a>
|
||||
<a href="{{ user_url }}" title="{{ user_about }}">{{ item.name }}</a>
|
||||
</div>
|
||||
<div class="title layui-elip">{{ user_title }}</div>
|
||||
</div>
|
||||
|
@ -1,18 +1,24 @@
|
||||
{% if pager.total_pages > 0 %}
|
||||
<div class="teach-user-list clearfix">
|
||||
<div class="user-list clearfix">
|
||||
<div class="layui-row layui-col-space20">
|
||||
{% for item in pager.items %}
|
||||
{% set user_about = item.about ? item.about : '这个人很懒,什么都没留下' %}
|
||||
{% set user_url = url({'for':'web.user.show','id':item.id}) %}
|
||||
<div class="layui-col-md2">
|
||||
<div class="user-card">
|
||||
{% if item.vip == 1 %}
|
||||
<span class="vip">会员</span>
|
||||
<span class="vip">VIP</span>
|
||||
{% endif %}
|
||||
<div class="avatar">
|
||||
<a href="javascript:" title="{{ item.about }}"><img src="{{ item.avatar }}" alt="{{ item.name }}"></a>
|
||||
<a href="{{ user_url }}" title="{{ user_about }}">
|
||||
<img src="{{ item.avatar }}" alt="{{ item.name }}">
|
||||
</a>
|
||||
</div>
|
||||
<div class="name layui-elip">
|
||||
<a href="{{ user_url }}" title="{{ user_about }}">{{ item.name }}</a>
|
||||
</div>
|
||||
<div class="name layui-elip" title="{{ item.name }}">{{ item.name }}</div>
|
||||
<div class="action">
|
||||
<a href="javascript:" class="layui-badge-rim apply-friend" data-id="{{ item.id }}" data-name="{{ item.name }}" data-avatar="{{ item.avatar }}">加为好友</a>
|
||||
<button class="layui-btn apply-friend" data-id="{{ item.id }}">加为好友</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
25
app/Http/Web/Views/user/groups.volt
Normal file
25
app/Http/Web/Views/user/groups.volt
Normal file
@ -0,0 +1,25 @@
|
||||
{% if pager.total_pages > 0 %}
|
||||
<div class="user-list clearfix">
|
||||
<div class="layui-row layui-col-space20">
|
||||
{% for item in pager.items %}
|
||||
{% set group_url = url({'for':'web.im_group.show','id':item.id}) %}
|
||||
<div class="layui-col-md3">
|
||||
<div class="user-card">
|
||||
<div class="avatar">
|
||||
<a href="{{ group_url }}" title="{{ item.about }}">
|
||||
<img src="{{ item.avatar }}" alt="{{ item.name }}">
|
||||
</a>
|
||||
</div>
|
||||
<div class="name layui-elip">
|
||||
<a href="{{ group_url }}" title="{{ item.name }}">{{ item.name }}</a>
|
||||
</div>
|
||||
<div class="action">
|
||||
<button class="layui-btn apply-group" data-id="{{ item.id }}">申请加入</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{{ partial('partials/pager_ajax') }}
|
||||
{% endif %}
|
@ -11,7 +11,7 @@
|
||||
<img src="{{ user.avatar }}" alt="{{ user.name }}">
|
||||
</div>
|
||||
<div class="info">
|
||||
<h3>{{ user.name }} {{ vip_flag }}</h3>
|
||||
<p><span class="name">{{ user.name }}</span> {{ vip_flag }}</p>
|
||||
<p><span><i class="layui-icon layui-icon-location"></i></span><span>{{ user.location }}</span></p>
|
||||
<p><span><i class="layui-icon layui-icon-time"></i></span><span>{{ date('Y-m-d H:i',user.active_time) }}</span></p>
|
||||
</div>
|
||||
@ -20,21 +20,41 @@
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% set courses_url = url({'for':'web.user.courses','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 show_tab_courses = user.course_count > 0 %}
|
||||
{% set show_tab_favorites = user.favorite_count > 0 %}
|
||||
{% set show_tab_friends = user.friend_count > 0 %}
|
||||
{% set show_tab_groups = user.group_count > 0 %}
|
||||
|
||||
{% set courses_url = url({'for':'web.user.courses','id':user.id}) %}
|
||||
{% set favorites_url = url({'for':'web.user.favorites','id':user.id}) %}
|
||||
{% set friends_url = url({'for':'web.user.friends','id':user.id}) %}
|
||||
{% set groups_url = url({'for':'web.user.groups','id':user.id}) %}
|
||||
|
||||
<div class="tab-wrap">
|
||||
<div class="layui-tab layui-tab-brief user-tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this">课程</li>
|
||||
<li>收藏</li>
|
||||
<li>好友</li>
|
||||
<li class="layui-this">课程<span class="tab-count">{{ user.course_count }}</span></li>
|
||||
{% if show_tab_favorites %}
|
||||
<li>收藏<span class="tab-count">{{ user.favorite_count }}</span></li>
|
||||
{% endif %}
|
||||
{% if show_tab_friends %}
|
||||
<li>好友<span class="tab-count">{{ user.friend_count }}</span></li>
|
||||
{% endif %}
|
||||
{% if show_tab_groups %}
|
||||
<li>群组<span class="tab-count">{{ user.group_count }}</span></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
<div class="layui-tab-content">
|
||||
<div class="layui-tab-item layui-show" id="tab-courses" data-url="{{ courses_url }}"></div>
|
||||
<div class="layui-tab-item" id="tab-favorites" data-url="{{ favorites_url }}"></div>
|
||||
<div class="layui-tab-item" id="tab-friends" data-url="{{ friends_url }}"></div>
|
||||
{% if show_tab_favorites %}
|
||||
<div class="layui-tab-item" id="tab-favorites" data-url="{{ favorites_url }}"></div>
|
||||
{% endif %}
|
||||
{% if show_tab_friends %}
|
||||
<div class="layui-tab-item" id="tab-friends" data-url="{{ friends_url }}"></div>
|
||||
{% endif %}
|
||||
{% if show_tab_groups %}
|
||||
<div class="layui-tab-item" id="tab-groups" data-url="{{ groups_url }}"></div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -30,17 +30,20 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% set courses_url = url({'for':'web.vip.courses'},{'limit':12}) %}
|
||||
{% set users_url = url({'for':'web.vip.users'},{'limit':12}) %}
|
||||
{% set free_courses_url = url({'for':'web.vip.courses'},{'type':'free'}) %}
|
||||
{% set discount_courses_url = url({'for':'web.vip.courses'},{'type':'discount'}) %}
|
||||
{% set users_url = url({'for':'web.vip.users'}) %}
|
||||
|
||||
<div class="vip-tab-wrap">
|
||||
<div class="layui-tab layui-tab-brief user-tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this">课程</li>
|
||||
<li>成员</li>
|
||||
<li class="layui-this">优惠课程</li>
|
||||
<li>畅学课程</li>
|
||||
<li>新进会员</li>
|
||||
</ul>
|
||||
<div class="layui-tab-content">
|
||||
<div class="layui-tab-item layui-show" id="tab-courses" data-url="{{ courses_url }}"></div>
|
||||
<div class="layui-tab-item layui-show" id="tab-discount-courses" data-url="{{ discount_courses_url }}"></div>
|
||||
<div class="layui-tab-item" id="tab-free-courses" data-url="{{ free_courses_url }}"></div>
|
||||
<div class="layui-tab-item" id="tab-users" data-url="{{ users_url }}"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,19 +1,24 @@
|
||||
{% if pager.total_pages > 0 %}
|
||||
<div class="vip-user-list clearfix">
|
||||
<div class="user-list clearfix">
|
||||
<div class="layui-row layui-col-space20">
|
||||
{% for item in pager.items %}
|
||||
{% set user_about = item.about ? item.about|e : '这个人很懒,什么都没留下' %}
|
||||
{% set user_about = item.about ? item.about : '这个人很懒,什么都没留下' %}
|
||||
{% set user_url = url({'for':'web.user.show','id':item.id}) %}
|
||||
<div class="layui-col-md3">
|
||||
<div class="user-card" title="{{ user_about }}">
|
||||
<div class="layui-col-md2">
|
||||
<div class="user-card">
|
||||
{% if item.vip == 1 %}
|
||||
<span class="vip">VIP</span>
|
||||
{% endif %}
|
||||
<div class="avatar">
|
||||
<a href="{{ user_url }}"><img src="{{ item.avatar }}" alt="{{ item.name }}"></a>
|
||||
<a href="{{ user_url }}" title="{{ user_about }}">
|
||||
<img src="{{ item.avatar }}" alt="{{ item.name }}">
|
||||
</a>
|
||||
</div>
|
||||
<div class="name layui-elip">
|
||||
<a href="{{ user_url }}">{{ item.name }}</a>
|
||||
<a href="{{ user_url }}" title="{{ user_about }}">{{ item.name }}</a>
|
||||
</div>
|
||||
<div class="title layui-elip">
|
||||
<span class="layui-badge layui-bg-orange">vip</span>
|
||||
<div class="action">
|
||||
<button class="layui-btn apply-friend" data-url="{{ item.id }}">加为好友</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -293,9 +293,10 @@ function kg_time_ago($time)
|
||||
* 格式化时长
|
||||
*
|
||||
* @param int $time
|
||||
* @param string $mode
|
||||
* @return string
|
||||
*/
|
||||
function kg_duration($time)
|
||||
function kg_duration($time, $mode = 'simple')
|
||||
{
|
||||
$result = '00分钟';
|
||||
|
||||
@ -319,6 +320,10 @@ function kg_duration($time)
|
||||
$format[] = sprintf('%02d秒', $seconds);
|
||||
}
|
||||
|
||||
if ($mode == 'simple') {
|
||||
$format = array_slice($format, 0, 2);
|
||||
}
|
||||
|
||||
$result = implode('', $format);
|
||||
}
|
||||
|
||||
|
@ -5,7 +5,7 @@ namespace App\Library\Utils;
|
||||
class FileInfo
|
||||
{
|
||||
|
||||
static function isVideo($mine)
|
||||
public static function isVideo($mine)
|
||||
{
|
||||
$case1 = self::isSecure($mine);
|
||||
|
||||
@ -14,7 +14,7 @@ class FileInfo
|
||||
return $case1 && $case2;
|
||||
}
|
||||
|
||||
static function isAudio($mine)
|
||||
public static function isAudio($mine)
|
||||
{
|
||||
$case1 = self::isSecure($mine);
|
||||
|
||||
@ -23,7 +23,7 @@ class FileInfo
|
||||
return $case1 && $case2;
|
||||
}
|
||||
|
||||
static function isImage($mine)
|
||||
public static function isImage($mine)
|
||||
{
|
||||
$case1 = self::isSecure($mine);
|
||||
|
||||
@ -32,12 +32,26 @@ class FileInfo
|
||||
return $case1 && $case2;
|
||||
}
|
||||
|
||||
static function isSecure($mine)
|
||||
public static function isSecure($mine)
|
||||
{
|
||||
return in_array($mine, self::mineTypes());
|
||||
return in_array($mine, self::getMineTypes());
|
||||
}
|
||||
|
||||
static function mineTypes()
|
||||
public static function getMineType($file)
|
||||
{
|
||||
$info = new \finfo(FILEINFO_MIME_TYPE);
|
||||
|
||||
return $info->file($file);
|
||||
}
|
||||
|
||||
public static function getMineTypeByExt($ext)
|
||||
{
|
||||
$mineTypes = self::getMineTypes();
|
||||
|
||||
return $mineTypes[$ext] ?? null;
|
||||
}
|
||||
|
||||
public static function getMineTypes()
|
||||
{
|
||||
return [
|
||||
'aac' => 'audio/aac',
|
||||
|
@ -76,9 +76,11 @@ class Course extends Repository
|
||||
|
||||
if ($sort == 'free') {
|
||||
$builder->andWhere('market_price = 0');
|
||||
} elseif ($sort == 'vip') {
|
||||
} elseif ($sort == 'vip_discount') {
|
||||
$builder->andWhere('vip_price < market_price');
|
||||
$builder->andWhere('vip_price > 0');
|
||||
} elseif ($sort == 'vip_free') {
|
||||
$builder->andWhere('market_price > 0');
|
||||
$builder->andWhere('vip_price = 0');
|
||||
}
|
||||
|
||||
|
@ -162,4 +162,20 @@ class ImUser extends Repository
|
||||
]);
|
||||
}
|
||||
|
||||
public function countFriends($userId)
|
||||
{
|
||||
return (int)ImFriendUserModel::count([
|
||||
'conditions' => 'user_id = :user_id:',
|
||||
'bind' => ['user_id' => $userId],
|
||||
]);
|
||||
}
|
||||
|
||||
public function countGroups($userId)
|
||||
{
|
||||
return (int)ImGroupUserModel::count([
|
||||
'conditions' => 'user_id = :user_id:',
|
||||
'bind' => ['user_id' => $userId],
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -3,6 +3,9 @@
|
||||
namespace App\Repos;
|
||||
|
||||
use App\Library\Paginator\Adapter\QueryBuilder as PagerQueryBuilder;
|
||||
use App\Models\CourseFavorite as CourseFavoriteModel;
|
||||
use App\Models\CourseUser as CourseUserModel;
|
||||
use App\Models\ImUser as ImUserModel;
|
||||
use App\Models\User as UserModel;
|
||||
use Phalcon\Mvc\Model;
|
||||
use Phalcon\Mvc\Model\Resultset;
|
||||
@ -98,6 +101,15 @@ class User extends Repository
|
||||
->execute();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $id
|
||||
* @return ImUserModel|Model|bool
|
||||
*/
|
||||
public function findImUser($id)
|
||||
{
|
||||
return ImUserModel::findFirst($id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return ResultsetInterface|Resultset|UserModel[]
|
||||
*/
|
||||
@ -113,7 +125,23 @@ class User extends Repository
|
||||
|
||||
public function countUsers()
|
||||
{
|
||||
return (int)UserModel::count(['conditions' => 'deleted = 0']);
|
||||
return (int)UserModel::count();
|
||||
}
|
||||
|
||||
public function countCourses($userId)
|
||||
{
|
||||
return (int)CourseUserModel::count([
|
||||
'conditions' => 'user_id = :user_id: AND deleted = 0',
|
||||
'bind' => ['user_id' => $userId],
|
||||
]);
|
||||
}
|
||||
|
||||
public function countFavorites($userId)
|
||||
{
|
||||
return (int)CourseFavoriteModel::count([
|
||||
'conditions' => 'user_id = :user_id: AND deleted = 0',
|
||||
'bind' => ['user_id' => $userId],
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -4,7 +4,6 @@ namespace App\Services\Frontend\User;
|
||||
|
||||
use App\Builders\CourseUserList as CourseUserListBuilder;
|
||||
use App\Library\Paginator\Query as PagerQuery;
|
||||
use App\Models\CourseUser as CourseUserModel;
|
||||
use App\Repos\CourseUser as CourseUserRepo;
|
||||
use App\Services\Frontend\Service as FrontendService;
|
||||
use App\Services\Frontend\UserTrait;
|
||||
@ -23,7 +22,6 @@ class CourseList extends FrontendService
|
||||
$params = $pagerQuery->getParams();
|
||||
|
||||
$params['user_id'] = $user->id;
|
||||
$params['role_type'] = CourseUserModel::ROLE_STUDENT;
|
||||
$params['deleted'] = 0;
|
||||
|
||||
$sort = $pagerQuery->getSort();
|
||||
|
@ -3,6 +3,7 @@
|
||||
namespace App\Services\Frontend\User;
|
||||
|
||||
use App\Models\User as UserModel;
|
||||
use App\Repos\User as UserRepo;
|
||||
use App\Services\Frontend\Service as FrontendService;
|
||||
use App\Services\Frontend\UserTrait;
|
||||
|
||||
@ -20,6 +21,10 @@ class UserInfo extends FrontendService
|
||||
|
||||
protected function handleUser(UserModel $user)
|
||||
{
|
||||
$userRepo = new UserRepo();
|
||||
|
||||
$imUser = $userRepo->findImUser($user->id);
|
||||
|
||||
return [
|
||||
'id' => $user->id,
|
||||
'name' => $user->name,
|
||||
@ -30,6 +35,10 @@ class UserInfo extends FrontendService
|
||||
'gender' => $user->gender,
|
||||
'vip' => $user->vip,
|
||||
'locked' => $user->locked,
|
||||
'course_count' => $user->course_count,
|
||||
'favorite_count' => $user->favorite_count,
|
||||
'friend_count' => $imUser->friend_count,
|
||||
'group_count' => $imUser->group_count,
|
||||
'active_time' => $user->active_time,
|
||||
'create_time' => $user->create_time,
|
||||
];
|
||||
|
@ -9,7 +9,7 @@ use App\Services\Frontend\Service as FrontendService;
|
||||
class CourseList extends FrontendService
|
||||
{
|
||||
|
||||
public function handle()
|
||||
public function handle($type)
|
||||
{
|
||||
$pagerQuery = new PagerQuery();
|
||||
|
||||
@ -18,7 +18,7 @@ class CourseList extends FrontendService
|
||||
$params['published'] = 1;
|
||||
$params['deleted'] = 0;
|
||||
|
||||
$sort = 'vip';
|
||||
$sort = $type == 'discount' ? 'vip_discount' : 'vip_free';
|
||||
$page = $pagerQuery->getPage();
|
||||
$limit = $pagerQuery->getLimit();
|
||||
|
||||
|
@ -51,6 +51,7 @@ class UserList extends FrontendService
|
||||
'avatar' => $user['avatar'],
|
||||
'title' => $user['title'],
|
||||
'about' => $user['about'],
|
||||
'vip' => $user['vip'],
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use App\Library\Utils\FileInfo;
|
||||
use App\Models\ContentImage as ContentImageModel;
|
||||
use Phalcon\Logger\Adapter\File as FileLogger;
|
||||
use Qcloud\Cos\Client as CosClient;
|
||||
@ -104,6 +105,9 @@ class Storage extends Service
|
||||
$files = $this->request->getUploadedFiles(true);
|
||||
|
||||
foreach ($files as $file) {
|
||||
if (!FileInfo::isImage($file->getRealType())) {
|
||||
continue;
|
||||
}
|
||||
$extension = $this->getFileExtension($file->getName());
|
||||
$keyName = $this->generateFileName($extension, $prefix);
|
||||
$path = $this->putFile($keyName, $file->getTempName());
|
||||
@ -136,6 +140,7 @@ class Storage extends Service
|
||||
} catch (\Exception $e) {
|
||||
|
||||
$this->logger->error('Put String Exception ' . kg_json_encode([
|
||||
'line' => $e->getLine(),
|
||||
'code' => $e->getCode(),
|
||||
'message' => $e->getMessage(),
|
||||
]));
|
||||
@ -168,6 +173,7 @@ class Storage extends Service
|
||||
} catch (\Exception $e) {
|
||||
|
||||
$this->logger->error('Put File Exception ' . kg_json_encode([
|
||||
'line' => $e->getLine(),
|
||||
'code' => $e->getCode(),
|
||||
'message' => $e->getMessage(),
|
||||
]));
|
||||
@ -200,6 +206,7 @@ class Storage extends Service
|
||||
} catch (\Exception $e) {
|
||||
|
||||
$this->logger->error('Delete Object Exception ' . kg_json_encode([
|
||||
'line' => $e->getLine(),
|
||||
'code' => $e->getCode(),
|
||||
'message' => $e->getMessage(),
|
||||
]));
|
||||
@ -223,12 +230,11 @@ class Storage extends Service
|
||||
|
||||
/**
|
||||
* 获取数据万象图片URL
|
||||
*
|
||||
* @param string $key
|
||||
* @param int $width
|
||||
* @param int $height
|
||||
* @return string
|
||||
*/
|
||||
public function getCiImageUrl($key, $width = 0, $height = 0)
|
||||
public function getCiImageUrl($key)
|
||||
{
|
||||
return $this->getCiBaseUrl() . $key;
|
||||
}
|
||||
@ -287,7 +293,7 @@ class Storage extends Service
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 CosClient
|
||||
* 获取CosClient
|
||||
*
|
||||
* @return CosClient
|
||||
*/
|
||||
|
@ -4,6 +4,7 @@
|
||||
"ext-redis": "~4.3",
|
||||
"ext-pdo": "*",
|
||||
"ext-json": "*",
|
||||
"ext-fileinfo": "*",
|
||||
"phalcon/incubator": "^3.4",
|
||||
"guzzlehttp/guzzle": "^6.3",
|
||||
"swiftmailer/swiftmailer": "^6.0",
|
||||
|
1
public/static/lib/spark-md5.min.js
vendored
Normal file
1
public/static/lib/spark-md5.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -1266,12 +1266,8 @@ body {
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.teach-user-list {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.vip-user-list {
|
||||
margin-bottom: 30px;
|
||||
.user-list {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.user-card {
|
||||
@ -1302,6 +1298,7 @@ body {
|
||||
}
|
||||
|
||||
.user-card .name {
|
||||
padding: 0 10px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
@ -1310,6 +1307,13 @@ body {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.user-card .action button {
|
||||
padding: 0 5px;
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.user-card .vip {
|
||||
position: absolute;
|
||||
top: 8px;
|
||||
@ -1317,16 +1321,12 @@ body {
|
||||
padding: 1px 3px;
|
||||
border-radius: 2px;
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
font-size: 10px;
|
||||
line-height: 1.5em;
|
||||
background-color: orange;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.user-card .action span {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.my-sidebar {
|
||||
float: left;
|
||||
width: 220px;
|
||||
|
@ -7,13 +7,20 @@ layui.use(['jquery', 'helper'], function () {
|
||||
var $tabCourses = $('#tab-courses');
|
||||
helper.ajaxLoadHtml($tabCourses.data('url'), $tabCourses.attr('id'));
|
||||
}
|
||||
|
||||
if ($('#tab-favorites').length > 0) {
|
||||
var $tabFavorites = $('#tab-favorites');
|
||||
helper.ajaxLoadHtml($tabFavorites.data('url'), $tabFavorites.attr('id'));
|
||||
}
|
||||
|
||||
if ($('#tab-friends').length > 0) {
|
||||
var $tabFriends = $('#tab-friends');
|
||||
helper.ajaxLoadHtml($tabFriends.data('url'), $tabFriends.attr('id'));
|
||||
}
|
||||
|
||||
if ($('#tab-groups').length > 0) {
|
||||
var $tabGroups = $('#tab-groups');
|
||||
helper.ajaxLoadHtml($tabGroups.data('url'), $tabGroups.attr('id'));
|
||||
}
|
||||
|
||||
});
|
@ -3,9 +3,14 @@ layui.use(['jquery', 'helper'], function () {
|
||||
var $ = layui.jquery;
|
||||
var helper = layui.helper;
|
||||
|
||||
if ($('#tab-courses').length > 0) {
|
||||
var $tabCourses = $('#tab-courses');
|
||||
helper.ajaxLoadHtml($tabCourses.data('url'), $tabCourses.attr('id'));
|
||||
if ($('#tab-discount-courses').length > 0) {
|
||||
var $tabDiscountCourses = $('#tab-discount-courses');
|
||||
helper.ajaxLoadHtml($tabDiscountCourses.data('url'), $tabDiscountCourses.attr('id'));
|
||||
}
|
||||
|
||||
if ($('#tab-free-courses').length > 0) {
|
||||
var $tabFreeCourses = $('#tab-free-courses');
|
||||
helper.ajaxLoadHtml($tabFreeCourses.data('url'), $tabFreeCourses.attr('id'));
|
||||
}
|
||||
|
||||
if ($('#tab-users').length > 0) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user