@nutui/nutui-react
Version:
京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序
60 lines (59 loc) • 2.67 kB
JavaScript
import { _ as __rest } from "./tslib.es6.js";
import React__default from "react";
import { C as ComponentDefaults } from "./typings.js";
const defaultProps = Object.assign(Object.assign({}, ComponentDefaults), { price: 0, symbol: "¥", digits: 2, thousands: false, position: "before", size: "large", line: false });
const Price = (props) => {
const _a = Object.assign(Object.assign({}, defaultProps), props), { price, symbol, digits, thousands, position, size, line, className, style } = _a, rest = __rest(_a, ["price", "symbol", "digits", "thousands", "position", "size", "line", "className", "style"]);
const classPrefix = "nut-price";
const showSymbol = () => {
return { __html: symbol || "" };
};
const checkPoint = (price2) => {
return String(price2).indexOf(".") > 0;
};
const formatThousands = (num) => {
if (Number(num) === 0) {
num = 0;
}
if (checkPoint(num)) {
num = Number(num).toFixed(digits);
num = typeof num.split(".") === "string" ? num.split(".") : num.split(".")[0];
} else {
num = num.toString();
}
if (thousands) {
return (num || 0).toString().replace(/(\d)(?=(?:\d{3})+$)/g, "$1,");
}
return num;
};
const formatDecimal = (decimalNum) => {
if (Number(decimalNum) === 0) {
decimalNum = 0;
}
if (checkPoint(decimalNum)) {
decimalNum = Number(decimalNum).toFixed(digits);
decimalNum = typeof decimalNum.split(".") === "string" ? 0 : decimalNum.split(".")[1] || 0;
} else {
decimalNum = 0;
}
const result = `0.${decimalNum}`;
const resultFixed = Number(result).toFixed(digits);
return String(resultFixed).substring(2, resultFixed.length);
};
const renderSymbol = () => {
return React__default.createElement("div", { className: `${classPrefix}-symbol ${classPrefix}-symbol-${size}`, dangerouslySetInnerHTML: showSymbol() });
};
return React__default.createElement(
"div",
Object.assign({ className: `${classPrefix} ${line ? `${classPrefix}-line` : ""} ${className}`, style }, rest),
symbol && position === "before" ? renderSymbol() : null,
React__default.createElement("div", { className: `${classPrefix}-integer ${classPrefix}-integer-${size}` }, formatThousands(price)),
digits !== 0 ? React__default.createElement("div", { className: `${classPrefix}-decimal ${classPrefix}-decimal-${size}` }, ".") : null,
React__default.createElement("div", { className: `${classPrefix}-decimal ${classPrefix}-decimal-${size}` }, formatDecimal(price)),
symbol && position === "after" ? renderSymbol() : null
);
};
Price.displayName = "NutPrice";
export {
Price as default
};