UNPKG

ze-react-component-library

Version:
231 lines (187 loc) 5.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.leastCommonFormatterAndUnit = void 0; var _numeral = _interopRequireDefault(require("numeral")); var _underscore = _interopRequireDefault(require("underscore")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // a for english, A for chinese var autoFormatterForValue = function autoFormatterForValue(value, formatter) { var abs = Math.abs(value); if (formatter === "a") { // k, m, b if (abs < 1000) { return ""; } if (abs < 1000000) { return "k"; } if (abs < 1000000000) { return "m"; } return "b"; } if (formatter === "A") { // w, m, y if (abs < 10000) { return ""; } if (abs < 100000000) { return "w"; } // if (abs < 100000000) { // return "m"; // } return "y"; } }; var leastCommonFormatterAndUnit = function leastCommonFormatterAndUnit(values, formatter, t) { if (t === void 0) { t = function t(s) { return s; }; } var formatterMap = { a: ["", "k", "m", "b"], A: ["", "w", "y"] }; var formatterIndex = values.filter(function (v) { return v !== 0 && v !== null && v !== undefined; }) // 0的数据不作为自动判别的依据 .map(function (v) { var f = autoFormatterForValue(v, formatter); var index = formatterMap[formatter].findIndex(function (item) { return item === f; }); return index; }); // 所有数据都是0 if (formatterIndex.length === 0) { return { formatter: formatter, unit: '' }; } var finalFormatter = formatterMap[formatter][_underscore.default.min(formatterIndex)]; var unit = ""; switch (finalFormatter) { case "k": unit = "千"; break; case "m": unit = "百万"; break; case "b": unit = "十亿"; break; case "w": unit = "万"; break; case "y": unit = "亿"; break; default: break; } return { formatter: finalFormatter, unit: t(unit) }; }; // 这里覆盖mk主要是为了去掉单位。单位由另外的地方提供,这样可以灵活一点 exports.leastCommonFormatterAndUnit = leastCommonFormatterAndUnit; _numeral.default.register("format", "million", { regexps: { format: /(m)/, unformat: /(m)/ }, format: function format(value, _format, roundingFunction) { return _numeral.default._.numberToFormat(value / 1000000, _format.substring(0, _format.length - 1), roundingFunction); }, unformat: function unformat(string) { return _numeral.default._.stringToNumber(string) * 1000000; } }); _numeral.default.register("format", "thousand", { regexps: { format: /(k)/, unformat: /(k)/ }, format: function format(value, _format2, roundingFunction) { return _numeral.default._.numberToFormat(value / 1000, _format2.substring(0, _format2.length - 1), roundingFunction); }, unformat: function unformat(string) { return _numeral.default._.stringToNumber(string) * 1000; } }); _numeral.default.register("format", "tenthousand", { regexps: { format: /(w)/, unformat: /(w)/ }, format: function format(value, _format3, roundingFunction) { return _numeral.default._.numberToFormat(value / 10000, _format3.substring(0, _format3.length - 1), roundingFunction); }, unformat: function unformat(string) { return _numeral.default._.stringToNumber(string) * 10000; } }); _numeral.default.register("format", "yi", { regexps: { format: /(y)/, unformat: /(y)/ }, format: function format(value, _format4, roundingFunction) { return _numeral.default._.numberToFormat(value / 100000000, _format4.substring(0, _format4.length - 1), roundingFunction); }, unformat: function unformat(string) { return _numeral.default._.stringToNumber(string) * 100000000; } }); // 中国的缩略,目前分为:元、万、亿,三个等级 _numeral.default.register("format", "chineseabbreviation", { regexps: { format: /(A)/, unformat: /(A)/ }, format: function format(value, _format5, roundingFunction) { var wan = 10000.0; // 万 var yi = 100000000.0; // 亿 var abs = Math.abs(value); var adjValue; var unit = ""; if (abs < wan) { adjValue = value; } else if (abs < yi) { adjValue = value / wan; unit = "万"; } else { adjValue = value / yi; unit = "亿"; } return _numeral.default._.numberToFormat(adjValue, _format5.substring(0, _format5.length - 1), roundingFunction) + unit; }, unformat: function unformat(string) { var thousand = 1000.0; // 千 var wan = 10000.0; // 万 var million = 1000000.0; // 百万 var yi = 100000000.0; // 亿 var billion = 1000000000.0; // 十亿 var scale = 1.0; var numberString = string; if (string.endsWith("千")) { scale = thousand; numberString = string.substring(0, string.length - 1); } else if (string.endsWith("百万")) { scale = million; numberString = string.substring(0, string.length - 2); } else if (string.endsWith("十亿")) { scale = billion; numberString = string.substring(0, string.length - 2); } else if (string.endsWith("万")) { scale = wan; numberString = string.substring(0, string.length - 1); } else if (string.endsWith("亿")) { scale = yi; numberString = string.substring(0, string.length - 1); } return _numeral.default._.stringToNumber(numberString) * scale; } });