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

51 lines
1.8 KiB
TypeScript
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.

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;
}