2024-09-19 07:20:14 +08:00
|
|
|
"use strict";
|
2024-10-01 09:15:35 +08:00
|
|
|
const common_vendor = require("../../../../common/vendor.js");
|
|
|
|
const modules_mall_sheep_helper_test = require("./test.js");
|
|
|
|
const modules_mall_sheep_helper_digit = require("./digit.js");
|
2024-09-19 07:20:14 +08:00
|
|
|
function range(min = 0, max = 0, value = 0) {
|
|
|
|
return Math.max(min, Math.min(max, Number(value)));
|
|
|
|
}
|
|
|
|
function getPx(value, unit = false) {
|
2024-10-01 09:15:35 +08:00
|
|
|
if (modules_mall_sheep_helper_test.test.number(value)) {
|
2024-09-19 07:20:14 +08:00
|
|
|
return unit ? `${value}px` : Number(value);
|
|
|
|
}
|
|
|
|
if (/(rpx|upx)$/.test(value)) {
|
|
|
|
return unit ? `${common_vendor.index.upx2px(parseInt(value))}px` : Number(common_vendor.index.upx2px(parseInt(value)));
|
|
|
|
}
|
|
|
|
return unit ? `${parseInt(value)}px` : parseInt(value);
|
|
|
|
}
|
|
|
|
function sleep(value = 30) {
|
|
|
|
return new Promise((resolve) => {
|
|
|
|
setTimeout(() => {
|
|
|
|
resolve();
|
|
|
|
}, value);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
function os() {
|
|
|
|
return common_vendor.index.getSystemInfoSync().platform.toLowerCase();
|
|
|
|
}
|
|
|
|
function sys() {
|
|
|
|
return common_vendor.index.getSystemInfoSync();
|
|
|
|
}
|
|
|
|
function random(min, max) {
|
|
|
|
if (min >= 0 && max > 0 && max >= min) {
|
|
|
|
const gab = max - min + 1;
|
|
|
|
return Math.floor(Math.random() * gab + min);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
function guid(len = 32, firstU = true, radix = null) {
|
|
|
|
const chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split("");
|
|
|
|
const uuid = [];
|
|
|
|
radix = radix || chars.length;
|
|
|
|
if (len) {
|
|
|
|
for (let i = 0; i < len; i++)
|
|
|
|
uuid[i] = chars[0 | Math.random() * radix];
|
|
|
|
} else {
|
|
|
|
let r;
|
|
|
|
uuid[8] = uuid[13] = uuid[18] = uuid[23] = "-";
|
|
|
|
uuid[14] = "4";
|
|
|
|
for (let i = 0; i < 36; i++) {
|
|
|
|
if (!uuid[i]) {
|
|
|
|
r = 0 | Math.random() * 16;
|
|
|
|
uuid[i] = chars[i == 19 ? r & 3 | 8 : r];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (firstU) {
|
|
|
|
uuid.shift();
|
|
|
|
return `u${uuid.join("")}`;
|
|
|
|
}
|
|
|
|
return uuid.join("");
|
|
|
|
}
|
|
|
|
function $parent(name = void 0) {
|
|
|
|
let parent = this.$parent;
|
|
|
|
while (parent) {
|
|
|
|
if (parent.$options && parent.$options.name !== name) {
|
|
|
|
parent = parent.$parent;
|
|
|
|
} else {
|
|
|
|
return parent;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
function addStyle(customStyle, target = "object") {
|
2024-10-01 09:15:35 +08:00
|
|
|
if (modules_mall_sheep_helper_test.test.empty(customStyle) || typeof customStyle === "object" && target === "object" || target === "string" && typeof customStyle === "string") {
|
2024-09-19 07:20:14 +08:00
|
|
|
return customStyle;
|
|
|
|
}
|
|
|
|
if (target === "object") {
|
|
|
|
customStyle = trim(customStyle);
|
|
|
|
const styleArray = customStyle.split(";");
|
|
|
|
const style = {};
|
|
|
|
for (let i = 0; i < styleArray.length; i++) {
|
|
|
|
if (styleArray[i]) {
|
|
|
|
const item = styleArray[i].split(":");
|
|
|
|
style[trim(item[0])] = trim(item[1]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return style;
|
|
|
|
}
|
|
|
|
let string = "";
|
|
|
|
for (const i in customStyle) {
|
|
|
|
const key = i.replace(/([A-Z])/g, "-$1").toLowerCase();
|
|
|
|
string += `${key}:${customStyle[i]};`;
|
|
|
|
}
|
|
|
|
return trim(string);
|
|
|
|
}
|
|
|
|
function addUnit(value = "auto", unit = "px") {
|
|
|
|
value = String(value);
|
2024-10-01 09:15:35 +08:00
|
|
|
return modules_mall_sheep_helper_test.test.number(value) ? `${value}${unit}` : value;
|
2024-09-19 07:20:14 +08:00
|
|
|
}
|
|
|
|
function deepClone(obj) {
|
|
|
|
if ([null, void 0, NaN, false].includes(obj))
|
|
|
|
return obj;
|
|
|
|
if (typeof obj !== "object" && typeof obj !== "function") {
|
|
|
|
return obj;
|
|
|
|
}
|
2024-10-01 09:15:35 +08:00
|
|
|
const o = modules_mall_sheep_helper_test.test.array(obj) ? [] : {};
|
2024-09-19 07:20:14 +08:00
|
|
|
for (const i in obj) {
|
|
|
|
if (obj.hasOwnProperty(i)) {
|
|
|
|
o[i] = typeof obj[i] === "object" ? deepClone(obj[i]) : obj[i];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return o;
|
|
|
|
}
|
|
|
|
function deepMerge(target = {}, source = {}) {
|
|
|
|
target = deepClone(target);
|
|
|
|
if (typeof target !== "object" || typeof source !== "object")
|
|
|
|
return false;
|
|
|
|
for (const prop in source) {
|
|
|
|
if (!source.hasOwnProperty(prop))
|
|
|
|
continue;
|
|
|
|
if (prop in target) {
|
|
|
|
if (typeof target[prop] !== "object") {
|
|
|
|
target[prop] = source[prop];
|
|
|
|
} else if (typeof source[prop] !== "object") {
|
|
|
|
target[prop] = source[prop];
|
|
|
|
} else if (target[prop].concat && source[prop].concat) {
|
|
|
|
target[prop] = target[prop].concat(source[prop]);
|
|
|
|
} else {
|
|
|
|
target[prop] = deepMerge(target[prop], source[prop]);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
target[prop] = source[prop];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return target;
|
|
|
|
}
|
|
|
|
function error(err) {
|
|
|
|
{
|
|
|
|
console.error(`SheepJS:${err}`);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
function randomArray(array = []) {
|
|
|
|
return array.sort(() => Math.random() - 0.5);
|
|
|
|
}
|
|
|
|
if (!String.prototype.padStart) {
|
|
|
|
String.prototype.padStart = function(maxLength, fillString = " ") {
|
|
|
|
if (Object.prototype.toString.call(fillString) !== "[object String]") {
|
|
|
|
throw new TypeError("fillString must be String");
|
|
|
|
}
|
|
|
|
const str = this;
|
|
|
|
if (str.length >= maxLength)
|
|
|
|
return String(str);
|
|
|
|
const fillLength = maxLength - str.length;
|
|
|
|
let times = Math.ceil(fillLength / fillString.length);
|
|
|
|
while (times >>= 1) {
|
|
|
|
fillString += fillString;
|
|
|
|
if (times === 1) {
|
|
|
|
fillString += fillString;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return fillString.slice(0, fillLength) + str;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
function timeFormat(dateTime = null, formatStr = "yyyy-mm-dd") {
|
|
|
|
let date;
|
|
|
|
if (!dateTime) {
|
|
|
|
date = /* @__PURE__ */ new Date();
|
|
|
|
} else if (/^\d{10}$/.test(dateTime == null ? void 0 : dateTime.toString().trim())) {
|
|
|
|
date = new Date(dateTime * 1e3);
|
|
|
|
} else if (typeof dateTime === "string" && /^\d+$/.test(dateTime.trim())) {
|
|
|
|
date = new Date(Number(dateTime));
|
|
|
|
} else {
|
|
|
|
date = new Date(typeof dateTime === "string" ? dateTime.replace(/-/g, "/") : dateTime);
|
|
|
|
}
|
|
|
|
const timeSource = {
|
|
|
|
y: date.getFullYear().toString(),
|
|
|
|
// 年
|
|
|
|
m: (date.getMonth() + 1).toString().padStart(2, "0"),
|
|
|
|
// 月
|
|
|
|
d: date.getDate().toString().padStart(2, "0"),
|
|
|
|
// 日
|
|
|
|
h: date.getHours().toString().padStart(2, "0"),
|
|
|
|
// 时
|
|
|
|
M: date.getMinutes().toString().padStart(2, "0"),
|
|
|
|
// 分
|
|
|
|
s: date.getSeconds().toString().padStart(2, "0")
|
|
|
|
// 秒
|
|
|
|
// 有其他格式化字符需求可以继续添加,必须转化成字符串
|
|
|
|
};
|
|
|
|
for (const key in timeSource) {
|
|
|
|
const [ret] = new RegExp(`${key}+`).exec(formatStr) || [];
|
|
|
|
if (ret) {
|
|
|
|
const beginIndex = key === "y" && ret.length === 2 ? 2 : 0;
|
|
|
|
formatStr = formatStr.replace(ret, timeSource[key].slice(beginIndex));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return formatStr;
|
|
|
|
}
|
|
|
|
function timeFrom(timestamp = null, format = "yyyy-mm-dd") {
|
|
|
|
if (timestamp == null)
|
|
|
|
timestamp = Number(/* @__PURE__ */ new Date());
|
|
|
|
timestamp = parseInt(timestamp);
|
|
|
|
if (timestamp.toString().length == 10)
|
|
|
|
timestamp *= 1e3;
|
|
|
|
let timer = (/* @__PURE__ */ new Date()).getTime() - timestamp;
|
|
|
|
timer = parseInt(timer / 1e3);
|
|
|
|
let tips = "";
|
|
|
|
switch (true) {
|
|
|
|
case timer < 300:
|
|
|
|
tips = "刚刚";
|
|
|
|
break;
|
|
|
|
case (timer >= 300 && timer < 3600):
|
|
|
|
tips = `${parseInt(timer / 60)}分钟前`;
|
|
|
|
break;
|
|
|
|
case (timer >= 3600 && timer < 86400):
|
|
|
|
tips = `${parseInt(timer / 3600)}小时前`;
|
|
|
|
break;
|
|
|
|
case (timer >= 86400 && timer < 2592e3):
|
|
|
|
tips = `${parseInt(timer / 86400)}天前`;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
if (format === false) {
|
|
|
|
if (timer >= 2592e3 && timer < 365 * 86400) {
|
|
|
|
tips = `${parseInt(timer / (86400 * 30))}个月前`;
|
|
|
|
} else {
|
|
|
|
tips = `${parseInt(timer / (86400 * 365))}年前`;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
tips = timeFormat(timestamp, format);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return tips;
|
|
|
|
}
|
|
|
|
function trim(str, pos = "both") {
|
|
|
|
str = String(str);
|
|
|
|
if (pos == "both") {
|
|
|
|
return str.replace(/^\s+|\s+$/g, "");
|
|
|
|
}
|
|
|
|
if (pos == "left") {
|
|
|
|
return str.replace(/^\s*/, "");
|
|
|
|
}
|
|
|
|
if (pos == "right") {
|
|
|
|
return str.replace(/(\s*$)/g, "");
|
|
|
|
}
|
|
|
|
if (pos == "all") {
|
|
|
|
return str.replace(/\s+/g, "");
|
|
|
|
}
|
|
|
|
return str;
|
|
|
|
}
|
|
|
|
function queryParams(data = {}, isPrefix = true, arrayFormat = "brackets") {
|
|
|
|
const prefix = isPrefix ? "?" : "";
|
|
|
|
const _result = [];
|
|
|
|
if (["indices", "brackets", "repeat", "comma"].indexOf(arrayFormat) == -1)
|
|
|
|
arrayFormat = "brackets";
|
|
|
|
for (const key in data) {
|
|
|
|
const value = data[key];
|
|
|
|
if (["", void 0, null].indexOf(value) >= 0) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (value.constructor === Array) {
|
|
|
|
switch (arrayFormat) {
|
|
|
|
case "indices":
|
|
|
|
for (let i = 0; i < value.length; i++) {
|
|
|
|
_result.push(`${key}[${i}]=${value[i]}`);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case "brackets":
|
|
|
|
value.forEach((_value) => {
|
|
|
|
_result.push(`${key}[]=${_value}`);
|
|
|
|
});
|
|
|
|
break;
|
|
|
|
case "repeat":
|
|
|
|
value.forEach((_value) => {
|
|
|
|
_result.push(`${key}=${_value}`);
|
|
|
|
});
|
|
|
|
break;
|
|
|
|
case "comma":
|
|
|
|
let commaStr = "";
|
|
|
|
value.forEach((_value) => {
|
|
|
|
commaStr += (commaStr ? "," : "") + _value;
|
|
|
|
});
|
|
|
|
_result.push(`${key}=${commaStr}`);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
value.forEach((_value) => {
|
|
|
|
_result.push(`${key}[]=${_value}`);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
_result.push(`${key}=${value}`);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return _result.length ? prefix + _result.join("&") : "";
|
|
|
|
}
|
|
|
|
function toast(title, duration = 2e3) {
|
|
|
|
common_vendor.index.showToast({
|
|
|
|
title: String(title),
|
|
|
|
icon: "none",
|
|
|
|
duration
|
|
|
|
});
|
|
|
|
}
|
|
|
|
function type2icon(type = "success", fill = false) {
|
|
|
|
if (["primary", "info", "error", "warning", "success"].indexOf(type) == -1)
|
|
|
|
type = "success";
|
|
|
|
let iconName = "";
|
|
|
|
switch (type) {
|
|
|
|
case "primary":
|
|
|
|
iconName = "info-circle";
|
|
|
|
break;
|
|
|
|
case "info":
|
|
|
|
iconName = "info-circle";
|
|
|
|
break;
|
|
|
|
case "error":
|
|
|
|
iconName = "close-circle";
|
|
|
|
break;
|
|
|
|
case "warning":
|
|
|
|
iconName = "error-circle";
|
|
|
|
break;
|
|
|
|
case "success":
|
|
|
|
iconName = "checkmark-circle";
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
iconName = "checkmark-circle";
|
|
|
|
}
|
|
|
|
if (fill)
|
|
|
|
iconName += "-fill";
|
|
|
|
return iconName;
|
|
|
|
}
|
|
|
|
function priceFormat(number, decimals = 0, decimalPoint = ".", thousandsSeparator = ",") {
|
|
|
|
number = `${number}`.replace(/[^0-9+-Ee.]/g, "");
|
|
|
|
const n = !isFinite(+number) ? 0 : +number;
|
|
|
|
const prec = !isFinite(+decimals) ? 0 : Math.abs(decimals);
|
|
|
|
const sep = typeof thousandsSeparator === "undefined" ? "," : thousandsSeparator;
|
|
|
|
const dec = typeof decimalPoint === "undefined" ? "." : decimalPoint;
|
|
|
|
let s = "";
|
2024-10-01 09:15:35 +08:00
|
|
|
s = (prec ? modules_mall_sheep_helper_digit.round(n, prec) + "" : `${Math.round(n)}`).split(".");
|
2024-09-19 07:20:14 +08:00
|
|
|
const re = /(-?\d+)(\d{3})/;
|
|
|
|
while (re.test(s[0])) {
|
|
|
|
s[0] = s[0].replace(re, `$1${sep}$2`);
|
|
|
|
}
|
|
|
|
if ((s[1] || "").length < prec) {
|
|
|
|
s[1] = s[1] || "";
|
|
|
|
s[1] += new Array(prec - s[1].length + 1).join("0");
|
|
|
|
}
|
|
|
|
return s.join(dec);
|
|
|
|
}
|
|
|
|
function getDuration(value, unit = true) {
|
|
|
|
const valueNum = parseInt(value);
|
|
|
|
if (unit) {
|
|
|
|
if (/s$/.test(value))
|
|
|
|
return value;
|
|
|
|
return value > 30 ? `${value}ms` : `${value}s`;
|
|
|
|
}
|
|
|
|
if (/ms$/.test(value))
|
|
|
|
return valueNum;
|
|
|
|
if (/s$/.test(value))
|
|
|
|
return valueNum > 30 ? valueNum : valueNum * 1e3;
|
|
|
|
return valueNum;
|
|
|
|
}
|
|
|
|
function padZero(value) {
|
|
|
|
return `00${value}`.slice(-2);
|
|
|
|
}
|
|
|
|
function getProperty(obj, key) {
|
|
|
|
if (!obj) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (typeof key !== "string" || key === "") {
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
if (key.indexOf(".") !== -1) {
|
|
|
|
const keys = key.split(".");
|
|
|
|
let firstObj = obj[keys[0]] || {};
|
|
|
|
for (let i = 1; i < keys.length; i++) {
|
|
|
|
if (firstObj) {
|
|
|
|
firstObj = firstObj[keys[i]];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return firstObj;
|
|
|
|
}
|
|
|
|
return obj[key];
|
|
|
|
}
|
|
|
|
function setProperty(obj, key, value) {
|
|
|
|
if (!obj) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
const inFn = function(_obj, keys, v) {
|
|
|
|
if (keys.length === 1) {
|
|
|
|
_obj[keys[0]] = v;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
while (keys.length > 1) {
|
|
|
|
const k = keys[0];
|
|
|
|
if (!_obj[k] || typeof _obj[k] !== "object") {
|
|
|
|
_obj[k] = {};
|
|
|
|
}
|
|
|
|
keys.shift();
|
|
|
|
inFn(_obj[k], keys, v);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
if (typeof key !== "string" || key === "")
|
|
|
|
;
|
|
|
|
else if (key.indexOf(".") !== -1) {
|
|
|
|
const keys = key.split(".");
|
|
|
|
inFn(obj, keys, value);
|
|
|
|
} else {
|
|
|
|
obj[key] = value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
function page() {
|
|
|
|
var _a, _b;
|
|
|
|
const pages2 = getCurrentPages();
|
|
|
|
return `/${(_b = (_a = pages2[pages2.length - 1]) == null ? void 0 : _a.route) != null ? _b : ""}`;
|
|
|
|
}
|
|
|
|
function pages() {
|
|
|
|
const pages2 = getCurrentPages();
|
|
|
|
return pages2;
|
|
|
|
}
|
|
|
|
function getRootUrl() {
|
|
|
|
let url = "";
|
|
|
|
return url;
|
|
|
|
}
|
|
|
|
function copyText(text) {
|
|
|
|
common_vendor.index.setClipboardData({
|
|
|
|
data: text,
|
|
|
|
success: function() {
|
|
|
|
toast("复制成功!");
|
|
|
|
},
|
|
|
|
fail: function() {
|
|
|
|
toast("复制失败!");
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
const $helper = {
|
|
|
|
range,
|
|
|
|
getPx,
|
|
|
|
sleep,
|
|
|
|
os,
|
|
|
|
sys,
|
|
|
|
random,
|
|
|
|
guid,
|
|
|
|
$parent,
|
|
|
|
addStyle,
|
|
|
|
addUnit,
|
|
|
|
deepClone,
|
|
|
|
deepMerge,
|
|
|
|
error,
|
|
|
|
randomArray,
|
|
|
|
timeFormat,
|
|
|
|
timeFrom,
|
|
|
|
trim,
|
|
|
|
queryParams,
|
|
|
|
toast,
|
|
|
|
type2icon,
|
|
|
|
priceFormat,
|
|
|
|
getDuration,
|
|
|
|
padZero,
|
|
|
|
getProperty,
|
|
|
|
setProperty,
|
|
|
|
page,
|
|
|
|
pages,
|
2024-10-01 09:15:35 +08:00
|
|
|
test: modules_mall_sheep_helper_test.test,
|
2024-09-19 07:20:14 +08:00
|
|
|
getRootUrl,
|
|
|
|
copyText
|
|
|
|
};
|
|
|
|
exports.$helper = $helper;
|
|
|
|
exports.$parent = $parent;
|
|
|
|
exports.addStyle = addStyle;
|
|
|
|
exports.addUnit = addUnit;
|
|
|
|
exports.deepMerge = deepMerge;
|
|
|
|
exports.getPx = getPx;
|
|
|
|
exports.guid = guid;
|
|
|
|
exports.os = os;
|
|
|
|
exports.sleep = sleep;
|
|
|
|
exports.sys = sys;
|