基础组件
目录
- 简介
- 项目结构
- 核心组件概览
- BaseInput 组件详解
- BaseConfigSelect 组件详解
- BaseConfigProvider 配置提供者
- 组件集成架构
- 国际化与多语言支持
- 性能优化策略
- 最佳实践指南
- 故障排除
- 总结
简介
lmes-web-base 是一个专为制造执行系统(MES)设计的基础UI组件库,采用 Vue 3 + TypeScript 技术栈构建。该组件库提供了完整的表单输入、选择器、表格等基础UI组件,支持 Element Plus 和 Arco Design 两大主流UI框架的无缝集成。
本组件库的核心设计理念是:
- 统一性:提供一致的用户体验和视觉风格
- 可扩展性:支持自定义配置和主题定制
- 国际化:内置多语言支持,适应全球化需求
- 无障碍访问:遵循 WCAG 标准,确保可访问性
- 高性能:优化的渲染机制和内存管理
项目结构
图表来源
章节来源
核心组件概览
组件分类体系
图表来源
主要依赖关系
图表来源
章节来源
BaseInput 组件详解
设计理念与封装机制
BaseInput 是一个高度封装的基础输入组件,它在 Element Plus 的 el-input 基础上进行了深度定制,提供了更丰富的交互能力和更好的用户体验。
核心特性
- 双向绑定支持:通过 v-model 实现数据的双向绑定
- 事件冒泡控制:智能的事件传播管理
- 键盘事件处理:支持 Enter 键触发特定事件
- 国际化适配:自动翻译占位符文本
- 样式隔离:使用 SCSS 模块化避免样式污染
Props 接口 定义
interface BaseInputProps {
modelValue: string | number; // 双向绑定值
placeholder: string; // 输入提示文本
readOnly: boolean; // 只读状态
disabled: boolean; // 禁用状态
LanguageScopeKey: string; // 国际化作用域
onChange: Function; // 值变化回调
onEnter: Function; // Enter键按下回调
}
事件回调机制
图表来源
插槽使用规范
虽然 BaseInput 当前主要作为基础输入组件使用,但其设计预留了插槽扩展能力:
// 插槽定义示例
interface BaseInputSlots {
prefix?: VNode; // 输入框前缀内容
suffix?: VNode; // 输入框后缀内容
prepend?: VNode; // 输入框前置内容
append?: VNode; // 输入框后置内容
}
样式定制方案
BaseInput 使用 SCSS 模块化设计,提供了完整的样式定制能力:
.baseInput {
width: 100%;
height: 100%;
display: flex;
justify-content: flex-start;
align-items: center;
.input {
border-radius: 4px;
padding: 0 6px;
height: calc(100% - 6px);
border: 1px solid transparent;
transition: all 0.1s ease-in;
&:focus {
border: 1px solid #5a84ff;
}
}
}
章节来源
BaseConfigSelect 组件详解
集成 Element Plus 选择器
BaseConfigSelect 是一个专门用于配置语言选项的选择器组件,它集成了 Element Plus 的 el-select 组件并进行了本地化定制。
功能特性
- 动态选项加载:从 API 获取语言配置列表
- 默认选项支持:包含跟随系统和原始文本选项
- 实时语言切换:支持运行时语言环境变更
- 项目级配置:可扩展支持项目级别的配置管理
数据流架构
图表来源
代码实现分析
// 关键方法解析
const getOptions = async () => {
const resp = await request.get('/api/v1/multiplelanguage/languagelist')
const defaultOptions = [
{
id: 0,
languageType: 'auto',
enable: true,
createDateTime: new Date().toDateString(),
name: '跟随系统',
},
{
id: 0,
languageType: 'original',
enable: true,
createDateTime: new Date().toDateString(),
name: '原始文本',
},
]
options.value.push(...defaultOptions, ...resp)
langValue.value = options.value?.[0]?.languageType
}
章节来源
BaseConfigProvider 配置提供者
Element Plus 命名空间配置
BaseConfigProvider 是一个轻量级的配置提供者组件,主要用于设置 Element Plus 组件的命名空间,确保组件在不同项目环境下的正确渲染。
核心功能
- 命名空间注入:自动注入 VITE_APP_NAMESPACE 环境变量
- 配置传递:将配置信息传递给子组件
- 主题一致性:确保整个应用的主题一致性
实现原理
export default defineComponent({
setup(props, { attrs, slots }) {
const namespace = import.meta.env.VITE_APP_NAMESPACE
return () => {
return (
<el-config-provider {...attrs} namespace={namespace}>
{slots.default?.()}
</el-config-provider>
)
}
},
})
章节来源