# yjyl-input-unit 单位转换组件使用说明
功能特性
支持双向数值绑定
内置单位换算逻辑(含温度特殊处理)
支持单位循环切换/弹窗选择两种模式
兼容 Vue2/Vue3 和 UniApp 多平台
支持自定义单位显示
可配置小数位数精度
符合uni-modules标准,直接使用
Props 配置
|属性名 |类型 |必填 |默认值 |说明 |
|:-: |:-: |:-: |:-: |:-: |
|unitType |String |是 |- |单位类型(例:'length', 'weight', 'temperature') |
|unitOrder |Number |否 |0 |当前单位序号(需配合 .sync 修饰符使用) |
|value |Number |是 |- |输入数值(使用 v-model 双向绑定) |
|showEnglishOnly |Boolean|否 |false |是否只显示英文单位(例:'kg' 代替 ' 千克 (kg)') |
|decimalPlaces |Number |否 |5 |小数位数(0 - 10) |
|width |Number |否 |180 |组件总宽度(px) |
|height |Number |否 |32 |组件高度(px) |
|enableConvert |Boolean|否 |true |是否允许单位转换 |
|userDefined |Boolean|否 |false |是否使用自定义单位 |
|userDefinedunitName|String |否 |'' |自定义单位显示名称(需 userDefined = true 生效) |
事件说明
| 事件名称 | 说明 | 回调参数 |
| input | 数值变化时触发 | (newValue: number) |
| update:unitOrder | 单位序号变化时触发 | (newOrder: number) |
| conversion | 完成单位转换时触发 | { initialValue, newValue, oldUnit, newUnit, oldOrder, newOrder } 的 Object |
使用示例
基本用法
vue
禁用转换模式
事件处理
vue
复制
API 需自己开发,按照下面的数据格式进行组织,参考unitData.js
组件依赖 listSysUnitConvert API 获取单位数据,需实现以下格式的接口:
javascript
{
rows: [
{
id: 1,
unitType: 'length',
unitName: '米(m)',
conversionFactor: 1,
baseUnit: 'Y',
unitOrder: 0
},
// ...其他单位数据
]
}
样式调整
可通过以下 CSS 类名自定义样式:
.unit-converter - 组件容器
.input-field - 输入框
.unit-label - 单位标签
.unit-selector - 单位选择器
.unit-option - 单位选项
平台差异
小程序端使用 longpress 事件触发选择器(长按代替双击)
H5 端自动适配点击事件
单位转换规则
温度单位需按约定顺序定义:
javascript
复制
[
{ unitOrder: 0, unitName: '℃' }, // 摄氏度
{ unitOrder: 1, unitName: '℉' }, // 华氏度
{ unitOrder: 2, unitName: 'K' } // 开尔文
]
自定义单位时需确保与现有换算逻辑兼容
常见问题
Q1: 单位选择器不显示
检查 enableConvert 是否为 true
确认单位数据加载成功
查看控制台是否有 API 错误
Q2: 数值更新不及时
确保使用 v-model 进行双向绑定
检查小数位数配置是否符合预期
确认没有在父组件中覆盖转换后的值
Q3: 样式显示异常
检查是否父容器有冲突的布局样式
确认单位标签宽度计算正确(通过 updateInputWidth 方法)
在小程序端添加 !important 覆盖默认样式