159 lines
4.0 KiB
Markdown
159 lines
4.0 KiB
Markdown
# 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
|
||
|
||
<template>
|
||
<UniUnitConverter
|
||
v-model="value"
|
||
:unit-type="length"
|
||
:unit-order.sync="currentOrder"
|
||
/>
|
||
</template>
|
||
|
||
<script>
|
||
export default {
|
||
data() {
|
||
return {
|
||
value: 100,
|
||
currentOrder: 0
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
禁用转换模式
|
||
|
||
<UniUnitConverter
|
||
v-model="fixedValue"
|
||
:unit-type="weight"
|
||
:enable-convert="false"
|
||
user-defined
|
||
:user-definedunit-name="'特殊单位'"
|
||
/>
|
||
事件处理
|
||
vue
|
||
复制
|
||
<template>
|
||
<UniUnitConverter
|
||
v-model="tempValue"
|
||
:unit-type="temperature"
|
||
@conversion="handleConversion"
|
||
/>
|
||
</template>
|
||
|
||
<script>
|
||
export default {
|
||
methods: {
|
||
handleConversion({ oldUnit, newUnit, newValue }) {
|
||
console.log(`单位从 ${oldUnit} 转换为 ${newUnit},新值:${newValue}`)
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
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 覆盖默认样式
|
||
|