1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-06-29 05:41:37 +08:00

教学中心设计

This commit is contained in:
xiaochong0302 2020-08-02 19:52:15 +08:00
parent 1851fb9b25
commit 8c99e5accd
24 changed files with 424 additions and 123 deletions

View File

@ -25,8 +25,8 @@ class ImFriendUserList extends Builder
$userRepo = new UserRepo(); $userRepo = new UserRepo();
$columns = [ $columns = [
'id', 'name', 'avatar', 'gender', 'vip', 'id', 'name', 'avatar', 'title', 'about', 'vip',
'location', 'about', 'active_time', 'gender', 'location', 'active_time',
]; ];
$users = $userRepo->findByIds($ids, $columns); $users = $userRepo->findByIds($ids, $columns);

View File

@ -58,7 +58,7 @@ class ImGroupUserList extends Builder
$groupRepo = new ImGroupRepo(); $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); $groups = $groupRepo->findByIds($ids, $columns);

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

View File

@ -84,12 +84,8 @@
{% set show_sidebar_related = 1 %} {% set show_sidebar_related = 1 %}
<div class="layout-sidebar"> <div class="layout-sidebar">
<div class="sidebar">
{{ partial('course/show_order') }} {{ partial('course/show_order') }}
</div>
<div class="sidebar">
{{ partial('course/show_teacher') }} {{ partial('course/show_teacher') }}
</div>
{% if show_sidebar_topics %} {% if show_sidebar_topics %}
{% set topics_url = url({'for':'web.course.topics','id':course.id}) %} {% set topics_url = url({'for':'web.course.topics','id':course.id}) %}
<div class="sidebar" id="sidebar-topics" data-url="{{ topics_url }}"></div> <div class="sidebar" id="sidebar-topics" data-url="{{ topics_url }}"></div>

View File

@ -1,11 +1,12 @@
{% if course.me.owned == 0 and course.market_price > 0 %} {% 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'}) %} {% 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> <button class="layui-btn layui-btn-fluid layui-bg-red btn-buy" data-url="{{ order_url }}">立即购买</button>
</div> </div>
{% endif %} {% endif %}
{% if course.market_price == 0 %} {% if course.market_price == 0 %}
<div class="sidebar">
<div class="layui-card"> <div class="layui-card">
<div class="layui-card-header">赞赏支持</div> <div class="layui-card-header">赞赏支持</div>
<div class="layui-card-body"> <div class="layui-card-body">
@ -18,4 +19,5 @@
</div> </div>
</div> </div>
</div> </div>
</div>
{% endif %} {% endif %}

View File

@ -1,4 +1,5 @@
{% if course.teachers %} {% if course.teachers %}
<div class="sidebar">
<div class="layui-card"> <div class="layui-card">
<div class="layui-card-header">授课教师</div> <div class="layui-card-header">授课教师</div>
<div class="layui-card-body"> <div class="layui-card-body">
@ -11,7 +12,7 @@
</div> </div>
<div class="info"> <div class="info">
<div class="name layui-elip"> <div class="name layui-elip">
<a href="{{ teacher_url }}">{{ teacher.name }}</a> <a href="{{ teacher_url }}" title="{{ teacher.about }}">{{ teacher.name }}</a>
</div> </div>
<div class="title layui-elip">{{ teacher.title }}</div> <div class="title layui-elip">{{ teacher.title }}</div>
</div> </div>
@ -19,4 +20,5 @@
{% endfor %} {% endfor %}
</div> </div>
</div> </div>
</div>
{% endif %} {% endif %}

View File

@ -30,5 +30,6 @@
{% block include_js %} {% block include_js %}
{{ js_include('web/js/im.find.js') }} {{ js_include('web/js/im.find.js') }}
{{ js_include('web/js/im.apply.js') }}
{% endblock %} {% endblock %}

View File

@ -9,7 +9,7 @@
{% set group = item_info.group %} {% set group = item_info.group %}
{% set remark = item_info.remark ? '附言:' ~ item_info.remark : '' %} {% set remark = item_info.remark ? '附言:' ~ item_info.remark : '' %}
<li data-id="{{ item.id }}"> <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 }}"> <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> <a href="{{ sender_url }}" target="_blank">{{ sender.name }}</a>
<span>{{ item.create_time|time_ago }}</span> <span>{{ item.create_time|time_ago }}</span>
@ -45,7 +45,7 @@
{% elseif item_type == '4' %} {% elseif item_type == '4' %}
{% set remark = item_info.remark ? '附言:' ~ item_info.remark : '' %} {% set remark = item_info.remark ? '附言:' ~ item_info.remark : '' %}
<li data-id="{{ item.id }}"> <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"> <p class="layim-msgbox-user">
<a href="{{ sender_url }}" target="_blank">{{ sender.name }}</a> <a href="{{ sender_url }}" target="_blank">{{ sender.name }}</a>
<span>{{ item.create_time|time_ago }}</span> <span>{{ item.create_time|time_ago }}</span>

View File

@ -4,7 +4,7 @@
<div class="layui-card-body"> <div class="layui-card-body">
{% for user in users %} {% for user in users %}
{% set user_url = url({'for':'web.user.show','id':user.id}) %} {% 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="sidebar-teacher-card clearfix">
<div class="avatar"> <div class="avatar">
<img src="{{ user.avatar }}" alt="{{ user.name }}"> <img src="{{ user.avatar }}" alt="{{ user.name }}">

View File

@ -34,7 +34,7 @@
{{ partial('im_group/show_owner') }} {{ partial('im_group/show_owner') }}
</div> </div>
<div class="sidebar wrap"> <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>
<div class="sidebar" id="active-user-list" data-url="{{ active_users_url }}"></div> <div class="sidebar" id="active-user-list" data-url="{{ active_users_url }}"></div>
</div> </div>
@ -45,5 +45,6 @@
{% block include_js %} {% block include_js %}
{{ js_include('web/js/im_group.show.js') }} {{ js_include('web/js/im_group.show.js') }}
{{ js_include('web/js/im.apply.js') }}
{% endblock %} {% endblock %}

View File

@ -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"> <div class="layui-row layui-col-space20">
{% for item in pager.items %} {% for item in pager.items %}
{% set user_url = url({'for':'web.user.show','id':item.id}) %} {% 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="layui-col-md3">
<div class="user-card"> <div class="user-card">
{% if item.vip == 1 %} {% if item.vip == 1 %}
@ -15,8 +16,9 @@
<div class="name layui-elip"> <div class="name layui-elip">
<a href="{{ user_url }}" title="{{ item.about }}">{{ item.name }}</a> <a href="{{ user_url }}" title="{{ item.about }}">{{ item.name }}</a>
</div> </div>
<div class="title layui-elip">{{ item.title }}</div>
<div class="action"> <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> </div>
</div> </div>
@ -24,3 +26,4 @@
</div> </div>
</div> </div>
{{ partial('partials/pager_ajax') }} {{ partial('partials/pager_ajax') }}
<br>

View File

@ -16,5 +16,6 @@
{% block include_js %} {% block include_js %}
{{ js_include('web/js/teacher.list.js') }} {{ js_include('web/js/teacher.list.js') }}
{{ js_include('web/js/im.apply.js') }}
{% endblock %} {% endblock %}

View File

@ -1,21 +1,24 @@
{% if pager.total_pages > 0 %} {% if pager.total_pages > 0 %}
<div class="user-list clearfix"> <div class="user-list teacher-list clearfix">
<div class="layui-row layui-col-space20"> <div class="layui-row layui-col-space20">
{% for item in pager.items %} {% for item in pager.items %}
{% set user_title = item.title ? item.title : '小小教书匠' %} {% set item.title = item.title ? item.title : '暂露头角' %}
{% set user_about = item.about ? item.about : '这个人很懒,什么都没留下' %} {% set item.about = item.about ? item.about : '这个人很懒,什么都没留下' %}
{% set user_url = url({'for':'web.teacher.show','id':item.id}) %} {% set user_url = url({'for':'web.teacher.show','id':item.id}) %}
<div class="layui-col-md2"> <div class="layui-col-md2">
<div class="user-card"> <div class="user-card">
<div class="avatar"> <div class="avatar">
<a href="{{ user_url }}" title="{{ user_about }}"> <a href="{{ user_url }}" title="{{ item.about }}">
<img src="{{ item.avatar }}" alt="{{ item.name }}"> <img src="{{ item.avatar }}" alt="{{ item.name }}">
</a> </a>
</div> </div>
<div class="name layui-elip"> <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>
<div class="title layui-elip">{{ user_title }}</div>
</div> </div>
</div> </div>
{% endfor %} {% endfor %}

View File

@ -2,7 +2,8 @@
<div class="user-list clearfix"> <div class="user-list clearfix">
<div class="layui-row layui-col-space20"> <div class="layui-row layui-col-space20">
{% for item in pager.items %} {% 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}) %} {% set user_url = url({'for':'web.user.show','id':item.id}) %}
<div class="layui-col-md2"> <div class="layui-col-md2">
<div class="user-card"> <div class="user-card">
@ -10,15 +11,16 @@
<span class="vip">VIP</span> <span class="vip">VIP</span>
{% endif %} {% endif %}
<div class="avatar"> <div class="avatar">
<a href="{{ user_url }}" title="{{ user_about }}"> <a href="{{ user_url }}" title="{{ item.about }}">
<img src="{{ item.avatar }}" alt="{{ item.name }}"> <img src="{{ item.avatar }}" alt="{{ item.name }}">
</a> </a>
</div> </div>
<div class="name layui-elip"> <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>
<div class="title layui-elip">{{ item.title }}</div>
<div class="action"> <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> </div>
</div> </div>

View File

@ -3,8 +3,14 @@
<div class="layui-row layui-col-space20"> <div class="layui-row layui-col-space20">
{% for item in pager.items %} {% for item in pager.items %}
{% set group_url = url({'for':'web.im_group.show','id':item.id}) %} {% 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="layui-col-md3">
<div class="user-card"> <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"> <div class="avatar">
<a href="{{ group_url }}" title="{{ item.about }}"> <a href="{{ group_url }}" title="{{ item.about }}">
<img src="{{ item.avatar }}" alt="{{ item.name }}"> <img src="{{ item.avatar }}" alt="{{ item.name }}">
@ -13,8 +19,12 @@
<div class="name layui-elip"> <div class="name layui-elip">
<a href="{{ group_url }}" title="{{ item.name }}">{{ item.name }}</a> <a href="{{ group_url }}" title="{{ item.name }}">{{ item.name }}</a>
</div> </div>
<div class="meta layui-elip">
<span>成员:{{ item.user_count }}</span>
<span>讨论:{{ item.msg_count }}</span>
</div>
<div class="action"> <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> </div>
</div> </div>

View File

@ -64,5 +64,6 @@
{% block include_js %} {% block include_js %}
{{ js_include('web/js/user.show.js') }} {{ js_include('web/js/user.show.js') }}
{{ js_include('web/js/im.apply.js') }}
{% endblock %} {% endblock %}

View File

@ -2,21 +2,23 @@
<div class="user-list vip-user-list clearfix"> <div class="user-list vip-user-list clearfix">
<div class="layui-row layui-col-space20"> <div class="layui-row layui-col-space20">
{% for item in pager.items %} {% for item in pager.items %}
{% set user_about = item.about ? item.about : '这个人很懒,什么都没留下' %}
{% set user_url = url({'for':'web.user.show','id':item.id}) %} {% 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="layui-col-md2">
<div class="user-card"> <div class="user-card">
{% if item.vip == 1 %} {% if item.vip == 1 %}
<span class="layui-badge layui-bg-orange vip">VIP</span> <span class="layui-badge layui-bg-orange vip">VIP</span>
{% endif %} {% endif %}
<div class="avatar"> <div class="avatar">
<a href="{{ user_url }}" title="{{ user_about }}"> <a href="{{ user_url }}" title="{{ item.about }}">
<img src="{{ item.avatar }}" alt="{{ item.name }}"> <img src="{{ item.avatar }}" alt="{{ item.name }}">
</a> </a>
</div> </div>
<div class="name layui-elip"> <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>
<div class="title layui-elip">{{ item.title }}</div>
</div> </div>
</div> </div>
{% endfor %} {% endfor %}

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

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

View File

@ -74,7 +74,7 @@ class ImFriendUser extends Validator
$record = $repo->findFriendUser($friendId, $userId); $record = $repo->findFriendUser($friendId, $userId);
if ($record && $record->blocked == 0) { if ($record) {
throw new BadRequestException('im_friend_user.has_joined'); throw new BadRequestException('im_friend_user.has_joined');
} }
} }

View File

@ -54,7 +54,7 @@ class ImGroupUser extends Validator
$record = $repo->findGroupUser($groupId, $userId); $record = $repo->findGroupUser($groupId, $userId);
if ($record && $record->blocked == 0) { if ($record) {
throw new BadRequestException('im_group_user.has_joined'); throw new BadRequestException('im_group_user.has_joined');
} }
} }

View File

@ -989,10 +989,6 @@ body {
color: red; color: red;
} }
.vip-user-list .user-card {
height: 180px;
}
.cart-course-card { .cart-course-card {
padding-bottom: 10px; padding-bottom: 10px;
margin-bottom: 10px; margin-bottom: 10px;
@ -1272,7 +1268,7 @@ body {
.user-card { .user-card {
float: left; float: left;
width: 100%; width: 100%;
height: 220px; height: 240px;
position: relative; position: relative;
text-align: center; text-align: center;
background-color: #fff; background-color: #fff;
@ -1281,7 +1277,7 @@ body {
} }
.user-card .avatar { .user-card .avatar {
margin-top: 25px; margin-top: 20px;
margin-bottom: 15px; margin-bottom: 15px;
} }
@ -1298,11 +1294,11 @@ body {
.user-card .name { .user-card .name {
padding: 0 10px; padding: 0 10px;
margin-bottom: 15px; margin-bottom: 10px;
} }
.user-card .owner { .user-card .owner {
margin-bottom: 15px; margin-bottom: 10px;
color: #666; color: #666;
} }
@ -1318,7 +1314,11 @@ body {
margin-right: 5px; margin-right: 5px;
} }
.user-card .action button { .user-card .action {
margin-top: 15px;
}
.user-card .action .layui-btn {
padding: 0 5px; padding: 0 5px;
height: 20px; height: 20px;
line-height: 20px; line-height: 20px;
@ -1344,13 +1344,21 @@ body {
margin-bottom: 20px; margin-bottom: 20px;
} }
.group-user-list .user-card { .teacher-list .user-card {
height: 240px;
}
.vip-user-list .user-card {
height: 200px; height: 200px;
}
.group-user-list .user-card {
box-shadow: none; box-shadow: none;
height: 220px;
} }
.group-user-list .user-card .avatar { .group-user-list .user-card .avatar {
margin-top: 15px; margin-top: 10px;
} }
.im-group-list .user-card { .im-group-list .user-card {

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

View File

@ -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 form = layui.form;
var layer = layui.layer;
var layim = layui.layim;
var helper = layui.helper; var helper = layui.helper;
form.on('submit(im_search)', function (data) { form.on('submit(im_search)', function (data) {
var usersUrl = '/im/search?limit=12&target=tab-users&type=user&query=' + data.field.query; var usersUrl = '/im/search?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 groupsUrl = '/im/search?target=tab-groups&type=group&query=' + data.field.query;
helper.ajaxLoadHtml(usersUrl, 'tab-users'); helper.ajaxLoadHtml(usersUrl, 'tab-users');
helper.ajaxLoadHtml(groupsUrl, 'tab-groups'); helper.ajaxLoadHtml(groupsUrl, 'tab-groups');
return false; 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);
}
});
}
});
});
}); });