mirror of
https://gitee.com/koogua/course-tencent-cloud.git
synced 2025-06-29 05:41:37 +08:00
教学中心设计
This commit is contained in:
parent
1851fb9b25
commit
8c99e5accd
@ -25,8 +25,8 @@ class ImFriendUserList extends Builder
|
||||
$userRepo = new UserRepo();
|
||||
|
||||
$columns = [
|
||||
'id', 'name', 'avatar', 'gender', 'vip',
|
||||
'location', 'about', 'active_time',
|
||||
'id', 'name', 'avatar', 'title', 'about', 'vip',
|
||||
'gender', 'location', 'active_time',
|
||||
];
|
||||
|
||||
$users = $userRepo->findByIds($ids, $columns);
|
||||
|
@ -58,7 +58,7 @@ class ImGroupUserList extends Builder
|
||||
|
||||
$groupRepo = new ImGroupRepo();
|
||||
|
||||
$columns = ['id', 'type', 'name', 'avatar', 'about', 'owner_id', 'user_count'];
|
||||
$columns = ['id', 'type', 'name', 'avatar', 'about', 'owner_id', 'user_count', 'msg_count'];
|
||||
|
||||
$groups = $groupRepo->findByIds($ids, $columns);
|
||||
|
||||
|
44
app/Http/Web/Controllers/TeachingController.php
Normal file
44
app/Http/Web/Controllers/TeachingController.php
Normal file
@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace App\Http\Web\Controllers;
|
||||
|
||||
use App\Services\Frontend\Teaching\ConsultList as TclService;
|
||||
use App\Services\Frontend\Teaching\LiveList as TllService;
|
||||
|
||||
|
||||
/**
|
||||
* @RoutePrefix("/teaching")
|
||||
*/
|
||||
class TeachingController extends Controller
|
||||
{
|
||||
|
||||
/**
|
||||
* @Get("/lives", name="web.teaching.lives")
|
||||
*/
|
||||
public function livesAction()
|
||||
{
|
||||
$service = new TllService();
|
||||
|
||||
$pager = $service->handle();
|
||||
|
||||
$pager->items = kg_array_object($pager->items);
|
||||
|
||||
$this->view->setVar('pager', $pager);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Get("/consults", name="web.teaching.consults")
|
||||
*/
|
||||
public function consultsAction()
|
||||
{
|
||||
$service = new TclService();
|
||||
|
||||
$pager = $service->handle();
|
||||
|
||||
$pager->items = kg_array_object($pager->items);
|
||||
|
||||
$this->view->setVar('pager', $pager);
|
||||
}
|
||||
|
||||
}
|
@ -84,12 +84,8 @@
|
||||
{% set show_sidebar_related = 1 %}
|
||||
|
||||
<div class="layout-sidebar">
|
||||
<div class="sidebar">
|
||||
{{ partial('course/show_order') }}
|
||||
</div>
|
||||
<div class="sidebar">
|
||||
{{ partial('course/show_teacher') }}
|
||||
</div>
|
||||
{% if show_sidebar_topics %}
|
||||
{% set topics_url = url({'for':'web.course.topics','id':course.id}) %}
|
||||
<div class="sidebar" id="sidebar-topics" data-url="{{ topics_url }}"></div>
|
||||
|
@ -1,11 +1,12 @@
|
||||
{% if course.me.owned == 0 and course.market_price > 0 %}
|
||||
<div class="sidebar-order wrap">
|
||||
{% set order_url = url({'for':'web.order.confirm'},{'item_id':course.id,'item_type':'course'}) %}
|
||||
<div class="sidebar wrap">
|
||||
<button class="layui-btn layui-btn-fluid layui-bg-red btn-buy" data-url="{{ order_url }}">立即购买</button>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if course.market_price == 0 %}
|
||||
<div class="sidebar">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">赞赏支持</div>
|
||||
<div class="layui-card-body">
|
||||
@ -18,4 +19,5 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
@ -1,4 +1,5 @@
|
||||
{% if course.teachers %}
|
||||
<div class="sidebar">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">授课教师</div>
|
||||
<div class="layui-card-body">
|
||||
@ -11,7 +12,7 @@
|
||||
</div>
|
||||
<div class="info">
|
||||
<div class="name layui-elip">
|
||||
<a href="{{ teacher_url }}">{{ teacher.name }}</a>
|
||||
<a href="{{ teacher_url }}" title="{{ teacher.about }}">{{ teacher.name }}</a>
|
||||
</div>
|
||||
<div class="title layui-elip">{{ teacher.title }}</div>
|
||||
</div>
|
||||
@ -19,4 +20,5 @@
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
@ -30,5 +30,6 @@
|
||||
{% block include_js %}
|
||||
|
||||
{{ js_include('web/js/im.find.js') }}
|
||||
{{ js_include('web/js/im.apply.js') }}
|
||||
|
||||
{% endblock %}
|
@ -9,7 +9,7 @@
|
||||
{% set group = item_info.group %}
|
||||
{% set remark = item_info.remark ? '附言:' ~ item_info.remark : '' %}
|
||||
<li data-id="{{ item.id }}">
|
||||
<a href="{{ sender_url }}" target="_blank"><img src="{{ sender.avatar }}" class="layui-circle layim-msgbox-avatar"></a>
|
||||
<a href="{{ sender_url }}" target="_blank"><img class="layui-circle layim-msgbox-avatar" alt="{{ sender.name }}" src="{{ sender.avatar }}"></a>
|
||||
<p class="layim-msgbox-user" data-id="{{ sender.id }}" data-name="{{ sender.name }}" data-avatar="{{ sender.avatar }}" data-group="{{ group.id }}">
|
||||
<a href="{{ sender_url }}" target="_blank">{{ sender.name }}</a>
|
||||
<span>{{ item.create_time|time_ago }}</span>
|
||||
@ -45,7 +45,7 @@
|
||||
{% elseif item_type == '4' %}
|
||||
{% set remark = item_info.remark ? '附言:' ~ item_info.remark : '' %}
|
||||
<li data-id="{{ item.id }}">
|
||||
<a href="{{ sender_url }}" target="_blank"><img src="{{ sender.avatar }}" class="layui-circle layim-msgbox-avatar"></a>
|
||||
<a href="{{ sender_url }}" target="_blank"><img class="layui-circle layim-msgbox-avatar" alt="{{ sender.name }}" src="{{ sender.avatar }}"></a>
|
||||
<p class="layim-msgbox-user">
|
||||
<a href="{{ sender_url }}" target="_blank">{{ sender.name }}</a>
|
||||
<span>{{ item.create_time|time_ago }}</span>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<div class="layui-card-body">
|
||||
{% for user in users %}
|
||||
{% set user_url = url({'for':'web.user.show','id':user.id}) %}
|
||||
{% set user.title = user.title ? user.title : '暂无头衔' %}
|
||||
{% set user.title = user.title ? user.title : '暂露头角' %}
|
||||
<div class="sidebar-teacher-card clearfix">
|
||||
<div class="avatar">
|
||||
<img src="{{ user.avatar }}" alt="{{ user.name }}">
|
||||
|
@ -34,7 +34,7 @@
|
||||
{{ partial('im_group/show_owner') }}
|
||||
</div>
|
||||
<div class="sidebar wrap">
|
||||
<button class="layui-btn layui-btn-fluid apply-group" data-url="{{ apply_group_url }}">申请加入</button>
|
||||
<button class="layui-btn layui-btn-fluid apply-group" data-id="{{ group.id }}" data-name="{{ group.name }}" data-avatar="{{ group.avatar }}">加入群组</button>
|
||||
</div>
|
||||
<div class="sidebar" id="active-user-list" data-url="{{ active_users_url }}"></div>
|
||||
</div>
|
||||
@ -45,5 +45,6 @@
|
||||
{% block include_js %}
|
||||
|
||||
{{ js_include('web/js/im_group.show.js') }}
|
||||
{{ js_include('web/js/im.apply.js') }}
|
||||
|
||||
{% endblock %}
|
@ -1,7 +1,8 @@
|
||||
<div class="group-user-list clearfix">
|
||||
<div class="user-list group-user-list clearfix">
|
||||
<div class="layui-row layui-col-space20">
|
||||
{% for item in pager.items %}
|
||||
{% set user_url = url({'for':'web.user.show','id':item.id}) %}
|
||||
{% set item.title = item.title ? item.title : '暂露头角' %}
|
||||
<div class="layui-col-md3">
|
||||
<div class="user-card">
|
||||
{% if item.vip == 1 %}
|
||||
@ -15,8 +16,9 @@
|
||||
<div class="name layui-elip">
|
||||
<a href="{{ user_url }}" title="{{ item.about }}">{{ item.name }}</a>
|
||||
</div>
|
||||
<div class="title layui-elip">{{ item.title }}</div>
|
||||
<div class="action">
|
||||
<span class="layui-btn layui-btn-xs apply-friend">添加好友</span>
|
||||
<span class="layui-btn apply-friend" data-id="{{ item.id }}" data-name="{{ item.name }}" data-avatar="{{ item.avatar }}">添加好友</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -24,3 +26,4 @@
|
||||
</div>
|
||||
</div>
|
||||
{{ partial('partials/pager_ajax') }}
|
||||
<br>
|
@ -16,5 +16,6 @@
|
||||
{% block include_js %}
|
||||
|
||||
{{ js_include('web/js/teacher.list.js') }}
|
||||
{{ js_include('web/js/im.apply.js') }}
|
||||
|
||||
{% endblock %}
|
@ -1,21 +1,24 @@
|
||||
{% if pager.total_pages > 0 %}
|
||||
<div class="user-list clearfix">
|
||||
<div class="user-list teacher-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 : '这个人很懒,什么都没留下' %}
|
||||
{% set item.title = item.title ? item.title : '暂露头角' %}
|
||||
{% set item.about = item.about ? item.about : '这个人很懒,什么都没留下' %}
|
||||
{% set user_url = url({'for':'web.teacher.show','id':item.id}) %}
|
||||
<div class="layui-col-md2">
|
||||
<div class="user-card">
|
||||
<div class="avatar">
|
||||
<a href="{{ user_url }}" title="{{ user_about }}">
|
||||
<a href="{{ user_url }}" title="{{ item.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>
|
||||
<a href="{{ user_url }}" title="{{ item.about }}">{{ item.name }}</a>
|
||||
</div>
|
||||
<div class="title layui-elip">{{ item.title }}</div>
|
||||
<div class="action">
|
||||
<span class="layui-btn apply-friend" data-id="{{ item.id }}" data-name="{{ item.name }}" data-avatar="{{ item.avatar }}">添加好友</span>
|
||||
</div>
|
||||
<div class="title layui-elip">{{ user_title }}</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
@ -2,7 +2,8 @@
|
||||
<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 item.title = item.title ? item.title : '暂露头角' %}
|
||||
{% set item.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">
|
||||
@ -10,15 +11,16 @@
|
||||
<span class="vip">VIP</span>
|
||||
{% endif %}
|
||||
<div class="avatar">
|
||||
<a href="{{ user_url }}" title="{{ user_about }}">
|
||||
<a href="{{ user_url }}" title="{{ item.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>
|
||||
<a href="{{ user_url }}" title="{{ item.about }}">{{ item.name }}</a>
|
||||
</div>
|
||||
<div class="title layui-elip">{{ item.title }}</div>
|
||||
<div class="action">
|
||||
<button class="layui-btn apply-friend" data-id="{{ item.id }}">加为好友</button>
|
||||
<span class="layui-btn apply-friend" data-id="{{ item.id }}" data-name="{{ item.name }}" data-avatar="{{ item.avatar }}">添加好友</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -3,8 +3,14 @@
|
||||
<div class="layui-row layui-col-space20">
|
||||
{% for item in pager.items %}
|
||||
{% set group_url = url({'for':'web.im_group.show','id':item.id}) %}
|
||||
{% set item.about = item.about ? item.about : '这家伙真懒,什么都没留下!' %}
|
||||
<div class="layui-col-md3">
|
||||
<div class="user-card">
|
||||
{% if item.type == 'course' %}
|
||||
<span class="layui-badge layui-bg-green type">课</span>
|
||||
{% elseif item.type == 'chat' %}
|
||||
<span class="layui-badge layui-bg-blue type">聊</span>
|
||||
{% endif %}
|
||||
<div class="avatar">
|
||||
<a href="{{ group_url }}" title="{{ item.about }}">
|
||||
<img src="{{ item.avatar }}" alt="{{ item.name }}">
|
||||
@ -13,8 +19,12 @@
|
||||
<div class="name layui-elip">
|
||||
<a href="{{ group_url }}" title="{{ item.name }}">{{ item.name }}</a>
|
||||
</div>
|
||||
<div class="meta layui-elip">
|
||||
<span>成员:{{ item.user_count }}</span>
|
||||
<span>讨论:{{ item.msg_count }}</span>
|
||||
</div>
|
||||
<div class="action">
|
||||
<button class="layui-btn apply-group" data-id="{{ item.id }}">申请加入</button>
|
||||
<span class="layui-btn apply-group" data-id="{{ item.id }}" data-name="{{ item.name }}" data-avatar="{{ item.avatar }}">加入群组</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -64,5 +64,6 @@
|
||||
{% block include_js %}
|
||||
|
||||
{{ js_include('web/js/user.show.js') }}
|
||||
{{ js_include('web/js/im.apply.js') }}
|
||||
|
||||
{% endblock %}
|
@ -2,21 +2,23 @@
|
||||
<div class="user-list vip-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}) %}
|
||||
{% set item.title = item.title ? item.title : '暂露头角' %}
|
||||
{% set item.about = item.about ? item.about : '这个人很懒,什么都没留下' %}
|
||||
<div class="layui-col-md2">
|
||||
<div class="user-card">
|
||||
{% if item.vip == 1 %}
|
||||
<span class="layui-badge layui-bg-orange vip">VIP</span>
|
||||
{% endif %}
|
||||
<div class="avatar">
|
||||
<a href="{{ user_url }}" title="{{ user_about }}">
|
||||
<a href="{{ user_url }}" title="{{ item.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>
|
||||
<a href="{{ user_url }}" title="{{ item.about }}">{{ item.name }}</a>
|
||||
</div>
|
||||
<div class="title layui-elip">{{ item.title }}</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
113
app/Services/Frontend/Teaching/ConsultList.php
Normal file
113
app/Services/Frontend/Teaching/ConsultList.php
Normal file
@ -0,0 +1,113 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Frontend\Teaching;
|
||||
|
||||
use App\Builders\ConsultList as ConsultListBuilder;
|
||||
use App\Library\Paginator\Adapter\QueryBuilder as PagerQueryBuilder;
|
||||
use App\Library\Paginator\Query as PagerQuery;
|
||||
use App\Models\Consult as ConsultModel;
|
||||
use App\Models\Course as CourseModel;
|
||||
use App\Models\CourseUser as CourseUserModel;
|
||||
use App\Services\Frontend\Service as FrontendService;
|
||||
use Phalcon\Mvc\Model\Resultset;
|
||||
use Phalcon\Mvc\Model\ResultsetInterface;
|
||||
|
||||
class ConsultList extends FrontendService
|
||||
{
|
||||
|
||||
public function handle()
|
||||
{
|
||||
$user = $this->getLoginUser();
|
||||
|
||||
$pagerQuery = new PagerQuery();
|
||||
|
||||
$page = $pagerQuery->getPage();
|
||||
$limit = $pagerQuery->getLimit();
|
||||
|
||||
$courses = $this->findUserTeachingCourses($user->id);
|
||||
|
||||
if ($courses->count() == 0) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$courseIds = kg_array_column($courses->toArray(), 'id');
|
||||
|
||||
$pager = $this->paginate($courseIds, $page, $limit);
|
||||
|
||||
return $this->handleConsults($pager);
|
||||
}
|
||||
|
||||
protected function handleConsults($pager)
|
||||
{
|
||||
if ($pager->total_items == 0) {
|
||||
return $pager;
|
||||
}
|
||||
|
||||
$builder = new ConsultListBuilder();
|
||||
|
||||
$consults = $pager->items->toArray();
|
||||
|
||||
$courses = $builder->getCourses($consults);
|
||||
$chapters = $builder->getChapters($consults);
|
||||
$users = $builder->getUsers($consults);
|
||||
|
||||
$items = [];
|
||||
|
||||
foreach ($consults as $consult) {
|
||||
|
||||
$course = $courses[$consult['course_id']] ?? new \stdClass();
|
||||
$chapter = $chapters[$consult['chapter_id']] ?? new \stdClass();
|
||||
$owner = $users[$consult['owner_id']] ?? new \stdClass();
|
||||
|
||||
$items[] = [
|
||||
'id' => $consult['id'],
|
||||
'question' => $consult['question'],
|
||||
'answer' => $consult['answer'],
|
||||
'rating' => $consult['rating'],
|
||||
'like_count' => $consult['like_count'],
|
||||
'create_time' => $consult['create_time'],
|
||||
'update_time' => $consult['update_time'],
|
||||
'course' => $course,
|
||||
'chapter' => $chapter,
|
||||
'owner' => $owner,
|
||||
];
|
||||
}
|
||||
|
||||
$pager->items = $items;
|
||||
|
||||
return $pager;
|
||||
}
|
||||
|
||||
protected function paginate($courseIds, $page = 1, $limit = 15)
|
||||
{
|
||||
$builder = $this->modelsManager->createBuilder()
|
||||
->from(ConsultModel::class)
|
||||
->inWhere('course_id', $courseIds)
|
||||
->andWhere('published = 1')
|
||||
->orderBy('priority ASC');
|
||||
|
||||
$pager = new PagerQueryBuilder([
|
||||
'builder' => $builder,
|
||||
'page' => $page,
|
||||
'limit' => $limit,
|
||||
]);
|
||||
|
||||
return $pager->paginate();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $userId
|
||||
* @return ResultsetInterface|Resultset|CourseModel[]
|
||||
*/
|
||||
protected function findUserTeachingCourses($userId)
|
||||
{
|
||||
return $this->modelsManager->createBuilder()
|
||||
->columns('c.*')
|
||||
->addFrom(CourseModel::class, 'c')
|
||||
->join(CourseUserModel::class, 'c.id = cu.course_id', 'cu')
|
||||
->where('cu.user_id = :user_id:', ['user_id' => $userId])
|
||||
->andWhere('cu.role_type = :role_type:', ['role_type' => CourseUserModel::ROLE_TEACHER])
|
||||
->getQuery()->execute();
|
||||
}
|
||||
|
||||
}
|
103
app/Services/Frontend/Teaching/LiveList.php
Normal file
103
app/Services/Frontend/Teaching/LiveList.php
Normal file
@ -0,0 +1,103 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Frontend\Teaching;
|
||||
|
||||
use App\Library\Paginator\Adapter\QueryBuilder as PagerQueryBuilder;
|
||||
use App\Library\Paginator\Query as PagerQuery;
|
||||
use App\Models\Chapter as ChapterModel;
|
||||
use App\Models\ChapterLive as ChapterLiveModel;
|
||||
use App\Models\Course as CourseModel;
|
||||
use App\Models\CourseUser as CourseUserModel;
|
||||
use App\Services\Frontend\Service as FrontendService;
|
||||
use Phalcon\Mvc\Model\Resultset;
|
||||
use Phalcon\Mvc\Model\ResultsetInterface;
|
||||
|
||||
class LiveList extends FrontendService
|
||||
{
|
||||
|
||||
public function handle()
|
||||
{
|
||||
$user = $this->getLoginUser();
|
||||
|
||||
$courses = $this->findUserTeachingCourses($user->id);
|
||||
|
||||
if ($courses->count() == 0) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$courseMappings = [];
|
||||
|
||||
foreach ($courses as $course) {
|
||||
$courseMappings[$course->id] = [
|
||||
'id' => $course->id,
|
||||
'title' => $course->title,
|
||||
];
|
||||
}
|
||||
|
||||
$courseIds = kg_array_column($courses->toArray(), 'id');
|
||||
|
||||
$pagerQuery = new PagerQuery();
|
||||
|
||||
$page = $pagerQuery->getPage();
|
||||
$limit = $pagerQuery->getLimit();
|
||||
|
||||
$pager = $this->paginate($courseIds, $page, $limit);
|
||||
|
||||
if ($pager->total_items == 0) {
|
||||
return $pager;
|
||||
}
|
||||
|
||||
$items = [];
|
||||
|
||||
foreach ($pager->items as $item) {
|
||||
$items[] = [
|
||||
'course' => $courseMappings[$item->course_id],
|
||||
'chapter' => [
|
||||
'id' => $item->id,
|
||||
'title' => $item->title,
|
||||
],
|
||||
'start_time' => $item->start_time,
|
||||
'end_time' => $item->end_time,
|
||||
];
|
||||
}
|
||||
|
||||
$pager->items = $items;
|
||||
|
||||
return $pager;
|
||||
}
|
||||
|
||||
protected function paginate($courseIds, $page = 1, $limit = 15)
|
||||
{
|
||||
$builder = $this->modelsManager->createBuilder()
|
||||
->columns(['c.id', 'c.title', 'c.course_id', 'cl.start_time', 'cl.end_time'])
|
||||
->addFrom(ChapterModel::class, 'c')
|
||||
->join(ChapterLiveModel::class, 'c.id = cl.chapter_id', 'cl')
|
||||
->inWhere('cl.course_id', $courseIds)
|
||||
->orderBy('cl.start_time DESC');
|
||||
|
||||
$pager = new PagerQueryBuilder([
|
||||
'builder' => $builder,
|
||||
'page' => $page,
|
||||
'limit' => $limit,
|
||||
]);
|
||||
|
||||
return $pager->paginate();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $userId
|
||||
* @return ResultsetInterface|Resultset|CourseModel[]
|
||||
*/
|
||||
protected function findUserTeachingCourses($userId)
|
||||
{
|
||||
return $this->modelsManager->createBuilder()
|
||||
->columns('c.*')
|
||||
->addFrom(CourseModel::class, 'c')
|
||||
->join(CourseUserModel::class, 'c.id = cu.course_id', 'cu')
|
||||
->where('cu.user_id = :user_id:', ['user_id' => $userId])
|
||||
->andWhere('cu.role_type = :role_type:', ['role_type' => CourseUserModel::ROLE_TEACHER])
|
||||
->andWhere('c.model = :model:', ['model' => CourseModel::MODEL_LIVE])
|
||||
->getQuery()->execute();
|
||||
}
|
||||
|
||||
}
|
@ -74,7 +74,7 @@ class ImFriendUser extends Validator
|
||||
|
||||
$record = $repo->findFriendUser($friendId, $userId);
|
||||
|
||||
if ($record && $record->blocked == 0) {
|
||||
if ($record) {
|
||||
throw new BadRequestException('im_friend_user.has_joined');
|
||||
}
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ class ImGroupUser extends Validator
|
||||
|
||||
$record = $repo->findGroupUser($groupId, $userId);
|
||||
|
||||
if ($record && $record->blocked == 0) {
|
||||
if ($record) {
|
||||
throw new BadRequestException('im_group_user.has_joined');
|
||||
}
|
||||
}
|
||||
|
@ -989,10 +989,6 @@ body {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.vip-user-list .user-card {
|
||||
height: 180px;
|
||||
}
|
||||
|
||||
.cart-course-card {
|
||||
padding-bottom: 10px;
|
||||
margin-bottom: 10px;
|
||||
@ -1272,7 +1268,7 @@ body {
|
||||
.user-card {
|
||||
float: left;
|
||||
width: 100%;
|
||||
height: 220px;
|
||||
height: 240px;
|
||||
position: relative;
|
||||
text-align: center;
|
||||
background-color: #fff;
|
||||
@ -1281,7 +1277,7 @@ body {
|
||||
}
|
||||
|
||||
.user-card .avatar {
|
||||
margin-top: 25px;
|
||||
margin-top: 20px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
@ -1298,11 +1294,11 @@ body {
|
||||
|
||||
.user-card .name {
|
||||
padding: 0 10px;
|
||||
margin-bottom: 15px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.user-card .owner {
|
||||
margin-bottom: 15px;
|
||||
margin-bottom: 10px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
@ -1318,7 +1314,11 @@ body {
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.user-card .action button {
|
||||
.user-card .action {
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
.user-card .action .layui-btn {
|
||||
padding: 0 5px;
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
@ -1344,13 +1344,21 @@ body {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.group-user-list .user-card {
|
||||
.teacher-list .user-card {
|
||||
height: 240px;
|
||||
}
|
||||
|
||||
.vip-user-list .user-card {
|
||||
height: 200px;
|
||||
}
|
||||
|
||||
.group-user-list .user-card {
|
||||
box-shadow: none;
|
||||
height: 220px;
|
||||
}
|
||||
|
||||
.group-user-list .user-card .avatar {
|
||||
margin-top: 15px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.im-group-list .user-card {
|
||||
|
63
public/static/web/js/im.apply.js
Normal file
63
public/static/web/js/im.apply.js
Normal file
@ -0,0 +1,63 @@
|
||||
layui.use(['jquery', 'layer', 'layim', 'helper'], function () {
|
||||
|
||||
var $ = layui.jquery;
|
||||
var layer = layui.layer;
|
||||
var layim = layui.layim;
|
||||
var helper = layui.helper;
|
||||
|
||||
$('body').on('click', '.apply-friend', function () {
|
||||
var friendId = $(this).data('id');
|
||||
var username = $(this).data('name');
|
||||
var avatar = $(this).data('avatar');
|
||||
helper.checkLogin(function () {
|
||||
layim.add({
|
||||
type: 'friend',
|
||||
username: username,
|
||||
avatar: avatar,
|
||||
submit: function (groupId, remark, index) {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/im/friend/apply',
|
||||
data: {
|
||||
friend_id: friendId,
|
||||
group_id: groupId,
|
||||
remark: remark
|
||||
},
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
$('body').on('click', '.apply-group', function () {
|
||||
var groupId = $(this).data('id');
|
||||
var groupName = $(this).data('name');
|
||||
var avatar = $(this).data('avatar');
|
||||
helper.checkLogin(function () {
|
||||
layim.add({
|
||||
type: 'group',
|
||||
groupname: groupName,
|
||||
avatar: avatar,
|
||||
submit: function (group, remark, index) {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/im/group/apply',
|
||||
data: {
|
||||
group_id: groupId,
|
||||
remark: remark
|
||||
},
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
@ -1,68 +1,14 @@
|
||||
layui.use(['jquery', 'form', 'layer', 'layim', 'helper'], function () {
|
||||
layui.use(['form', 'helper'], function () {
|
||||
|
||||
var $ = layui.jquery;
|
||||
var form = layui.form;
|
||||
var layer = layui.layer;
|
||||
var layim = layui.layim;
|
||||
var helper = layui.helper;
|
||||
|
||||
form.on('submit(im_search)', function (data) {
|
||||
var usersUrl = '/im/search?limit=12&target=tab-users&type=user&query=' + data.field.query;
|
||||
var groupsUrl = '/im/search?limit=12&target=tab-groups&type=group&query=' + data.field.query;
|
||||
var usersUrl = '/im/search?target=tab-users&type=user&query=' + data.field.query;
|
||||
var groupsUrl = '/im/search?target=tab-groups&type=group&query=' + data.field.query;
|
||||
helper.ajaxLoadHtml(usersUrl, 'tab-users');
|
||||
helper.ajaxLoadHtml(groupsUrl, 'tab-groups');
|
||||
return false;
|
||||
});
|
||||
|
||||
$('body').on('click', '.apply-friend', function () {
|
||||
var friendId = $(this).data('id');
|
||||
var username = $(this).data('name');
|
||||
var avatar = $(this).data('avatar');
|
||||
layim.add({
|
||||
type: 'friend',
|
||||
username: username,
|
||||
avatar: avatar,
|
||||
submit: function (groupId, remark, index) {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/im/friend/apply',
|
||||
data: {
|
||||
friend_id: friendId,
|
||||
group_id: groupId,
|
||||
remark: remark
|
||||
},
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$('body').on('click', '.apply-group', function () {
|
||||
var groupId = $(this).data('id');
|
||||
var groupName = $(this).data('name');
|
||||
var avatar = $(this).data('avatar');
|
||||
layim.add({
|
||||
type: 'group',
|
||||
groupname: groupName,
|
||||
avatar: avatar,
|
||||
submit: function (group, remark, index) {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/im/group/apply',
|
||||
data: {
|
||||
group_id: groupId,
|
||||
remark: remark
|
||||
},
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
});
|
Loading…
x
Reference in New Issue
Block a user