跳到主要内容

公共组件与样式

RCUIKit/components 提供多个页面共用的基础 UI,RCUIKit/styles 管理公共基础样式和主题变量。需要统一修改多个页面的外观时,应优先从这些目录定位。

公共组件

导航栏

源码:RCUIKit/components/nav-bar.vue

导航栏负责状态栏占位、左中右布局和底部边框。主要属性如下:

属性作用
title中间标题
leftTextrightText左右文字
leftIconrightIcon左右图标类型
statusBar是否包含状态栏高度
border是否显示底部分隔线
height导航栏高度
leftWidthrightWidth左右区域宽度
fixed是否为固定导航栏

组件提供 left、默认和 right 插槽,并触发 clickLeftclickTitleclickRight 事件。只修改单个页面标题或操作按钮时,优先在页面中配置属性和插槽;需要统一改变高度、布局或状态栏处理时,再修改该组件。

头像

源码:RCUIKit/components/avatar.vue

头像组件基于 rc-icon.vue 展示图片,支持 srcsizeborderRadiusdefaultSrcclickable。未传入 src 时使用默认群组头像。

修改建议:

  • 调整单个场景的头像大小时,在调用处修改 size
  • 调整圆角时传入 borderRadius;组件内部仍以圆形图片模式渲染,若要统一改为非圆形头像,需要同步检查 rc-icon.vuecircle 使用方式。
  • 会话列表会根据会话类型,通过 utils/index.ts 中的 generateDefaultAvatar 选择用户、群组或系统默认头像,不只依赖 avatar.vue 的默认值。

徽标

源码:RCUIKit/components/badge.vue

徽标仅在 count > 0 时显示,支持 countmaxcolorbgColor。超过 max 后显示“上限+”,默认上限为 99

若只需要调整免打扰会话的未读颜色,应修改 conversation-item.vue 中传给 bgColor 的规则;如果要改变所有徽标的尺寸、圆角或默认颜色,再修改 badge.vue

图标

源码:

text
RCUIKit/components/rc-icon.vue
RCUIKit/assets/icon/
RCUIKit/assets/index.ts

rc-icon.vue 支持通过 type 使用内置图标,或通过 src 直接传入资源,并支持 sizeclickablemodespincirclecustomStyle

新增内置图标时,需要:

  1. 将 SVG 文件放入 assets/icon/
  2. assets/index.ts 中导入并转换资源。
  3. 将图标加入 iconType 映射。
  4. 在页面或组件中通过 <rc-icon type="图标名称" /> 使用。
备注

rc-icon.vue 已预留暗色主题说明,但当前 iconSrc 只按 type 读取单一资源映射。若要支持暗色图标,需要补充主题状态和资源选择逻辑。

长按菜单

源码:RCUIKit/components/long-press-popup.vue

长按菜单接收 optionsmarginpositiondisabled

  • options 中的 type 对应图标类型,label 对应菜单文字。
  • position="auto" 在目标元素上下方自动选择位置。
  • position="touch" 跟随触点,会话列表使用此模式。
  • 用户选择后触发 select,菜单显隐变化时触发 showStatusChange

该组件包含 App、H5、微信小程序和抖音小程序的定位差异,并且为兼容小程序使用选项式 API。修改定位、遮罩或触摸事件后,应分别验证目标平台,不要直接改写为组合式 API。

主题变量

源码:RCUIKit/styles/_variables.scss

该文件集中定义 RCUIKit 使用的字体、间距和颜色变量:

变量类别示例影响范围
字号$rc-font-size-base$rc-font-size-regular$rc-font-size-large会话项、消息、导航标题等
会话间距$rc-conversation-margin-base会话项内部间距
主色和链接色$rc-color-primary$rc-color-functional-link选中态、链接和主要操作
文字颜色$rc-color-font-primary$rc-color-font-secondary$rc-color-font-accent主文字、摘要和提示文字
背景颜色$rc-color-bg-regular$rc-color-bg-top$rc-color-bg-selected页面、置顶和长按状态
功能颜色$rc-color-functional-hint$rc-color-functional-border$rc-color-functional-error未读提示、边框和错误状态

各 Vue 组件通过以下方式使用变量:

scss
@use '../styles/_variables.scss' as var;

.example {
color: var.$rc-color-font-primary;
}

修改 _variables.scss 前,建议先搜索变量的全部引用,确认影响范围。组件内仍存在少量直接写入的颜色,例如徽标默认色和长按菜单背景色;如需完整主题化,还需要同步调整这些组件。

common.scss 的职责

源码:RCUIKit/styles/common.scss

common.scss 负责重置常见元素的外边距和内边距、设置默认字体,并约束应用根容器高度。多数路由页面通过 @use '../../styles/common.scss'; 引入它,宿主项目还需要按快速上手中的方式在 App.vue 中导入该文件。

警告

颜色、字号和组件外观不要直接写入 common.scss。全局设计变量应修改 _variables.scss,具体组件外观应修改对应 .vue 文件。扩大 common.scss 的选择器范围可能影响宿主项目的全局样式。

修改与升级建议

  • 先确定修改范围:单一页面改调用处,多个页面统一行为改公共组件,全局视觉改 _variables.scss
  • 保留 uni-app 条件编译块,尤其是状态栏、固定定位和触摸事件相关逻辑。
  • 修改后至少验证会话列表、聊天页、转发页、视频播放页和阅读状态页,公共组件改动可能同时影响这 5 个路由页面。
  • RCUIKit 为源码集成,升级覆盖目录前应保存本地差异,并在新版本中重新合并。