跳到主要内容
版本:Next

基础组件

目录​

  1. 简介
  2. 项目结构
  3. 核心组件概览
  4. BaseInput 组件详解
  5. BaseConfigSelect 组件详解
  6. BaseConfigProvider 配置提供者
  7. 组件集成架构
  8. 国际化与多语言支持
  9. 性能优化策略
  10. 最佳实践指南
  11. 故障排除
  12. 总结

简介​

lmes-web-base 是一个专为制造执行系统(MES)设计的基础UI组件库,采用 Vue 3 + TypeScript 技术栈构建。该组件库提供了完整的表单输入、选择器、表格等基础UI组件,支持 Element Plus 和 Arco Design 两大主流UI框架的无缝集成。

本组件库的核心设计理念是:

  • 统一性:提供一致的用户体验和视觉风格
  • 可扩展性:支持自定义配置和主题定制
  • 国际化:内置多语言支持,适应全球化需求
  • 无障碍访问:遵循 WCAG 标准,确保可访问性
  • 高性能:优化的渲染机制和内存管理

项目结构​

图表来源

章节来源

核心组件概览​

组件分类体系​

图表来源

主要依赖关系​

图表来源

章节来源

BaseInput 组件详解​

设计理念与封装机制​

BaseInput 是一个高度封装的基础输入组件,它在 Element Plus 的 el-input 基础上进行了深度定制,提供了更丰富的交互能力和更好的用户体验。

核心特性​

  1. 双向绑定支持:通过 v-model 实现数据的双向绑定
  2. 事件冒泡控制:智能的事件传播管理
  3. 键盘事件处理:支持 Enter 键触发特定事件
  4. 国际化适配:自动翻译占位符文本
  5. 样式隔离:使用 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 组件并进行了本地化定制。

功能特性​

  1. 动态选项加载:从 API 获取语言配置列表
  2. 默认选项支持:包含跟随系统和原始文本选项
  3. 实时语言切换:支持运行时语言环境变更
  4. 项目级配置:可扩展支持项目级别的配置管理

数据流架构​

图表来源

代码实现分析​

// 关键方法解析
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 组件的命名空间,确保组件在不同项目环境下的正确渲染。

核心功能​

  1. 命名空间注入:自动注入 VITE_APP_NAMESPACE 环境变量
  2. 配置传递:将配置信息传递给子组件
  3. 主题一致性:确保整个应用的主题一致性

实现原理​

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>
)
}
},
})

章节来源

组件集成架构​

DyForm 表单引擎​

DyForm 是一个强大的动态表单组件,支持多种输入类型和复杂的表单布局。

支持的输入类型​

图表来源

表单验证集成​

DyForm 内置了完整的表单验证机制:

const validate = () => {
if (!formRef.value) return false
return new Promise((resolve, reject) => {
formRef.value?.validate((valid: boolean) => {
if (valid) {
resolve(true)
} else {
reject(false)
}
})
})
}

BaseTable 表格组件​

BaseTable 是一个基于 Arco Design 的增强型表格组件,提供了丰富的功能和灵活的配置选项。

核心功能特性​

  1. 虚拟滚动:支持大数据量表格的高性能渲染
  2. 列拖拽排序:可配置的列顺序调整功能
  3. 行选择:多选、单选模式支持
  4. 自定义列渲染:支持插槽和自定义渲染函数
  5. 响应式布局:自动适配不同屏幕尺寸

性能优化策略​

图表来源

章节来源

国际化与多语言支持​

语言管理系统​

lmes-web-base 提供了完整的国际化支持,基于 SDK 的 Language 模块实现。

语言配置结构​

interface LanguageConfig {
lang: Record<string, any>; // 语言映射对象
key: string; // 语言标识符
followLang: string; // 跟随的语言设置
}

多语言支持流程​

图表来源

语言切换机制​

export const getLang = (key: string) => {
const langMap: Record<string, any> = {
'en-US': EN,
th: TH,
'zh-CN': ZH,
original: ZH,
}

const langKey: Record<string, string> = {
'en-US': 'EN',
th: 'TH',
'zh-CN': 'ZH',
original: 'ZH',
}

return {
lang: langMap[key] || ZH,
key: langKey[key],
}
}

章节来源

性能优化策略​

懒加载与按需导入​

虚拟滚动在大型表单场景下的应用策略​

场景识别​

  1. 大数据量表格:超过 1000 行的数据
  2. 复杂表单布局:包含大量嵌套字段的表单
  3. 移动端应用:内存受限的移动设备

实施策略​

// 虚拟滚动配置示例
const virtualListProps = {
height: autoHeight.value, // 可视区域高度
itemHeight: 48, // 每行高度
buffer: 20, // 缓冲区大小
threshold: 100, // 触发阈值
}

性能监控指标​

  • 首次渲染时间:< 200ms
  • 内存占用:稳定在 50MB 以下
  • 滚动流畅度:FPS > 60
  • CPU 使用率:< 30%

最佳实践指南​

响应式数据流实现​

组合式API使用模式​

// 响应式状态管理
const useFormState = () => {
const formData = ref({})
const loading = ref(false)
const errors = ref({})

const updateField = (field: string, value: any) => {
set(formData.value, field, value)
}

return {
formData,
loading,
errors,
updateField,
}
}

表单验证集成​

// 验证规则定义
const validationRules = {
required: {
required: true,
message: '此字段为必填项',
},
email: {
type: 'email',
message: '请输入有效的邮箱地址',
},
minLength: (min: number) => ({
min,
message: `至少需要 ${min} 个字符`,
}),
}

常见使用误区与解决方案​

误区 1:直接修改 props​

// ❌ 错误做法
const handleChange = (value: string) => {
props.modelValue = value // 直接修改props
}

// ✅ 正确做法
const handleChange = (value: string) => {
emit('update:modelValue', value) // 通过emit更新父组件
}

误区 2:忽略错误处理​

// ❌ 错误做法
const fetchData = async () => {
const data = await api.getData()
return data
}

// ✅ 正确做法
const fetchData = async () => {
try {
const data = await api.getData()
return data
} catch (error) {
console.error('数据加载失败:', error)
throw error
}
}

误区 3:过度使用全局状态​

// ❌ 错误做法
const globalState = useGlobalState()

// ✅ 正确做法
const localState = useLocalState()
const parentState = inject('parentState')

故障排除​

常见问题诊断​

组件样式不生效​

症状:组件显示异常或样式丢失

排查步骤:

  1. 检查 SCSS 文件是否正确导入
  2. 验证 CSS Modules 配置
  3. 确认主题变量是否正确设置

解决方案:

// 确保正确的样式导入
@import '~lmes-web-base/dist/style.css';

// 或使用模块化导入
import styles from './MyComponent.module.scss';

国际化文本不显示​

症状:组件中的文本未正确翻译

排查步骤:

  1. 检查 LanguageScopeKey 是否正确设置
  2. 验证语言包是否正确加载
  3. 确认 _t 函数调用位置

解决方案:

// 在组件中正确使用国际化
const _t = getScopeT(props.LanguageScopeKey)
return _t('component.placeholder.text')

表单验证失效​

症状:表单提交时验证规则不生效

排查步骤:

  1. 检查验证规则格式是否正确
  2. 确认 formRef 是否正确绑定
  3. 验证字段名与验证规则匹配

解决方案:

// 正确的验证规则配置
const formRules = {
username: [
{ required: true, message: '用户名不能为空' },
{ min: 3, max: 20, message: '长度在 3 到 20 个字符' }
]
}

性能问题诊断​

渲染性能问题​

症状:页面卡顿或响应缓慢

诊断工具:

  • Chrome DevTools Performance
  • Vue DevTools Profiler
  • Memory Timeline

优化策略:

// 使用防抖减少频繁更新
const debouncedUpdate = debounce((value) => {
emit('update:modelValue', value)
}, 300)

// 启用虚拟滚动
<BaseTable
:isVScroll="true"
:autoHeight="true"
/>

总结​

lmes-web-base 基础UI组件库通过精心设计的组件架构,为 MES 系统提供了完整、高效、易用的UI解决方案。其核心优势包括:

技术优势​

  1. 现代化技术栈:基于 Vue 3 Composition API 和 TypeScript 构建
  2. 组件化设计:高度模块化的组件结构,便于维护和扩展
  3. 性能优化:内置虚拟滚动、懒加载等性能优化机制
  4. 类型安全:完整的 TypeScript 类型定义,提升开发体验

功能特色​

  1. 统一的国际化支持:内置多语言切换和文本管理机制
  2. 灵活的配置系统:支持主题定制和组件个性化配置
  3. 完善的表单处理:动态表单生成和验证机制
  4. 丰富的交互体验:支持键盘导航、无障碍访问等功能

应用价值​

  • 提高开发效率:标准化的组件接口和使用方式
  • 保证代码质量:统一的设计规范和最佳实践
  • 降低维护成本:清晰的组件职责和依赖关系
  • 提升用户体验:一致的交互模式和视觉效果

通过合理使用这些基础组件,开发者可以快速构建出高质量的 MES 系统界面,同时确保代码的可维护性和扩展性。随着项目的不断发展,这些基础组件也将持续演进,为用户提供更好的开发体验和产品体验。