51 lines
1.8 KiB
TypeScript
51 lines
1.8 KiB
TypeScript
import validation from './test';
|
||
|
||
/**
|
||
* 添加单位,支持以下场景:
|
||
* 1. 单值:如果有rpx、%、px等单位结尾或者值为auto,直接返回,否则加上rpx单位结尾
|
||
* 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'。支持空格分隔的多值(用于 padding、margin 等)
|
||
* @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;
|
||
}
|