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 %} -
-
-
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 }} + +
+
+ {{ 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 00000000..d9f99263 Binary files /dev/null and b/public/static/lib/layui/css/modules/layim/skin/1.jpg differ diff --git a/public/static/lib/layui/css/modules/layim/skin/2.jpg b/public/static/lib/layui/css/modules/layim/skin/2.jpg new file mode 100644 index 00000000..0bffb50b Binary files /dev/null and b/public/static/lib/layui/css/modules/layim/skin/2.jpg differ 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 00000000..53ba9216 Binary files /dev/null and b/public/static/lib/layui/css/modules/layim/skin/3.jpg differ diff --git a/public/static/lib/layui/css/modules/layim/skin/4.jpg b/public/static/lib/layui/css/modules/layim/skin/4.jpg new file mode 100644 index 00000000..83b47388 Binary files /dev/null and b/public/static/lib/layui/css/modules/layim/skin/4.jpg differ diff --git a/public/static/lib/layui/css/modules/layim/skin/5.jpg b/public/static/lib/layui/css/modules/layim/skin/5.jpg new file mode 100644 index 00000000..8ed74b93 Binary files /dev/null and b/public/static/lib/layui/css/modules/layim/skin/5.jpg differ diff --git a/public/static/lib/layui/css/modules/layim/skin/logo.jpg b/public/static/lib/layui/css/modules/layim/skin/logo.jpg new file mode 100644 index 00000000..26c7358e Binary files /dev/null and b/public/static/lib/layui/css/modules/layim/skin/logo.jpg differ diff --git a/public/static/lib/layui/css/modules/layim/voice/default.mp3 b/public/static/lib/layui/css/modules/layim/voice/default.mp3 new file mode 100644 index 00000000..90013c5a Binary files /dev/null and b/public/static/lib/layui/css/modules/layim/voice/default.mp3 differ diff --git a/public/static/lib/layui/lay/modules/layim.js b/public/static/lib/layui/lay/modules/layim.js new file mode 100644 index 00000000..cc306e80 --- /dev/null +++ b/public/static/lib/layui/lay/modules/layim.js @@ -0,0 +1,3 @@ +/** layui-v2.5.6 MIT License By https://www.layui.com */ + ;layui.define(["layer","laytpl","upload"],function(i){var a="3.9.5",e=layui.$,t=layui.layer,n=layui.laytpl,l=layui.device(),s="layui-show",o="layim-this",d=20,r={},c=function(){this.v=a,e("body").on("click","*[layim-event]",function(i){var a=e(this),t=a.attr("layim-event");ti[t]?ti[t].call(this,a,i):""})};c.prototype.config=function(i){var a=[];if(layui.each(Array(5),function(i){a.push(layui.cache.dir+"css/modules/layim/skin/"+(i+1)+".jpg")}),i=i||{},i.skin=i.skin||[],layui.each(i.skin,function(i,e){a.unshift(e)}),i.skin=a,i=e.extend({isfriend:!0,isgroup:!0,voice:"default.mp3"},i),window.JSON&&window.JSON.parse)return j(i),this},c.prototype.on=function(i,a){return"function"==typeof a&&(r[i]?r[i].push(a):r[i]=[a]),this},c.prototype.cache=function(){return L},c.prototype.chat=function(i){if(window.JSON&&window.JSON.parse)return T(i),this},c.prototype.setChatMin=function(){return M(),this},c.prototype.setChatStatus=function(i){var a=R();if(a){var e=a.elem.find(".layim-chat-status");return e.html(i),this}},c.prototype.getMessage=function(i){return K(i),this},c.prototype.notice=function(i){return J(i),this},c.prototype.add=function(i){return N(i),this},c.prototype.setFriendGroup=function(i){return N(i,"setGroup"),this},c.prototype.msgbox=function(i){return V(i),this},c.prototype.addList=function(i){return P(i),this},c.prototype.removeList=function(i){return W(i),this},c.prototype.setFriendStatus=function(i,a){var t=e(".layim-friend"+i);t["online"===a?"removeClass":"addClass"]("layim-list-gray")},c.prototype.content=function(i){return layui.data.content(i)};var u=function(i){var a={friend:"该分组下暂无好友",group:"暂无群组",history:"暂无历史会话"};return i=i||{},i.item=i.item||"d."+i.type,["{{# var length = 0; layui.each("+i.item+", function(i, data){ length++; }}",'
    • {{ data.username||data.groupname||data.name||"佚名" }}

      {{ data.remark||data.sign||"" }}

      new
    • ',"{{# }); if(length === 0){ }}",'
    • '+(a[i.type]||"暂无数据")+"
    • ","{{# } }}"].join("")},y=['
      ','
      ','
      {{ d.mine.username }}
      ','
      ','{{# if(d.mine.status === "online"){ }}','','{{# } else if(d.mine.status === "hide") { }}','',"{{# } }}",'
        ','
      • 在线
      • ','
      • 隐身
      • ',"
      ","
      ",'',"
      ",'
        ','
      • ','
      • ','
      • ',"
      ",'
        ','{{# layui.each(d.friend, function(index, item){ var spread = d.local["spread"+index]; }}',"
      • ",'
        {{# if(spread === "true"){ }}{{# } else { }}{{# } }}{{ item.groupname||"未命名分组"+index }}( {{ (item.list||[]).length }})
        ','
          ',u({type:"friend",item:"item.list",index:"index"}),"
        ","
      • ","{{# }); if(d.friend.length === 0){ }}",'
        • 暂无联系人
        ',"{{# } }}","
      ",'
        ',"
      • ",'
          ',u({type:"group"}),"
        ","
      • ","
      ",'
        ',"
      • ",'
          ',u({type:"history"}),"
        ","
      • ","
      ",'
        ',"
      • ",'',"
      • ","
      ",'
        ','',"{{# if(d.base.msgbox){ }}",'
      • ',"{{# } }}","{{# if(d.base.find){ }}",'
      • ',"{{# } }}",'
      • ',"{{# if(!d.base.copyright){ }}",'
      • ',"{{# } }}","
      ",'',"
      "].join(""),m=['
        ',"{{# layui.each(d.skin, function(index, item){ }}",'
      • ',"{{# }); }}",'
      • 简约
      • ',"
      "].join(""),f=['
      ','
      ','
      ','{{ d.data.name||"佚名" }} {{d.data.temporary ? "临时会话" : ""}} {{# if(d.data.type==="group"){ }} {{# } }}','

      ',"
      ","
      ",'
      ',"
        ","
        ",'","
        "].join(""),p=['
        ','

        {{ d.data.name||"" }}

        ','
        ','{{# if(d.data.type === "friend" && d.type === "setGroup"){ }}',"

        选择分组

        ",'{{# } if(d.data.type === "friend"){ }}','","{{# } }}",'{{# if(d.data.type === "group"){ }}',"

        请输入验证信息

        ",'{{# } if(d.type !== "setGroup"){ }}','',"{{# } }}","
        ","
        "].join(""),h=['
      • ','
        ',"{{# if(d.mine){ }}",'{{ layui.data.date(d.timestamp) }}{{ d.username||"佚名" }}',"{{# } else { }}",'{{ d.username||"佚名" }}{{ layui.data.date(d.timestamp) }}',"{{# } }}","
        ",'
        {{ layui.data.content(d.content||" ") }}
        ',"
      • "].join(""),v='
      • {{ d.data.name||"佚名" }}{{# if(!d.base.brief){ }}{{# } }}
      • ',g=function(i){return i<10?"0"+(0|i):i};layui.data.date=function(i){var a=new Date(i||new Date);return a.getFullYear()+"-"+g(a.getMonth()+1)+"-"+g(a.getDate())+" "+g(a.getHours())+":"+g(a.getMinutes())+":"+g(a.getSeconds())},layui.data.content=function(i){var a=function(i){return new RegExp("\\n*\\["+(i||"")+"(code|pre|div|span|p|table|thead|th|tbody|tr|td|ul|li|ol|li|dl|dt|dd|h2|h3|h4|h5)([\\s\\S]*?)\\]\\n*","g")};return i=(i||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""").replace(/@(\S+)(\s+?|$)/g,'@$1$2').replace(/face\[([^\s\[\]]+?)\]/g,function(i){var a=i.replace(/^face/g,"");return''+a+''}).replace(/img\[([^\s]+?)\]/g,function(i){return''}).replace(/file\([\s\S]+?\)\[[\s\S]*?\]/g,function(i){var a=(i.match(/file\(([\s\S]+?)\)\[/)||[])[1],e=(i.match(/\)\[([\s\S]*?)\]/)||[])[1];return a?''+(e||a)+"":i}).replace(/audio\[([^\s]+?)\]/g,function(i){return'

        音频消息

        '}).replace(/video\[([^\s]+?)\]/g,function(i){return'
        '}).replace(/a\([\s\S]+?\)\[[\s\S]*?\]/g,function(i){var a=(i.match(/a\(([\s\S]+?)\)\[/)||[])[1],e=(i.match(/\)\[([\s\S]*?)\]/)||[])[1];return a?''+(e||a)+"":i}).replace(a(),"<$1 $2>").replace(a("/"),"").replace(/\n/g,"
        ")};var x,b,w,k,C,S=function(i,a,n){return i=i||{},e.ajax({url:i.url,type:i.type||"get",data:i.data,dataType:i.dataType||"json",cache:!1,success:function(i){0==i.code?a&&a(i.data||{}):t.msg(i.msg||(n||"Error")+": LAYIM_NOT_GET_DATA",{time:5e3})},error:function(i,a){window.console&&console.log&&console.error("LAYIM_DATE_ERROR:"+a)}})},L={message:{},chat:[]},j=function(i){var a=i.init||{};return mine=a.mine||{},local=layui.data("layim")[mine.id]||{},obj={base:i,local:local,mine:mine,history:local.history||{}},create=function(a){var t=a.mine||{},l=layui.data("layim")[t.id]||{},s={base:i,local:l,mine:t,friend:a.friend||[],group:a.group||[],history:l.history||{}};L=e.extend(L,s),H(n(y).render(s)),(l.close||i.min)&&I(),layui.each(r.ready,function(i,a){a&&a(s)})},L=e.extend(L,obj),i.brief?layui.each(r.ready,function(i,a){a&&a(obj)}):void(a.url?S(a,create,"INIT"):create(a))},H=function(i){return t.open({type:1,area:["260px","520px"],skin:"layui-box layui-layim",title:"​",offset:"rb",id:"layui-layim",shade:!1,anim:2,resize:!1,content:i,success:function(i){x=i,_(i),L.base.right&&i.css("margin-left","-"+L.base.right),b&&t.close(b.attr("times"));var a=[],n=i.find(".layim-list-history");n.find("li").each(function(){a.push(e(this).prop("outerHTML"))}),a.length>0&&(a.reverse(),n.html(a.join(""))),A(),ti.sign()},cancel:function(i){I();var a=layui.data("layim")[L.mine.id]||{};return a.close=!0,layui.data("layim",{key:L.mine.id,value:a}),!1}})},A=function(){x.on("contextmenu",function(i){return i.cancelBubble=!0,i.returnValue=!1,!1});var i=function(){t.closeAll("tips")};x.find(".layim-list-history").on("contextmenu","li",function(a){var n=e(this),l='
        • 移除该会话
        • 清空全部会话列表
        ';n.hasClass("layim-null")||(t.tips(l,this,{tips:1,time:0,anim:5,fixed:!0,skin:"layui-box layui-layim-contextmenu",success:function(i){var a=function(i){ii(i)};i.off("mousedown",a).on("mousedown",a)}}),e(document).off("mousedown",i).on("mousedown",i),e(window).off("resize",i).on("resize",i))})},I=function(i){return b&&t.close(b.attr("times")),x&&x.hide(),L.mine=L.mine||{},t.open({type:1,title:!1,id:"layui-layim-close",skin:"layui-box layui-layim-min layui-layim-close",shade:!1,closeBtn:!1,anim:2,offset:"rb",resize:!1,content:''+(i||L.base.title||"我的LayIM")+"",move:"#layui-layim-close img",success:function(i,a){b=i,L.base.right&&i.css("margin-left","-"+L.base.right),i.on("click",function(){t.close(a),x.show();var i=layui.data("layim")[L.mine.id]||{};delete i.close,layui.data("layim",{key:L.mine.id,value:i})})}})},T=function(i){i=i||{};var a=e("#layui-layim-chat"),l={data:i,base:L.base,local:L.local};if(!i.id)return t.msg("非法用户");if(a[0]){var s=w.find(".layim-chat-list"),o=s.find(".layim-chatlist-"+i.type+i.id),d=w.find(".layui-layer-max").hasClass("layui-layer-maxmin"),c=a.children(".layim-chat-box");return"none"===w.css("display")&&w.show(),k&&t.close(k.attr("times")),1!==s.find("li").length||o[0]||(d||w.css("width",800),s.css({height:w.height()}).show(),c.css("margin-left","200px")),o[0]||(s.append(n(v).render(l)),c.append(n(f).render(l)),z(i),E()),O(s.find(".layim-chatlist-"+i.type+i.id)),o[0]||U(),$(i),Q(),C}l.first=!0;var u=C=t.open({type:1,area:"600px",skin:"layui-box layui-layim-chat",id:"layui-layim-chat",title:"​",shade:!1,maxmin:!0,offset:i.offset||"auto",anim:i.anim||0,closeBtn:!L.base.brief&&1,content:n('
          '+v+'
        '+f+"
        ").render(l),success:function(a){w=a,a.css({"min-width":"500px","min-height":"420px"}),z(i),"function"==typeof i.success&&i.success(a),Q(),_(a),$(i),U(),q(),layui.each(r.chatChange,function(i,a){a&&a(R())}),a.on("dblclick",".layui-layim-photos",function(){var i=this.src;t.close(T.photosIndex),t.photos({photos:{data:[{alt:"大图模式",src:i}]},shade:.01,closeBtn:2,anim:0,resize:!1,success:function(i,a){T.photosIndex=a}})})},full:function(i){t.style(u,{width:"100%",height:"100%"},!0),E()},resizing:E,restore:E,min:function(){return M(),!1},end:function(){t.closeAll("tips"),w=null}});return u},z=function(i){e(".layim-"+i.type+i.id).each(function(){e(this).hasClass("layim-list-gray")&&layui.layim.setFriendStatus(i.id,"offline")})},E=function(){var i=w.find(".layim-chat-list"),a=w.find(".layim-chat-main"),e=w.height();i.css({height:e}),a.css({height:e-20-80-158})},M=function(i){var a=i||R().data,n=layui.layim.cache().base;w&&!i&&w.hide(),t.close(M.index),M.index=t.open({type:1,title:!1,skin:"layui-box layui-layim-min",shade:!1,closeBtn:!1,anim:a.anim||2,offset:"b",move:"#layui-layim-min",resize:!1,area:["182px","50px"],content:''+a.name+"",success:function(a,l){i||(k=a),n.minRight&&t.style(l,{left:e(window).width()-a.outerWidth()-parseFloat(n.minRight)}),a.find(".layui-layer-content span").on("click",function(){t.close(l),i?layui.each(L.chat,function(i,a){T(a)}):w.show(),i&&(L.chat=[],Z())}),a.find(".layui-layer-content img").on("click",function(i){ii(i)})}})},N=function(i,a){return i=i||{},t.close(N.index),N.index=t.open({type:1,area:"430px",title:{friend:"添加好友",group:"加入群组"}[i.type]||"",shade:!1,resize:!1,btn:a?["确认","取消"]:["发送申请","关闭"],content:n(p).render({data:{name:i.username||i.groupname,avatar:i.avatar,group:i.group||parent.layui.layim.cache().friend||[],type:i.type},type:a}),yes:function(e,t){var n=t.find("#LAY_layimGroup"),l=t.find("#LAY_layimRemark");a?i.submit&&i.submit(n.val(),e):i.submit&&i.submit(n.val(),l.val(),e)}})},O=function(i,a){i=i||e(".layim-chat-list ."+o);var n=i.index()===-1?0:i.index(),l=".layim-chat",d=w.find(l).eq(n),c=w.find(".layui-layer-max").hasClass("layui-layer-maxmin");if(a){i.hasClass(o)&&O(0===n?i.next():i.prev());var u=w.find(l).length;return 1===u?t.close(C):(i.remove(),d.remove(),2===u&&(w.find(".layim-chat-list").hide(),c||w.css("width","600px"),w.find(".layim-chat-box").css("margin-left",0)),!1)}i.addClass(o).siblings().removeClass(o),d.addClass(s).siblings(l).removeClass(s),d.find("textarea").focus(),layui.each(r.chatChange,function(i,a){a&&a(R())}),q()},q=function(){var i=R(),a=L.message[i.data.type+i.data.id];a&&delete L.message[i.data.type+i.data.id]},R=c.prototype.thisChat=function(){if(w){var i=e(".layim-chat-list ."+o).index(),a=w.find(".layim-chat").eq(i),t=JSON.parse(decodeURIComponent(a.find(".layim-chat-tool").data("json")));return{elem:a,data:t,textarea:a.find("textarea")}}},_=function(i){var a=layui.data("layim")[L.mine.id]||{},e=a.skin;i.css({"background-image":e?"url("+e+")":function(){return L.base.initSkin?"url("+(layui.cache.dir+"css/modules/layim/skin/"+L.base.initSkin)+")":"none"}()})},$=function(i){var a=layui.data("layim")[L.mine.id]||{},e={},t=a.history||{},l=t[i.type+i.id];if(x){var s=x.find(".layim-list-history");if(i.historyTime=(new Date).getTime(),t[i.type+i.id]=i,a.history=t,layui.data("layim",{key:L.mine.id,value:a}),!l){e[i.type+i.id]=i;var o=n(u({type:"history",item:"d.data"})).render({data:e});s.prepend(o),s.find(".layim-null").remove()}}},D=function(){var i={username:L.mine?L.mine.username:"访客",avatar:L.mine?L.mine.avatar:layui.cache.dir+"css/pc/layim/skin/logo.jpg",id:L.mine?L.mine.id:null,mine:!0},a=R(),e=a.elem.find(".layim-chat-main ul"),l=L.base.maxLength||3e3;if(i.content=a.textarea.val(),""!==i.content.replace(/\s/g,"")){if(i.content.length>l)return t.msg("内容最长不能超过"+l+"个字符");e.append(n(h).render(i));var s={mine:i,to:a.data},o={username:s.mine.username,avatar:s.mine.avatar,id:s.to.id,type:s.to.type,content:s.mine.content,timestamp:(new Date).getTime(),mine:!0};B(o),layui.each(r.sendMessage,function(i,a){a&&a(s)})}Z(),a.textarea.val("").focus()},J=function(i){if(i=i||{},window.Notification)if("granted"===Notification.permission){new Notification(i.title||"",{body:i.content||"",icon:i.avatar||"http://tp2.sinaimg.cn/5488749285/50/5719808192/1"})}else Notification.requestPermission()},F=function(){if(!(l.ie&&l.ie<9)){var i=document.createElement("audio");i.src=layui.cache.dir+"css/modules/layim/voice/"+L.base.voice,i.play()}},G={},K=function(i){i=i||{};var a=e(".layim-chatlist-"+i.type+i.id),t={},l=a.index();if(i.timestamp=i.timestamp||(new Date).getTime(),i.fromid==L.mine.id&&(i.mine=!0),i.system||B(i),G=JSON.parse(JSON.stringify(i)),L.base.voice&&F(),!w&&i.content||l===-1){if(L.message[i.type+i.id])L.message[i.type+i.id].push(i);else if(L.message[i.type+i.id]=[i],"friend"===i.type){var s;layui.each(L.friend,function(a,e){if(layui.each(e.list,function(a,e){if(e.id==i.id)return e.type="friend",e.name=e.username,L.chat.push(e),s=!0}),s)return!0}),s||(i.name=i.username,i.temporary=!0,L.chat.push(i))}else if("group"===i.type){var o;layui.each(L.group,function(a,e){if(e.id==i.id)return e.type="group",e.name=e.groupname,L.chat.push(e),o=!0}),o||(i.name=i.groupname,L.chat.push(i))}else i.name=i.name||i.username||i.groupname,L.chat.push(i);if("group"===i.type&&layui.each(L.group,function(a,e){if(e.id==i.id)return t.avatar=e.avatar,!0}),!i.system)return L.base.notice&&J({title:"来自 "+i.username+" 的消息",content:i.content,avatar:t.avatar||i.avatar}),M({name:"收到新消息",avatar:t.avatar||i.avatar,anim:6})}if(w){var d=R();d.data.type+d.data.id!==i.type+i.id&&(a.addClass("layui-anim layer-anim-06"),setTimeout(function(){a.removeClass("layui-anim layer-anim-06")},300));var r=w.find(".layim-chat").eq(l),c=r.find(".layim-chat-main ul");i.system?l!==-1&&c.append('
      • '+i.content+"
      • "):""!==i.content.replace(/\s/g,"")&&c.append(n(h).render(i)),Z()}},Y="layui-anim-loop layer-anim-05",V=function(i){var a=x.find(".layim-tool-msgbox");a.find("span").addClass(Y).html(i)},B=function(i){var a=layui.data("layim")[L.mine.id]||{};a.chatlog=a.chatlog||{};var e=a.chatlog[i.type+i.id];if(e){var t;layui.each(e,function(a,e){e.timestamp===i.timestamp&&e.type===i.type&&e.id===i.id&&e.content===i.content&&(t=!0)}),t||i.fromid==L.mine.id||e.push(i),e.length>d&&e.shift()}else a.chatlog[i.type+i.id]=[i];layui.data("layim",{key:L.mine.id,value:a})},U=function(){var i=layui.data("layim")[L.mine.id]||{},a=R(),e=i.chatlog||{},t=a.elem.find(".layim-chat-main ul");layui.each(e[a.data.type+a.data.id],function(i,a){t.append(n(h).render(a))}),Z()},P=function(i){var a,e={},l=x.find(".layim-list-"+i.type);if(L[i.type])if("friend"===i.type)layui.each(L.friend,function(n,l){if(i.groupid==l.id)return layui.each(L.friend[n].list,function(e,t){if(t.id==i.id)return a=!0}),a?t.msg("好友 ["+(i.username||"")+"] 已经存在列表中",{anim:6}):(L.friend[n].list=L.friend[n].list||[],e[L.friend[n].list.length]=i,i.groupIndex=n,L.friend[n].list.push(i),!0)});else if("group"===i.type){if(layui.each(L.group,function(e,t){if(t.id==i.id)return a=!0}),a)return t.msg("您已是 ["+(i.groupname||"")+"] 的群成员",{anim:6});e[L.group.length]=i,L.group.push(i)}if(!a){var s=n(u({type:i.type,item:"d.data",index:"friend"===i.type?"data.groupIndex":null})).render({data:e});if("friend"===i.type){var o=l.find(">li").eq(i.groupIndex);o.find(".layui-layim-list").append(s),o.find(".layim-count").html(L.friend[i.groupIndex].list.length),o.find(".layim-null")[0]&&o.find(".layim-null").remove()}else"group"===i.type&&(l.append(s),l.find(".layim-null")[0]&&l.find(".layim-null").remove())}},W=function(i){var a=x.find(".layim-list-"+i.type);L[i.type]&&("friend"===i.type?layui.each(L.friend,function(e,t){layui.each(t.list,function(t,n){if(i.id==n.id){var l=a.find(">li").eq(e);l.find(".layui-layim-list>li");return l.find(".layui-layim-list>li").eq(t).remove(),L.friend[e].list.splice(t,1),l.find(".layim-count").html(L.friend[e].list.length),0===L.friend[e].list.length&&l.find(".layui-layim-list").html('
      • 该分组下已无好友了
      • '),!0}})}):"group"===i.type&&layui.each(L.group,function(e,t){if(i.id==t.id)return a.find(">li").eq(e).remove(),L.group.splice(e,1),0===L.group.length&&a.html('
      • 暂无群组
      • '),!0}))},Z=function(){var i=R(),a=i.elem.find(".layim-chat-main"),e=a.find("ul"),t=e.find("li").length;if(t>=d){var n=e.find("li").eq(0);e.prev().hasClass("layim-chat-system")||e.before('
        查看更多记录
        '),t>d&&n.remove()}a.scrollTop(a[0].scrollHeight+1e3),a.find("ul li:last").find("img").load(function(){a.scrollTop(a[0].scrollHeight+1e3)})},Q=function(){var i=R(),a=i.textarea;a.focus(),a.off("keydown").on("keydown",function(i){var e=layui.data("layim")[L.mine.id]||{},t=i.keyCode;if("Ctrl+Enter"===e.sendHotKey)return void(i.ctrlKey&&13===t&&D());if(13===t){if(i.ctrlKey)return a.val(a.val()+"\n");if(i.shiftKey)return;i.preventDefault(),D()}})},X=function(){var i=["[微笑]","[嘻嘻]","[哈哈]","[可爱]","[可怜]","[挖鼻]","[吃惊]","[害羞]","[挤眼]","[闭嘴]","[鄙视]","[爱你]","[泪]","[偷笑]","[亲亲]","[生病]","[太开心]","[白眼]","[右哼哼]","[左哼哼]","[嘘]","[衰]","[委屈]","[吐]","[哈欠]","[抱抱]","[怒]","[疑问]","[馋嘴]","[拜拜]","[思考]","[汗]","[困]","[睡]","[钱]","[失望]","[酷]","[色]","[哼]","[鼓掌]","[晕]","[悲伤]","[抓狂]","[黑线]","[阴险]","[怒骂]","[互粉]","[心]","[伤心]","[猪头]","[熊猫]","[兔子]","[ok]","[耶]","[good]","[NO]","[赞]","[来]","[弱]","[草泥马]","[神马]","[囧]","[浮云]","[给力]","[围观]","[威武]","[奥特曼]","[礼物]","[钟]","[话筒]","[蜡烛]","[蛋糕]"],a={};return layui.each(i,function(i,e){a[e]=layui.cache.dir+"images/face/"+i+".gif"}),a}(),ii=layui.stope,ai=function(i,a){var e,t=i.value;i.focus(),document.selection?(e=document.selection.createRange(),document.selection.empty(),e.text=a):(e=[t.substring(0,i.selectionStart),a,t.substr(i.selectionEnd)],i.focus(),i.value=e.join(""))},ei="layui-anim-upbit",ti={status:function(i,a){var t=function(){i.next().hide().removeClass(ei)},n=i.attr("lay-type");if("show"===n)ii(a),i.next().show().addClass(ei),e(document).off("click",t).on("click",t);else{var l=i.parent().prev();i.addClass(o).siblings().removeClass(o),l.html(i.find("cite").html()),l.removeClass("layim-status-"+("online"===n?"hide":"online")).addClass("layim-status-"+n),layui.each(r.online,function(i,a){a&&a(n)})}},sign:function(){var i=x.find(".layui-layim-remark");i.on("change",function(){var i=this.value;layui.each(r.sign,function(a,e){e&&e(i)})}),i.on("keyup",function(i){var a=i.keyCode;13===a&&this.blur()})},tab:function(i){var a,e=".layim-tab-content",t=x.find(".layui-layim-tab>li");"number"==typeof i?(a=i,i=t.eq(a)):a=i.index(),a>2?t.removeClass(o):(ti.tab.index=a,i.addClass(o).siblings().removeClass(o)),x.find(e).eq(a).addClass(s).siblings(e).removeClass(s)},spread:function(i){var a=i.attr("lay-type"),e="true"===a?"false":"true",t=layui.data("layim")[L.mine.id]||{};i.next()["true"===a?"removeClass":"addClass"](s),t["spread"+i.parent().index()]=e,layui.data("layim",{key:L.mine.id,value:t}),i.attr("lay-type",e),i.find(".layui-icon").html("true"===e?"":"")},search:function(i){var a=x.find(".layui-layim-search"),e=x.find("#layui-layim-search"),t=a.find("input"),n=function(i){var a=t.val().replace(/\s/);if(""===a)ti.tab(0|ti.tab.index);else{for(var n=[],l=L.friend||[],s=L.group||[],o="",d=0;d0)for(var u=0;u'+(n[u].username||n[u].groupname||"佚名")+"

        "+(n[u].remark||n[u].sign||"")+"

        ";else o='
      • 无搜索结果
      • ';e.html(o),ti.tab(3)}};!L.base.isfriend&&L.base.isgroup?ti.tab.index=1:L.base.isfriend||L.base.isgroup||(ti.tab.index=2),a.show(),t.focus(),t.off("keyup",n).on("keyup",n)},closeSearch:function(i){i.parent().hide(),ti.tab(0|ti.tab.index)},msgbox:function(){var i=x.find(".layim-tool-msgbox");return t.close(ti.msgbox.index),i.find("span").removeClass(Y).html(""),ti.msgbox.index=t.open({type:2,title:"消息盒子",shade:!1,maxmin:!0,area:["600px","520px"],skin:"layui-box layui-layer-border",resize:!1,content:L.base.msgbox})},find:function(){return t.close(ti.find.index),ti.find.index=t.open({type:2,title:"查找",shade:!1,maxmin:!0,area:["1000px","520px"],skin:"layui-box layui-layer-border",resize:!1,content:L.base.find})},skin:function(){t.open({type:1,title:"更换背景",shade:!1,area:"300px",skin:"layui-box layui-layer-border",id:"layui-layim-skin",zIndex:66666666,resize:!1,content:n(m).render({skin:L.base.skin})})},about:function(){t.alert("版本: "+a+"
        版权所有:© LayIM",{title:"关于 LayIM",shade:!1})},setSkin:function(i){var a=i.attr("src"),e=layui.data("layim")[L.mine.id]||{};e.skin=a,a||delete e.skin,layui.data("layim",{key:L.mine.id,value:e});try{x.css({"background-image":a?"url("+a+")":"none"}),w.css({"background-image":a?"url("+a+")":"none"})}catch(t){}layui.each(r.setSkin,function(i,e){var t=(a||"").replace(layui.cache.dir+"css/modules/layim/skin/","");e&&e(t,a)})},chat:function(i){var a=layui.data("layim")[L.mine.id]||{},e=i.data("type"),t=i.data("index"),n=i.attr("data-list")||i.index(),l={};"friend"===e?l=L[e][t].list[n]:"group"===e?l=L[e][n]:"history"===e&&(l=(a.history||{})[t]||{}),l.name=l.name||l.username||l.groupname,"history"!==e&&(l.type=e),T(l)},tabChat:function(i){O(i)},closeChat:function(i,a){O(i.parent(),1),ii(a)},closeThisChat:function(){O(null,1)},groupMembers:function(i,a){var n=i.find(".layui-icon"),l=function(){n.html(""),i.data("down",null),t.close(ti.groupMembers.index)},s=function(i){ii(i)};i.data("down")?l():(n.html(""),i.data("down",!0),ti.groupMembers.index=t.tips('
          ',i,{tips:3,time:0,anim:5,fixed:!0,skin:"layui-box layui-layim-members",success:function(a){var t=L.base.members||{},n=R(),s=a.find(".layim-members-list"),o="",d={},c=w.find(".layui-layer-max").hasClass("layui-layer-maxmin"),u="none"===w.find(".layim-chat-list").css("display");c&&s.css({width:e(window).width()-22-(u||200)}),t.data=e.extend(t.data,{id:n.data.id}),S(t,function(a){layui.each(a.list,function(i,a){o+='
        • '+a.username+"
        • ",d[a.id]=a}),s.html(o),i.find(".layim-chat-members").html(a.members||(a.list||[]).length+"人"),s.find("li").on("click",function(){var i=e(this).data("uid"),a=d[i];T({name:a.username,type:"friend",avatar:a.avatar,id:a.id}),l()}),layui.each(r.members,function(i,e){e&&e(a)})}),a.on("mousedown",function(i){ii(i)})}}),e(document).off("mousedown",l).on("mousedown",l),e(window).off("resize",l).on("resize",l),i.off("mousedown",s).on("mousedown",s))},send:function(){D()},setSend:function(i,a){var t=ti.setSend.box=i.siblings(".layim-menu-box"),n=i.attr("lay-type");if("show"===n)ii(a),t.show().addClass(ei),e(document).off("click",ti.setSendHide).on("click",ti.setSendHide);else{i.addClass(o).siblings().removeClass(o);var l=layui.data("layim")[L.mine.id]||{};l.sendHotKey=n,layui.data("layim",{key:L.mine.id,value:l}),ti.setSendHide(a,i.parent())}},setSendHide:function(i,a){(a||ti.setSend.box).hide().removeClass(ei)},face:function(i,a){var n="",l=R();for(var s in X)n+='
        • ';n='
            '+n+"
          ",ti.face.index=t.tips(n,i,{tips:1,time:0,fixed:!0,skin:"layui-box layui-layim-face",success:function(i){i.find(".layim-face-list>li").on("mousedown",function(i){ii(i)}).on("click",function(){ai(l.textarea[0],"face"+this.title+" "),t.close(ti.face.index)})}}),e(document).off("mousedown",ti.faceHide).on("mousedown",ti.faceHide), +e(window).off("resize",ti.faceHide).on("resize",ti.faceHide),ii(a)},faceHide:function(){t.close(ti.face.index)},image:function(i){var a=i.data("type")||"images",e={images:"uploadImage",file:"uploadFile"},n=R(),l=L.base[e[a]]||{};layui.upload.render({url:l.url||"",method:l.type,elem:i.find("input")[0],accept:a,done:function(i){0==i.code?(i.data=i.data||{},"images"===a?ai(n.textarea[0],"img["+(i.data.src||"")+"]"):"file"===a&&ai(n.textarea[0],"file("+(i.data.src||"")+")["+(i.data.name||"下载文件")+"]"),D()):t.msg(i.msg||"上传失败")}})},media:function(i){var a=i.data("type"),n={audio:"音频",video:"视频"},l=R();t.prompt({title:"请输入网络"+n[a]+"地址",shade:!1,offset:[i.offset().top-e(window).scrollTop()-158+"px",i.offset().left+"px"]},function(i,e){ai(l.textarea[0],a+"["+i+"]"),D(),t.close(e)})},extend:function(i){var a=i.attr("lay-filter"),e=R();layui.each(r["tool("+a+")"],function(a,t){t&&t.call(i,function(i){ai(e.textarea[0],i)},D,e)})},playAudio:function(i){var a=i.data("audio"),e=a||document.createElement("audio"),n=function(){e.pause(),i.removeAttr("status"),i.find("i").html("")};return i.data("error")?t.msg("播放音频源异常"):e.play?void(i.attr("status")?n():(a||(e.src=i.data("src")),e.play(),i.attr("status","pause"),i.data("audio",e),i.find("i").html(""),e.onended=function(){n()},e.onerror=function(){t.msg("播放音频源异常"),i.data("error",!0),n()})):t.msg("您的浏览器不支持audio")},playVideo:function(i){var a=i.data("src"),e=document.createElement("video");return e.play?(t.close(ti.playVideo.index),void(ti.playVideo.index=t.open({type:1,title:"播放视频",area:["460px","300px"],maxmin:!0,shade:!1,content:'
          '}))):t.msg("您的浏览器不支持video")},chatLog:function(i){var a=R();return L.base.chatLog?(t.close(ti.chatLog.index),ti.chatLog.index=t.open({type:2,maxmin:!0,title:"与 "+a.data.name+" 的聊天记录",area:["450px","100%"],shade:!1,offset:"rb",skin:"layui-box",anim:2,id:"layui-layim-chatlog",content:L.base.chatLog+"?id="+a.data.id+"&type="+a.data.type})):t.msg("未开启更多聊天记录")},menuHistory:function(i,a){var n=layui.data("layim")[L.mine.id]||{},l=i.parent(),s=i.data("type"),o=x.find(".layim-list-history"),d='
        • 暂无历史会话
        • ';if("one"===s){var r=n.history;delete r[l.data("index")],n.history=r,layui.data("layim",{key:L.mine.id,value:n}),e(".layim-list-history li.layim-"+l.data("index")).remove(),0===o.find("li").length&&o.html(d)}else"all"===s&&(delete n.history,layui.data("layim",{key:L.mine.id,value:n}),o.html(d));t.closeAll("tips")}};i("layim",new c)}).addcss("modules/layim/layim.css?v=3.9.5","skinlayimcss"); \ No newline at end of file diff --git a/public/static/web/css/common.css b/public/static/web/css/common.css index e406076a..182fb03c 100644 --- a/public/static/web/css/common.css +++ b/public/static/web/css/common.css @@ -106,7 +106,7 @@ body { .layout-content { float: left; - width: 760px; + width: 800px; } .layout-sidebar { @@ -250,11 +250,17 @@ body { width: 210px; height: 118px; margin-bottom: 10px; + overflow: hidden; } .course-card .cover img { width: 100%; height: 100%; + transition: all 0.6s; +} + +.course-card .cover img:hover { + transform: scale(1.2); } .course-card .title { @@ -273,6 +279,10 @@ body { margin-right: 10px; } +.course-card .meta span:last-child { + margin-right: 0; +} + .course-card .price { color: red; } @@ -839,4 +849,187 @@ body { .login-container .link .separator { margin: 0 15px; color: #999; +} + +.user-profile { + position: relative; +} + +.user-profile .avatar { + float: left; + margin-right: 30px; +} + +.user-profile .avatar img { + width: 96px; + height: 96px; + border-radius: 100px; +} + +.user-profile .vip-icon { + color: orange; +} + +.user-profile .info { + float: left; +} + +.user-profile .info h3 { + padding-top: 5px; + margin-bottom: 10px; +} + +.user-profile .info p { + margin-bottom: 10px; + color: #666; +} + +.user-profile .info span { + color: #999; + margin-right: 5px; +} + +.user-profile .about { + position: absolute; + top: 25px; + right: 20px; + width: 400px; + height: 70px; + padding: 10px; + color: #999; + font-size: 12px; + background-color: #f2f2f2; +} + +.user-tab { + margin: 0; +} + +.user-tab .layui-tab-title { + text-align: center; + border-bottom: none; +} + +.user-tab .layui-tab-content { + padding: 25px 0; +} + +.user-tab .loading { + text-align: center; + padding: 15px; +} + +.user-tab .loading .layui-icon { + font-size: 30px; +} + +.learning-course-card { + height: 230px; +} + +.learning-course-card .progress { + width: 210px; + padding: 15px 0; +} + +.learning-course-card .duration { + font-size: 12px; + color: #666; +} + +.teacher-card { + float: left; + width: 203px; + height: 200px; + margin-right: 25px; + margin-bottom: 25px; + text-align: center; + background-color: #fff; + border-radius: 2px; + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); +} + +.teacher-card .avatar { + margin-top: 20px; + margin-bottom: 10px; +} + +.teacher-card .avatar img { + width: 96px; + height: 96px; + border-radius: 100px; + transition: 0.5s; +} + +.teacher-card .avatar img:hover { + transform: rotateY(180deg); +} + +.teacher-card .name { + margin-bottom: 10px; +} + +.teacher-card .title { + margin-bottom: 10px; + color: #666; + font-size: 12px; +} + +.my-profile-card { + text-align: center; +} + +.my-profile-card .avatar { + margin-bottom: 10px; +} + +.my-profile-card .avatar img { + width: 96px; + height: 96px; + border-radius: 100px; +} + +.my-profile-card .name { + margin-bottom: 10px; +} + +.my-menu li { + line-height: 30px; +} + +.my-nav-title { + font-size: 16px; + padding-bottom: 15px; + margin-bottom: 30px; + border-bottom: 1px solid #e6e6e6; +} + +.my-form { + width: 95%; +} + +.security-item { + padding: 15px; + line-height: 50px; + border-bottom: 1px dashed #ccc; +} + +.security-item:last-child { + border-bottom: none; +} + +.security-item .icon { + margin-right: 15px; +} + +.security-item .title { + margin-right: 15px; +} + +.security-item .summary { + color: #666; +} + +.security-item .action { + float: right; } \ No newline at end of file diff --git a/public/static/web/js/common.js b/public/static/web/js/common.js index e751748d..bf34ccf1 100644 --- a/public/static/web/js/common.js +++ b/public/static/web/js/common.js @@ -28,6 +28,7 @@ helper.ajaxLoadHtml = function (url, target) { $target.html(html); $.get(url, function (html) { $target.html(html); + element.init(); }); }