From eed693cd15c274552c888082c772738e150d313a Mon Sep 17 00:00:00 2001 From: xiaochong0302 Date: Sat, 6 Jun 2020 20:18:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5layim?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Builders/CourseFavoriteList.php | 3 + .../Web/Controllers/AccountController.php | 55 ++++ app/Http/Web/Controllers/CourseController.php | 3 - app/Http/Web/Controllers/MyController.php | 51 +++- .../Web/Controllers/TeacherController.php | 35 +++ app/Http/Web/Controllers/UserController.php | 45 ++- app/Http/Web/Views/account/edit_email.volt | 43 +++ app/Http/Web/Views/account/edit_password.volt | 43 +++ app/Http/Web/Views/account/edit_phone.volt | 43 +++ .../Web/Views/account/forget_password.volt | 2 +- app/Http/Web/Views/account/login.volt | 2 +- app/Http/Web/Views/account/register.volt | 2 +- app/Http/Web/Views/course/list.volt | 2 +- app/Http/Web/Views/course/show.volt | 16 +- app/Http/Web/Views/index/index.volt | 2 +- app/Http/Web/Views/my/account.volt | 80 ++++++ app/Http/Web/Views/my/menu.volt | 25 ++ app/Http/Web/Views/my/profile.volt | 45 +++ app/Http/Web/Views/order/confirm.volt | 2 +- app/Http/Web/Views/order/pay.volt | 2 +- app/Http/Web/Views/partials/header.volt | 9 +- app/Http/Web/Views/partials/macro_course.volt | 21 ++ app/Http/Web/Views/search/list.volt | 18 +- app/Http/Web/Views/teacher/list.volt | 27 ++ app/Http/Web/Views/templates/content.volt | 25 ++ .../Views/templates/{base.volt => full.volt} | 7 - app/Http/Web/Views/user/courses.volt | 10 + app/Http/Web/Views/user/favorites.volt | 10 + app/Http/Web/Views/user/show.volt | 57 ++++ app/Models/CourseUser.php | 3 +- app/Models/User.php | 41 +-- app/Services/Frontend/My/AccountInfo.php | 32 +++ app/Services/Frontend/Teacher/TeacherList.php | 64 +++++ app/Services/Frontend/User/CourseList.php | 2 +- app/Services/Frontend/User/FavoriteList.php | 62 +++++ app/Services/Frontend/User/UserInfo.php | 2 + .../layui/css/modules/layim/html/chatlog.html | 96 +++++++ .../layui/css/modules/layim/html/find.html | 36 +++ .../layui/css/modules/layim/html/getmsg.json | 87 ++++++ .../layui/css/modules/layim/html/msgbox.html | 257 ++++++++++++++++++ .../lib/layui/css/modules/layim/layim.css | 2 + .../layui/css/modules/layim/mobile/layim.css | 2 + .../lib/layui/css/modules/layim/skin/1.jpg | Bin 0 -> 18386 bytes .../lib/layui/css/modules/layim/skin/2.jpg | Bin 0 -> 11883 bytes .../lib/layui/css/modules/layim/skin/3.jpg | Bin 0 -> 18610 bytes .../lib/layui/css/modules/layim/skin/4.jpg | Bin 0 -> 39279 bytes .../lib/layui/css/modules/layim/skin/5.jpg | Bin 0 -> 33379 bytes .../lib/layui/css/modules/layim/skin/logo.jpg | Bin 0 -> 3284 bytes .../layui/css/modules/layim/voice/default.mp3 | Bin 0 -> 9341 bytes public/static/lib/layui/lay/modules/layim.js | 3 + public/static/web/css/common.css | 195 ++++++++++++- public/static/web/js/common.js | 1 + 52 files changed, 1492 insertions(+), 78 deletions(-) create mode 100644 app/Http/Web/Controllers/TeacherController.php create mode 100644 app/Http/Web/Views/account/edit_email.volt create mode 100644 app/Http/Web/Views/account/edit_password.volt create mode 100644 app/Http/Web/Views/account/edit_phone.volt create mode 100644 app/Http/Web/Views/my/account.volt create mode 100644 app/Http/Web/Views/my/menu.volt create mode 100644 app/Http/Web/Views/my/profile.volt create mode 100644 app/Http/Web/Views/teacher/list.volt create mode 100644 app/Http/Web/Views/templates/content.volt rename app/Http/Web/Views/templates/{base.volt => full.volt} (98%) create mode 100644 app/Http/Web/Views/user/courses.volt create mode 100644 app/Http/Web/Views/user/favorites.volt create mode 100644 app/Http/Web/Views/user/show.volt create mode 100644 app/Services/Frontend/My/AccountInfo.php create mode 100644 app/Services/Frontend/Teacher/TeacherList.php create mode 100644 app/Services/Frontend/User/FavoriteList.php create mode 100644 public/static/lib/layui/css/modules/layim/html/chatlog.html create mode 100644 public/static/lib/layui/css/modules/layim/html/find.html create mode 100644 public/static/lib/layui/css/modules/layim/html/getmsg.json create mode 100644 public/static/lib/layui/css/modules/layim/html/msgbox.html create mode 100644 public/static/lib/layui/css/modules/layim/layim.css create mode 100644 public/static/lib/layui/css/modules/layim/mobile/layim.css create mode 100644 public/static/lib/layui/css/modules/layim/skin/1.jpg create mode 100644 public/static/lib/layui/css/modules/layim/skin/2.jpg create mode 100644 public/static/lib/layui/css/modules/layim/skin/3.jpg create mode 100644 public/static/lib/layui/css/modules/layim/skin/4.jpg create mode 100644 public/static/lib/layui/css/modules/layim/skin/5.jpg create mode 100644 public/static/lib/layui/css/modules/layim/skin/logo.jpg create mode 100644 public/static/lib/layui/css/modules/layim/voice/default.mp3 create mode 100644 public/static/lib/layui/lay/modules/layim.js diff --git a/app/Builders/CourseFavoriteList.php b/app/Builders/CourseFavoriteList.php index 9d431f04..e58b88b9 100644 --- a/app/Builders/CourseFavoriteList.php +++ b/app/Builders/CourseFavoriteList.php @@ -51,6 +51,9 @@ class CourseFavoriteList extends Builder foreach ($courses->toArray() as $course) { $course['cover'] = $baseUrl . $course['cover']; + $course['market_price'] = (float)$course['market_price']; + $course['vip_price'] = (float)$course['vip_price']; + $course['rating'] = (float)$course['rating']; $course['attrs'] = json_decode($course['attrs'], true); $result[$course['id']] = $course; } diff --git a/app/Http/Web/Controllers/AccountController.php b/app/Http/Web/Controllers/AccountController.php index adcb0a74..7c3fbfbc 100644 --- a/app/Http/Web/Controllers/AccountController.php +++ b/app/Http/Web/Controllers/AccountController.php @@ -7,6 +7,7 @@ use App\Services\Frontend\Account\EmailUpdate as EmailUpdateService; use App\Services\Frontend\Account\PasswordReset as PasswordResetService; use App\Services\Frontend\Account\PasswordUpdate as PasswordUpdateService; use App\Services\Frontend\Account\PhoneUpdate as PhoneUpdateService; +use Phalcon\Mvc\View; /** * @RoutePrefix("/account") @@ -138,6 +139,60 @@ class AccountController extends Controller $this->view->setVar('captcha', $captcha); } + /** + * @Get("/password/edit", name="web.account.edit_pwd") + */ + public function editPasswordAction() + { + if ($this->authUser->id == 0) { + $this->response->redirect(['for' => 'web.account.login']); + } + + $service = new AccountService(); + + $captcha = $service->getSectionSettings('captcha'); + + $this->view->setRenderLevel(View::LEVEL_ACTION_VIEW); + $this->view->pick('account/edit_password'); + $this->view->setVar('captcha', $captcha); + } + + /** + * @Get("/phone/edit", name="web.account.edit_phone") + */ + public function editPhoneAction() + { + if ($this->authUser->id == 0) { + $this->response->redirect(['for' => 'web.account.login']); + } + + $service = new AccountService(); + + $captcha = $service->getSectionSettings('captcha'); + + $this->view->setRenderLevel(View::LEVEL_ACTION_VIEW); + $this->view->pick('account/edit_phone'); + $this->view->setVar('captcha', $captcha); + } + + /** + * @Get("/email/edit", name="web.account.edit_email") + */ + public function editEmailAction() + { + if ($this->authUser->id == 0) { + $this->response->redirect(['for' => 'web.account.login']); + } + + $service = new AccountService(); + + $captcha = $service->getSectionSettings('captcha'); + + $this->view->setRenderLevel(View::LEVEL_ACTION_VIEW); + $this->view->pick('account/edit_email'); + $this->view->setVar('captcha', $captcha); + } + /** * @Post("/password/reset", name="web.account.reset_pwd") */ diff --git a/app/Http/Web/Controllers/CourseController.php b/app/Http/Web/Controllers/CourseController.php index 5e020969..86af553a 100644 --- a/app/Http/Web/Controllers/CourseController.php +++ b/app/Http/Web/Controllers/CourseController.php @@ -31,7 +31,6 @@ class CourseController extends Controller $service = new CourseListService(); $pager = $service->handle(); - $pager->items = kg_array_object($pager->items); $service = new CourseQueryService(); @@ -105,7 +104,6 @@ class CourseController extends Controller $service = new CourseConsultListService(); $pager = $service->handle($id); - $pager->items = kg_array_object($pager->items); $pager->target = $target; @@ -123,7 +121,6 @@ class CourseController extends Controller $service = new CourseReviewListService(); $pager = $service->handle($id); - $pager->items = kg_array_object($pager->items); $pager->target = $target; diff --git a/app/Http/Web/Controllers/MyController.php b/app/Http/Web/Controllers/MyController.php index dd4a51a5..a681bfab 100644 --- a/app/Http/Web/Controllers/MyController.php +++ b/app/Http/Web/Controllers/MyController.php @@ -2,12 +2,12 @@ namespace App\Http\Web\Controllers; +use App\Services\Frontend\My\AccountInfo as AccountInfoService; use App\Services\Frontend\My\ConsultList as MyConsultListService; -use App\Services\Frontend\My\CourseList as MyCourseListService; -use App\Services\Frontend\My\FavoriteList as MyFavoriteListService; use App\Services\Frontend\My\OrderList as MyOrderListService; use App\Services\Frontend\My\RefundList as MyRefundListService; use App\Services\Frontend\My\ReviewList as MyReviewListService; +use App\Services\Frontend\My\UserInfo as UserInfoService; /** * @RoutePrefix("/my") @@ -16,27 +16,50 @@ class MyController extends Controller { /** - * @Get("/courses", name="web.my.courses") + * @Get("/home", name="web.my.home") */ - public function coursesAction() + public function homeAction() { - $service = new MyCourseListService(); - - $pager = $service->handle(); - - $this->view->setVar('pager', $pager); + $this->dispatcher->forward([ + 'for' => 'web.user.show', + 'id' => $this->authUser->id, + ]); } /** - * @Get("/favorites", name="web.my.favorites") + * @Get("/profile", name="web.my.profile") */ - public function favoritesAction() + public function profileAction() { - $service = new MyFavoriteListService(); + $service = new UserInfoService(); - $pager = $service->handle(); + $user = $service->handle(); - $this->view->setVar('pager', $pager); + $this->view->setVar('user', $user); + } + + /** + * @Get("/account", name="web.my.account") + */ + public function accountAction() + { + $service = new AccountInfoService(); + + $account = $service->handle(); + + $this->view->setVar('account', $account); + } + + /** + * @Post("/profile/update", name="web.my.update_profile") + */ + public function updateProfileAction() + { + $service = new UserInfoService(); + + $user = $service->handle(); + + $this->view->setVar('user', $user); } /** diff --git a/app/Http/Web/Controllers/TeacherController.php b/app/Http/Web/Controllers/TeacherController.php new file mode 100644 index 00000000..f15ee64e --- /dev/null +++ b/app/Http/Web/Controllers/TeacherController.php @@ -0,0 +1,35 @@ +handle(); + + $pager->items = kg_array_object($pager->items); + + $this->view->setVar('pager', $pager); + } + + /** + * @Get("/{id:[0-9]+}", name="web.teacher.show") + */ + public function showAction() + { + + } + +} diff --git a/app/Http/Web/Controllers/UserController.php b/app/Http/Web/Controllers/UserController.php index 36e78f04..d35a4155 100644 --- a/app/Http/Web/Controllers/UserController.php +++ b/app/Http/Web/Controllers/UserController.php @@ -3,7 +3,9 @@ namespace App\Http\Web\Controllers; use App\Services\Frontend\User\CourseList as UserCourseListService; +use App\Services\Frontend\User\FavoriteList as UserFavoriteListService; use App\Services\Frontend\User\UserInfo as UserInfoService; +use Phalcon\Mvc\View; /** * @RoutePrefix("/user") @@ -28,11 +30,50 @@ class UserController extends Controller */ public function coursesAction($id) { + $target = $this->request->get('target', 'trim', 'tab-courses'); + $service = new UserCourseListService(); - $courses = $service->handle($id); + $pager = $service->handle($id); + $pager->items = kg_array_object($pager->items); + $pager->target = $target; - return $this->jsonSuccess(['courses' => $courses]); + $this->view->setRenderLevel(View::LEVEL_ACTION_VIEW); + $this->view->setVar('pager', $pager); + } + + /** + * @Get("/{id:[0-9]+}/favorites", name="web.user.favorites") + */ + public function favoritesAction($id) + { + $target = $this->request->get('target', 'trim', 'tab-favorites'); + + $service = new UserFavoriteListService(); + + $pager = $service->handle($id); + $pager->items = kg_array_object($pager->items); + $pager->target = $target; + + $this->view->setRenderLevel(View::LEVEL_ACTION_VIEW); + $this->view->setVar('pager', $pager); + } + + /** + * @Get("/{id:[0-9]+}/friends", name="web.user.friends") + */ + public function friendsAction($id) + { + $target = $this->request->get('target', 'trim', 'tab-friends'); + + $service = new UserFavoriteListService(); + + $pager = $service->handle($id); + $pager->items = kg_array_object($pager->items); + $pager->target = $target; + + $this->view->setRenderLevel(View::LEVEL_ACTION_VIEW); + $this->view->setVar('pager', $pager); } } diff --git a/app/Http/Web/Views/account/edit_email.volt b/app/Http/Web/Views/account/edit_email.volt new file mode 100644 index 00000000..b709387c --- /dev/null +++ b/app/Http/Web/Views/account/edit_email.volt @@ -0,0 +1,43 @@ +{% extends 'templates/content.volt' %} + +{% block content %} + +
+ +
+ +{% endblock %} + +{% block include_js %} + + {{ js_include('https://ssl.captcha.qq.com/TCaptcha.js',false) }} + {{ js_include('web/js/captcha.verify.js') }} + +{% endblock %} \ No newline at end of file diff --git a/app/Http/Web/Views/account/edit_password.volt b/app/Http/Web/Views/account/edit_password.volt new file mode 100644 index 00000000..b709387c --- /dev/null +++ b/app/Http/Web/Views/account/edit_password.volt @@ -0,0 +1,43 @@ +{% extends 'templates/content.volt' %} + +{% block content %} + +
+ +
+ +{% endblock %} + +{% block include_js %} + + {{ js_include('https://ssl.captcha.qq.com/TCaptcha.js',false) }} + {{ js_include('web/js/captcha.verify.js') }} + +{% endblock %} \ No newline at end of file diff --git a/app/Http/Web/Views/account/edit_phone.volt b/app/Http/Web/Views/account/edit_phone.volt new file mode 100644 index 00000000..b709387c --- /dev/null +++ b/app/Http/Web/Views/account/edit_phone.volt @@ -0,0 +1,43 @@ +{% extends 'templates/content.volt' %} + +{% block content %} + +
+ +
+ +{% endblock %} + +{% block include_js %} + + {{ js_include('https://ssl.captcha.qq.com/TCaptcha.js',false) }} + {{ js_include('web/js/captcha.verify.js') }} + +{% endblock %} \ No newline at end of file diff --git a/app/Http/Web/Views/account/forget_password.volt b/app/Http/Web/Views/account/forget_password.volt index 2d983a98..fe9739e9 100644 --- a/app/Http/Web/Views/account/forget_password.volt +++ b/app/Http/Web/Views/account/forget_password.volt @@ -1,4 +1,4 @@ -{% extends 'templates/base.volt' %} +{% extends 'templates/full.volt' %} {% block content %} diff --git a/app/Http/Web/Views/account/login.volt b/app/Http/Web/Views/account/login.volt index 40db3a1f..d81f8df8 100644 --- a/app/Http/Web/Views/account/login.volt +++ b/app/Http/Web/Views/account/login.volt @@ -1,4 +1,4 @@ -{% extends 'templates/base.volt' %} +{% extends 'templates/full.volt' %} {% block content %} diff --git a/app/Http/Web/Views/account/register.volt b/app/Http/Web/Views/account/register.volt index cabcab20..579837d2 100644 --- a/app/Http/Web/Views/account/register.volt +++ b/app/Http/Web/Views/account/register.volt @@ -1,4 +1,4 @@ -{% extends 'templates/base.volt' %} +{% extends 'templates/full.volt' %} {% block content %} diff --git a/app/Http/Web/Views/course/list.volt b/app/Http/Web/Views/course/list.volt index 47f91205..9700ebd6 100644 --- a/app/Http/Web/Views/course/list.volt +++ b/app/Http/Web/Views/course/list.volt @@ -1,4 +1,4 @@ -{% extends 'templates/base.volt' %} +{% extends 'templates/full.volt' %} {% block content %} diff --git a/app/Http/Web/Views/course/show.volt b/app/Http/Web/Views/course/show.volt index e7e98d55..5921b95a 100644 --- a/app/Http/Web/Views/course/show.volt +++ b/app/Http/Web/Views/course/show.volt @@ -1,4 +1,4 @@ -{% extends 'templates/base.volt' %} +{% extends 'templates/full.volt' %} {% block content %} @@ -25,12 +25,13 @@ {% set show_tab_consults = course.consult_count > 0 ? 1 : 0 %} {% set show_tab_reviews = course.review_count > 0 ? 1 : 0 %} -
-
-
    -
  • 详情
  • -
  • 目录
  • - {% if show_tab_packages == 1 %} +
    +
    +
    +
      +
    • 详情
    • +
    • 目录
    • + {% if show_tab_packages == 1 %}
    • 套餐
    • {% endif %} {% if show_tab_consults == 1 %} @@ -60,6 +61,7 @@
      {% endif %}
    +
diff --git a/app/Http/Web/Views/index/index.volt b/app/Http/Web/Views/index/index.volt index 8e335819..b22e3cb8 100644 --- a/app/Http/Web/Views/index/index.volt +++ b/app/Http/Web/Views/index/index.volt @@ -1,4 +1,4 @@ -{% extends 'templates/base.volt' %} +{% extends 'templates/full.volt' %} {% block content %} diff --git a/app/Http/Web/Views/my/account.volt b/app/Http/Web/Views/my/account.volt new file mode 100644 index 00000000..621f8dea --- /dev/null +++ b/app/Http/Web/Views/my/account.volt @@ -0,0 +1,80 @@ +{% extends 'templates/full.volt' %} + +{% block content %} + + {% set act_pwd_url = url({'for':'web.account.edit_pwd'}) %} + {% set act_phone_url = url({'for':'web.account.edit_phone'}) %} + {% set act_email_url = url({'for':'web.account.edit_email'}) %} + +
+
{{ partial('my/menu') }}
+
+
+
账号安全
+
+
+ + 登录密码 + 经常更改密码有助于保护您的帐号安全 + 修改 +
+
+ + 手机绑定 + {% if account.phone %} + 已绑定手机:{{ account.phone }} + 修改 + {% else %} + 可用于登录和重置密码 + 绑定 + {% endif %} +
+
+ + 邮箱绑定 + {% if account.phone %} + 已绑定邮箱:{{ account.email }} + 修改 + {% else %} + 可用于登录和重置密码 + 绑定 + {% endif %} +
+
+
+
+
+ +{% endblock %} + +{% block inline_js %} + + + +{% endblock %} \ No newline at end of file diff --git a/app/Http/Web/Views/my/menu.volt b/app/Http/Web/Views/my/menu.volt new file mode 100644 index 00000000..b65a2d3f --- /dev/null +++ b/app/Http/Web/Views/my/menu.volt @@ -0,0 +1,25 @@ +{%- macro vip_info(user) %} + {% set vip_url = '#' %} + {% if user.vip == 1 %} + 会员 + {% else %} + 会员 + {% endif %} +{%- endmacro %} + +
+
+ {{ auth_user.name }} +
+
{{ auth_user.name }} {{ vip_info(auth_user) }}
+
+ +
+
个人设置
+ +
\ No newline at end of file diff --git a/app/Http/Web/Views/my/profile.volt b/app/Http/Web/Views/my/profile.volt new file mode 100644 index 00000000..5774f822 --- /dev/null +++ b/app/Http/Web/Views/my/profile.volt @@ -0,0 +1,45 @@ +{% extends 'templates/full.volt' %} + +{% block content %} + +
+
{{ partial('my/menu') }}
+
+
+
个人信息
+
+
+ +
+ +
+
+
+ +
+ {% set male_checked = user.gender == 1 ? 'checked' : '' %} + {% set female_checked = user.gender == 2 ? 'checked' : '' %} + {% set none_checked = user.gender == 3 ? 'checked' : '' %} + + + +
+
+
+ +
+ +
+
+
+ +
+ + +
+
+
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/Http/Web/Views/order/confirm.volt b/app/Http/Web/Views/order/confirm.volt index f4d95e08..241ba365 100644 --- a/app/Http/Web/Views/order/confirm.volt +++ b/app/Http/Web/Views/order/confirm.volt @@ -1,4 +1,4 @@ -{% extends 'templates/base.volt' %} +{% extends 'templates/full.volt' %} {% block content %} diff --git a/app/Http/Web/Views/order/pay.volt b/app/Http/Web/Views/order/pay.volt index 866501a8..d5083133 100644 --- a/app/Http/Web/Views/order/pay.volt +++ b/app/Http/Web/Views/order/pay.volt @@ -1,4 +1,4 @@ -{% extends 'templates/base.volt' %} +{% extends 'templates/full.volt' %} {% block content %} diff --git a/app/Http/Web/Views/partials/header.volt b/app/Http/Web/Views/partials/header.volt index 48d2b734..f61a9490 100644 --- a/app/Http/Web/Views/partials/header.volt +++ b/app/Http/Web/Views/partials/header.volt @@ -30,15 +30,12 @@
{% if auth_user.id > 0 %}
+{%- endmacro %} + +{%- macro learning_course_card(item) %} + {% set course_title = item.course.title|e %} + {% set course_url = url({'for':'web.course.show','id':item.course.id}) %} +
+
+ + {{ course_title }} + +
+ +
+
+
+
+
+
已学习 {{ item.duration|total_duration }}
+
{%- endmacro %} \ No newline at end of file diff --git a/app/Http/Web/Views/search/list.volt b/app/Http/Web/Views/search/list.volt index a42edf18..e4853223 100644 --- a/app/Http/Web/Views/search/list.volt +++ b/app/Http/Web/Views/search/list.volt @@ -1,4 +1,4 @@ -{% extends 'templates/base.volt' %} +{% extends 'templates/full.volt' %} {% block content %} @@ -14,16 +14,18 @@
-
+
{% if pager.total_pages > 0 %} - {% if type == 'course' %} - {{ partial('search/content_course') }} - {% elseif type == 'other' %} - {{ partial('search/content_other') }} - {% endif %} +
+ {% if type == 'course' %} + {{ partial('search/content_course') }} + {% elseif type == 'other' %} + {{ partial('search/content_other') }} + {% endif %} +
{{ partial('partials/pager') }} {% else %} -
+
没有找到{{ query }}相关内容,换个关键字试试吧!
diff --git a/app/Http/Web/Views/teacher/list.volt b/app/Http/Web/Views/teacher/list.volt new file mode 100644 index 00000000..2e839b83 --- /dev/null +++ b/app/Http/Web/Views/teacher/list.volt @@ -0,0 +1,27 @@ +{% extends 'templates/full.volt' %} + +{% block content %} + + + + {% if pager.total_pages > 0 %} +
+ {% for item in pager.items %} + {% set teacher_title = item.title ? item.title : '小小教书匠' %} + {% set teacher_url = url({'for':'web.teacher.show','id':item.id}) %} +
+
+ {{ item.name }} +
+ +
{{ teacher_title }}
+
+ {% endfor %} +
+ {{ partial('partials/pager') }} + {% endif %} + +{% endblock %} \ No newline at end of file diff --git a/app/Http/Web/Views/templates/content.volt b/app/Http/Web/Views/templates/content.volt new file mode 100644 index 00000000..3b0258b7 --- /dev/null +++ b/app/Http/Web/Views/templates/content.volt @@ -0,0 +1,25 @@ + + + + + + + + + {{ site_seo.getTitle() }} + {{ icon_link('favicon.ico') }} + {{ css_link('lib/layui/css/layui.css') }} + {{ css_link('web/css/common.css') }} + {% block link_css %}{% endblock %} + {% block inline_css %}{% endblock %} + + +
+ {% block content %}{% endblock %} +
+{{ js_include('lib/layui/layui.all.js') }} +{{ js_include('web/js/common.js') }} +{% block include_js %}{% endblock %} +{% block inline_js %}{% endblock %} + + \ No newline at end of file diff --git a/app/Http/Web/Views/templates/base.volt b/app/Http/Web/Views/templates/full.volt similarity index 98% rename from app/Http/Web/Views/templates/base.volt rename to app/Http/Web/Views/templates/full.volt index 5ef00a1e..7bacdd95 100644 --- a/app/Http/Web/Views/templates/base.volt +++ b/app/Http/Web/Views/templates/full.volt @@ -14,25 +14,18 @@ {% block inline_css %}{% endblock %} - -
{% block content %}{% endblock %}
- - {{ js_include('lib/layui/layui.all.js') }} {{ js_include('web/js/common.js') }} - {% block include_js %}{% endblock %} - {% block inline_js %}{% endblock %} - \ No newline at end of file diff --git a/app/Http/Web/Views/user/courses.volt b/app/Http/Web/Views/user/courses.volt new file mode 100644 index 00000000..724c78c3 --- /dev/null +++ b/app/Http/Web/Views/user/courses.volt @@ -0,0 +1,10 @@ +{{ partial('partials/macro_course') }} + +{% if pager.total_pages > 0 %} +
+ {% for item in pager.items %} + {{ learning_course_card(item) }} + {% endfor %} +
+ {{ partial('partials/pager_ajax') }} +{% endif %} \ No newline at end of file diff --git a/app/Http/Web/Views/user/favorites.volt b/app/Http/Web/Views/user/favorites.volt new file mode 100644 index 00000000..4d0fc711 --- /dev/null +++ b/app/Http/Web/Views/user/favorites.volt @@ -0,0 +1,10 @@ +{{ partial('partials/macro_course') }} + +{% if pager.total_pages > 0 %} +
+ {% for item in pager.items %} + {{ course_card(item) }} + {% endfor %} +
+ {{ partial('partials/pager_ajax') }} +{% endif %} \ No newline at end of file diff --git a/app/Http/Web/Views/user/show.volt b/app/Http/Web/Views/user/show.volt new file mode 100644 index 00000000..7cb896d0 --- /dev/null +++ b/app/Http/Web/Views/user/show.volt @@ -0,0 +1,57 @@ +{% extends 'templates/full.volt' %} + +{% block content %} + + {{ partial('partials/macro_course') }} + + {% set vip_flag = user.vip ? '' : '' %} + + + + {% set course_url = url({'for':'web.user.courses','id':user.id}) %} + {% set favorite_url = url({'for':'web.user.favorites','id':user.id}) %} + {% set friend_url = url({'for':'web.user.friends','id':user.id}) %} + +
+
+
    +
  • 课程
  • +
  • 收藏
  • +
  • 好友
  • +
+
+
+
+
+
+
+
+ +{% endblock %} + +{% block inline_js %} + + + +{% endblock %} \ No newline at end of file diff --git a/app/Models/CourseUser.php b/app/Models/CourseUser.php index 985171e0..4405b957 100644 --- a/app/Models/CourseUser.php +++ b/app/Models/CourseUser.php @@ -130,8 +130,7 @@ class CourseUser extends Model public function beforeCreate() { - $this->plan_id = (int)date('Y-m-d'); - + $this->plan_id = (int)date('Ymd'); $this->create_time = time(); } diff --git a/app/Models/User.php b/app/Models/User.php index e8bf5849..dcb13ae5 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -85,6 +85,27 @@ class User extends Model */ public $admin_role; + /** + * VIP标识 + * + * @var int + */ + public $vip; + + /** + * 锁定标识 + * + * @var int + */ + public $block; + + /** + * 删除标识 + * + * @var int + */ + public $deleted; + /** * 最近登录IP * @@ -99,13 +120,6 @@ class User extends Model */ public $last_login_time; - /** - * VIP标识 - * - * @var int - */ - public $vip; - /** * VIP期限 * @@ -113,12 +127,6 @@ class User extends Model */ public $vip_expiry_time; - /** - * 锁定标识 - * - * @var int - */ - public $block; /** * 锁定期限 @@ -127,13 +135,6 @@ class User extends Model */ public $lock_expiry_time; - /** - * 删除标识 - * - * @var int - */ - public $deleted; - /** * 通知数量 * diff --git a/app/Services/Frontend/My/AccountInfo.php b/app/Services/Frontend/My/AccountInfo.php new file mode 100644 index 00000000..183c76ec --- /dev/null +++ b/app/Services/Frontend/My/AccountInfo.php @@ -0,0 +1,32 @@ +getLoginUser(); + + return $this->handleAccount($user); + } + + protected function handleAccount(UserModel $user) + { + $accountRepo = new AccountRepo(); + + $account = $accountRepo->findById($user->id); + + return [ + 'id' => $account->id, + 'phone' => $account->phone, + 'email' => $account->email, + ]; + } + +} diff --git a/app/Services/Frontend/Teacher/TeacherList.php b/app/Services/Frontend/Teacher/TeacherList.php new file mode 100644 index 00000000..2df7bcdb --- /dev/null +++ b/app/Services/Frontend/Teacher/TeacherList.php @@ -0,0 +1,64 @@ +getParams(); + + $params['deleted'] = 0; + + $sort = $pagerQuery->getSort(); + $page = $pagerQuery->getPage(); + $limit = $pagerQuery->getLimit(); + + $userRepo = new UserRepo(); + + $pager = $userRepo->paginate($params, $sort, $page, $limit); + + return $this->handleUsers($pager); + } + + protected function handleUsers($pager) + { + if ($pager->total_items == 0) { + return $pager; + } + + $users = $pager->items->toArray(); + + $items = []; + + $baseUrl = kg_ci_base_url(); + + foreach ($users as $user) { + + $user['avatar'] = $baseUrl . $user['avatar']; + + $items[] = [ + 'id' => $user['id'], + 'name' => $user['name'], + 'avatar' => $user['avatar'], + 'title' => $user['title'], + 'about' => $user['about'], + 'location' => $user['location'], + 'create_time' => $user['create_time'], + 'last_login_time' => $user['last_login_time'], + ]; + } + + $pager->items = $items; + + return $pager; + } + +} diff --git a/app/Services/Frontend/User/CourseList.php b/app/Services/Frontend/User/CourseList.php index fc995c38..a8ea0c1b 100644 --- a/app/Services/Frontend/User/CourseList.php +++ b/app/Services/Frontend/User/CourseList.php @@ -55,7 +55,7 @@ class CourseList extends FrontendService $course = $courses[$relation['course_id']] ?? new \stdClass(); - $items = [ + $items[] = [ 'course' => $course, 'progress' => $relation['progress'], 'duration' => $relation['duration'], diff --git a/app/Services/Frontend/User/FavoriteList.php b/app/Services/Frontend/User/FavoriteList.php new file mode 100644 index 00000000..32683669 --- /dev/null +++ b/app/Services/Frontend/User/FavoriteList.php @@ -0,0 +1,62 @@ +checkUserCache($id); + + $pagerQuery = new PagerQuery(); + + $params = $pagerQuery->getParams(); + + $params['user_id'] = $user->id; + $params['deleted'] = 0; + + $sort = $pagerQuery->getSort(); + $page = $pagerQuery->getPage(); + $limit = $pagerQuery->getLimit(); + + $favoriteRepo = new CourseFavoriteRepo(); + + $pager = $favoriteRepo->paginate($params, $sort, $page, $limit); + + return $this->handleCourses($pager); + } + + protected function handleCourses($pager) + { + if ($pager->total_items == 0) { + return $pager; + } + + $builder = new CourseFavoriteListBuilder(); + + $relations = $pager->items->toArray(); + + $courses = $builder->getCourses($relations); + + $items = []; + + foreach ($relations as $relation) { + $course = $courses[$relation['course_id']] ?? new \stdClass(); + $items[] = $course; + } + + $pager->items = $items; + + return $pager; + } + +} diff --git a/app/Services/Frontend/User/UserInfo.php b/app/Services/Frontend/User/UserInfo.php index 04b8a68d..f23e694b 100644 --- a/app/Services/Frontend/User/UserInfo.php +++ b/app/Services/Frontend/User/UserInfo.php @@ -30,6 +30,8 @@ class UserInfo extends FrontendService 'gender' => $user->gender, 'vip' => $user->vip, 'locked' => $user->locked, + 'last_login_time' => $user->last_login_time, + 'create_time' => $user->create_time, ]; } diff --git a/public/static/lib/layui/css/modules/layim/html/chatlog.html b/public/static/lib/layui/css/modules/layim/html/chatlog.html new file mode 100644 index 00000000..103bbe24 --- /dev/null +++ b/public/static/lib/layui/css/modules/layim/html/chatlog.html @@ -0,0 +1,96 @@ + + + + + + 聊天记录 + + + + + + +
+
    +
    + +
    + + + + + + + + + + + diff --git a/public/static/lib/layui/css/modules/layim/html/find.html b/public/static/lib/layui/css/modules/layim/html/find.html new file mode 100644 index 00000000..ff72e1f5 --- /dev/null +++ b/public/static/lib/layui/css/modules/layim/html/find.html @@ -0,0 +1,36 @@ + + + + + + 发现 + + + + + + +
    +
    此为自定义的【查找】页面,因需求不一,所以官方暂不提供该模版结构与样式,实际使用时,可移至该文件到你的项目中,对页面自行把控。 +
    文件所在目录(相对于layui.js):/css/modules/layim/html/find.html +
    +
    + + + + + + diff --git a/public/static/lib/layui/css/modules/layim/html/getmsg.json b/public/static/lib/layui/css/modules/layim/html/getmsg.json new file mode 100644 index 00000000..f59b0857 --- /dev/null +++ b/public/static/lib/layui/css/modules/layim/html/getmsg.json @@ -0,0 +1,87 @@ +{ + "code": 0, + "pages": 1, + "data": [ + { + "id": 76, + "content": "申请添加你为好友", + "uid": 168, + "from": 166488, + "from_group": 0, + "type": 1, + "remark": "有问题要问", + "href": null, + "read": 1, + "time": "刚刚", + "user": { + "id": 166488, + "avatar": "http://q.qlogo.cn/qqapp/101235792/B704597964F9BD0DB648292D1B09F7E8/100", + "username": "李彦宏", + "sign": null + } + }, + { + "id": 75, + "content": "申请添加你为好友", + "uid": 168, + "from": 347592, + "from_group": 0, + "type": 1, + "remark": "你好啊!", + "href": null, + "read": 1, + "time": "刚刚", + "user": { + "id": 347592, + "avatar": "http://q.qlogo.cn/qqapp/101235792/B78751375E0531675B1272AD994BA875/100", + "username": "麻花疼", + "sign": null + } + }, + { + "id": 62, + "content": "雷军 拒绝了你的好友申请", + "uid": 168, + "from": null, + "from_group": null, + "type": 1, + "remark": null, + "href": null, + "read": 1, + "time": "10天前", + "user": { + "id": null + } + }, + { + "id": 60, + "content": "马小云 已经同意你的好友申请", + "uid": 168, + "from": null, + "from_group": null, + "type": 1, + "remark": null, + "href": null, + "read": 1, + "time": "10天前", + "user": { + "id": null + } + }, + { + "id": 61, + "content": "贤心 已经同意你的好友申请", + "uid": 168, + "from": null, + "from_group": null, + "type": 1, + "remark": null, + "href": null, + "read": 1, + "time": "10天前", + "user": { + "id": null + } + } + ] +} \ No newline at end of file diff --git a/public/static/lib/layui/css/modules/layim/html/msgbox.html b/public/static/lib/layui/css/modules/layim/html/msgbox.html new file mode 100644 index 00000000..9e62b4e6 --- /dev/null +++ b/public/static/lib/layui/css/modules/layim/html/msgbox.html @@ -0,0 +1,257 @@ + + + + + + 消息盒子 + + + + + + +
      + +
      +
      注意:这些都是模拟数据,实际使用时,需将其中的模拟接口改为你的项目真实接口。 +
      该模版文件所在目录(相对于layui.js):/css/modules/layim/html/msgbox.html +
      +
      + + + + + + + + + + diff --git a/public/static/lib/layui/css/modules/layim/layim.css b/public/static/lib/layui/css/modules/layim/layim.css new file mode 100644 index 00000000..2fb1c147 --- /dev/null +++ b/public/static/lib/layui/css/modules/layim/layim.css @@ -0,0 +1,2 @@ +/** layui-v2.5.6 MIT License By https://www.layui.com */ + html #layuicss-skinlayimcss{display:none;position:absolute;width:1989px}body .layui-layim,body .layui-layim-chat{border:1px solid #D9D9D9;border-color:rgba(0,0,0,.05);background-repeat:no-repeat;background-color:#F6F6F6;color:#333;font-family:\5FAE\8F6F\96C5\9ED1}body .layui-layim-chat{background-size:cover}body .layui-layim .layui-layer-title{height:110px;border-bottom:none;background:0 0}.layui-layim-main{position:relative;top:-98px;left:0}body .layui-layim .layui-layer-content,body .layui-layim-chat .layui-layer-content{overflow:visible}.layui-layim cite,.layui-layim em,.layui-layim-chat cite,.layui-layim-chat em{font-style:normal}.layui-layim-info{height:50px;font-size:0;padding:0 15px}.layui-layim-info *{font-size:14px}.layim-tab-content li h5 *,.layui-layim-info div,.layui-layim-skin li,.layui-layim-tab li,.layui-layim-tool li{display:inline-block;vertical-align:top;*zoom:1;*display:inline}.layim-tab-content li h5 span,.layui-layim-info .layui-layim-user,.layui-layim-list li p,.layui-layim-list li span,.layui-layim-remark{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.layui-layim-info .layui-layim-user{max-width:150px;margin-right:5px;font-size:16px}.layui-layim-status{position:relative;top:2px;line-height:19px;cursor:pointer}.layim-status-online{color:#3FDD86}.layim-status-hide{color:#DD691D}.layim-menu-box{display:none;position:absolute;z-index:100;top:24px;left:-31px;padding:5px 0;width:85px;border:1px solid #E2E2E2;border-radius:2px;background-color:#fff;box-shadow:1px 1px 20px rgba(0,0,0,.1)}.layim-menu-box li{position:relative;line-height:22px;padding-left:30px;font-size:12px}.layim-menu-box li cite{padding-right:5px;font-size:14px}.layim-menu-box li i{display:none;position:absolute;left:8px;top:0;font-weight:700;color:#5FB878}.layim-menu-box .layim-this i{display:block}.layim-menu-box li:hover{background-color:#eee}.layui-layim-remark{position:relative;left:-6px;display:block;width:100%;border:1px solid transparent;margin-top:8px;padding:0 5px;height:26px;line-height:26px;background:0 0;border-radius:2px}.layui-layim-remark:focus,.layui-layim-remark:hover{border:1px solid #d2d2d2;border-color:rgba(0,0,0,.15)}.layui-layim-remark:focus{background-color:#fff}.layui-layim-tab{margin-top:10px;padding:9px 0;font-size:0}.layui-layim-tab li{position:relative;width:33.33%;height:24px;line-height:24px;font-size:22px;text-align:center;color:#666;color:rgba(0,0,0,.6);cursor:pointer}.layim-tab-two li{width:50%}.layui-layim-tab li.layim-this:after{content:'';position:absolute;left:0;bottom:-9px;width:100%;height:3px;background-color:#3FDD86}.layui-layim-tab li.layim-hide{display:none}.layui-layim-tab li:hover{opacity:.8;filter:Alpha(opacity=80)}.layim-tab-content{display:none;padding:10px 0;height:349px;overflow:hidden;background-color:#fff;background-color:rgba(255,255,255,.9)}.layim-tab-content:hover{overflow-y:auto}.layim-tab-content li h5{position:relative;margin-right:15px;padding-left:30px;height:28px;line-height:28px;cursor:pointer;font-size:0;white-space:nowrap;overflow:hidden}.layim-tab-content li h5 *{font-size:14px}.layim-tab-content li h5 span{max-width:125px}.layim-tab-content li h5 i{position:absolute;left:12px;top:0;color:#C9BDBB}.layim-tab-content li h5 em{padding-left:5px;color:#999}.layim-tab-content li h5[lay-type=true] i{top:2px}.layim-tab-content li ul{display:none;margin-bottom:10px}.layui-layim-list li{position:relative;height:42px;padding:5px 15px 5px 60px;font-size:0;cursor:pointer}.layui-layim-list li:hover{background-color:#F2F2F2;background-color:rgba(0,0,0,.05)}.layui-layim-list li.layim-null{height:20px;line-height:20px;padding:0;font-size:14px;color:#999;text-align:center;cursor:default}.layui-layim-list li.layim-null:hover{background:0 0}.layui-layim-list li *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:14px}.layui-layim-list li span{margin-top:4px;max-width:155px}.layui-layim-list li img{position:absolute;left:15px;top:8px;width:36px;height:36px;border-radius:100%}.layui-layim-list li p{display:block;padding-right:30px;line-height:18px;font-size:12px;color:#999}.layui-layim-list li .layim-msg-status{display:none;position:absolute;right:10px;bottom:7px;padding:0 5px;height:16px;line-height:16px;border-radius:16px;text-align:center;font-size:10px;background-color:#F74C31;color:#fff}.layim-list-gray{-webkit-filter:grayscale(100%);-ms-filter:grayscale(100%);filter:grayscale(100%);filter:gray}.layui-layim-tool{padding:0 10px;font-size:0;background-color:#F6F6F6;border-radius:0 0 2px 2px}.layui-layim-tool li{position:relative;width:48px;height:37px;line-height:40px;text-align:center;font-size:22px;cursor:pointer}.layui-layim-tool li:active{background-color:#e2e2e2}.layui-layim-tool .layim-tool-msgbox{line-height:37px}.layui-layim-tool .layim-tool-find{line-height:38px}.layui-layim-tool .layim-tool-skin{font-size:26px}.layim-tool-msgbox span{display:none;position:absolute;left:12px;top:-12px;height:20px;line-height:20px;padding:0 10px;border-radius:2px;background-color:#33DF83;color:#fff;font-size:12px;-webkit-animation-duration:1s;animation-duration:1s}.layim-tool-msgbox .layer-anim-05{display:block}.layui-layim-search{display:none;position:absolute;bottom:5px;left:5px;height:28px;line-height:28px}.layui-layim-search input{width:210px;padding:0 30px 0 10px;height:30px;line-height:30px;border:none;border-radius:3px;background-color:#ddd}.layui-layim-search label{position:absolute;right:6px;top:4px;font-size:20px;cursor:pointer;color:#333;font-weight:400}.layui-layim-skin{margin:10px 0 0 10px;font-size:0}.layui-layim-skin li{margin:0 10px 10px 0;line-height:60px;text-align:center;background-color:#f6f6f6}.layui-layim-skin li,.layui-layim-skin li img{width:86px;height:60px;cursor:pointer}.layui-layim-skin li img:hover{opacity:.8;filter:Alpha(opacity=80)}.layui-layim-skin li cite{font-size:14px;font-style:normal}body .layui-layim-chat{background-color:#fff}body .layui-layim-chat-list{width:760px}body .layui-layim-chat .layui-layer-title{height:80px;border-bottom:none;background-color:#F8F8F8;background-color:rgba(245,245,245,.7)}body .layui-layim-chat .layui-layer-content{background:0 0}.layim-chat-list li *,.layui-layim-min .layui-layer-content *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:14px}.layim-chat-list{display:none;position:absolute;z-index:1000;top:-80px;width:200px;height:100%;background-color:#D9D9D9;overflow:hidden;font-size:0}.layim-chat-list:hover{overflow-y:auto}.layim-chat-list li,.layui-layim-min .layui-layer-content{position:relative;margin:5px;padding:5px 30px 5px 5px;line-height:40px;cursor:pointer;border-radius:3px}.layim-chat-list li img,.layui-layim-min .layui-layer-content img{width:40px;height:40px;border-radius:100%}.layui-layim-photos{cursor:crosshair}.layim-chat-list li{white-space:nowrap}.layim-chat-list li span,.layui-layim-min .layui-layer-content span{width:100px;padding-left:10px;font-size:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.layim-chat-list li span cite{color:#999;padding-left:10px}.layim-chat-list li:hover{background-color:#E2E2E2}.layim-chat-list li.layim-this{background-color:#F3F3F3}.layim-chat-list li .layui-icon{display:none;position:absolute;right:5px;top:7px;color:#555;font-size:22px}.layim-chat-list li .layui-icon:hover{color:#c00}.layim-chat-list li:hover .layui-icon{display:inline-block}.layim-chat-system{margin:10px 0;text-align:center}.layim-chat-system span{display:inline-block;line-height:30px;padding:0 15px;border-radius:3px;background-color:#e2e2e2;cursor:default;font-size:14px}.layim-chat{display:none;position:relative;background-color:#fff;background-color:rgba(255,255,255,.9)}.layim-chat-title{position:absolute;top:-80px;height:80px}.layim-chat-other{position:relative;top:15px;left:15px;padding-left:60px;cursor:default}.layim-chat-other img{position:absolute;left:0;top:0;width:50px;height:50px;border-radius:100%}.layim-chat-username{position:relative;top:5px;font-size:18px}.layim-chat-status{margin-top:6px;font-size:14px;color:#999}.layim-chat-group .layim-chat-other .layim-chat-username{cursor:pointer}.layim-chat-group .layim-chat-other .layim-chat-username em{padding:0 10px;color:#999}.layim-chat-main{height:262px;padding:15px 15px 5px;overflow-x:hidden;overflow-y:auto}.layim-chat-main ul li{position:relative;font-size:0;margin-bottom:10px;padding-left:60px;min-height:68px}.layim-chat-text,.layim-chat-user{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:14px}.layim-chat-user{position:absolute;left:3px}.layim-chat-user img{width:40px;height:40px;border-radius:100%}.layim-chat-user cite{position:absolute;left:60px;top:-2px;width:500px;line-height:24px;font-size:12px;white-space:nowrap;color:#999;text-align:left;font-style:normal}.layim-chat-user cite i{padding-left:15px;font-style:normal}.layim-chat-text{position:relative;line-height:22px;margin-top:25px;padding:8px 15px;background-color:#e2e2e2;border-radius:3px;color:#333;word-break:break-all;max-width:462px\9}.layim-chat-text:after{content:'';position:absolute;left:-10px;top:13px;width:0;height:0;border-style:solid dashed dashed;border-color:#e2e2e2 transparent transparent;overflow:hidden;border-width:10px}.layim-chat-text a{color:#33DF83}.layim-chat-text img{max-width:100%;vertical-align:middle}.layim-chat-text .layui-layim-file,.layui-layim-file{display:block;text-align:center}.layim-chat-text .layui-layim-file{color:#333}.layui-layim-file:hover{opacity:.9}.layui-layim-file i{font-size:80px;line-height:80px}.layui-layim-file cite{display:block;line-height:20px;font-size:14px}.layui-layim-audio{text-align:center;cursor:pointer}.layui-layim-audio .layui-icon{position:relative;top:5px;font-size:24px}.layui-layim-audio p{margin-top:3px}.layui-layim-video{width:120px;height:80px;line-height:80px;background-color:#333;text-align:center;border-radius:3px}.layui-layim-video .layui-icon{font-size:36px;cursor:pointer;color:#fff}.layim-chat-main ul .layim-chat-system{min-height:0;padding:0}.layim-chat-main ul .layim-chat-mine{text-align:right;padding-left:0;padding-right:60px}.layim-chat-mine .layim-chat-user{left:auto;right:3px}.layim-chat-mine .layim-chat-user cite{left:auto;right:60px;text-align:right}.layim-chat-mine .layim-chat-user cite i{padding-left:0;padding-right:15px}.layim-chat-mine .layim-chat-text{margin-left:0;text-align:left;background-color:#5FB878;color:#fff}.layim-chat-mine .layim-chat-text:after{left:auto;right:-10px;border-top-color:#5FB878}.layim-chat-mine .layim-chat-text a{color:#fff}.layim-chat-footer{border-top:1px solid #F1F1F1}.layim-chat-tool{position:relative;padding:0 8px;height:38px;line-height:38px;font-size:0}.layim-chat-tool span{position:relative;margin:0 10px;display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:24px;cursor:pointer}.layim-chat-tool .layim-tool-log{position:absolute;right:5px;font-size:14px}.layim-tool-log i{position:relative;top:2px;margin-right:5px;font-size:20px;color:#999}.layim-tool-image input{position:absolute;font-size:0;left:0;top:0;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}body .layui-layim-face{margin:10px 0 0 -18px;border:none;background:0 0}body .layui-layim-face .layui-layer-content{padding:0;background-color:#fff;color:#666;box-shadow:none}.layui-layim-face .layui-layer-TipsG{display:none}.layui-layim-face ul{position:relative;width:372px;padding:10px;border:1px solid #D9D9D9;background-color:#fff;box-shadow:0 0 20px rgba(0,0,0,.2)}.layui-layim-face ul li{cursor:pointer;float:left;border:1px solid #e8e8e8;height:22px;width:26px;overflow:hidden;margin:-1px 0 0 -1px;padding:4px 2px;text-align:center}.layui-layim-face ul li:hover{position:relative;z-index:2;border:1px solid #eb7350;background:#fff9ec}.layim-chat-textarea{margin-left:10px}.layim-chat-textarea textarea{display:block;width:100%;padding:5px 0 0;height:68px;line-height:20px;border:none;overflow:auto;resize:none;background:0 0}.layim-chat-textarea textarea:focus{outline:0}.layim-chat-bottom{position:relative;height:46px}.layim-chat-send{position:absolute;right:15px;top:3px;height:32px;line-height:32px;font-size:0;cursor:pointer}.layim-chat-send span{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:14px;line-height:32px;margin-left:5px;padding:0 20px;background-color:#5FB878;color:#fff;border-radius:3px}.layim-chat-send span:hover{background-color:#69BC80}.layim-chat-send span:active{background-color:#59B573}.layim-chat-send .layim-send-btn{border-radius:3px 0 0 3px}.layim-chat-send .layim-send-set{position:relative;width:30px;height:32px;margin-left:0;padding:0;border-left:1px solid #85C998;border-radius:0 3px 3px 0}.layim-send-set .layui-edge{position:absolute;top:14px;left:9px;border-width:6px;border-top-style:solid;border-top-color:#fff}.layim-chat-send .layim-menu-box{left:auto;right:0;top:33px;width:180px;padding:10px 0}.layim-chat-send .layim-menu-box li{padding-right:15px;line-height:28px}body .layui-layim-min{border:1px solid #D9D9D9}.layui-layim-min .layui-layer-content{margin:0 5px;padding:5px 10px;white-space:nowrap}.layui-layim-close .layui-layer-content span{width:auto;max-width:120px}body .layui-layim-members{margin:25px 0 0 -75px;border:none;background:0 0}body .layui-layim-members .layui-layer-content{padding:0;background:0 0;color:#666;box-shadow:none}.layui-layim-members .layui-layer-TipsG{display:none}.layui-layim-members ul{position:relative;width:578px;height:200px;padding:10px 10px 0;border:1px solid #D9D9D9;background-color:#fff;background-color:rgba(255,255,255,.9);box-shadow:none;overflow:hidden;font-size:0}.layui-layim-members ul:hover{overflow:auto}.layim-add-img,.layim-add-remark,.layui-layim-members li{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:14px}.layui-layim-members li{width:112px;margin:10px 0;text-align:center}.layui-layim-members li a{position:relative;display:inline-block;max-width:100%}.layui-layim-members li a:after{content:'';position:absolute;width:46px;height:46px;left:50%;margin-left:-23px;top:0;border:1px solid #eee;border-color:rgba(0,0,0,.1);border-radius:100%}.layui-layim-members li img{width:48px;height:48px;border-radius:100%}.layui-layim-members li:hover{opacity:.9}.layui-layim-members li a cite{display:block;padding:0 3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}body .layui-layim-contextmenu{margin:70px 0 0 30px;width:200px;padding:5px 0;border:1px solid #ccc;background:#fff;border-radius:0;box-shadow:0 0 5px rgba(0,0,0,.2)}body .layui-layim-contextmenu .layui-layer-content{padding:0;background-color:#fff;color:#333;font-size:14px;box-shadow:none}.layui-layim-contextmenu .layui-layer-TipsG{display:none}.layui-layim-contextmenu li{padding:0 15px 0 35px;cursor:pointer;line-height:30px}.layui-layim-contextmenu li:hover{background-color:#F2F2F2}.layim-add-box{margin:15px;font-size:0}.layim-add-img img,.layim-add-remark p{margin-bottom:10px}.layim-add-img{width:100px;margin-right:20px;text-align:center}.layim-add-img img{width:100px;height:100px}.layim-add-remark{width:280px}.layim-add-remark .layui-select{width:100%;margin-bottom:10px}.layim-add-remark .layui-textarea{height:80px;min-height:80px;resize:none}.layim-tab-content,.layui-layim-face ul,.layui-layim-tab{margin-bottom:0}.layim-tab-content li h5{margin-top:0;margin-bottom:0},.layui-layim-face img{vertical-align:bottom}.layim-chat-other span{color:#444}.layim-chat-other span cite{padding:0 15px;color:#999}.layim-chat-other:hover{text-decoration:none} \ No newline at end of file diff --git a/public/static/lib/layui/css/modules/layim/mobile/layim.css b/public/static/lib/layui/css/modules/layim/mobile/layim.css new file mode 100644 index 00000000..590e6375 --- /dev/null +++ b/public/static/lib/layui/css/modules/layim/mobile/layim.css @@ -0,0 +1,2 @@ +/** layui-v2.5.6 MIT License By https://www.layui.com */ + .layim-tab-content li h5,.layui-layim-list li{border-bottom:1px solid #f2f2f2;cursor:pointer}html #layuicss-skinlayim-mobilecss{display:none;position:absolute;width:1989px}.layim-tab-content li h5 *,.layui-layim-skin li,.layui-layim-tab li,.layui-layim-tool li{display:inline-block;vertical-align:top;*zoom:1;*display:inline}.layim-tab-content li h5 span,.layui-layim-list li p,.layui-layim-list li span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.layui-layim-tab{position:absolute;bottom:0;left:0;right:0;height:50px;border-top:1px solid #f2f2f2;background-color:#fff}.layui-layim-tab li{position:relative;width:33.33%;height:50px;text-align:center;color:#666;color:rgba(0,0,0,.6);cursor:pointer}.layui-layim-tab li .layui-icon{position:relative;top:7px;font-size:25px}.layui-layim-tab li span{position:relative;bottom:-3px;display:block;font-size:12px}.layui-layim-tab li[lay-type=more] .layui-icon{top:4px;font-size:22px}.layui-layim-tab li.layim-this{color:#3FDD86}.layim-new{display:none;position:absolute;top:5px;left:50%;margin-left:15px;width:10px;height:10px;border-radius:10px;background-color:#F74C31;color:#fff}.layim-list-top .layim-new{position:relative;vertical-align:top;top:10px;left:initial;margin-left:5px}.layim-list-top i.layui-show{display:inline-block!important}.layim-tab-content,.layim-tab-content li ul{display:none}.layui-layim{position:fixed;left:0;right:0;top:50px;bottom:50px;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch}.layim-tab-content li h5{position:relative;padding-left:35px;height:45px;line-height:45px;font-size:0;white-space:nowrap;overflow:hidden}.layim-tab-content li h5 *{font-size:17px}.layim-tab-content li h5 span{max-width:80%}.layim-tab-content li h5 i{position:absolute;left:12px;top:0;color:#C9BDBB}.layim-tab-content li h5 em{padding-left:5px;color:#999}.layim-list-friend,.layim-list-group{background-color:#fff}.layui-layim-list li{position:relative;height:42px;padding:5px 15px 5px 60px;font-size:0}.layui-layim-list li:active{background-color:#F2F2F2;background-color:rgba(0,0,0,.05)}.layui-layim-list li.layim-null{height:20px;line-height:20px;padding:10px 0;color:#999;text-align:center;cursor:default;font-size:14px}.layim-list-history li.layim-null{padding:30px 0;border-bottom:none;background-color:#eee}.layui-layim-list li *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:17px}.layui-layim-list li span{margin-top:2px;max-width:155px;font-size:17px}.layui-layim-list li img{position:absolute;left:12px;top:8px;width:36px;height:36px;border-radius:100%}.layui-layim-list li p{display:block;padding-right:30px;line-height:18px;font-size:13px;color:#999}.layui-layim-list li .layim-msg-status{display:none;position:absolute;right:10px;bottom:7px;padding:0 5px;height:17px;line-height:17px;border-radius:17px;text-align:center;font-size:10px;background-color:#F74C31;color:#fff}.layim-list-gray{-webkit-filter:grayscale(100%);-ms-filter:grayscale(100%);filter:grayscale(100%);filter:gray}.layim-list-top{background-color:#fff;font-size:17px}.layim-list-top li{position:relative;padding:0 15px 0 50px;line-height:45px;border-bottom:1px solid #f2f2f2;cursor:pointer}.layim-list-top li:last-child{margin-bottom:10px;border-bottom:none}.layim-list-top li .layui-icon{position:absolute;left:12px;top:0;margin-right:10px;color:#36373C;font-size:24px}.layim-list-top li[layim-event=newFriend] .layui-icon{left:15px}.layim-panel,.layim-title{position:fixed;left:0;right:0;top:0}.layim-list-top li[layim-event=group] .layui-icon{font-size:20px}.layim-list-top li[layim-event=about] .layui-icon{font-size:25px}.layim-panel{bottom:0;background-color:#eee;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}.layim-title{height:50px;line-height:50px;padding:0 15px;background-color:#36373C;color:#fff;font-size:18px}.layim-chat-status{padding-left:15px;font-size:14px;opacity:.7}.layim-title .layim-chat-back{display:inline-block;vertical-align:middle;position:relative;padding:0 15px;margin-left:-10px;top:0;font-size:24px;cursor:pointer}.layim-chat-detail{position:absolute;right:0;top:0;padding:0 15px;font-size:18px;cursor:pointer}.layim-chat-main,.layim-content{position:fixed;top:50px;left:0;right:0;overflow-y:auto;overflow-x:hidden}.layim-chat-detail:active,.layim-title .layim-chat-back:active{opacity:.8}.layui-layim .layim-title{text-align:left}.layui-layim .layim-title p{padding:0 15px}.layim-content{bottom:0}.layim-chat-main{width:100%;bottom:85px;padding:15px;-webkit-box-sizing:border-box!important;-moz-box-sizing:border-box!important;box-sizing:border-box!important}.layim-chat-main ul{overflow-x:hidden}.layim-chat-main ul li{position:relative;font-size:0;margin-bottom:10px;padding-left:60px;min-height:68px}.layim-chat-text,.layim-chat-user{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:15px}.layim-chat-user{position:absolute;left:3px}.layim-chat-user img{width:40px;height:40px;border-radius:100%}.layim-chat-user cite{position:absolute;left:60px;top:-2px;width:500px;line-height:24px;font-size:12px;white-space:nowrap;color:#999;text-align:left;font-style:normal}.layim-chat-user cite i{padding-left:15px;font-style:normal}.layim-chat-text{position:relative;min-height:22px;line-height:22px;margin-top:25px;padding:8px 15px;background-color:#fff;border-radius:3px;color:#333;word-break:break-all}.layim-chat-text:after{content:'';position:absolute;left:-10px;top:13px;width:0;height:0;border-style:solid dashed dashed;border-color:#fff transparent transparent;overflow:hidden;border-width:10px}.layim-chat-text a{color:#33DF83}.layim-chat-text img{max-width:100%;vertical-align:middle}.layim-chat-text .layui-layim-file,.layui-layim-file{display:block;text-align:center}.layim-chat-text .layui-layim-file{color:#333}.layui-layim-file:active{opacity:.9}.layui-layim-file i{font-size:80px;line-height:80px}.layui-layim-file cite{display:block;line-height:20px;font-size:17px}.layui-layim-audio{text-align:center;cursor:pointer}.layui-layim-audio .layui-icon{position:relative;top:5px;font-size:24px}.layui-layim-audio p{margin-top:3px}.layui-layim-video{width:120px;height:80px;line-height:80px;background-color:#333;text-align:center;border-radius:3px}.layui-layim-video .layui-icon{font-size:36px;cursor:pointer;color:#fff}.layim-chat-main ul .layim-chat-mine{text-align:right;padding-left:0;padding-right:60px}.layim-chat-mine .layim-chat-user{left:auto;right:3px}.layim-chat-mine .layim-chat-user cite{left:auto;right:60px;text-align:right}.layim-chat-mine .layim-chat-user cite i{padding-left:0;padding-right:15px}.layim-chat-mine .layim-chat-text{margin-left:0;text-align:left;background-color:#5FB878;color:#fff}.layim-chat-mine .layim-chat-text:after{left:auto;right:-10px;border-top-color:#5FB878}.layim-chat-mine .layim-chat-text a{color:#fff}.layim-chat-main ul .layim-chat-system{min-height:0;margin:20px 0 5px;padding:0}.layim-chat-system{margin:10px 0;text-align:center}.layim-chat-system span{display:inline-block;line-height:30px;padding:0 15px;border-radius:3px;background-color:#ddd;color:#fff;font-size:14px;cursor:pointer}.layim-chat-footer{position:fixed;bottom:0;left:10px;right:10px;height:80px}.layim-chat-send{display:-webkit-box;display:-webkit-flex;display:flex}.layim-chat-send input{-webkit-box-flex:1;-webkit-flex:1;flex:1;height:40px;padding-left:5px;border:0;background-color:#fff;border-radius:3px}.layim-chat-send button{border-radius:3px;height:40px;padding:0 20px;border:0;margin-left:10px;background-color:#5FB878;color:#fff}.layim-chat-tool{position:relative;width:100%;overflow-x:auto;padding:0;height:38px;line-height:38px;margin-top:3px;font-size:0;white-space:nowrap}.layim-chat-tool span{position:relative;margin:0 15px;display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:28px;cursor:pointer}.layim-chat-tool .layim-tool-log{position:absolute;right:5px;font-size:14px}.layim-tool-log i{position:relative;top:2px;margin-right:5px;font-size:20px;color:#999}.layim-tool-image input{position:absolute;font-size:0;left:0;top:0;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layim-layer{position:fixed;bottom:85px;left:10px;right:10px;margin:0 auto}.layui-layim-face{position:relative;max-height:180px;overflow:auto;padding:10px;font-size:0}.layui-layim-face li{cursor:pointer;display:inline-block;vertical-align:bottom;padding:5px 2px;text-align:center;width:10%;-webkit-box-sizing:border-box!important;-moz-box-sizing:border-box!important;box-sizing:border-box!important}.layui-layim-face li img{width:22px;height:22px}.layim-about{font-size:17px}.layim-about .layui-m-layercont{text-align:left}.layim-about .layui-m-layercont p{line-height:30px}.layim-about .layui-m-layercont a{color:#01AAED} \ No newline at end of file diff --git a/public/static/lib/layui/css/modules/layim/skin/1.jpg b/public/static/lib/layui/css/modules/layim/skin/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d9f99263d65a31247c966813d155b83f1ebbd1ba GIT binary patch literal 18386 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 literal 0 HcmV?d00001 diff --git a/public/static/lib/layui/css/modules/layim/skin/3.jpg b/public/static/lib/layui/css/modules/layim/skin/3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..53ba9216283a962b6d325965a4a11c7504056e54 GIT binary patch literal 18610 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