feat(品牌): 替换 favicon、站内 logo,新增页面底部版权信息条,并修复顶栏头像 fallback

- 替换浏览器 favicon 为小鹏官方 ICO,index.html link 引用同步更新
- 站内 logo 全部替换为横版小鹏 logo (Logo / public-access 两处)
容器统一改为锁高、宽自适应,保持 2:1 比例不被压扁
- 新增 CopyrightFooter 组件,在 AppMain 顶层全局挂载;
主布局补 28px 底部内边距,避免遮挡末行内容
- 修复 UserCenter 头像无 src 时显示空灰圆的问题:
补充默认插槽 + 保留 fallback 插槽,空 / 加载失败两种场景都显示线条小人

Co-Authored-By: Claude <noreply@anthropic.com>
3个文件已添加
6个文件已修改
48 ■■■■■ 已修改文件
index.html 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/favicon.ico 补丁 | 查看 | 原始文档 | blame | 历史
public/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
src/AppMain.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/common/CopyrightFooter.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layouts/components/common/Logo.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layouts/components/header/UserCenter.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layouts/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/build-in/public-access/index.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
index.html
@@ -3,7 +3,7 @@
<head>
  <meta charset="UTF-8" />
  <link rel="icon" href="/favicon.svg" />
  <link rel="icon" href="/favicon.ico" type="image/x-icon" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>RT后台</title>
</head>
public/favicon.ico
public/logo.png
src/AppMain.vue
@@ -52,6 +52,7 @@
    <naive-provider>
      <router-view />
      <Watermark :show-watermark="appStore.showWatermark" />
      <CopyrightFooter />
    </naive-provider>
  </n-config-provider>
</template>
src/components/common/CopyrightFooter.vue
New file
@@ -0,0 +1,29 @@
<script setup lang="ts">
// 全局版权信息底部条:固定在窗口底部
const COPYRIGHT_TEXT = '© 2015-2026 广州小鹏汽车科技有限公司 粤ICP备15067788号'
</script>
<template>
  <div class="copyright-footer">
    {{ COPYRIGHT_TEXT }}
  </div>
</template>
<style scoped>
.copyright-footer {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 9;
  height: 28px;
  line-height: 28px;
  text-align: center;
  font-size: 12px;
  color: rgba(0, 0, 0, 0.45);
  background-color: var(--card-color, #fff);
  border-top: 1px solid rgba(0, 0, 0, 0.06);
  pointer-events: none;
  user-select: none;
}
</style>
src/layouts/components/common/Logo.vue
@@ -19,7 +19,7 @@
<template>
  <div class="h-68px flex-center cursor-pointer gap-2 p-x-2" @click="router.push('/')">
    <img src="/favicon.svg" alt="logo" class="w-24px h-24px" />
    <img src="/logo.png" alt="logo" class="h-24px w-auto" />
    <span v-show="!hidenLogoText" class="text-ellipsis overflow-hidden whitespace-nowrap title">{{ name }}</span>
  </div>
</template>
src/layouts/components/header/UserCenter.vue
@@ -46,6 +46,11 @@
      class="cursor-pointer w-[24px] h-[24px]"
      :src="userInfo?.avatar"
    >
      <!-- 无 avatar 时:走默认插槽 -->
      <div class="wh-full flex-center">
        <icon-park-outline-user />
      </div>
      <!-- avatar 加载失败时:走 fallback 插槽 -->
      <template #fallback>
        <div class="wh-full flex-center">
          <icon-park-outline-user />
src/layouts/index.vue
@@ -67,6 +67,7 @@
    :sidebar-width="sidebarWidth"
    :sidebar-collapsed-width="sidebarCollapsedWidth"
    class="robotaxi-content"
    style="padding-bottom: 28px;"
  >
    <template #logo>
      <Logo />
src/views/build-in/public-access/index.vue
@@ -85,8 +85,8 @@
      <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
        <div class="flex justify-between items-center py-4">
          <div class="flex items-center space-x-4">
            <div class="w-10 h-10 flex items-center justify-center">
              <img src="/favicon.svg" alt="Nova Admin Logo" class="w-10 h-10">
            <div class="h-10 flex items-center justify-center">
              <img src="/logo.png" alt="Nova Admin Logo" class="h-10 w-auto">
            </div>
            <span class="text-2xl font-bold text-gray-900">Nova Admin</span>
          </div>
@@ -447,8 +447,8 @@
        <div class="grid md:grid-cols-4 gap-8">
          <div>
            <div class="flex items-center space-x-2 mb-4">
              <div class="w-10 h-10 flex items-center justify-center">
                <img src="/favicon.svg" alt="Nova Admin Logo" class="w-8 h-8">
              <div class="h-8 flex items-center justify-center">
                <img src="/logo.png" alt="Nova Admin Logo" class="h-8 w-auto">
              </div>
              <span class="text-xl font-bold text-white">Nova Admin</span>
            </div>