Skip to content

全局配置 ConfigProvider

Birdpaper UI 通过 ConfigProvider 提供全局配置能力,支持自定义组件前缀、命名空间、国际化、尺寸、层级等参数,所有子组件会自动继承全局配置。

基本用法

安装时配置

app.use() 时传入配置对象,所有组件会自动注册并注入全局配置:

ts
import { createApp } from "vue";
import BirdpaperUI from "birdpaper-ui";
import "birdpaper-ui/theme/index.css";

const app = createApp(App);

app.use(BirdpaperUI, {
  prefix: "Bp", // 组件注册前缀
  namespace: "bp", // CSS 命名空间
  locale: "zh-CN", // 语言
  size: "default", // 全局尺寸
  zIndex: 2000, // 层级基准值
  emptyText: "暂无数据", // 空状态文案
});

运行时配置

在 setup 中调用 provideGlobalConfig,可动态修改全局配置:

vue
<script setup>
import { provideGlobalConfig } from "birdpaper-ui";

provideGlobalConfig({
  locale: "en",
  size: "small",
});
</script>

配置项

属性类型默认值说明
prefixstring"Bp"组件全局注册名称前缀。设为 "My" 后,Button 注册为 <MyButton>
namespacestring"bp"CSS 类名命名空间,影响所有组件的 BEM 类名前缀(如 bp-button
localestring"zh-CN"全局语言代码,影响 DatePicker、TimePicker、Pagination 等组件的内部文案
sizeComponentSize"default"全局默认尺寸,影响 Input、Select、Button 等表单类组件。可选值:"mini" / "small" / "default" / "large"
zIndexnumber2000弹出层组件(Modal、Drawer、Tooltip、Message)的 z-index 基准值
emptyTextstring"暂无数据"Table、Select 等组件的空状态默认文案

ComponentSize 类型

ts
type ComponentSize = "mini" | "small" | "default" | "large";
高度字号适用场景
mini22px12px紧凑型表格内嵌、标签栏
small28px13px密度较高的表单、弹窗内
default32px14px通用场景(默认)
large36px14px突出展示、独立表单页

配置优先级

组件自身 prop 始终优先于全局配置:

组件 prop > ConfigProvider 全局配置 > 组件默认值
vue
<template>
  <!-- 全局设为 small -->
  <bp-config-provider :config="{ size: 'small' }">
    <!-- ✅ 使用 small(继承全局) -->
    <bp-input placeholder="继承全局尺寸" />

    <!-- ✅ 使用 large(prop 优先) -->
    <bp-input size="large" placeholder="局部覆盖" />
  </bp-config-provider>
</template>

命名空间

修改 namespace 可自定义所有组件的 CSS 类名前缀,适用于多组件库共存避免样式冲突:

ts
app.use(BirdpaperUI, { namespace: "my-ui" });
html
<!-- 默认输出 -->
<button class="bp-button">...</button>

<!-- 自定义后 -->
<button class="my-ui-button">...</button>

组件注册前缀

修改 prefix 可自定义全局注册的组件名称:

ts
app.use(BirdpaperUI, { prefix: "My" });
html
<!-- 默认 -->
<BpButton>Click</BpButton>

<!-- 自定义后 -->
<MyButton>Click</MyButton>

z-index 管理

当页面中同时存在多个弹出层组件时,可通过 zIndex 统一管理层级关系:

ts
app.use(BirdpaperUI, { zIndex: 3000 });

各组件基于基准值的偏移:

组件z-index 计算
ModalzIndex
DrawerzIndex + 1
TooltipzIndex
MessagezIndex + 3

在组件中消费全局配置

组件开发者可通过 useGlobalConfig 获取全局配置:

vue
<script setup>
import { useGlobalConfig } from "@birdpaper-ui/hooks";

const { size, locale, zIndex, emptyText } = useGlobalConfig();

// 组件 prop 优先,回退到全局值
const finalSize = computed(() => props.size || size.value);
</script>

TypeScript

ts
import type { ConfigProviderContext, ComponentSize } from "birdpaper-ui";

const config: ConfigProviderContext = {
  prefix: "Bp",
  namespace: "bp",
  locale: "zh-CN",
  size: "default",
  zIndex: 2000,
  emptyText: "暂无数据",
};

所有配置项均为可选,未设置的项使用默认值。