m0_70156489 3 dagen geleden
bovenliggende
commit
256767f870

+ 1 - 1
application/admin/controller/Index.php

@@ -104,7 +104,7 @@ class Index extends Backend
             $result = $this->auth->login($username, $password, $keeptime);
             if ($result === true) {
                 Hook::listen("admin_login_after", $this->request);
-                $this->success(__('Login successful'), $url, ['url' => $url, 'id' => $this->auth->id, 'username' => $username, 'avatar' => $this->auth->avatar]);
+                $this->success(__('Login successful'), $url, ['url' => $url, 'id' => $this->auth->id, 'username' => $username, 'avatar' => resolve_admin_avatar($this->auth->avatar)]);
             } else {
                 $msg = $this->auth->getError();
                 $msg = $msg ? $msg : __('Username or password is incorrect');

+ 1 - 1
application/admin/controller/auth/Admin.php

@@ -130,7 +130,7 @@ class Admin extends Backend
                     }
                     $params['salt'] = Random::alnum();
                     $params['password'] = $this->auth->getEncryptPassword($params['password'], $params['salt']);
-                    $params['avatar'] = '/assets/img/avatar.png'; //设置新管理员默认头像。
+                    $params['avatar'] = '';
                     $result = $this->model->validate('Admin.add')->save($params);
                     if ($result === false) {
                         exception($this->model->getError());

+ 2 - 2
application/admin/view/common/header.html

@@ -74,13 +74,13 @@
                 <!-- 账号信息下拉框 -->
                 <li class="dropdown user user-menu">
                     <a href="#" class="dropdown-toggle" data-toggle="dropdown">
-                        <img src="{$admin.avatar|cdnurl|htmlentities}" class="user-image" alt="">
+                        <img src="{$admin.avatar|cdnurl|htmlentities}" class="user-image{if $admin.avatar_is_default} is-brand-logo-avatar-img{/if}" alt="">
                         <span class="hidden-xs">{$admin.nickname|htmlentities}</span>
                     </a>
                     <ul class="dropdown-menu">
                         <!-- User image -->
                         <li class="user-header">
-                            <img src="{$admin.avatar|cdnurl|htmlentities}" class="img-circle" alt="">
+                            <img src="{$admin.avatar|cdnurl|htmlentities}" class="img-circle{if $admin.avatar_is_default} is-brand-logo-avatar-img{/if}" alt="">
 
                             <p>
                                 {$admin.nickname|htmlentities}

+ 2 - 2
application/admin/view/common/menu.html

@@ -2,8 +2,8 @@
 <section class="sidebar">
     <!-- 管理员信息 -->
     <div class="user-panel hidden-xs">
-        <div class="pull-left image">
-            <img src="{$admin.avatar|cdnurl|htmlentities}" class="img-circle" alt="" />
+        <div class="pull-left image{if $admin.avatar_is_default} is-brand-logo-avatar{/if}">
+            <img src="{$admin.avatar|cdnurl|htmlentities}" class="img-circle{if $admin.avatar_is_default} is-brand-logo-avatar-img{/if}" alt="" />
         </div>
         <div class="pull-left info">
             <p>{$admin.nickname|htmlentities}</p>

+ 1 - 1
application/admin/view/general/profile/index.html

@@ -47,7 +47,7 @@
 
                 <form id="update-form" role="form" data-toggle="validator" method="POST" action="{:url('general.profile/update')}">
                     {:token()}
-                    <input type="hidden" id="c-avatar" name="row[avatar]" value="{$admin.avatar|htmlentities}"/>
+                    <input type="hidden" id="c-avatar" name="row[avatar]" value="{$admin.avatar_raw|default=''|htmlentities}"/>
                     <div class="box-body box-profile">
 
                         <div class="profile-avatar-container">

+ 49 - 0
application/common.php

@@ -97,6 +97,55 @@ if (!function_exists('mask_phone')) {
     }
 }
 
+if (!function_exists('default_admin_avatar_url')) {
+
+    /**
+     * 后台管理员默认头像(站点品牌 Logo)
+     */
+    function default_admin_avatar_url(): string
+    {
+        $url = \think\Config::get('site.brand_logo');
+        $url = trim((string)$url);
+
+        return $url !== '' ? $url : 'https://a-7in6-com.oss-cn-hangzhou.aliyuncs.com/xinhua/img/logo1.png';
+    }
+}
+
+if (!function_exists('is_default_admin_avatar')) {
+
+    /**
+     * 是否为系统默认头像(未上传自定义头像)
+     */
+    function is_default_admin_avatar($avatar): bool
+    {
+        $avatar = trim((string)$avatar);
+        if ($avatar === '') {
+            return true;
+        }
+        if ($avatar === default_admin_avatar_url()) {
+            return true;
+        }
+        if (preg_match('#/assets/img/avatar\.png(?:\?.*)?$#i', $avatar)) {
+            return true;
+        }
+
+        return in_array($avatar, ['/assets/img/avatar.png', 'assets/img/avatar.png'], true);
+    }
+}
+
+if (!function_exists('resolve_admin_avatar')) {
+
+    /**
+     * 展示用管理员头像:未上传自定义头像时用默认 Logo
+     */
+    function resolve_admin_avatar($avatar): string
+    {
+        $avatar = trim((string)$avatar);
+
+        return is_default_admin_avatar($avatar) ? default_admin_avatar_url() : $avatar;
+    }
+}
+
 if (!function_exists('format_bytes')) {
 
     /**

+ 5 - 4
application/common/controller/Backend.php

@@ -237,11 +237,12 @@ class Backend extends Controller
         $this->assign('config', $config);
         //渲染权限对象
         $this->assign('auth', $this->auth);
-        //渲染管理员对象(头像固定使用站点品牌 Logo)
+        //渲染管理员对象(无自定义头像时使用站点品牌 Logo)
         $admin = Session::get('admin');
-        $brandLogo = Config::get('site.brand_logo');
-        if (is_array($admin) && $brandLogo) {
-            $admin['avatar'] = $brandLogo;
+        if (is_array($admin)) {
+            $admin['avatar_raw'] = $admin['avatar'] ?? '';
+            $admin['avatar_is_default'] = is_default_admin_avatar($admin['avatar_raw']) ? 1 : 0;
+            $admin['avatar'] = resolve_admin_avatar($admin['avatar_raw']);
         }
         $this->assign('admin', $admin);
     }

+ 16 - 0
public/assets/css/backend.css

@@ -524,6 +524,10 @@ form.form-horizontal .control-label {
   border-radius: 50%;
   cursor: default;
   pointer-events: none;
+  background-color: #222d32;
+}
+.user-panel > .image.is-brand-logo-avatar {
+  background-color: #222d32;
 }
 .user-panel > .image img {
   display: block;
@@ -533,6 +537,18 @@ form.form-horizontal .control-label {
   object-fit: cover;
   object-position: center;
 }
+.user-panel > .image img.is-brand-logo-avatar-img,
+.main-header .user-image.is-brand-logo-avatar-img,
+.user-header img.is-brand-logo-avatar-img {
+  transform: scale(1.14);
+  object-fit: cover;
+  object-position: center;
+}
+.main-header .user-image.is-brand-logo-avatar-img {
+  background-color: #222d32;
+  border-radius: 50%;
+  overflow: hidden;
+}
 .user-panel > .info {
   cursor: default;
   pointer-events: none;