ruoyi-app/uni_modules/yjly-inputunit/readme.md

159 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 覆盖默认样式