CNCEC_APP/uni_modules/uview-pro/libs/function/addUnit.ts

51 lines
1.8 KiB
TypeScript
Raw Normal View History

2026-03-25 14:54:15 +08:00
import validation from './test';
/**
*
* 1. rpx%px等单位结尾或者值为autorpx单位结尾
* 2. "10 20" => "10rpx 20rpx"
*
* @example
* ```ts
* addUnit(10) => "10rpx"
* addUnit('10px') => "10px"
* addUnit('auto') => "auto"
* addUnit('10 20') => "10rpx 20rpx"
* addUnit('10rpx 20') => "10rpx 20rpx"
* ```
*
* @param value 'auto' paddingmargin
* @param unit 'rpx'
* @returns
*/
export default function addUnit(value: string | number = 'auto', unit: string = 'rpx'): string {
// 若传入 number 类型,转为 string
const strValue = String(value);
// 如果是空值,直接返回
if (!strValue) return '';
// auto 直接返回
if (strValue === 'auto') return strValue;
// 检查是否包含空格(多值场景)
if (strValue.includes(' ')) {
// 分割每个值并单独处理
return strValue
.split(' ')
.map(s => {
// 如果当前值已有单位或为 auto直接返回
if (s === 'auto' || /^-?\d*\.?\d+(%|px|rpx|em|rem|vh|vw)$/.test(s)) return s;
// 数字类型的值添加单位
return validation.number(s) ? `${s}${unit}` : s;
})
.join(' ');
}
// 单值场景:如果已有单位或为 auto直接返回
if (/^-?\d*\.?\d+(%|px|rpx|em|rem|vh|vw)$/.test(strValue)) return strValue;
// 用 uView 内置验证规则判断是否为数值,是则加上单位
return validation.number(strValue) ? `${strValue}${unit}` : strValue;
}