You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4029 lines
139 KiB
4029 lines
139 KiB
if (typeof Promise !== "undefined" && !Promise.prototype.finally) {
|
|
Promise.prototype.finally = function(callback) {
|
|
const promise = this.constructor;
|
|
return this.then(
|
|
(value) => promise.resolve(callback()).then(() => value),
|
|
(reason) => promise.resolve(callback()).then(() => {
|
|
throw reason;
|
|
})
|
|
);
|
|
};
|
|
}
|
|
;
|
|
if (typeof uni !== "undefined" && uni && uni.requireGlobal) {
|
|
const global2 = uni.requireGlobal();
|
|
ArrayBuffer = global2.ArrayBuffer;
|
|
Int8Array = global2.Int8Array;
|
|
Uint8Array = global2.Uint8Array;
|
|
Uint8ClampedArray = global2.Uint8ClampedArray;
|
|
Int16Array = global2.Int16Array;
|
|
Uint16Array = global2.Uint16Array;
|
|
Int32Array = global2.Int32Array;
|
|
Uint32Array = global2.Uint32Array;
|
|
Float32Array = global2.Float32Array;
|
|
Float64Array = global2.Float64Array;
|
|
BigInt64Array = global2.BigInt64Array;
|
|
BigUint64Array = global2.BigUint64Array;
|
|
}
|
|
;
|
|
if (uni.restoreGlobal) {
|
|
uni.restoreGlobal(Vue, weex, plus, setTimeout, clearTimeout, setInterval, clearInterval);
|
|
}
|
|
(function(vue) {
|
|
"use strict";
|
|
function formatAppLog(type, filename, ...args) {
|
|
if (uni.__log__) {
|
|
uni.__log__(type, filename, ...args);
|
|
} else {
|
|
console[type].apply(console, [...args, filename]);
|
|
}
|
|
}
|
|
const defineMixin = (options) => {
|
|
return options;
|
|
};
|
|
function email(value) {
|
|
return /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/.test(value);
|
|
}
|
|
function mobile(value) {
|
|
return /^1[23456789]\d{9}$/.test(value);
|
|
}
|
|
function url(value) {
|
|
return /^((https|http|ftp|rtsp|mms):\/\/)(([0-9a-zA-Z_!~*'().&=+$%-]+: )?[0-9a-zA-Z_!~*'().&=+$%-]+@)?(([0-9]{1,3}.){3}[0-9]{1,3}|([0-9a-zA-Z_!~*'()-]+.)*([0-9a-zA-Z][0-9a-zA-Z-]{0,61})?[0-9a-zA-Z].[a-zA-Z]{2,6})(:[0-9]{1,4})?((\/?)|(\/[0-9a-zA-Z_!~*'().;?:@&=+$,%#-]+)+\/?)$/.test(value);
|
|
}
|
|
function date(value) {
|
|
if (!value)
|
|
return false;
|
|
if (number(value))
|
|
value = +value;
|
|
return !/Invalid|NaN/.test(new Date(value).toString());
|
|
}
|
|
function dateISO(value) {
|
|
return /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(value);
|
|
}
|
|
function number(value) {
|
|
return /^[\+-]?(\d+\.?\d*|\.\d+|\d\.\d+e\+\d+)$/.test(value);
|
|
}
|
|
function string(value) {
|
|
return typeof value === "string";
|
|
}
|
|
function digits(value) {
|
|
return /^\d+$/.test(value);
|
|
}
|
|
function idCard(value) {
|
|
return /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test(
|
|
value
|
|
);
|
|
}
|
|
function carNo(value) {
|
|
const xreg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/;
|
|
const creg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/;
|
|
if (value.length === 7) {
|
|
return creg.test(value);
|
|
}
|
|
if (value.length === 8) {
|
|
return xreg.test(value);
|
|
}
|
|
return false;
|
|
}
|
|
function amount(value) {
|
|
return /^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0\.\d{1,2}$/.test(value);
|
|
}
|
|
function chinese(value) {
|
|
const reg = /^[\u4e00-\u9fa5]+$/gi;
|
|
return reg.test(value);
|
|
}
|
|
function letter(value) {
|
|
return /^[a-zA-Z]*$/.test(value);
|
|
}
|
|
function enOrNum(value) {
|
|
const reg = /^[0-9a-zA-Z]*$/g;
|
|
return reg.test(value);
|
|
}
|
|
function contains(value, param) {
|
|
return value.indexOf(param) >= 0;
|
|
}
|
|
function range$1(value, param) {
|
|
return value >= param[0] && value <= param[1];
|
|
}
|
|
function rangeLength(value, param) {
|
|
return value.length >= param[0] && value.length <= param[1];
|
|
}
|
|
function landline(value) {
|
|
const reg = /^\d{3,4}-\d{7,8}(-\d{3,4})?$/;
|
|
return reg.test(value);
|
|
}
|
|
function empty(value) {
|
|
switch (typeof value) {
|
|
case "undefined":
|
|
return true;
|
|
case "string":
|
|
if (value.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g, "").length == 0)
|
|
return true;
|
|
break;
|
|
case "boolean":
|
|
if (!value)
|
|
return true;
|
|
break;
|
|
case "number":
|
|
if (value === 0 || isNaN(value))
|
|
return true;
|
|
break;
|
|
case "object":
|
|
if (value === null || value.length === 0)
|
|
return true;
|
|
for (const i in value) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function jsonString(value) {
|
|
if (typeof value === "string") {
|
|
try {
|
|
const obj2 = JSON.parse(value);
|
|
if (typeof obj2 === "object" && obj2) {
|
|
return true;
|
|
}
|
|
return false;
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function array(value) {
|
|
if (typeof Array.isArray === "function") {
|
|
return Array.isArray(value);
|
|
}
|
|
return Object.prototype.toString.call(value) === "[object Array]";
|
|
}
|
|
function object(value) {
|
|
return Object.prototype.toString.call(value) === "[object Object]";
|
|
}
|
|
function code(value, len = 6) {
|
|
return new RegExp(`^\\d{${len}}$`).test(value);
|
|
}
|
|
function func(value) {
|
|
return typeof value === "function";
|
|
}
|
|
function promise(value) {
|
|
return object(value) && func(value.then) && func(value.catch);
|
|
}
|
|
function image(value) {
|
|
const newValue = value.split("?")[0];
|
|
const IMAGE_REGEXP = /\.(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg)/i;
|
|
return IMAGE_REGEXP.test(newValue);
|
|
}
|
|
function video(value) {
|
|
const VIDEO_REGEXP = /\.(mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv|m3u8)/i;
|
|
return VIDEO_REGEXP.test(value);
|
|
}
|
|
function regExp(o) {
|
|
return o && Object.prototype.toString.call(o) === "[object RegExp]";
|
|
}
|
|
const test = {
|
|
email,
|
|
mobile,
|
|
url,
|
|
date,
|
|
dateISO,
|
|
number,
|
|
digits,
|
|
idCard,
|
|
carNo,
|
|
amount,
|
|
chinese,
|
|
letter,
|
|
enOrNum,
|
|
contains,
|
|
range: range$1,
|
|
rangeLength,
|
|
empty,
|
|
isEmpty: empty,
|
|
jsonString,
|
|
landline,
|
|
object,
|
|
array,
|
|
code,
|
|
func,
|
|
promise,
|
|
video,
|
|
image,
|
|
regExp,
|
|
string
|
|
};
|
|
function strip(num, precision = 15) {
|
|
return +parseFloat(Number(num).toPrecision(precision));
|
|
}
|
|
function digitLength(num) {
|
|
const eSplit = num.toString().split(/[eE]/);
|
|
const len = (eSplit[0].split(".")[1] || "").length - +(eSplit[1] || 0);
|
|
return len > 0 ? len : 0;
|
|
}
|
|
function float2Fixed(num) {
|
|
if (num.toString().indexOf("e") === -1) {
|
|
return Number(num.toString().replace(".", ""));
|
|
}
|
|
const dLen = digitLength(num);
|
|
return dLen > 0 ? strip(Number(num) * Math.pow(10, dLen)) : Number(num);
|
|
}
|
|
function checkBoundary(num) {
|
|
{
|
|
if (num > Number.MAX_SAFE_INTEGER || num < Number.MIN_SAFE_INTEGER) {
|
|
formatAppLog("warn", "at uni_modules/uview-plus/libs/function/digit.js:45", `${num} 超出了精度限制,结果可能不正确`);
|
|
}
|
|
}
|
|
}
|
|
function iteratorOperation(arr, operation) {
|
|
const [num1, num2, ...others] = arr;
|
|
let res = operation(num1, num2);
|
|
others.forEach((num) => {
|
|
res = operation(res, num);
|
|
});
|
|
return res;
|
|
}
|
|
function times(...nums) {
|
|
if (nums.length > 2) {
|
|
return iteratorOperation(nums, times);
|
|
}
|
|
const [num1, num2] = nums;
|
|
const num1Changed = float2Fixed(num1);
|
|
const num2Changed = float2Fixed(num2);
|
|
const baseNum = digitLength(num1) + digitLength(num2);
|
|
const leftValue = num1Changed * num2Changed;
|
|
checkBoundary(leftValue);
|
|
return leftValue / Math.pow(10, baseNum);
|
|
}
|
|
function divide(...nums) {
|
|
if (nums.length > 2) {
|
|
return iteratorOperation(nums, divide);
|
|
}
|
|
const [num1, num2] = nums;
|
|
const num1Changed = float2Fixed(num1);
|
|
const num2Changed = float2Fixed(num2);
|
|
checkBoundary(num1Changed);
|
|
checkBoundary(num2Changed);
|
|
return times(num1Changed / num2Changed, strip(Math.pow(10, digitLength(num2) - digitLength(num1))));
|
|
}
|
|
function round(num, ratio) {
|
|
const base = Math.pow(10, ratio);
|
|
let result = divide(Math.round(Math.abs(times(num, base))), base);
|
|
if (num < 0 && result !== 0) {
|
|
result = times(result, -1);
|
|
}
|
|
return result;
|
|
}
|
|
const version = "3";
|
|
{
|
|
formatAppLog("log", "at uni_modules/uview-plus/libs/config/config.js:5", `
|
|
%c uview-plus V${version} %c https://ijry.github.io/uview-plus/
|
|
|
|
`, "color: #ffffff; background: #3c9cff; padding:5px 0;", "color: #3c9cff;background: #ffffff; padding:5px 0;");
|
|
}
|
|
const config = {
|
|
v: version,
|
|
version,
|
|
// 主题名称
|
|
type: [
|
|
"primary",
|
|
"success",
|
|
"info",
|
|
"error",
|
|
"warning"
|
|
],
|
|
// 颜色部分,本来可以通过scss的:export导出供js使用,但是奈何nvue不支持
|
|
color: {
|
|
"u-primary": "#2979ff",
|
|
"u-warning": "#ff9900",
|
|
"u-success": "#19be6b",
|
|
"u-error": "#fa3534",
|
|
"u-info": "#909399",
|
|
"u-main-color": "#303133",
|
|
"u-content-color": "#606266",
|
|
"u-tips-color": "#909399",
|
|
"u-light-color": "#c0c4cc"
|
|
},
|
|
// 默认单位,可以通过配置为rpx,那么在用于传入组件大小参数为数值时,就默认为rpx
|
|
unit: "px"
|
|
};
|
|
function range(min = 0, max = 0, value = 0) {
|
|
return Math.max(min, Math.min(max, Number(value)));
|
|
}
|
|
function getPx(value, unit = false) {
|
|
if (number(value)) {
|
|
return unit ? `${value}px` : Number(value);
|
|
}
|
|
if (/(rpx|upx)$/.test(value)) {
|
|
return unit ? `${uni.upx2px(parseInt(value))}px` : Number(uni.upx2px(parseInt(value)));
|
|
}
|
|
return unit ? `${parseInt(value)}px` : parseInt(value);
|
|
}
|
|
function sleep(value = 30) {
|
|
return new Promise((resolve) => {
|
|
setTimeout(() => {
|
|
resolve();
|
|
}, value);
|
|
});
|
|
}
|
|
function os() {
|
|
return uni.getSystemInfoSync().platform.toLowerCase();
|
|
}
|
|
function sys() {
|
|
return uni.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") {
|
|
if (empty(customStyle) || typeof customStyle === "object" && target === "object" || target === "string" && typeof customStyle === "string") {
|
|
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 string2 = "";
|
|
if (typeof customStyle === "object") {
|
|
customStyle.forEach((val, i) => {
|
|
const key = i.replace(/([A-Z])/g, "-$1").toLowerCase();
|
|
string2 += `${key}:${val};`;
|
|
});
|
|
}
|
|
return trim(string2);
|
|
}
|
|
function addUnit(value = "auto", unit = "") {
|
|
if (!unit) {
|
|
unit = config.unit || "px";
|
|
}
|
|
value = String(value);
|
|
return number(value) ? `${value}${unit}` : value;
|
|
}
|
|
function deepClone(obj2) {
|
|
if ([null, void 0, NaN, false].includes(obj2))
|
|
return obj2;
|
|
if (typeof obj2 !== "object" && typeof obj2 !== "function") {
|
|
return obj2;
|
|
}
|
|
const o = array(obj2) ? [] : {};
|
|
for (const i in obj2) {
|
|
if (obj2.hasOwnProperty(i)) {
|
|
o[i] = typeof obj2[i] === "object" ? deepClone(obj2[i]) : obj2[i];
|
|
}
|
|
}
|
|
return o;
|
|
}
|
|
function deepMerge$1(targetOrigin = {}, source = {}) {
|
|
let target = deepClone(targetOrigin);
|
|
if (typeof target !== "object" || typeof source !== "object")
|
|
return false;
|
|
for (const prop in source) {
|
|
if (!source.hasOwnProperty(prop))
|
|
continue;
|
|
if (prop in target) {
|
|
if (source[prop] == null) {
|
|
target[prop] = source[prop];
|
|
} else 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$1(target[prop], source[prop]);
|
|
}
|
|
} else {
|
|
target[prop] = source[prop];
|
|
}
|
|
}
|
|
return target;
|
|
}
|
|
function shallowMerge(target, source = {}) {
|
|
if (typeof target !== "object" || typeof source !== "object")
|
|
return false;
|
|
for (const prop in source) {
|
|
if (!source.hasOwnProperty(prop))
|
|
continue;
|
|
if (prop in target) {
|
|
if (source[prop] == null) {
|
|
target[prop] = source[prop];
|
|
} else 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] = shallowMerge(target[prop], source[prop]);
|
|
}
|
|
} else {
|
|
target[prop] = source[prop];
|
|
}
|
|
}
|
|
return target;
|
|
}
|
|
function error(err) {
|
|
{
|
|
formatAppLog("error", "at uni_modules/uview-plus/libs/function/index.js:275", `uView提示:${err}`);
|
|
}
|
|
}
|
|
function randomArray(array2 = []) {
|
|
return array2.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 times2 = Math.ceil(fillLength / fillString.length);
|
|
while (times2 >>= 1) {
|
|
fillString += fillString;
|
|
if (times2 === 1) {
|
|
fillString += fillString;
|
|
}
|
|
}
|
|
return fillString.slice(0, fillLength) + str;
|
|
};
|
|
}
|
|
function timeFormat(dateTime = null, formatStr = "yyyy-mm-dd") {
|
|
let date2;
|
|
if (!dateTime) {
|
|
date2 = new Date();
|
|
} else if (/^\d{10}$/.test(dateTime.toString().trim())) {
|
|
date2 = new Date(dateTime * 1e3);
|
|
} else if (typeof dateTime === "string" && /^\d+$/.test(dateTime.trim())) {
|
|
date2 = new Date(Number(dateTime));
|
|
} else {
|
|
date2 = new Date(
|
|
typeof dateTime === "string" ? dateTime.replace(/-/g, "/") : dateTime
|
|
);
|
|
}
|
|
const timeSource = {
|
|
"y": date2.getFullYear().toString(),
|
|
// 年
|
|
"m": (date2.getMonth() + 1).toString().padStart(2, "0"),
|
|
// 月
|
|
"d": date2.getDate().toString().padStart(2, "0"),
|
|
// 日
|
|
"h": date2.getHours().toString().padStart(2, "0"),
|
|
// 时
|
|
"M": date2.getMinutes().toString().padStart(2, "0"),
|
|
// 分
|
|
"s": date2.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(new Date());
|
|
timestamp = parseInt(timestamp);
|
|
if (timestamp.toString().length == 10)
|
|
timestamp *= 1e3;
|
|
let timer = 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) {
|
|
uni.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(number2, decimals = 0, decimalPoint = ".", thousandsSeparator = ",") {
|
|
number2 = `${number2}`.replace(/[^0-9+-Ee.]/g, "");
|
|
const n = !isFinite(+number2) ? 0 : +number2;
|
|
const prec = !isFinite(+decimals) ? 0 : Math.abs(decimals);
|
|
const sep = typeof thousandsSeparator === "undefined" ? "," : thousandsSeparator;
|
|
const dec = typeof decimalPoint === "undefined" ? "." : decimalPoint;
|
|
let s = "";
|
|
s = (prec ? round(n, prec) + "" : `${Math.round(n)}`).split(".");
|
|
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 formValidate(instance, event) {
|
|
const formItem = $parent.call(instance, "u-form-item");
|
|
const form = $parent.call(instance, "u-form");
|
|
if (formItem && form) {
|
|
form.validateField(formItem.prop, () => {
|
|
}, event);
|
|
}
|
|
}
|
|
function getProperty(obj2, key) {
|
|
if (typeof obj2 !== "object" || null == obj2) {
|
|
return "";
|
|
}
|
|
if (typeof key !== "string" || key === "") {
|
|
return "";
|
|
}
|
|
if (key.indexOf(".") !== -1) {
|
|
const keys = key.split(".");
|
|
let firstObj = obj2[keys[0]] || {};
|
|
for (let i = 1; i < keys.length; i++) {
|
|
if (firstObj) {
|
|
firstObj = firstObj[keys[i]];
|
|
}
|
|
}
|
|
return firstObj;
|
|
}
|
|
return obj2[key];
|
|
}
|
|
function setProperty(obj2, key, value) {
|
|
if (typeof obj2 !== "object" || null == obj2) {
|
|
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(obj2, keys, value);
|
|
} else {
|
|
obj2[key] = value;
|
|
}
|
|
}
|
|
function page() {
|
|
const pages2 = getCurrentPages();
|
|
return `/${pages2[pages2.length - 1].route || ""}`;
|
|
}
|
|
function pages() {
|
|
const pages2 = getCurrentPages();
|
|
return pages2;
|
|
}
|
|
const index = {
|
|
range,
|
|
getPx,
|
|
sleep,
|
|
os,
|
|
sys,
|
|
random,
|
|
guid,
|
|
$parent,
|
|
addStyle,
|
|
addUnit,
|
|
deepClone,
|
|
deepMerge: deepMerge$1,
|
|
shallowMerge,
|
|
error,
|
|
randomArray,
|
|
timeFormat,
|
|
timeFrom,
|
|
trim,
|
|
queryParams,
|
|
toast,
|
|
type2icon,
|
|
priceFormat,
|
|
getDuration,
|
|
padZero,
|
|
formValidate,
|
|
getProperty,
|
|
setProperty,
|
|
page,
|
|
pages
|
|
// setConfig
|
|
};
|
|
class Router {
|
|
constructor() {
|
|
this.config = {
|
|
type: "navigateTo",
|
|
url: "",
|
|
delta: 1,
|
|
// navigateBack页面后退时,回退的层数
|
|
params: {},
|
|
// 传递的参数
|
|
animationType: "pop-in",
|
|
// 窗口动画,只在APP有效
|
|
animationDuration: 300,
|
|
// 窗口动画持续时间,单位毫秒,只在APP有效
|
|
intercept: false
|
|
// 是否需要拦截
|
|
};
|
|
this.route = this.route.bind(this);
|
|
}
|
|
// 判断url前面是否有"/",如果没有则加上,否则无法跳转
|
|
addRootPath(url2) {
|
|
return url2[0] === "/" ? url2 : `/${url2}`;
|
|
}
|
|
// 整合路由参数
|
|
mixinParam(url2, params) {
|
|
url2 = url2 && this.addRootPath(url2);
|
|
let query = "";
|
|
if (/.*\/.*\?.*=.*/.test(url2)) {
|
|
query = queryParams(params, false);
|
|
return url2 += `&${query}`;
|
|
}
|
|
query = queryParams(params);
|
|
return url2 += query;
|
|
}
|
|
// 对外的方法名称
|
|
async route(options = {}, params = {}) {
|
|
let mergeConfig2 = {};
|
|
if (typeof options === "string") {
|
|
mergeConfig2.url = this.mixinParam(options, params);
|
|
mergeConfig2.type = "navigateTo";
|
|
} else {
|
|
mergeConfig2 = deepMerge$1(this.config, options);
|
|
mergeConfig2.url = this.mixinParam(options.url, options.params);
|
|
}
|
|
if (mergeConfig2.url === page())
|
|
return;
|
|
if (params.intercept) {
|
|
this.config.intercept = params.intercept;
|
|
}
|
|
mergeConfig2.params = params;
|
|
mergeConfig2 = deepMerge$1(this.config, mergeConfig2);
|
|
if (typeof uni.$u.routeIntercept === "function") {
|
|
const isNext = await new Promise((resolve, reject) => {
|
|
uni.$u.routeIntercept(mergeConfig2, resolve);
|
|
});
|
|
isNext && this.openPage(mergeConfig2);
|
|
} else {
|
|
this.openPage(mergeConfig2);
|
|
}
|
|
}
|
|
// 执行路由跳转
|
|
openPage(config2) {
|
|
const {
|
|
url: url2,
|
|
type,
|
|
delta,
|
|
animationType,
|
|
animationDuration
|
|
} = config2;
|
|
if (config2.type == "navigateTo" || config2.type == "to") {
|
|
uni.navigateTo({
|
|
url: url2,
|
|
animationType,
|
|
animationDuration
|
|
});
|
|
}
|
|
if (config2.type == "redirectTo" || config2.type == "redirect") {
|
|
uni.redirectTo({
|
|
url: url2
|
|
});
|
|
}
|
|
if (config2.type == "switchTab" || config2.type == "tab") {
|
|
uni.switchTab({
|
|
url: url2
|
|
});
|
|
}
|
|
if (config2.type == "reLaunch" || config2.type == "launch") {
|
|
uni.reLaunch({
|
|
url: url2
|
|
});
|
|
}
|
|
if (config2.type == "navigateBack" || config2.type == "back") {
|
|
uni.navigateBack({
|
|
delta
|
|
});
|
|
}
|
|
}
|
|
}
|
|
const route = new Router().route;
|
|
const mixin = defineMixin({
|
|
// 定义每个组件都可能需要用到的外部样式以及类名
|
|
props: {
|
|
// 每个组件都有的父组件传递的样式,可以为字符串或者对象形式
|
|
customStyle: {
|
|
type: [Object, String],
|
|
default: () => ({})
|
|
},
|
|
customClass: {
|
|
type: String,
|
|
default: ""
|
|
},
|
|
// 跳转的页面路径
|
|
url: {
|
|
type: String,
|
|
default: ""
|
|
},
|
|
// 页面跳转的类型
|
|
linkType: {
|
|
type: String,
|
|
default: "navigateTo"
|
|
}
|
|
},
|
|
data() {
|
|
return {};
|
|
},
|
|
onLoad() {
|
|
this.$u.getRect = this.$uGetRect;
|
|
},
|
|
created() {
|
|
this.$u.getRect = this.$uGetRect;
|
|
},
|
|
computed: {
|
|
// 在2.x版本中,将会把$u挂载到uni对象下,导致在模板中无法使用uni.$u.xxx形式
|
|
// 所以这里通过computed计算属性将其附加到this.$u上,就可以在模板或者js中使用uni.$u.xxx
|
|
// 只在nvue环境通过此方式引入完整的$u,其他平台会出现性能问题,非nvue则按需引入(主要原因是props过大)
|
|
$u() {
|
|
return deepMerge$1(uni.$u, {
|
|
props: void 0,
|
|
http: void 0,
|
|
mixin: void 0
|
|
});
|
|
},
|
|
/**
|
|
* 生成bem规则类名
|
|
* 由于微信小程序,H5,nvue之间绑定class的差异,无法通过:class="[bem()]"的形式进行同用
|
|
* 故采用如下折中做法,最后返回的是数组(一般平台)或字符串(支付宝和字节跳动平台),类似['a', 'b', 'c']或'a b c'的形式
|
|
* @param {String} name 组件名称
|
|
* @param {Array} fixed 一直会存在的类名
|
|
* @param {Array} change 会根据变量值为true或者false而出现或者隐藏的类名
|
|
* @returns {Array|string}
|
|
*/
|
|
bem() {
|
|
return function(name, fixed, change) {
|
|
const prefix = `u-${name}--`;
|
|
const classes = {};
|
|
if (fixed) {
|
|
fixed.map((item) => {
|
|
classes[prefix + this[item]] = true;
|
|
});
|
|
}
|
|
if (change) {
|
|
change.map((item) => {
|
|
this[item] ? classes[prefix + item] = this[item] : delete classes[prefix + item];
|
|
});
|
|
}
|
|
return Object.keys(classes);
|
|
};
|
|
}
|
|
},
|
|
methods: {
|
|
// 跳转某一个页面
|
|
openPage(urlKey = "url") {
|
|
const url2 = this[urlKey];
|
|
if (url2) {
|
|
route({ type: this.linkType, url: url2 });
|
|
}
|
|
},
|
|
// 查询节点信息
|
|
// 目前此方法在支付宝小程序中无法获取组件跟接点的尺寸,为支付宝的bug(2020-07-21)
|
|
// 解决办法为在组件根部再套一个没有任何作用的view元素
|
|
$uGetRect(selector, all) {
|
|
return new Promise((resolve) => {
|
|
uni.createSelectorQuery().in(this)[all ? "selectAll" : "select"](selector).boundingClientRect((rect) => {
|
|
if (all && Array.isArray(rect) && rect.length) {
|
|
resolve(rect);
|
|
}
|
|
if (!all && rect) {
|
|
resolve(rect);
|
|
}
|
|
}).exec();
|
|
});
|
|
},
|
|
getParentData(parentName = "") {
|
|
if (!this.parent)
|
|
this.parent = {};
|
|
this.parent = $parent.call(this, parentName);
|
|
if (this.parent.children) {
|
|
this.parent.children.indexOf(this) === -1 && this.parent.children.push(this);
|
|
}
|
|
if (this.parent && this.parentData) {
|
|
Object.keys(this.parentData).map((key) => {
|
|
this.parentData[key] = this.parent[key];
|
|
});
|
|
}
|
|
},
|
|
// 阻止事件冒泡
|
|
preventEvent(e) {
|
|
e && typeof e.stopPropagation === "function" && e.stopPropagation();
|
|
},
|
|
// 空操作
|
|
noop(e) {
|
|
this.preventEvent(e);
|
|
}
|
|
},
|
|
onReachBottom() {
|
|
uni.$emit("uOnReachBottom");
|
|
},
|
|
beforeUnmount() {
|
|
if (this.parent && test.array(this.parent.children)) {
|
|
const childrenList = this.parent.children;
|
|
childrenList.map((child, index2) => {
|
|
if (child === this) {
|
|
childrenList.splice(index2, 1);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|
|
const mpMixin = defineMixin({});
|
|
const { toString } = Object.prototype;
|
|
function isArray(val) {
|
|
return toString.call(val) === "[object Array]";
|
|
}
|
|
function isObject(val) {
|
|
return val !== null && typeof val === "object";
|
|
}
|
|
function isDate(val) {
|
|
return toString.call(val) === "[object Date]";
|
|
}
|
|
function isURLSearchParams(val) {
|
|
return typeof URLSearchParams !== "undefined" && val instanceof URLSearchParams;
|
|
}
|
|
function forEach(obj2, fn) {
|
|
if (obj2 === null || typeof obj2 === "undefined") {
|
|
return;
|
|
}
|
|
if (typeof obj2 !== "object") {
|
|
obj2 = [obj2];
|
|
}
|
|
if (isArray(obj2)) {
|
|
for (let i = 0, l = obj2.length; i < l; i++) {
|
|
fn.call(null, obj2[i], i, obj2);
|
|
}
|
|
} else {
|
|
for (const key in obj2) {
|
|
if (Object.prototype.hasOwnProperty.call(obj2, key)) {
|
|
fn.call(null, obj2[key], key, obj2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function isPlainObject(obj2) {
|
|
return Object.prototype.toString.call(obj2) === "[object Object]";
|
|
}
|
|
function deepMerge() {
|
|
const result = {};
|
|
function assignValue(val, key) {
|
|
if (typeof result[key] === "object" && typeof val === "object") {
|
|
result[key] = deepMerge(result[key], val);
|
|
} else if (typeof val === "object") {
|
|
result[key] = deepMerge({}, val);
|
|
} else {
|
|
result[key] = val;
|
|
}
|
|
}
|
|
for (let i = 0, l = arguments.length; i < l; i++) {
|
|
forEach(arguments[i], assignValue);
|
|
}
|
|
return result;
|
|
}
|
|
function isUndefined(val) {
|
|
return typeof val === "undefined";
|
|
}
|
|
function encode(val) {
|
|
return encodeURIComponent(val).replace(/%40/gi, "@").replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g, "+").replace(/%5B/gi, "[").replace(/%5D/gi, "]");
|
|
}
|
|
function buildURL(url2, params) {
|
|
if (!params) {
|
|
return url2;
|
|
}
|
|
let serializedParams;
|
|
if (isURLSearchParams(params)) {
|
|
serializedParams = params.toString();
|
|
} else {
|
|
const parts = [];
|
|
forEach(params, (val, key) => {
|
|
if (val === null || typeof val === "undefined") {
|
|
return;
|
|
}
|
|
if (isArray(val)) {
|
|
key = `${key}[]`;
|
|
} else {
|
|
val = [val];
|
|
}
|
|
forEach(val, (v) => {
|
|
if (isDate(v)) {
|
|
v = v.toISOString();
|
|
} else if (isObject(v)) {
|
|
v = JSON.stringify(v);
|
|
}
|
|
parts.push(`${encode(key)}=${encode(v)}`);
|
|
});
|
|
});
|
|
serializedParams = parts.join("&");
|
|
}
|
|
if (serializedParams) {
|
|
const hashmarkIndex = url2.indexOf("#");
|
|
if (hashmarkIndex !== -1) {
|
|
url2 = url2.slice(0, hashmarkIndex);
|
|
}
|
|
url2 += (url2.indexOf("?") === -1 ? "?" : "&") + serializedParams;
|
|
}
|
|
return url2;
|
|
}
|
|
function isAbsoluteURL(url2) {
|
|
return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url2);
|
|
}
|
|
function combineURLs(baseURL, relativeURL) {
|
|
return relativeURL ? `${baseURL.replace(/\/+$/, "")}/${relativeURL.replace(/^\/+/, "")}` : baseURL;
|
|
}
|
|
function buildFullPath(baseURL, requestedURL) {
|
|
if (baseURL && !isAbsoluteURL(requestedURL)) {
|
|
return combineURLs(baseURL, requestedURL);
|
|
}
|
|
return requestedURL;
|
|
}
|
|
function settle(resolve, reject, response) {
|
|
const { validateStatus } = response.config;
|
|
const status = response.statusCode;
|
|
if (status && (!validateStatus || validateStatus(status))) {
|
|
resolve(response);
|
|
} else {
|
|
reject(response);
|
|
}
|
|
}
|
|
const mergeKeys$1 = (keys, config2) => {
|
|
const config3 = {};
|
|
keys.forEach((prop) => {
|
|
if (!isUndefined(config2[prop])) {
|
|
config3[prop] = config2[prop];
|
|
}
|
|
});
|
|
return config3;
|
|
};
|
|
const adapter = (config2) => new Promise((resolve, reject) => {
|
|
const fullPath = buildURL(buildFullPath(config2.baseURL, config2.url), config2.params);
|
|
const _config = {
|
|
url: fullPath,
|
|
header: config2.header,
|
|
complete: (response) => {
|
|
config2.fullPath = fullPath;
|
|
response.config = config2;
|
|
try {
|
|
if (typeof response.data === "string") {
|
|
response.data = JSON.parse(response.data);
|
|
}
|
|
} catch (e) {
|
|
}
|
|
settle(resolve, reject, response);
|
|
}
|
|
};
|
|
let requestTask;
|
|
if (config2.method === "UPLOAD") {
|
|
delete _config.header["content-type"];
|
|
delete _config.header["Content-Type"];
|
|
const otherConfig = {
|
|
filePath: config2.filePath,
|
|
name: config2.name
|
|
};
|
|
const optionalKeys = [
|
|
"files",
|
|
"timeout",
|
|
"formData"
|
|
];
|
|
requestTask = uni.uploadFile({ ..._config, ...otherConfig, ...mergeKeys$1(optionalKeys, config2) });
|
|
} else if (config2.method === "DOWNLOAD") {
|
|
if (!isUndefined(config2.timeout)) {
|
|
_config.timeout = config2.timeout;
|
|
}
|
|
requestTask = uni.downloadFile(_config);
|
|
} else {
|
|
const optionalKeys = [
|
|
"data",
|
|
"method",
|
|
"timeout",
|
|
"dataType",
|
|
"responseType",
|
|
"sslVerify",
|
|
"firstIpv4"
|
|
];
|
|
requestTask = uni.request({ ..._config, ...mergeKeys$1(optionalKeys, config2) });
|
|
}
|
|
if (config2.getTask) {
|
|
config2.getTask(requestTask, config2);
|
|
}
|
|
});
|
|
const dispatchRequest = (config2) => adapter(config2);
|
|
function InterceptorManager() {
|
|
this.handlers = [];
|
|
}
|
|
InterceptorManager.prototype.use = function use(fulfilled, rejected) {
|
|
this.handlers.push({
|
|
fulfilled,
|
|
rejected
|
|
});
|
|
return this.handlers.length - 1;
|
|
};
|
|
InterceptorManager.prototype.eject = function eject(id) {
|
|
if (this.handlers[id]) {
|
|
this.handlers[id] = null;
|
|
}
|
|
};
|
|
InterceptorManager.prototype.forEach = function forEach2(fn) {
|
|
this.handlers.forEach((h) => {
|
|
if (h !== null) {
|
|
fn(h);
|
|
}
|
|
});
|
|
};
|
|
const mergeKeys = (keys, globalsConfig, config2) => {
|
|
const config3 = {};
|
|
keys.forEach((prop) => {
|
|
if (!isUndefined(config2[prop])) {
|
|
config3[prop] = config2[prop];
|
|
} else if (!isUndefined(globalsConfig[prop])) {
|
|
config3[prop] = globalsConfig[prop];
|
|
}
|
|
});
|
|
return config3;
|
|
};
|
|
const mergeConfig = (globalsConfig, config2 = {}) => {
|
|
const method = config2.method || globalsConfig.method || "GET";
|
|
let config3 = {
|
|
baseURL: globalsConfig.baseURL || "",
|
|
method,
|
|
url: config2.url || "",
|
|
params: config2.params || {},
|
|
custom: { ...globalsConfig.custom || {}, ...config2.custom || {} },
|
|
header: deepMerge(globalsConfig.header || {}, config2.header || {})
|
|
};
|
|
const defaultToConfig2Keys = ["getTask", "validateStatus"];
|
|
config3 = { ...config3, ...mergeKeys(defaultToConfig2Keys, globalsConfig, config2) };
|
|
if (method === "DOWNLOAD") {
|
|
if (!isUndefined(config2.timeout)) {
|
|
config3.timeout = config2.timeout;
|
|
} else if (!isUndefined(globalsConfig.timeout)) {
|
|
config3.timeout = globalsConfig.timeout;
|
|
}
|
|
} else if (method === "UPLOAD") {
|
|
delete config3.header["content-type"];
|
|
delete config3.header["Content-Type"];
|
|
const uploadKeys = [
|
|
"files",
|
|
"filePath",
|
|
"name",
|
|
"timeout",
|
|
"formData"
|
|
];
|
|
uploadKeys.forEach((prop) => {
|
|
if (!isUndefined(config2[prop])) {
|
|
config3[prop] = config2[prop];
|
|
}
|
|
});
|
|
if (isUndefined(config3.timeout) && !isUndefined(globalsConfig.timeout)) {
|
|
config3.timeout = globalsConfig.timeout;
|
|
}
|
|
} else {
|
|
const defaultsKeys = [
|
|
"data",
|
|
"timeout",
|
|
"dataType",
|
|
"responseType",
|
|
"sslVerify",
|
|
"firstIpv4"
|
|
];
|
|
config3 = { ...config3, ...mergeKeys(defaultsKeys, globalsConfig, config2) };
|
|
}
|
|
return config3;
|
|
};
|
|
const defaults = {
|
|
baseURL: "",
|
|
header: {},
|
|
method: "GET",
|
|
dataType: "json",
|
|
responseType: "text",
|
|
custom: {},
|
|
timeout: 6e4,
|
|
sslVerify: true,
|
|
firstIpv4: false,
|
|
validateStatus: function validateStatus(status) {
|
|
return status >= 200 && status < 300;
|
|
}
|
|
};
|
|
var clone = function() {
|
|
function _instanceof(obj2, type) {
|
|
return type != null && obj2 instanceof type;
|
|
}
|
|
var nativeMap;
|
|
try {
|
|
nativeMap = Map;
|
|
} catch (_) {
|
|
nativeMap = function() {
|
|
};
|
|
}
|
|
var nativeSet;
|
|
try {
|
|
nativeSet = Set;
|
|
} catch (_) {
|
|
nativeSet = function() {
|
|
};
|
|
}
|
|
var nativePromise;
|
|
try {
|
|
nativePromise = Promise;
|
|
} catch (_) {
|
|
nativePromise = function() {
|
|
};
|
|
}
|
|
function clone2(parent, circular, depth, prototype, includeNonEnumerable) {
|
|
if (typeof circular === "object") {
|
|
depth = circular.depth;
|
|
prototype = circular.prototype;
|
|
includeNonEnumerable = circular.includeNonEnumerable;
|
|
circular = circular.circular;
|
|
}
|
|
var allParents = [];
|
|
var allChildren = [];
|
|
var useBuffer = typeof Buffer != "undefined";
|
|
if (typeof circular == "undefined")
|
|
circular = true;
|
|
if (typeof depth == "undefined")
|
|
depth = Infinity;
|
|
function _clone(parent2, depth2) {
|
|
if (parent2 === null)
|
|
return null;
|
|
if (depth2 === 0)
|
|
return parent2;
|
|
var child;
|
|
var proto;
|
|
if (typeof parent2 != "object") {
|
|
return parent2;
|
|
}
|
|
if (_instanceof(parent2, nativeMap)) {
|
|
child = new nativeMap();
|
|
} else if (_instanceof(parent2, nativeSet)) {
|
|
child = new nativeSet();
|
|
} else if (_instanceof(parent2, nativePromise)) {
|
|
child = new nativePromise(function(resolve, reject) {
|
|
parent2.then(function(value) {
|
|
resolve(_clone(value, depth2 - 1));
|
|
}, function(err) {
|
|
reject(_clone(err, depth2 - 1));
|
|
});
|
|
});
|
|
} else if (clone2.__isArray(parent2)) {
|
|
child = [];
|
|
} else if (clone2.__isRegExp(parent2)) {
|
|
child = new RegExp(parent2.source, __getRegExpFlags(parent2));
|
|
if (parent2.lastIndex)
|
|
child.lastIndex = parent2.lastIndex;
|
|
} else if (clone2.__isDate(parent2)) {
|
|
child = new Date(parent2.getTime());
|
|
} else if (useBuffer && Buffer.isBuffer(parent2)) {
|
|
if (Buffer.from) {
|
|
child = Buffer.from(parent2);
|
|
} else {
|
|
child = new Buffer(parent2.length);
|
|
parent2.copy(child);
|
|
}
|
|
return child;
|
|
} else if (_instanceof(parent2, Error)) {
|
|
child = Object.create(parent2);
|
|
} else {
|
|
if (typeof prototype == "undefined") {
|
|
proto = Object.getPrototypeOf(parent2);
|
|
child = Object.create(proto);
|
|
} else {
|
|
child = Object.create(prototype);
|
|
proto = prototype;
|
|
}
|
|
}
|
|
if (circular) {
|
|
var index2 = allParents.indexOf(parent2);
|
|
if (index2 != -1) {
|
|
return allChildren[index2];
|
|
}
|
|
allParents.push(parent2);
|
|
allChildren.push(child);
|
|
}
|
|
if (_instanceof(parent2, nativeMap)) {
|
|
parent2.forEach(function(value, key) {
|
|
var keyChild = _clone(key, depth2 - 1);
|
|
var valueChild = _clone(value, depth2 - 1);
|
|
child.set(keyChild, valueChild);
|
|
});
|
|
}
|
|
if (_instanceof(parent2, nativeSet)) {
|
|
parent2.forEach(function(value) {
|
|
var entryChild = _clone(value, depth2 - 1);
|
|
child.add(entryChild);
|
|
});
|
|
}
|
|
for (var i in parent2) {
|
|
var attrs = Object.getOwnPropertyDescriptor(parent2, i);
|
|
if (attrs) {
|
|
child[i] = _clone(parent2[i], depth2 - 1);
|
|
}
|
|
try {
|
|
var objProperty = Object.getOwnPropertyDescriptor(parent2, i);
|
|
if (objProperty.set === "undefined") {
|
|
continue;
|
|
}
|
|
child[i] = _clone(parent2[i], depth2 - 1);
|
|
} catch (e) {
|
|
if (e instanceof TypeError) {
|
|
continue;
|
|
} else if (e instanceof ReferenceError) {
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
if (Object.getOwnPropertySymbols) {
|
|
var symbols = Object.getOwnPropertySymbols(parent2);
|
|
for (var i = 0; i < symbols.length; i++) {
|
|
var symbol = symbols[i];
|
|
var descriptor = Object.getOwnPropertyDescriptor(parent2, symbol);
|
|
if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {
|
|
continue;
|
|
}
|
|
child[symbol] = _clone(parent2[symbol], depth2 - 1);
|
|
Object.defineProperty(child, symbol, descriptor);
|
|
}
|
|
}
|
|
if (includeNonEnumerable) {
|
|
var allPropertyNames = Object.getOwnPropertyNames(parent2);
|
|
for (var i = 0; i < allPropertyNames.length; i++) {
|
|
var propertyName = allPropertyNames[i];
|
|
var descriptor = Object.getOwnPropertyDescriptor(parent2, propertyName);
|
|
if (descriptor && descriptor.enumerable) {
|
|
continue;
|
|
}
|
|
child[propertyName] = _clone(parent2[propertyName], depth2 - 1);
|
|
Object.defineProperty(child, propertyName, descriptor);
|
|
}
|
|
}
|
|
return child;
|
|
}
|
|
return _clone(parent, depth);
|
|
}
|
|
clone2.clonePrototype = function clonePrototype(parent) {
|
|
if (parent === null)
|
|
return null;
|
|
var c = function() {
|
|
};
|
|
c.prototype = parent;
|
|
return new c();
|
|
};
|
|
function __objToStr(o) {
|
|
return Object.prototype.toString.call(o);
|
|
}
|
|
clone2.__objToStr = __objToStr;
|
|
function __isDate(o) {
|
|
return typeof o === "object" && __objToStr(o) === "[object Date]";
|
|
}
|
|
clone2.__isDate = __isDate;
|
|
function __isArray(o) {
|
|
return typeof o === "object" && __objToStr(o) === "[object Array]";
|
|
}
|
|
clone2.__isArray = __isArray;
|
|
function __isRegExp(o) {
|
|
return typeof o === "object" && __objToStr(o) === "[object RegExp]";
|
|
}
|
|
clone2.__isRegExp = __isRegExp;
|
|
function __getRegExpFlags(re) {
|
|
var flags = "";
|
|
if (re.global)
|
|
flags += "g";
|
|
if (re.ignoreCase)
|
|
flags += "i";
|
|
if (re.multiline)
|
|
flags += "m";
|
|
return flags;
|
|
}
|
|
clone2.__getRegExpFlags = __getRegExpFlags;
|
|
return clone2;
|
|
}();
|
|
class Request {
|
|
/**
|
|
* @param {Object} arg - 全局配置
|
|
* @param {String} arg.baseURL - 全局根路径
|
|
* @param {Object} arg.header - 全局header
|
|
* @param {String} arg.method = [GET|POST|PUT|DELETE|CONNECT|HEAD|OPTIONS|TRACE] - 全局默认请求方式
|
|
* @param {String} arg.dataType = [json] - 全局默认的dataType
|
|
* @param {String} arg.responseType = [text|arraybuffer] - 全局默认的responseType。支付宝小程序不支持
|
|
* @param {Object} arg.custom - 全局默认的自定义参数
|
|
* @param {Number} arg.timeout - 全局默认的超时时间,单位 ms。默认60000。H5(HBuilderX 2.9.9+)、APP(HBuilderX 2.9.9+)、微信小程序(2.10.0)、支付宝小程序
|
|
* @param {Boolean} arg.sslVerify - 全局默认的是否验证 ssl 证书。默认true.仅App安卓端支持(HBuilderX 2.3.3+)
|
|
* @param {Boolean} arg.withCredentials - 全局默认的跨域请求时是否携带凭证(cookies)。默认false。仅H5支持(HBuilderX 2.6.15+)
|
|
* @param {Boolean} arg.firstIpv4 - 全DNS解析时优先使用ipv4。默认false。仅 App-Android 支持 (HBuilderX 2.8.0+)
|
|
* @param {Function(statusCode):Boolean} arg.validateStatus - 全局默认的自定义验证器。默认statusCode >= 200 && statusCode < 300
|
|
*/
|
|
constructor(arg = {}) {
|
|
if (!isPlainObject(arg)) {
|
|
arg = {};
|
|
formatAppLog("warn", "at uni_modules/uview-plus/libs/luch-request/core/Request.js:39", "设置全局参数必须接收一个Object");
|
|
}
|
|
this.config = clone({ ...defaults, ...arg });
|
|
this.interceptors = {
|
|
request: new InterceptorManager(),
|
|
response: new InterceptorManager()
|
|
};
|
|
}
|
|
/**
|
|
* @Function
|
|
* @param {Request~setConfigCallback} f - 设置全局默认配置
|
|
*/
|
|
setConfig(f) {
|
|
this.config = f(this.config);
|
|
}
|
|
middleware(config2) {
|
|
config2 = mergeConfig(this.config, config2);
|
|
const chain = [dispatchRequest, void 0];
|
|
let promise2 = Promise.resolve(config2);
|
|
this.interceptors.request.forEach((interceptor) => {
|
|
chain.unshift(interceptor.fulfilled, interceptor.rejected);
|
|
});
|
|
this.interceptors.response.forEach((interceptor) => {
|
|
chain.push(interceptor.fulfilled, interceptor.rejected);
|
|
});
|
|
while (chain.length) {
|
|
promise2 = promise2.then(chain.shift(), chain.shift());
|
|
}
|
|
return promise2;
|
|
}
|
|
/**
|
|
* @Function
|
|
* @param {Object} config - 请求配置项
|
|
* @prop {String} options.url - 请求路径
|
|
* @prop {Object} options.data - 请求参数
|
|
* @prop {Object} [options.responseType = config.responseType] [text|arraybuffer] - 响应的数据类型
|
|
* @prop {Object} [options.dataType = config.dataType] - 如果设为 json,会尝试对返回的数据做一次 JSON.parse
|
|
* @prop {Object} [options.header = config.header] - 请求header
|
|
* @prop {Object} [options.method = config.method] - 请求方法
|
|
* @returns {Promise<unknown>}
|
|
*/
|
|
request(config2 = {}) {
|
|
return this.middleware(config2);
|
|
}
|
|
get(url2, options = {}) {
|
|
return this.middleware({
|
|
url: url2,
|
|
method: "GET",
|
|
...options
|
|
});
|
|
}
|
|
post(url2, data, options = {}) {
|
|
return this.middleware({
|
|
url: url2,
|
|
data,
|
|
method: "POST",
|
|
...options
|
|
});
|
|
}
|
|
put(url2, data, options = {}) {
|
|
return this.middleware({
|
|
url: url2,
|
|
data,
|
|
method: "PUT",
|
|
...options
|
|
});
|
|
}
|
|
delete(url2, data, options = {}) {
|
|
return this.middleware({
|
|
url: url2,
|
|
data,
|
|
method: "DELETE",
|
|
...options
|
|
});
|
|
}
|
|
options(url2, data, options = {}) {
|
|
return this.middleware({
|
|
url: url2,
|
|
data,
|
|
method: "OPTIONS",
|
|
...options
|
|
});
|
|
}
|
|
upload(url2, config2 = {}) {
|
|
config2.url = url2;
|
|
config2.method = "UPLOAD";
|
|
return this.middleware(config2);
|
|
}
|
|
download(url2, config2 = {}) {
|
|
config2.url = url2;
|
|
config2.method = "DOWNLOAD";
|
|
return this.middleware(config2);
|
|
}
|
|
}
|
|
function colorGradient(startColor = "rgb(0, 0, 0)", endColor = "rgb(255, 255, 255)", step = 10) {
|
|
const startRGB = hexToRgb(startColor, false);
|
|
const startR = startRGB[0];
|
|
const startG = startRGB[1];
|
|
const startB = startRGB[2];
|
|
const endRGB = hexToRgb(endColor, false);
|
|
const endR = endRGB[0];
|
|
const endG = endRGB[1];
|
|
const endB = endRGB[2];
|
|
const sR = (endR - startR) / step;
|
|
const sG = (endG - startG) / step;
|
|
const sB = (endB - startB) / step;
|
|
const colorArr = [];
|
|
for (let i = 0; i < step; i++) {
|
|
let hex = rgbToHex(`rgb(${Math.round(sR * i + startR)},${Math.round(sG * i + startG)},${Math.round(sB * i + startB)})`);
|
|
if (i === 0)
|
|
hex = rgbToHex(startColor);
|
|
if (i === step - 1)
|
|
hex = rgbToHex(endColor);
|
|
colorArr.push(hex);
|
|
}
|
|
return colorArr;
|
|
}
|
|
function hexToRgb(sColor, str = true) {
|
|
const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
|
|
sColor = String(sColor).toLowerCase();
|
|
if (sColor && reg.test(sColor)) {
|
|
if (sColor.length === 4) {
|
|
let sColorNew = "#";
|
|
for (let i = 1; i < 4; i += 1) {
|
|
sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
|
|
}
|
|
sColor = sColorNew;
|
|
}
|
|
const sColorChange = [];
|
|
for (let i = 1; i < 7; i += 2) {
|
|
sColorChange.push(parseInt(`0x${sColor.slice(i, i + 2)}`));
|
|
}
|
|
if (!str) {
|
|
return sColorChange;
|
|
}
|
|
return `rgb(${sColorChange[0]},${sColorChange[1]},${sColorChange[2]})`;
|
|
}
|
|
if (/^(rgb|RGB)/.test(sColor)) {
|
|
const arr = sColor.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",");
|
|
return arr.map((val) => Number(val));
|
|
}
|
|
return sColor;
|
|
}
|
|
function rgbToHex(rgb) {
|
|
const _this = rgb;
|
|
const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
|
|
if (/^(rgb|RGB)/.test(_this)) {
|
|
const aColor = _this.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",");
|
|
let strHex = "#";
|
|
for (let i = 0; i < aColor.length; i++) {
|
|
let hex = Number(aColor[i]).toString(16);
|
|
hex = String(hex).length == 1 ? `${0}${hex}` : hex;
|
|
if (hex === "0") {
|
|
hex += hex;
|
|
}
|
|
strHex += hex;
|
|
}
|
|
if (strHex.length !== 7) {
|
|
strHex = _this;
|
|
}
|
|
return strHex;
|
|
}
|
|
if (reg.test(_this)) {
|
|
const aNum = _this.replace(/#/, "").split("");
|
|
if (aNum.length === 6) {
|
|
return _this;
|
|
}
|
|
if (aNum.length === 3) {
|
|
let numHex = "#";
|
|
for (let i = 0; i < aNum.length; i += 1) {
|
|
numHex += aNum[i] + aNum[i];
|
|
}
|
|
return numHex;
|
|
}
|
|
} else {
|
|
return _this;
|
|
}
|
|
}
|
|
function colorToRgba(color2, alpha) {
|
|
color2 = rgbToHex(color2);
|
|
const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
|
|
let sColor = String(color2).toLowerCase();
|
|
if (sColor && reg.test(sColor)) {
|
|
if (sColor.length === 4) {
|
|
let sColorNew = "#";
|
|
for (let i = 1; i < 4; i += 1) {
|
|
sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
|
|
}
|
|
sColor = sColorNew;
|
|
}
|
|
const sColorChange = [];
|
|
for (let i = 1; i < 7; i += 2) {
|
|
sColorChange.push(parseInt(`0x${sColor.slice(i, i + 2)}`));
|
|
}
|
|
return `rgba(${sColorChange.join(",")},${alpha})`;
|
|
}
|
|
return sColor;
|
|
}
|
|
const colorGradient$1 = {
|
|
colorGradient,
|
|
hexToRgb,
|
|
rgbToHex,
|
|
colorToRgba
|
|
};
|
|
let timeout = null;
|
|
function debounce(func2, wait = 500, immediate = false) {
|
|
if (timeout !== null)
|
|
clearTimeout(timeout);
|
|
if (immediate) {
|
|
const callNow = !timeout;
|
|
timeout = setTimeout(() => {
|
|
timeout = null;
|
|
}, wait);
|
|
if (callNow)
|
|
typeof func2 === "function" && func2();
|
|
} else {
|
|
timeout = setTimeout(() => {
|
|
typeof func2 === "function" && func2();
|
|
}, wait);
|
|
}
|
|
}
|
|
let flag;
|
|
function throttle(func2, wait = 500, immediate = true) {
|
|
if (immediate) {
|
|
if (!flag) {
|
|
flag = true;
|
|
typeof func2 === "function" && func2();
|
|
setTimeout(() => {
|
|
flag = false;
|
|
}, wait);
|
|
}
|
|
} else if (!flag) {
|
|
flag = true;
|
|
setTimeout(() => {
|
|
flag = false;
|
|
typeof func2 === "function" && func2();
|
|
}, wait);
|
|
}
|
|
}
|
|
const ActionSheet = {
|
|
// action-sheet组件
|
|
actionSheet: {
|
|
show: false,
|
|
title: "",
|
|
description: "",
|
|
actions: [],
|
|
index: "",
|
|
cancelText: "",
|
|
closeOnClickAction: true,
|
|
safeAreaInsetBottom: true,
|
|
openType: "",
|
|
closeOnClickOverlay: true,
|
|
round: 0
|
|
}
|
|
};
|
|
const Album = {
|
|
// album 组件
|
|
album: {
|
|
urls: [],
|
|
keyName: "",
|
|
singleSize: 180,
|
|
multipleSize: 70,
|
|
space: 6,
|
|
singleMode: "scaleToFill",
|
|
multipleMode: "aspectFill",
|
|
maxCount: 9,
|
|
previewFullImage: true,
|
|
rowCount: 3,
|
|
showMore: true
|
|
}
|
|
};
|
|
const Alert = {
|
|
// alert警告组件
|
|
alert: {
|
|
title: "",
|
|
type: "warning",
|
|
description: "",
|
|
closable: false,
|
|
showIcon: false,
|
|
effect: "light",
|
|
center: false,
|
|
fontSize: 14
|
|
}
|
|
};
|
|
const Avatar = {
|
|
// avatar 组件
|
|
avatar: {
|
|
src: "",
|
|
shape: "circle",
|
|
size: 40,
|
|
mode: "scaleToFill",
|
|
text: "",
|
|
bgColor: "#c0c4cc",
|
|
color: "#ffffff",
|
|
fontSize: 18,
|
|
icon: "",
|
|
mpAvatar: false,
|
|
randomBgColor: false,
|
|
defaultUrl: "",
|
|
colorIndex: "",
|
|
name: ""
|
|
}
|
|
};
|
|
const AvatarGroup = {
|
|
// avatarGroup 组件
|
|
avatarGroup: {
|
|
urls: [],
|
|
maxCount: 5,
|
|
shape: "circle",
|
|
mode: "scaleToFill",
|
|
showMore: true,
|
|
size: 40,
|
|
keyName: "",
|
|
gap: 0.5,
|
|
extraValue: 0
|
|
}
|
|
};
|
|
const Backtop = {
|
|
// backtop组件
|
|
backtop: {
|
|
mode: "circle",
|
|
icon: "arrow-upward",
|
|
text: "",
|
|
duration: 100,
|
|
scrollTop: 0,
|
|
top: 400,
|
|
bottom: 100,
|
|
right: 20,
|
|
zIndex: 9,
|
|
iconStyle: {
|
|
color: "#909399",
|
|
fontSize: "19px"
|
|
}
|
|
}
|
|
};
|
|
const Badge = {
|
|
// 徽标数组件
|
|
badge: {
|
|
isDot: false,
|
|
value: "",
|
|
show: true,
|
|
max: 999,
|
|
type: "error",
|
|
showZero: false,
|
|
bgColor: null,
|
|
color: null,
|
|
shape: "circle",
|
|
numberType: "overflow",
|
|
offset: [],
|
|
inverted: false,
|
|
absolute: false
|
|
}
|
|
};
|
|
const Button = {
|
|
// button组件
|
|
button: {
|
|
hairline: false,
|
|
type: "info",
|
|
size: "normal",
|
|
shape: "square",
|
|
plain: false,
|
|
disabled: false,
|
|
loading: false,
|
|
loadingText: "",
|
|
loadingMode: "spinner",
|
|
loadingSize: 15,
|
|
openType: "",
|
|
formType: "",
|
|
appParameter: "",
|
|
hoverStopPropagation: true,
|
|
lang: "en",
|
|
sessionFrom: "",
|
|
sendMessageTitle: "",
|
|
sendMessagePath: "",
|
|
sendMessageImg: "",
|
|
showMessageCard: false,
|
|
dataName: "",
|
|
throttleTime: 0,
|
|
hoverStartTime: 0,
|
|
hoverStayTime: 200,
|
|
text: "",
|
|
icon: "",
|
|
iconColor: "",
|
|
color: ""
|
|
}
|
|
};
|
|
const Calendar = {
|
|
// calendar 组件
|
|
calendar: {
|
|
title: "日期选择",
|
|
showTitle: true,
|
|
showSubtitle: true,
|
|
mode: "single",
|
|
startText: "开始",
|
|
endText: "结束",
|
|
customList: [],
|
|
color: "#3c9cff",
|
|
minDate: 0,
|
|
maxDate: 0,
|
|
defaultDate: null,
|
|
maxCount: Number.MAX_SAFE_INTEGER,
|
|
// Infinity
|
|
rowHeight: 56,
|
|
formatter: null,
|
|
showLunar: false,
|
|
showMark: true,
|
|
confirmText: "确定",
|
|
confirmDisabledText: "确定",
|
|
show: false,
|
|
closeOnClickOverlay: false,
|
|
readonly: false,
|
|
showConfirm: true,
|
|
maxRange: Number.MAX_SAFE_INTEGER,
|
|
// Infinity
|
|
rangePrompt: "",
|
|
showRangePrompt: true,
|
|
allowSameDay: false,
|
|
round: 0,
|
|
monthNum: 3
|
|
}
|
|
};
|
|
const CarKeyboard = {
|
|
// 车牌号键盘
|
|
carKeyboard: {
|
|
random: false
|
|
}
|
|
};
|
|
const Cell = {
|
|
// cell组件的props
|
|
cell: {
|
|
customClass: "",
|
|
title: "",
|
|
label: "",
|
|
value: "",
|
|
icon: "",
|
|
disabled: false,
|
|
border: true,
|
|
center: false,
|
|
url: "",
|
|
linkType: "navigateTo",
|
|
clickable: false,
|
|
isLink: false,
|
|
required: false,
|
|
arrowDirection: "",
|
|
iconStyle: {},
|
|
rightIconStyle: {},
|
|
rightIcon: "arrow-right",
|
|
titleStyle: {},
|
|
size: "",
|
|
stop: true,
|
|
name: ""
|
|
}
|
|
};
|
|
const CellGroup = {
|
|
// cell-group组件的props
|
|
cellGroup: {
|
|
title: "",
|
|
border: true,
|
|
customStyle: {}
|
|
}
|
|
};
|
|
const Checkbox = {
|
|
// checkbox组件
|
|
checkbox: {
|
|
name: "",
|
|
shape: "",
|
|
size: "",
|
|
checkbox: false,
|
|
disabled: "",
|
|
activeColor: "",
|
|
inactiveColor: "",
|
|
iconSize: "",
|
|
iconColor: "",
|
|
label: "",
|
|
labelSize: "",
|
|
labelColor: "",
|
|
labelDisabled: ""
|
|
}
|
|
};
|
|
const CheckboxGroup = {
|
|
// checkbox-group组件
|
|
checkboxGroup: {
|
|
name: "",
|
|
value: [],
|
|
shape: "square",
|
|
disabled: false,
|
|
activeColor: "#2979ff",
|
|
inactiveColor: "#c8c9cc",
|
|
size: 18,
|
|
placement: "row",
|
|
labelSize: 14,
|
|
labelColor: "#303133",
|
|
labelDisabled: false,
|
|
iconColor: "#ffffff",
|
|
iconSize: 12,
|
|
iconPlacement: "left",
|
|
borderBottom: false
|
|
}
|
|
};
|
|
const CircleProgress = {
|
|
// circleProgress 组件
|
|
circleProgress: {
|
|
percentage: 30
|
|
}
|
|
};
|
|
const Code = {
|
|
// code 组件
|
|
code: {
|
|
seconds: 60,
|
|
startText: "获取验证码",
|
|
changeText: "X秒重新获取",
|
|
endText: "重新获取",
|
|
keepRunning: false,
|
|
uniqueKey: ""
|
|
}
|
|
};
|
|
const CodeInput = {
|
|
// codeInput 组件
|
|
codeInput: {
|
|
adjustPosition: true,
|
|
maxlength: 6,
|
|
dot: false,
|
|
mode: "box",
|
|
hairline: false,
|
|
space: 10,
|
|
value: "",
|
|
focus: false,
|
|
bold: false,
|
|
color: "#606266",
|
|
fontSize: 18,
|
|
size: 35,
|
|
disabledKeyboard: false,
|
|
borderColor: "#c9cacc",
|
|
disabledDot: true
|
|
}
|
|
};
|
|
const Col = {
|
|
// col 组件
|
|
col: {
|
|
span: 12,
|
|
offset: 0,
|
|
justify: "start",
|
|
align: "stretch",
|
|
textAlign: "left"
|
|
}
|
|
};
|
|
const Collapse = {
|
|
// collapse 组件
|
|
collapse: {
|
|
value: null,
|
|
accordion: false,
|
|
border: true
|
|
}
|
|
};
|
|
const CollapseItem = {
|
|
// collapseItem 组件
|
|
collapseItem: {
|
|
title: "",
|
|
value: "",
|
|
label: "",
|
|
disabled: false,
|
|
isLink: true,
|
|
clickable: true,
|
|
border: true,
|
|
align: "left",
|
|
name: "",
|
|
icon: "",
|
|
duration: 300
|
|
}
|
|
};
|
|
const ColumnNotice = {
|
|
// columnNotice 组件
|
|
columnNotice: {
|
|
text: "",
|
|
icon: "volume",
|
|
mode: "",
|
|
color: "#f9ae3d",
|
|
bgColor: "#fdf6ec",
|
|
fontSize: 14,
|
|
speed: 80,
|
|
step: false,
|
|
duration: 1500,
|
|
disableTouch: true
|
|
}
|
|
};
|
|
const CountDown = {
|
|
// u-count-down 计时器组件
|
|
countDown: {
|
|
time: 0,
|
|
format: "HH:mm:ss",
|
|
autoStart: true,
|
|
millisecond: false
|
|
}
|
|
};
|
|
const CountTo = {
|
|
// countTo 组件
|
|
countTo: {
|
|
startVal: 0,
|
|
endVal: 0,
|
|
duration: 2e3,
|
|
autoplay: true,
|
|
decimals: 0,
|
|
useEasing: true,
|
|
decimal: ".",
|
|
color: "#606266",
|
|
fontSize: 22,
|
|
bold: false,
|
|
separator: ""
|
|
}
|
|
};
|
|
const DatetimePicker = {
|
|
// datetimePicker 组件
|
|
datetimePicker: {
|
|
show: false,
|
|
popupMode: "bottom",
|
|
showToolbar: true,
|
|
value: "",
|
|
title: "",
|
|
mode: "datetime",
|
|
maxDate: new Date(new Date().getFullYear() + 10, 0, 1).getTime(),
|
|
minDate: new Date(new Date().getFullYear() - 10, 0, 1).getTime(),
|
|
minHour: 0,
|
|
maxHour: 23,
|
|
minMinute: 0,
|
|
maxMinute: 59,
|
|
filter: null,
|
|
formatter: null,
|
|
loading: false,
|
|
itemHeight: 44,
|
|
cancelText: "取消",
|
|
confirmText: "确认",
|
|
cancelColor: "#909193",
|
|
confirmColor: "#3c9cff",
|
|
visibleItemCount: 5,
|
|
closeOnClickOverlay: false,
|
|
defaultIndex: []
|
|
}
|
|
};
|
|
const Divider = {
|
|
// divider组件
|
|
divider: {
|
|
dashed: false,
|
|
hairline: true,
|
|
dot: false,
|
|
textPosition: "center",
|
|
text: "",
|
|
textSize: 14,
|
|
textColor: "#909399",
|
|
lineColor: "#dcdfe6"
|
|
}
|
|
};
|
|
const Empty = {
|
|
// empty组件
|
|
empty: {
|
|
icon: "",
|
|
text: "",
|
|
textColor: "#c0c4cc",
|
|
textSize: 14,
|
|
iconColor: "#c0c4cc",
|
|
iconSize: 90,
|
|
mode: "data",
|
|
width: 160,
|
|
height: 160,
|
|
show: true,
|
|
marginTop: 0
|
|
}
|
|
};
|
|
const Form = {
|
|
// form 组件
|
|
form: {
|
|
model: {},
|
|
rules: {},
|
|
errorType: "message",
|
|
borderBottom: true,
|
|
labelPosition: "left",
|
|
labelWidth: 45,
|
|
labelAlign: "left",
|
|
labelStyle: {}
|
|
}
|
|
};
|
|
const GormItem = {
|
|
// formItem 组件
|
|
formItem: {
|
|
label: "",
|
|
prop: "",
|
|
rule: "",
|
|
borderBottom: "",
|
|
labelPosition: "",
|
|
labelWidth: "",
|
|
rightIcon: "",
|
|
leftIcon: "",
|
|
required: false,
|
|
leftIconStyle: ""
|
|
}
|
|
};
|
|
const Gap = {
|
|
// gap组件
|
|
gap: {
|
|
bgColor: "transparent",
|
|
height: 20,
|
|
marginTop: 0,
|
|
marginBottom: 0,
|
|
customStyle: {}
|
|
}
|
|
};
|
|
const Grid = {
|
|
// grid组件
|
|
grid: {
|
|
col: 3,
|
|
border: false,
|
|
align: "left"
|
|
}
|
|
};
|
|
const GridItem = {
|
|
// grid-item组件
|
|
gridItem: {
|
|
name: null,
|
|
bgColor: "transparent"
|
|
}
|
|
};
|
|
const {
|
|
color: color$3
|
|
} = config;
|
|
const Icon = {
|
|
// icon组件
|
|
icon: {
|
|
name: "",
|
|
color: color$3["u-content-color"],
|
|
size: "16px",
|
|
bold: false,
|
|
index: "",
|
|
hoverClass: "",
|
|
customPrefix: "uicon",
|
|
label: "",
|
|
labelPos: "right",
|
|
labelSize: "15px",
|
|
labelColor: color$3["u-content-color"],
|
|
space: "3px",
|
|
imgMode: "",
|
|
width: "",
|
|
height: "",
|
|
top: 0,
|
|
stop: false
|
|
}
|
|
};
|
|
const Image = {
|
|
// image组件
|
|
image: {
|
|
src: "",
|
|
mode: "aspectFill",
|
|
width: "300",
|
|
height: "225",
|
|
shape: "square",
|
|
radius: 0,
|
|
lazyLoad: true,
|
|
showMenuByLongpress: true,
|
|
loadingIcon: "photo",
|
|
errorIcon: "error-circle",
|
|
showLoading: true,
|
|
showError: true,
|
|
fade: true,
|
|
webp: false,
|
|
duration: 500,
|
|
bgColor: "#f3f4f6"
|
|
}
|
|
};
|
|
const IndexAnchor = {
|
|
// indexAnchor 组件
|
|
indexAnchor: {
|
|
text: "",
|
|
color: "#606266",
|
|
size: 14,
|
|
bgColor: "#dedede",
|
|
height: 32
|
|
}
|
|
};
|
|
const IndexList = {
|
|
// indexList 组件
|
|
indexList: {
|
|
inactiveColor: "#606266",
|
|
activeColor: "#5677fc",
|
|
indexList: [],
|
|
sticky: true,
|
|
customNavHeight: 0
|
|
}
|
|
};
|
|
const Input = {
|
|
// index 组件
|
|
input: {
|
|
value: "",
|
|
type: "text",
|
|
fixed: false,
|
|
disabled: false,
|
|
disabledColor: "#f5f7fa",
|
|
clearable: false,
|
|
password: false,
|
|
maxlength: -1,
|
|
placeholder: null,
|
|
placeholderClass: "input-placeholder",
|
|
placeholderStyle: "color: #c0c4cc",
|
|
showWordLimit: false,
|
|
confirmType: "done",
|
|
confirmHold: false,
|
|
holdKeyboard: false,
|
|
focus: false,
|
|
autoBlur: false,
|
|
disableDefaultPadding: false,
|
|
cursor: -1,
|
|
cursorSpacing: 30,
|
|
selectionStart: -1,
|
|
selectionEnd: -1,
|
|
adjustPosition: true,
|
|
inputAlign: "left",
|
|
fontSize: "15px",
|
|
color: "#303133",
|
|
prefixIcon: "",
|
|
prefixIconStyle: "",
|
|
suffixIcon: "",
|
|
suffixIconStyle: "",
|
|
border: "surround",
|
|
readonly: false,
|
|
shape: "square",
|
|
formatter: null
|
|
}
|
|
};
|
|
const Keyboard = {
|
|
// 键盘组件
|
|
keyboard: {
|
|
mode: "number",
|
|
dotDisabled: false,
|
|
tooltip: true,
|
|
showTips: true,
|
|
tips: "",
|
|
showCancel: true,
|
|
showConfirm: true,
|
|
random: false,
|
|
safeAreaInsetBottom: true,
|
|
closeOnClickOverlay: true,
|
|
show: false,
|
|
overlay: true,
|
|
zIndex: 10075,
|
|
cancelText: "取消",
|
|
confirmText: "确定",
|
|
autoChange: false
|
|
}
|
|
};
|
|
const Line = {
|
|
// line组件
|
|
line: {
|
|
color: "#d6d7d9",
|
|
length: "100%",
|
|
direction: "row",
|
|
hairline: true,
|
|
margin: 0,
|
|
dashed: false
|
|
}
|
|
};
|
|
const LineProgress = {
|
|
// lineProgress 组件
|
|
lineProgress: {
|
|
activeColor: "#19be6b",
|
|
inactiveColor: "#ececec",
|
|
percentage: 0,
|
|
showText: true,
|
|
height: 12
|
|
}
|
|
};
|
|
const {
|
|
color: color$2
|
|
} = config;
|
|
const Link = {
|
|
// link超链接组件props参数
|
|
link: {
|
|
color: color$2["u-primary"],
|
|
fontSize: 15,
|
|
underLine: false,
|
|
href: "",
|
|
mpTips: "链接已复制,请在浏览器打开",
|
|
lineColor: "",
|
|
text: ""
|
|
}
|
|
};
|
|
const List = {
|
|
// list 组件
|
|
list: {
|
|
showScrollbar: false,
|
|
lowerThreshold: 50,
|
|
upperThreshold: 0,
|
|
scrollTop: 0,
|
|
offsetAccuracy: 10,
|
|
enableFlex: false,
|
|
pagingEnabled: false,
|
|
scrollable: true,
|
|
scrollIntoView: "",
|
|
scrollWithAnimation: false,
|
|
enableBackToTop: false,
|
|
height: 0,
|
|
width: 0,
|
|
preLoadScreen: 1
|
|
}
|
|
};
|
|
const ListItem = {
|
|
// listItem 组件
|
|
listItem: {
|
|
anchor: ""
|
|
}
|
|
};
|
|
const {
|
|
color: color$1
|
|
} = config;
|
|
const LoadingIcon = {
|
|
// loading-icon加载中图标组件
|
|
loadingIcon: {
|
|
show: true,
|
|
color: color$1["u-tips-color"],
|
|
textColor: color$1["u-tips-color"],
|
|
vertical: false,
|
|
mode: "spinner",
|
|
size: 24,
|
|
textSize: 15,
|
|
text: "",
|
|
timingFunction: "ease-in-out",
|
|
duration: 1200,
|
|
inactiveColor: ""
|
|
}
|
|
};
|
|
const LoadingPage = {
|
|
// loading-page组件
|
|
loadingPage: {
|
|
loadingText: "正在加载",
|
|
image: "",
|
|
loadingMode: "circle",
|
|
loading: false,
|
|
bgColor: "#ffffff",
|
|
color: "#C8C8C8",
|
|
fontSize: 19,
|
|
iconSize: 28,
|
|
loadingColor: "#C8C8C8"
|
|
}
|
|
};
|
|
const Loadmore = {
|
|
// loadmore 组件
|
|
loadmore: {
|
|
status: "loadmore",
|
|
bgColor: "transparent",
|
|
icon: true,
|
|
fontSize: 14,
|
|
iconSize: 17,
|
|
color: "#606266",
|
|
loadingIcon: "spinner",
|
|
loadmoreText: "加载更多",
|
|
loadingText: "正在加载...",
|
|
nomoreText: "没有更多了",
|
|
isDot: false,
|
|
iconColor: "#b7b7b7",
|
|
marginTop: 10,
|
|
marginBottom: 10,
|
|
height: "auto",
|
|
line: false,
|
|
lineColor: "#E6E8EB",
|
|
dashed: false
|
|
}
|
|
};
|
|
const Modal = {
|
|
// modal 组件
|
|
modal: {
|
|
show: false,
|
|
title: "",
|
|
content: "",
|
|
confirmText: "确认",
|
|
cancelText: "取消",
|
|
showConfirmButton: true,
|
|
showCancelButton: false,
|
|
confirmColor: "#2979ff",
|
|
cancelColor: "#606266",
|
|
buttonReverse: false,
|
|
zoom: true,
|
|
asyncClose: false,
|
|
closeOnClickOverlay: false,
|
|
negativeTop: 0,
|
|
width: "650rpx",
|
|
confirmButtonShape: ""
|
|
}
|
|
};
|
|
const color = {
|
|
primary: "#3c9cff",
|
|
info: "#909399",
|
|
default: "#909399",
|
|
warning: "#f9ae3d",
|
|
error: "#f56c6c",
|
|
success: "#5ac725",
|
|
mainColor: "#303133",
|
|
contentColor: "#606266",
|
|
tipsColor: "#909399",
|
|
lightColor: "#c0c4cc",
|
|
borderColor: "#e4e7ed"
|
|
};
|
|
const Navbar = {
|
|
// navbar 组件
|
|
navbar: {
|
|
safeAreaInsetTop: true,
|
|
placeholder: false,
|
|
fixed: true,
|
|
border: false,
|
|
leftIcon: "arrow-left",
|
|
leftText: "",
|
|
rightText: "",
|
|
rightIcon: "",
|
|
title: "",
|
|
bgColor: "#ffffff",
|
|
titleWidth: "400rpx",
|
|
height: "44px",
|
|
leftIconSize: 20,
|
|
leftIconColor: color.mainColor,
|
|
autoBack: false,
|
|
titleStyle: ""
|
|
}
|
|
};
|
|
const NoNetwork = {
|
|
// noNetwork
|
|
noNetwork: {
|
|
tips: "哎呀,网络信号丢失",
|
|
zIndex: "",
|
|
image: "data:image/png;base64,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"
|
|
}
|
|
};
|
|
const NoticeBar = {
|
|
// noticeBar
|
|
noticeBar: {
|
|
text: [],
|
|
direction: "row",
|
|
step: false,
|
|
icon: "volume",
|
|
mode: "",
|
|
color: "#f9ae3d",
|
|
bgColor: "#fdf6ec",
|
|
speed: 80,
|
|
fontSize: 14,
|
|
duration: 2e3,
|
|
disableTouch: true,
|
|
url: "",
|
|
linkType: "navigateTo"
|
|
}
|
|
};
|
|
const Notify = {
|
|
// notify组件
|
|
notify: {
|
|
top: 0,
|
|
type: "primary",
|
|
color: "#ffffff",
|
|
bgColor: "",
|
|
message: "",
|
|
duration: 3e3,
|
|
fontSize: 15,
|
|
safeAreaInsetTop: false
|
|
}
|
|
};
|
|
const NumberBox = {
|
|
// 步进器组件
|
|
numberBox: {
|
|
name: "",
|
|
value: 0,
|
|
min: 1,
|
|
max: Number.MAX_SAFE_INTEGER,
|
|
step: 1,
|
|
integer: false,
|
|
disabled: false,
|
|
disabledInput: false,
|
|
asyncChange: false,
|
|
inputWidth: 35,
|
|
showMinus: true,
|
|
showPlus: true,
|
|
decimalLength: null,
|
|
longPress: true,
|
|
color: "#323233",
|
|
buttonSize: 30,
|
|
bgColor: "#EBECEE",
|
|
cursorSpacing: 100,
|
|
disableMinus: false,
|
|
disablePlus: false,
|
|
iconStyle: ""
|
|
}
|
|
};
|
|
const NumberKeyboard = {
|
|
// 数字键盘
|
|
numberKeyboard: {
|
|
mode: "number",
|
|
dotDisabled: false,
|
|
random: false
|
|
}
|
|
};
|
|
const Overlay = {
|
|
// overlay组件
|
|
overlay: {
|
|
show: false,
|
|
zIndex: 10070,
|
|
duration: 300,
|
|
opacity: 0.5
|
|
}
|
|
};
|
|
const Parse = {
|
|
// parse
|
|
parse: {
|
|
copyLink: true,
|
|
errorImg: "",
|
|
lazyLoad: false,
|
|
loadingImg: "",
|
|
pauseVideo: true,
|
|
previewImg: true,
|
|
setTitle: true,
|
|
showImgMenu: true
|
|
}
|
|
};
|
|
const Picker = {
|
|
// picker
|
|
picker: {
|
|
show: false,
|
|
popupMode: "bottom",
|
|
showToolbar: true,
|
|
title: "",
|
|
columns: [],
|
|
loading: false,
|
|
itemHeight: 44,
|
|
cancelText: "取消",
|
|
confirmText: "确定",
|
|
cancelColor: "#909193",
|
|
confirmColor: "#3c9cff",
|
|
visibleItemCount: 5,
|
|
keyName: "text",
|
|
closeOnClickOverlay: false,
|
|
defaultIndex: [],
|
|
immediateChange: true
|
|
}
|
|
};
|
|
const Popup = {
|
|
// popup组件
|
|
popup: {
|
|
show: false,
|
|
overlay: true,
|
|
mode: "bottom",
|
|
duration: 300,
|
|
closeable: false,
|
|
overlayStyle: {},
|
|
closeOnClickOverlay: true,
|
|
zIndex: 10075,
|
|
safeAreaInsetBottom: true,
|
|
safeAreaInsetTop: false,
|
|
closeIconPos: "top-right",
|
|
round: 0,
|
|
zoom: true,
|
|
bgColor: "",
|
|
overlayOpacity: 0.5
|
|
}
|
|
};
|
|
const Radio = {
|
|
// radio组件
|
|
radio: {
|
|
name: "",
|
|
shape: "",
|
|
disabled: "",
|
|
labelDisabled: "",
|
|
activeColor: "",
|
|
inactiveColor: "",
|
|
iconSize: "",
|
|
labelSize: "",
|
|
label: "",
|
|
labelColor: "",
|
|
size: "",
|
|
iconColor: "",
|
|
placement: ""
|
|
}
|
|
};
|
|
const RadioGroup = {
|
|
// radio-group组件
|
|
radioGroup: {
|
|
value: "",
|
|
disabled: false,
|
|
shape: "circle",
|
|
activeColor: "#2979ff",
|
|
inactiveColor: "#c8c9cc",
|
|
name: "",
|
|
size: 18,
|
|
placement: "row",
|
|
label: "",
|
|
labelColor: "#303133",
|
|
labelSize: 14,
|
|
labelDisabled: false,
|
|
iconColor: "#ffffff",
|
|
iconSize: 12,
|
|
borderBottom: false,
|
|
iconPlacement: "left"
|
|
}
|
|
};
|
|
const Rate = {
|
|
// rate组件
|
|
rate: {
|
|
value: 1,
|
|
count: 5,
|
|
disabled: false,
|
|
size: 18,
|
|
inactiveColor: "#b2b2b2",
|
|
activeColor: "#FA3534",
|
|
gutter: 4,
|
|
minCount: 1,
|
|
allowHalf: false,
|
|
activeIcon: "star-fill",
|
|
inactiveIcon: "star",
|
|
touchable: true
|
|
}
|
|
};
|
|
const ReadMore = {
|
|
// readMore
|
|
readMore: {
|
|
showHeight: 400,
|
|
toggle: false,
|
|
closeText: "展开阅读全文",
|
|
openText: "收起",
|
|
color: "#2979ff",
|
|
fontSize: 14,
|
|
textIndent: "2em",
|
|
name: ""
|
|
}
|
|
};
|
|
const Row = {
|
|
// row
|
|
row: {
|
|
gutter: 0,
|
|
justify: "start",
|
|
align: "center"
|
|
}
|
|
};
|
|
const RowNotice = {
|
|
// rowNotice
|
|
rowNotice: {
|
|
text: "",
|
|
icon: "volume",
|
|
mode: "",
|
|
color: "#f9ae3d",
|
|
bgColor: "#fdf6ec",
|
|
fontSize: 14,
|
|
speed: 80
|
|
}
|
|
};
|
|
const ScrollList = {
|
|
// scrollList
|
|
scrollList: {
|
|
indicatorWidth: 50,
|
|
indicatorBarWidth: 20,
|
|
indicator: true,
|
|
indicatorColor: "#f2f2f2",
|
|
indicatorActiveColor: "#3c9cff",
|
|
indicatorStyle: ""
|
|
}
|
|
};
|
|
const Search = {
|
|
// search
|
|
search: {
|
|
shape: "round",
|
|
bgColor: "#f2f2f2",
|
|
placeholder: "请输入关键字",
|
|
clearabled: true,
|
|
focus: false,
|
|
showAction: true,
|
|
actionStyle: {},
|
|
actionText: "搜索",
|
|
inputAlign: "left",
|
|
inputStyle: {},
|
|
disabled: false,
|
|
borderColor: "transparent",
|
|
searchIconColor: "#909399",
|
|
searchIconSize: 22,
|
|
color: "#606266",
|
|
placeholderColor: "#909399",
|
|
searchIcon: "search",
|
|
margin: "0",
|
|
animation: false,
|
|
value: "",
|
|
maxlength: "-1",
|
|
height: 32,
|
|
label: null
|
|
}
|
|
};
|
|
const Section = {
|
|
// u-section组件
|
|
section: {
|
|
title: "",
|
|
subTitle: "更多",
|
|
right: true,
|
|
fontSize: 15,
|
|
bold: true,
|
|
color: "#303133",
|
|
subColor: "#909399",
|
|
showLine: true,
|
|
lineColor: "",
|
|
arrow: true
|
|
}
|
|
};
|
|
const Skeleton = {
|
|
// skeleton
|
|
skeleton: {
|
|
loading: true,
|
|
animate: true,
|
|
rows: 0,
|
|
rowsWidth: "100%",
|
|
rowsHeight: 18,
|
|
title: true,
|
|
titleWidth: "50%",
|
|
titleHeight: 18,
|
|
avatar: false,
|
|
avatarSize: 32,
|
|
avatarShape: "circle"
|
|
}
|
|
};
|
|
const Slider = {
|
|
// slider组件
|
|
slider: {
|
|
value: 0,
|
|
blockSize: 18,
|
|
min: 0,
|
|
max: 100,
|
|
step: 1,
|
|
activeColor: "#2979ff",
|
|
inactiveColor: "#c0c4cc",
|
|
blockColor: "#ffffff",
|
|
showValue: false,
|
|
disabled: false,
|
|
blockStyle: {}
|
|
}
|
|
};
|
|
const StatusBar = {
|
|
// statusBar
|
|
statusBar: {
|
|
bgColor: "transparent"
|
|
}
|
|
};
|
|
const Steps = {
|
|
// steps组件
|
|
steps: {
|
|
direction: "row",
|
|
current: 0,
|
|
activeColor: "#3c9cff",
|
|
inactiveColor: "#969799",
|
|
activeIcon: "",
|
|
inactiveIcon: "",
|
|
dot: false
|
|
}
|
|
};
|
|
const StepsItem = {
|
|
// steps-item组件
|
|
stepsItem: {
|
|
title: "",
|
|
desc: "",
|
|
iconSize: 17,
|
|
error: false
|
|
}
|
|
};
|
|
const Sticky = {
|
|
// sticky组件
|
|
sticky: {
|
|
offsetTop: 0,
|
|
customNavHeight: 0,
|
|
disabled: false,
|
|
bgColor: "transparent",
|
|
zIndex: "",
|
|
index: ""
|
|
}
|
|
};
|
|
const Subsection = {
|
|
// subsection组件
|
|
subsection: {
|
|
list: [],
|
|
current: 0,
|
|
activeColor: "#3c9cff",
|
|
inactiveColor: "#303133",
|
|
mode: "button",
|
|
fontSize: 12,
|
|
bold: true,
|
|
bgColor: "#eeeeef",
|
|
keyName: "name"
|
|
}
|
|
};
|
|
const SwipeAction = {
|
|
// swipe-action组件
|
|
swipeAction: {
|
|
autoClose: true
|
|
}
|
|
};
|
|
const SwipeActionItem = {
|
|
// swipeActionItem 组件
|
|
swipeActionItem: {
|
|
show: false,
|
|
name: "",
|
|
disabled: false,
|
|
threshold: 20,
|
|
autoClose: true,
|
|
options: [],
|
|
duration: 300
|
|
}
|
|
};
|
|
const Swiper = {
|
|
// swiper 组件
|
|
swiper: {
|
|
list: [],
|
|
indicator: false,
|
|
indicatorActiveColor: "#FFFFFF",
|
|
indicatorInactiveColor: "rgba(255, 255, 255, 0.35)",
|
|
indicatorStyle: "",
|
|
indicatorMode: "line",
|
|
autoplay: true,
|
|
current: 0,
|
|
currentItemId: "",
|
|
interval: 3e3,
|
|
duration: 300,
|
|
circular: false,
|
|
previousMargin: 0,
|
|
nextMargin: 0,
|
|
acceleration: false,
|
|
displayMultipleItems: 1,
|
|
easingFunction: "default",
|
|
keyName: "url",
|
|
imgMode: "aspectFill",
|
|
height: 130,
|
|
bgColor: "#f3f4f6",
|
|
radius: 4,
|
|
loading: false,
|
|
showTitle: false
|
|
}
|
|
};
|
|
const SwipterIndicator = {
|
|
// swiperIndicator 组件
|
|
swiperIndicator: {
|
|
length: 0,
|
|
current: 0,
|
|
indicatorActiveColor: "",
|
|
indicatorInactiveColor: "",
|
|
indicatorMode: "line"
|
|
}
|
|
};
|
|
const Switch = {
|
|
// switch
|
|
switch: {
|
|
loading: false,
|
|
disabled: false,
|
|
size: 25,
|
|
activeColor: "#2979ff",
|
|
inactiveColor: "#ffffff",
|
|
value: false,
|
|
activeValue: true,
|
|
inactiveValue: false,
|
|
asyncChange: false,
|
|
space: 0
|
|
}
|
|
};
|
|
const Tabbar = {
|
|
// tabbar
|
|
tabbar: {
|
|
value: null,
|
|
safeAreaInsetBottom: true,
|
|
border: true,
|
|
zIndex: 1,
|
|
activeColor: "#1989fa",
|
|
inactiveColor: "#7d7e80",
|
|
fixed: true,
|
|
placeholder: true
|
|
}
|
|
};
|
|
const TabbarItem = {
|
|
//
|
|
tabbarItem: {
|
|
name: null,
|
|
icon: "",
|
|
badge: null,
|
|
dot: false,
|
|
text: "",
|
|
badgeStyle: "top: 6px;right:2px;"
|
|
}
|
|
};
|
|
const Tabs = {
|
|
//
|
|
tabs: {
|
|
duration: 300,
|
|
list: [],
|
|
lineColor: "#3c9cff",
|
|
activeStyle: {
|
|
color: "#303133"
|
|
},
|
|
inactiveStyle: {
|
|
color: "#606266"
|
|
},
|
|
lineWidth: 20,
|
|
lineHeight: 3,
|
|
lineBgSize: "cover",
|
|
itemStyle: {
|
|
height: "44px"
|
|
},
|
|
scrollable: true,
|
|
current: 0,
|
|
keyName: "name"
|
|
}
|
|
};
|
|
const Tag = {
|
|
// tag 组件
|
|
tag: {
|
|
type: "primary",
|
|
disabled: false,
|
|
size: "medium",
|
|
shape: "square",
|
|
text: "",
|
|
bgColor: "",
|
|
color: "",
|
|
borderColor: "",
|
|
closeColor: "#C6C7CB",
|
|
name: "",
|
|
plainFill: false,
|
|
plain: false,
|
|
closable: false,
|
|
show: true,
|
|
icon: "",
|
|
iconColor: ""
|
|
}
|
|
};
|
|
const Text = {
|
|
// text 组件
|
|
text: {
|
|
type: "",
|
|
show: true,
|
|
text: "",
|
|
prefixIcon: "",
|
|
suffixIcon: "",
|
|
mode: "",
|
|
href: "",
|
|
format: "",
|
|
call: false,
|
|
openType: "",
|
|
bold: false,
|
|
block: false,
|
|
lines: "",
|
|
color: "#303133",
|
|
size: 15,
|
|
iconStyle: {
|
|
fontSize: "15px"
|
|
},
|
|
decoration: "none",
|
|
margin: 0,
|
|
lineHeight: "",
|
|
align: "left",
|
|
wordWrap: "normal"
|
|
}
|
|
};
|
|
const Textarea = {
|
|
// textarea 组件
|
|
textarea: {
|
|
value: "",
|
|
placeholder: "",
|
|
placeholderClass: "textarea-placeholder",
|
|
placeholderStyle: "color: #c0c4cc",
|
|
height: 70,
|
|
confirmType: "done",
|
|
disabled: false,
|
|
count: false,
|
|
focus: false,
|
|
autoHeight: false,
|
|
fixed: false,
|
|
cursorSpacing: 0,
|
|
cursor: "",
|
|
showConfirmBar: true,
|
|
selectionStart: -1,
|
|
selectionEnd: -1,
|
|
adjustPosition: true,
|
|
disableDefaultPadding: false,
|
|
holdKeyboard: false,
|
|
maxlength: 140,
|
|
border: "surround",
|
|
formatter: null
|
|
}
|
|
};
|
|
const Toast = {
|
|
// toast组件
|
|
toast: {
|
|
zIndex: 10090,
|
|
loading: false,
|
|
text: "",
|
|
icon: "",
|
|
type: "",
|
|
loadingMode: "",
|
|
show: "",
|
|
overlay: false,
|
|
position: "center",
|
|
params: {},
|
|
duration: 2e3,
|
|
isTab: false,
|
|
url: "",
|
|
callback: null,
|
|
back: false
|
|
}
|
|
};
|
|
const Toolbar = {
|
|
// toolbar 组件
|
|
toolbar: {
|
|
show: true,
|
|
cancelText: "取消",
|
|
confirmText: "确认",
|
|
cancelColor: "#909193",
|
|
confirmColor: "#3c9cff",
|
|
title: ""
|
|
}
|
|
};
|
|
const Tooltip = {
|
|
// tooltip 组件
|
|
tooltip: {
|
|
text: "",
|
|
copyText: "",
|
|
size: 14,
|
|
color: "#606266",
|
|
bgColor: "transparent",
|
|
direction: "top",
|
|
zIndex: 10071,
|
|
showCopy: true,
|
|
buttons: [],
|
|
overlay: true,
|
|
showToast: true
|
|
}
|
|
};
|
|
const Transition = {
|
|
// transition动画组件的props
|
|
transition: {
|
|
show: false,
|
|
mode: "fade",
|
|
duration: "300",
|
|
timingFunction: "ease-out"
|
|
}
|
|
};
|
|
const Upload = {
|
|
// upload组件
|
|
upload: {
|
|
accept: "image",
|
|
extension: [],
|
|
capture: ["album", "camera"],
|
|
compressed: true,
|
|
camera: "back",
|
|
maxDuration: 60,
|
|
uploadIcon: "camera-fill",
|
|
uploadIconColor: "#D3D4D6",
|
|
useBeforeRead: false,
|
|
previewFullImage: true,
|
|
maxCount: 52,
|
|
disabled: false,
|
|
imageMode: "aspectFill",
|
|
name: "",
|
|
sizeType: ["original", "compressed"],
|
|
multiple: false,
|
|
deletable: true,
|
|
maxSize: Number.MAX_VALUE,
|
|
fileList: [],
|
|
uploadText: "",
|
|
width: 80,
|
|
height: 80,
|
|
previewImage: true
|
|
}
|
|
};
|
|
const props = {
|
|
...ActionSheet,
|
|
...Album,
|
|
...Alert,
|
|
...Avatar,
|
|
...AvatarGroup,
|
|
...Backtop,
|
|
...Badge,
|
|
...Button,
|
|
...Calendar,
|
|
...CarKeyboard,
|
|
...Cell,
|
|
...CellGroup,
|
|
...Checkbox,
|
|
...CheckboxGroup,
|
|
...CircleProgress,
|
|
...Code,
|
|
...CodeInput,
|
|
...Col,
|
|
...Collapse,
|
|
...CollapseItem,
|
|
...ColumnNotice,
|
|
...CountDown,
|
|
...CountTo,
|
|
...DatetimePicker,
|
|
...Divider,
|
|
...Empty,
|
|
...Form,
|
|
...GormItem,
|
|
...Gap,
|
|
...Grid,
|
|
...GridItem,
|
|
...Icon,
|
|
...Image,
|
|
...IndexAnchor,
|
|
...IndexList,
|
|
...Input,
|
|
...Keyboard,
|
|
...Line,
|
|
...LineProgress,
|
|
...Link,
|
|
...List,
|
|
...ListItem,
|
|
...LoadingIcon,
|
|
...LoadingPage,
|
|
...Loadmore,
|
|
...Modal,
|
|
...Navbar,
|
|
...NoNetwork,
|
|
...NoticeBar,
|
|
...Notify,
|
|
...NumberBox,
|
|
...NumberKeyboard,
|
|
...Overlay,
|
|
...Parse,
|
|
...Picker,
|
|
...Popup,
|
|
...Radio,
|
|
...RadioGroup,
|
|
...Rate,
|
|
...ReadMore,
|
|
...Row,
|
|
...RowNotice,
|
|
...ScrollList,
|
|
...Search,
|
|
...Section,
|
|
...Skeleton,
|
|
...Slider,
|
|
...StatusBar,
|
|
...Steps,
|
|
...StepsItem,
|
|
...Sticky,
|
|
...Subsection,
|
|
...SwipeAction,
|
|
...SwipeActionItem,
|
|
...Swiper,
|
|
...SwipterIndicator,
|
|
...Switch,
|
|
...Tabbar,
|
|
...TabbarItem,
|
|
...Tabs,
|
|
...Tag,
|
|
...Text,
|
|
...Textarea,
|
|
...Toast,
|
|
...Toolbar,
|
|
...Tooltip,
|
|
...Transition,
|
|
...Upload
|
|
};
|
|
const zIndex = {
|
|
toast: 10090,
|
|
noNetwork: 10080,
|
|
// popup包含popup,actionsheet,keyboard,picker的值
|
|
popup: 10075,
|
|
mask: 10070,
|
|
navbar: 980,
|
|
topTips: 975,
|
|
sticky: 970,
|
|
indexListSticky: 965
|
|
};
|
|
let platform = "none";
|
|
platform = "vue3";
|
|
platform = "plus";
|
|
const platform$1 = platform;
|
|
const http = new Request();
|
|
let themeType = ["primary", "success", "error", "warning", "info"];
|
|
function setConfig(configs) {
|
|
index.shallowMerge(config, configs.config || {});
|
|
index.shallowMerge(props, configs.props || {});
|
|
index.shallowMerge(color, configs.color || {});
|
|
index.shallowMerge(zIndex, configs.zIndex || {});
|
|
}
|
|
index.setConfig = setConfig;
|
|
const $u = {
|
|
route,
|
|
date: index.timeFormat,
|
|
// 另名date
|
|
colorGradient: colorGradient$1.colorGradient,
|
|
hexToRgb: colorGradient$1.hexToRgb,
|
|
rgbToHex: colorGradient$1.rgbToHex,
|
|
colorToRgba: colorGradient$1.colorToRgba,
|
|
test,
|
|
type: themeType,
|
|
http,
|
|
config,
|
|
// uview-plus配置信息相关,比如版本号
|
|
zIndex,
|
|
debounce,
|
|
throttle,
|
|
mixin,
|
|
mpMixin,
|
|
props,
|
|
...index,
|
|
color,
|
|
platform: platform$1
|
|
};
|
|
uni.$u = $u;
|
|
const install = (Vue2) => {
|
|
Vue2.config.globalProperties.$u = $u;
|
|
Vue2.mixin(mixin);
|
|
};
|
|
const uviewPlus = {
|
|
install
|
|
};
|
|
const getBannerList = (params = {}) => http.get("business/video/getBannerList", { params });
|
|
const _export_sfc = (sfc, props2) => {
|
|
const target = sfc.__vccOpts || sfc;
|
|
for (const [key, val] of props2) {
|
|
target[key] = val;
|
|
}
|
|
return target;
|
|
};
|
|
const _sfc_main$1 = {
|
|
__name: "index",
|
|
setup(__props) {
|
|
async function getBannerListFn() {
|
|
const { data: res } = await getBannerList();
|
|
formatAppLog("log", "at pages/index/index.vue:13", res);
|
|
}
|
|
getBannerListFn();
|
|
return (_ctx, _cache) => {
|
|
return vue.openBlock(), vue.createElementBlock("view", { class: "content" }, " 题库 ");
|
|
};
|
|
}
|
|
};
|
|
const PagesIndexIndex = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__file", "D:/work/questionbankvue3/pages/index/index.vue"]]);
|
|
__definePage("pages/index/index", PagesIndexIndex);
|
|
const _sfc_main = {
|
|
onLaunch: function() {
|
|
formatAppLog("log", "at App.vue:6", "App Launch");
|
|
},
|
|
onShow: function() {
|
|
formatAppLog("log", "at App.vue:9", "App Show");
|
|
},
|
|
onHide: function() {
|
|
formatAppLog("log", "at App.vue:12", "App Hide");
|
|
}
|
|
};
|
|
const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "D:/work/questionbankvue3/App.vue"]]);
|
|
let obj = {
|
|
H5_API: "",
|
|
//h5代理
|
|
WX_API: "http://www.lyjppt.com/",
|
|
//非代理地址 不要忘记加/
|
|
website: "http://192.168.1.37",
|
|
httpPrefix: "app-api/",
|
|
imgUrl: "https://jiangxijiakao-1.oss-cn-hangzhou.aliyuncs.com/defaultImages/app/bigImg/",
|
|
// 支付测试地址
|
|
// preUrl: 'https://u8wbs.zyebank.cn/cem_ysb_u6/index.html',
|
|
// const preUrl = 'https://u8wbs.zyebank.cn/cem_ysb_u8/index.html'
|
|
// 生产地址
|
|
preUrl: "https://zmcht.zybank.com.cn/cem_ysb/index.html"
|
|
};
|
|
var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
|
|
function getAugmentedNamespace(n) {
|
|
if (n.__esModule)
|
|
return n;
|
|
var f = n.default;
|
|
if (typeof f == "function") {
|
|
var a = function a2() {
|
|
if (this instanceof a2) {
|
|
var args = [null];
|
|
args.push.apply(args, arguments);
|
|
var Ctor = Function.bind.apply(f, args);
|
|
return new Ctor();
|
|
}
|
|
return f.apply(this, arguments);
|
|
};
|
|
a.prototype = f.prototype;
|
|
} else
|
|
a = {};
|
|
Object.defineProperty(a, "__esModule", { value: true });
|
|
Object.keys(n).forEach(function(k) {
|
|
var d = Object.getOwnPropertyDescriptor(n, k);
|
|
Object.defineProperty(a, k, d.get ? d : {
|
|
enumerable: true,
|
|
get: function() {
|
|
return n[k];
|
|
}
|
|
});
|
|
});
|
|
return a;
|
|
}
|
|
var md5Exports = {};
|
|
var md5$1 = {
|
|
get exports() {
|
|
return md5Exports;
|
|
},
|
|
set exports(v) {
|
|
md5Exports = v;
|
|
}
|
|
};
|
|
const __viteBrowserExternal = new Proxy({}, {
|
|
get(_, key) {
|
|
throw new Error(`Module "" has been externalized for browser compatibility. Cannot access ".${key}" in client code. See http://vitejs.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.`);
|
|
}
|
|
});
|
|
const __viteBrowserExternal$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
__proto__: null,
|
|
default: __viteBrowserExternal
|
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
const require$$1 = /* @__PURE__ */ getAugmentedNamespace(__viteBrowserExternal$1);
|
|
/**
|
|
* [js-md5]{@link https://github.com/emn178/js-md5}
|
|
*
|
|
* @namespace md5
|
|
* @version 0.8.3
|
|
* @author Chen, Yi-Cyuan [emn178@gmail.com]
|
|
* @copyright Chen, Yi-Cyuan 2014-2023
|
|
* @license MIT
|
|
*/
|
|
(function(module) {
|
|
(function() {
|
|
var INPUT_ERROR = "input is invalid type";
|
|
var FINALIZE_ERROR = "finalize already called";
|
|
var WINDOW = typeof window === "object";
|
|
var root = WINDOW ? window : {};
|
|
if (root.JS_MD5_NO_WINDOW) {
|
|
WINDOW = false;
|
|
}
|
|
var WEB_WORKER = !WINDOW && typeof self === "object";
|
|
var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === "object" && process.versions && process.versions.node;
|
|
if (NODE_JS) {
|
|
root = commonjsGlobal;
|
|
} else if (WEB_WORKER) {
|
|
root = self;
|
|
}
|
|
var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && true && module.exports;
|
|
var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== "undefined";
|
|
var HEX_CHARS = "0123456789abcdef".split("");
|
|
var EXTRA = [128, 32768, 8388608, -2147483648];
|
|
var SHIFT = [0, 8, 16, 24];
|
|
var OUTPUT_TYPES = ["hex", "array", "digest", "buffer", "arrayBuffer", "base64"];
|
|
var BASE64_ENCODE_CHAR = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");
|
|
var blocks = [], buffer8;
|
|
if (ARRAY_BUFFER) {
|
|
var buffer = new ArrayBuffer(68);
|
|
buffer8 = new Uint8Array(buffer);
|
|
blocks = new Uint32Array(buffer);
|
|
}
|
|
var isArray2 = Array.isArray;
|
|
if (root.JS_MD5_NO_NODE_JS || !isArray2) {
|
|
isArray2 = function(obj2) {
|
|
return Object.prototype.toString.call(obj2) === "[object Array]";
|
|
};
|
|
}
|
|
var isView = ArrayBuffer.isView;
|
|
if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !isView)) {
|
|
isView = function(obj2) {
|
|
return typeof obj2 === "object" && obj2.buffer && obj2.buffer.constructor === ArrayBuffer;
|
|
};
|
|
}
|
|
var formatMessage = function(message) {
|
|
var type = typeof message;
|
|
if (type === "string") {
|
|
return [message, true];
|
|
}
|
|
if (type !== "object" || message === null) {
|
|
throw new Error(INPUT_ERROR);
|
|
}
|
|
if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {
|
|
return [new Uint8Array(message), false];
|
|
}
|
|
if (!isArray2(message) && !isView(message)) {
|
|
throw new Error(INPUT_ERROR);
|
|
}
|
|
return [message, false];
|
|
};
|
|
var createOutputMethod = function(outputType) {
|
|
return function(message) {
|
|
return new Md5(true).update(message)[outputType]();
|
|
};
|
|
};
|
|
var createMethod = function() {
|
|
var method = createOutputMethod("hex");
|
|
if (NODE_JS) {
|
|
method = nodeWrap(method);
|
|
}
|
|
method.create = function() {
|
|
return new Md5();
|
|
};
|
|
method.update = function(message) {
|
|
return method.create().update(message);
|
|
};
|
|
for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
|
|
var type = OUTPUT_TYPES[i];
|
|
method[type] = createOutputMethod(type);
|
|
}
|
|
return method;
|
|
};
|
|
var nodeWrap = function(method) {
|
|
var crypto = require$$1;
|
|
var Buffer2 = require$$1.Buffer;
|
|
var bufferFrom;
|
|
if (Buffer2.from && !root.JS_MD5_NO_BUFFER_FROM) {
|
|
bufferFrom = Buffer2.from;
|
|
} else {
|
|
bufferFrom = function(message) {
|
|
return new Buffer2(message);
|
|
};
|
|
}
|
|
var nodeMethod = function(message) {
|
|
if (typeof message === "string") {
|
|
return crypto.createHash("md5").update(message, "utf8").digest("hex");
|
|
} else {
|
|
if (message === null || message === void 0) {
|
|
throw new Error(INPUT_ERROR);
|
|
} else if (message.constructor === ArrayBuffer) {
|
|
message = new Uint8Array(message);
|
|
}
|
|
}
|
|
if (isArray2(message) || isView(message) || message.constructor === Buffer2) {
|
|
return crypto.createHash("md5").update(bufferFrom(message)).digest("hex");
|
|
} else {
|
|
return method(message);
|
|
}
|
|
};
|
|
return nodeMethod;
|
|
};
|
|
var createHmacOutputMethod = function(outputType) {
|
|
return function(key, message) {
|
|
return new HmacMd5(key, true).update(message)[outputType]();
|
|
};
|
|
};
|
|
var createHmacMethod = function() {
|
|
var method = createHmacOutputMethod("hex");
|
|
method.create = function(key) {
|
|
return new HmacMd5(key);
|
|
};
|
|
method.update = function(key, message) {
|
|
return method.create(key).update(message);
|
|
};
|
|
for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
|
|
var type = OUTPUT_TYPES[i];
|
|
method[type] = createHmacOutputMethod(type);
|
|
}
|
|
return method;
|
|
};
|
|
function Md5(sharedMemory) {
|
|
if (sharedMemory) {
|
|
blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
|
|
this.blocks = blocks;
|
|
this.buffer8 = buffer8;
|
|
} else {
|
|
if (ARRAY_BUFFER) {
|
|
var buffer2 = new ArrayBuffer(68);
|
|
this.buffer8 = new Uint8Array(buffer2);
|
|
this.blocks = new Uint32Array(buffer2);
|
|
} else {
|
|
this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
|
|
}
|
|
}
|
|
this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;
|
|
this.finalized = this.hashed = false;
|
|
this.first = true;
|
|
}
|
|
Md5.prototype.update = function(message) {
|
|
if (this.finalized) {
|
|
throw new Error(FINALIZE_ERROR);
|
|
}
|
|
var result = formatMessage(message);
|
|
message = result[0];
|
|
var isString = result[1];
|
|
var code2, index2 = 0, i, length = message.length, blocks2 = this.blocks;
|
|
var buffer82 = this.buffer8;
|
|
while (index2 < length) {
|
|
if (this.hashed) {
|
|
this.hashed = false;
|
|
blocks2[0] = blocks2[16];
|
|
blocks2[16] = blocks2[1] = blocks2[2] = blocks2[3] = blocks2[4] = blocks2[5] = blocks2[6] = blocks2[7] = blocks2[8] = blocks2[9] = blocks2[10] = blocks2[11] = blocks2[12] = blocks2[13] = blocks2[14] = blocks2[15] = 0;
|
|
}
|
|
if (isString) {
|
|
if (ARRAY_BUFFER) {
|
|
for (i = this.start; index2 < length && i < 64; ++index2) {
|
|
code2 = message.charCodeAt(index2);
|
|
if (code2 < 128) {
|
|
buffer82[i++] = code2;
|
|
} else if (code2 < 2048) {
|
|
buffer82[i++] = 192 | code2 >>> 6;
|
|
buffer82[i++] = 128 | code2 & 63;
|
|
} else if (code2 < 55296 || code2 >= 57344) {
|
|
buffer82[i++] = 224 | code2 >>> 12;
|
|
buffer82[i++] = 128 | code2 >>> 6 & 63;
|
|
buffer82[i++] = 128 | code2 & 63;
|
|
} else {
|
|
code2 = 65536 + ((code2 & 1023) << 10 | message.charCodeAt(++index2) & 1023);
|
|
buffer82[i++] = 240 | code2 >>> 18;
|
|
buffer82[i++] = 128 | code2 >>> 12 & 63;
|
|
buffer82[i++] = 128 | code2 >>> 6 & 63;
|
|
buffer82[i++] = 128 | code2 & 63;
|
|
}
|
|
}
|
|
} else {
|
|
for (i = this.start; index2 < length && i < 64; ++index2) {
|
|
code2 = message.charCodeAt(index2);
|
|
if (code2 < 128) {
|
|
blocks2[i >>> 2] |= code2 << SHIFT[i++ & 3];
|
|
} else if (code2 < 2048) {
|
|
blocks2[i >>> 2] |= (192 | code2 >>> 6) << SHIFT[i++ & 3];
|
|
blocks2[i >>> 2] |= (128 | code2 & 63) << SHIFT[i++ & 3];
|
|
} else if (code2 < 55296 || code2 >= 57344) {
|
|
blocks2[i >>> 2] |= (224 | code2 >>> 12) << SHIFT[i++ & 3];
|
|
blocks2[i >>> 2] |= (128 | code2 >>> 6 & 63) << SHIFT[i++ & 3];
|
|
blocks2[i >>> 2] |= (128 | code2 & 63) << SHIFT[i++ & 3];
|
|
} else {
|
|
code2 = 65536 + ((code2 & 1023) << 10 | message.charCodeAt(++index2) & 1023);
|
|
blocks2[i >>> 2] |= (240 | code2 >>> 18) << SHIFT[i++ & 3];
|
|
blocks2[i >>> 2] |= (128 | code2 >>> 12 & 63) << SHIFT[i++ & 3];
|
|
blocks2[i >>> 2] |= (128 | code2 >>> 6 & 63) << SHIFT[i++ & 3];
|
|
blocks2[i >>> 2] |= (128 | code2 & 63) << SHIFT[i++ & 3];
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
if (ARRAY_BUFFER) {
|
|
for (i = this.start; index2 < length && i < 64; ++index2) {
|
|
buffer82[i++] = message[index2];
|
|
}
|
|
} else {
|
|
for (i = this.start; index2 < length && i < 64; ++index2) {
|
|
blocks2[i >>> 2] |= message[index2] << SHIFT[i++ & 3];
|
|
}
|
|
}
|
|
}
|
|
this.lastByteIndex = i;
|
|
this.bytes += i - this.start;
|
|
if (i >= 64) {
|
|
this.start = i - 64;
|
|
this.hash();
|
|
this.hashed = true;
|
|
} else {
|
|
this.start = i;
|
|
}
|
|
}
|
|
if (this.bytes > 4294967295) {
|
|
this.hBytes += this.bytes / 4294967296 << 0;
|
|
this.bytes = this.bytes % 4294967296;
|
|
}
|
|
return this;
|
|
};
|
|
Md5.prototype.finalize = function() {
|
|
if (this.finalized) {
|
|
return;
|
|
}
|
|
this.finalized = true;
|
|
var blocks2 = this.blocks, i = this.lastByteIndex;
|
|
blocks2[i >>> 2] |= EXTRA[i & 3];
|
|
if (i >= 56) {
|
|
if (!this.hashed) {
|
|
this.hash();
|
|
}
|
|
blocks2[0] = blocks2[16];
|
|
blocks2[16] = blocks2[1] = blocks2[2] = blocks2[3] = blocks2[4] = blocks2[5] = blocks2[6] = blocks2[7] = blocks2[8] = blocks2[9] = blocks2[10] = blocks2[11] = blocks2[12] = blocks2[13] = blocks2[14] = blocks2[15] = 0;
|
|
}
|
|
blocks2[14] = this.bytes << 3;
|
|
blocks2[15] = this.hBytes << 3 | this.bytes >>> 29;
|
|
this.hash();
|
|
};
|
|
Md5.prototype.hash = function() {
|
|
var a, b, c, d, bc, da, blocks2 = this.blocks;
|
|
if (this.first) {
|
|
a = blocks2[0] - 680876937;
|
|
a = (a << 7 | a >>> 25) - 271733879 << 0;
|
|
d = (-1732584194 ^ a & 2004318071) + blocks2[1] - 117830708;
|
|
d = (d << 12 | d >>> 20) + a << 0;
|
|
c = (-271733879 ^ d & (a ^ -271733879)) + blocks2[2] - 1126478375;
|
|
c = (c << 17 | c >>> 15) + d << 0;
|
|
b = (a ^ c & (d ^ a)) + blocks2[3] - 1316259209;
|
|
b = (b << 22 | b >>> 10) + c << 0;
|
|
} else {
|
|
a = this.h0;
|
|
b = this.h1;
|
|
c = this.h2;
|
|
d = this.h3;
|
|
a += (d ^ b & (c ^ d)) + blocks2[0] - 680876936;
|
|
a = (a << 7 | a >>> 25) + b << 0;
|
|
d += (c ^ a & (b ^ c)) + blocks2[1] - 389564586;
|
|
d = (d << 12 | d >>> 20) + a << 0;
|
|
c += (b ^ d & (a ^ b)) + blocks2[2] + 606105819;
|
|
c = (c << 17 | c >>> 15) + d << 0;
|
|
b += (a ^ c & (d ^ a)) + blocks2[3] - 1044525330;
|
|
b = (b << 22 | b >>> 10) + c << 0;
|
|
}
|
|
a += (d ^ b & (c ^ d)) + blocks2[4] - 176418897;
|
|
a = (a << 7 | a >>> 25) + b << 0;
|
|
d += (c ^ a & (b ^ c)) + blocks2[5] + 1200080426;
|
|
d = (d << 12 | d >>> 20) + a << 0;
|
|
c += (b ^ d & (a ^ b)) + blocks2[6] - 1473231341;
|
|
c = (c << 17 | c >>> 15) + d << 0;
|
|
b += (a ^ c & (d ^ a)) + blocks2[7] - 45705983;
|
|
b = (b << 22 | b >>> 10) + c << 0;
|
|
a += (d ^ b & (c ^ d)) + blocks2[8] + 1770035416;
|
|
a = (a << 7 | a >>> 25) + b << 0;
|
|
d += (c ^ a & (b ^ c)) + blocks2[9] - 1958414417;
|
|
d = (d << 12 | d >>> 20) + a << 0;
|
|
c += (b ^ d & (a ^ b)) + blocks2[10] - 42063;
|
|
c = (c << 17 | c >>> 15) + d << 0;
|
|
b += (a ^ c & (d ^ a)) + blocks2[11] - 1990404162;
|
|
b = (b << 22 | b >>> 10) + c << 0;
|
|
a += (d ^ b & (c ^ d)) + blocks2[12] + 1804603682;
|
|
a = (a << 7 | a >>> 25) + b << 0;
|
|
d += (c ^ a & (b ^ c)) + blocks2[13] - 40341101;
|
|
d = (d << 12 | d >>> 20) + a << 0;
|
|
c += (b ^ d & (a ^ b)) + blocks2[14] - 1502002290;
|
|
c = (c << 17 | c >>> 15) + d << 0;
|
|
b += (a ^ c & (d ^ a)) + blocks2[15] + 1236535329;
|
|
b = (b << 22 | b >>> 10) + c << 0;
|
|
a += (c ^ d & (b ^ c)) + blocks2[1] - 165796510;
|
|
a = (a << 5 | a >>> 27) + b << 0;
|
|
d += (b ^ c & (a ^ b)) + blocks2[6] - 1069501632;
|
|
d = (d << 9 | d >>> 23) + a << 0;
|
|
c += (a ^ b & (d ^ a)) + blocks2[11] + 643717713;
|
|
c = (c << 14 | c >>> 18) + d << 0;
|
|
b += (d ^ a & (c ^ d)) + blocks2[0] - 373897302;
|
|
b = (b << 20 | b >>> 12) + c << 0;
|
|
a += (c ^ d & (b ^ c)) + blocks2[5] - 701558691;
|
|
a = (a << 5 | a >>> 27) + b << 0;
|
|
d += (b ^ c & (a ^ b)) + blocks2[10] + 38016083;
|
|
d = (d << 9 | d >>> 23) + a << 0;
|
|
c += (a ^ b & (d ^ a)) + blocks2[15] - 660478335;
|
|
c = (c << 14 | c >>> 18) + d << 0;
|
|
b += (d ^ a & (c ^ d)) + blocks2[4] - 405537848;
|
|
b = (b << 20 | b >>> 12) + c << 0;
|
|
a += (c ^ d & (b ^ c)) + blocks2[9] + 568446438;
|
|
a = (a << 5 | a >>> 27) + b << 0;
|
|
d += (b ^ c & (a ^ b)) + blocks2[14] - 1019803690;
|
|
d = (d << 9 | d >>> 23) + a << 0;
|
|
c += (a ^ b & (d ^ a)) + blocks2[3] - 187363961;
|
|
c = (c << 14 | c >>> 18) + d << 0;
|
|
b += (d ^ a & (c ^ d)) + blocks2[8] + 1163531501;
|
|
b = (b << 20 | b >>> 12) + c << 0;
|
|
a += (c ^ d & (b ^ c)) + blocks2[13] - 1444681467;
|
|
a = (a << 5 | a >>> 27) + b << 0;
|
|
d += (b ^ c & (a ^ b)) + blocks2[2] - 51403784;
|
|
d = (d << 9 | d >>> 23) + a << 0;
|
|
c += (a ^ b & (d ^ a)) + blocks2[7] + 1735328473;
|
|
c = (c << 14 | c >>> 18) + d << 0;
|
|
b += (d ^ a & (c ^ d)) + blocks2[12] - 1926607734;
|
|
b = (b << 20 | b >>> 12) + c << 0;
|
|
bc = b ^ c;
|
|
a += (bc ^ d) + blocks2[5] - 378558;
|
|
a = (a << 4 | a >>> 28) + b << 0;
|
|
d += (bc ^ a) + blocks2[8] - 2022574463;
|
|
d = (d << 11 | d >>> 21) + a << 0;
|
|
da = d ^ a;
|
|
c += (da ^ b) + blocks2[11] + 1839030562;
|
|
c = (c << 16 | c >>> 16) + d << 0;
|
|
b += (da ^ c) + blocks2[14] - 35309556;
|
|
b = (b << 23 | b >>> 9) + c << 0;
|
|
bc = b ^ c;
|
|
a += (bc ^ d) + blocks2[1] - 1530992060;
|
|
a = (a << 4 | a >>> 28) + b << 0;
|
|
d += (bc ^ a) + blocks2[4] + 1272893353;
|
|
d = (d << 11 | d >>> 21) + a << 0;
|
|
da = d ^ a;
|
|
c += (da ^ b) + blocks2[7] - 155497632;
|
|
c = (c << 16 | c >>> 16) + d << 0;
|
|
b += (da ^ c) + blocks2[10] - 1094730640;
|
|
b = (b << 23 | b >>> 9) + c << 0;
|
|
bc = b ^ c;
|
|
a += (bc ^ d) + blocks2[13] + 681279174;
|
|
a = (a << 4 | a >>> 28) + b << 0;
|
|
d += (bc ^ a) + blocks2[0] - 358537222;
|
|
d = (d << 11 | d >>> 21) + a << 0;
|
|
da = d ^ a;
|
|
c += (da ^ b) + blocks2[3] - 722521979;
|
|
c = (c << 16 | c >>> 16) + d << 0;
|
|
b += (da ^ c) + blocks2[6] + 76029189;
|
|
b = (b << 23 | b >>> 9) + c << 0;
|
|
bc = b ^ c;
|
|
a += (bc ^ d) + blocks2[9] - 640364487;
|
|
a = (a << 4 | a >>> 28) + b << 0;
|
|
d += (bc ^ a) + blocks2[12] - 421815835;
|
|
d = (d << 11 | d >>> 21) + a << 0;
|
|
da = d ^ a;
|
|
c += (da ^ b) + blocks2[15] + 530742520;
|
|
c = (c << 16 | c >>> 16) + d << 0;
|
|
b += (da ^ c) + blocks2[2] - 995338651;
|
|
b = (b << 23 | b >>> 9) + c << 0;
|
|
a += (c ^ (b | ~d)) + blocks2[0] - 198630844;
|
|
a = (a << 6 | a >>> 26) + b << 0;
|
|
d += (b ^ (a | ~c)) + blocks2[7] + 1126891415;
|
|
d = (d << 10 | d >>> 22) + a << 0;
|
|
c += (a ^ (d | ~b)) + blocks2[14] - 1416354905;
|
|
c = (c << 15 | c >>> 17) + d << 0;
|
|
b += (d ^ (c | ~a)) + blocks2[5] - 57434055;
|
|
b = (b << 21 | b >>> 11) + c << 0;
|
|
a += (c ^ (b | ~d)) + blocks2[12] + 1700485571;
|
|
a = (a << 6 | a >>> 26) + b << 0;
|
|
d += (b ^ (a | ~c)) + blocks2[3] - 1894986606;
|
|
d = (d << 10 | d >>> 22) + a << 0;
|
|
c += (a ^ (d | ~b)) + blocks2[10] - 1051523;
|
|
c = (c << 15 | c >>> 17) + d << 0;
|
|
b += (d ^ (c | ~a)) + blocks2[1] - 2054922799;
|
|
b = (b << 21 | b >>> 11) + c << 0;
|
|
a += (c ^ (b | ~d)) + blocks2[8] + 1873313359;
|
|
a = (a << 6 | a >>> 26) + b << 0;
|
|
d += (b ^ (a | ~c)) + blocks2[15] - 30611744;
|
|
d = (d << 10 | d >>> 22) + a << 0;
|
|
c += (a ^ (d | ~b)) + blocks2[6] - 1560198380;
|
|
c = (c << 15 | c >>> 17) + d << 0;
|
|
b += (d ^ (c | ~a)) + blocks2[13] + 1309151649;
|
|
b = (b << 21 | b >>> 11) + c << 0;
|
|
a += (c ^ (b | ~d)) + blocks2[4] - 145523070;
|
|
a = (a << 6 | a >>> 26) + b << 0;
|
|
d += (b ^ (a | ~c)) + blocks2[11] - 1120210379;
|
|
d = (d << 10 | d >>> 22) + a << 0;
|
|
c += (a ^ (d | ~b)) + blocks2[2] + 718787259;
|
|
c = (c << 15 | c >>> 17) + d << 0;
|
|
b += (d ^ (c | ~a)) + blocks2[9] - 343485551;
|
|
b = (b << 21 | b >>> 11) + c << 0;
|
|
if (this.first) {
|
|
this.h0 = a + 1732584193 << 0;
|
|
this.h1 = b - 271733879 << 0;
|
|
this.h2 = c - 1732584194 << 0;
|
|
this.h3 = d + 271733878 << 0;
|
|
this.first = false;
|
|
} else {
|
|
this.h0 = this.h0 + a << 0;
|
|
this.h1 = this.h1 + b << 0;
|
|
this.h2 = this.h2 + c << 0;
|
|
this.h3 = this.h3 + d << 0;
|
|
}
|
|
};
|
|
Md5.prototype.hex = function() {
|
|
this.finalize();
|
|
var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;
|
|
return HEX_CHARS[h0 >>> 4 & 15] + HEX_CHARS[h0 & 15] + HEX_CHARS[h0 >>> 12 & 15] + HEX_CHARS[h0 >>> 8 & 15] + HEX_CHARS[h0 >>> 20 & 15] + HEX_CHARS[h0 >>> 16 & 15] + HEX_CHARS[h0 >>> 28 & 15] + HEX_CHARS[h0 >>> 24 & 15] + HEX_CHARS[h1 >>> 4 & 15] + HEX_CHARS[h1 & 15] + HEX_CHARS[h1 >>> 12 & 15] + HEX_CHARS[h1 >>> 8 & 15] + HEX_CHARS[h1 >>> 20 & 15] + HEX_CHARS[h1 >>> 16 & 15] + HEX_CHARS[h1 >>> 28 & 15] + HEX_CHARS[h1 >>> 24 & 15] + HEX_CHARS[h2 >>> 4 & 15] + HEX_CHARS[h2 & 15] + HEX_CHARS[h2 >>> 12 & 15] + HEX_CHARS[h2 >>> 8 & 15] + HEX_CHARS[h2 >>> 20 & 15] + HEX_CHARS[h2 >>> 16 & 15] + HEX_CHARS[h2 >>> 28 & 15] + HEX_CHARS[h2 >>> 24 & 15] + HEX_CHARS[h3 >>> 4 & 15] + HEX_CHARS[h3 & 15] + HEX_CHARS[h3 >>> 12 & 15] + HEX_CHARS[h3 >>> 8 & 15] + HEX_CHARS[h3 >>> 20 & 15] + HEX_CHARS[h3 >>> 16 & 15] + HEX_CHARS[h3 >>> 28 & 15] + HEX_CHARS[h3 >>> 24 & 15];
|
|
};
|
|
Md5.prototype.toString = Md5.prototype.hex;
|
|
Md5.prototype.digest = function() {
|
|
this.finalize();
|
|
var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;
|
|
return [
|
|
h0 & 255,
|
|
h0 >>> 8 & 255,
|
|
h0 >>> 16 & 255,
|
|
h0 >>> 24 & 255,
|
|
h1 & 255,
|
|
h1 >>> 8 & 255,
|
|
h1 >>> 16 & 255,
|
|
h1 >>> 24 & 255,
|
|
h2 & 255,
|
|
h2 >>> 8 & 255,
|
|
h2 >>> 16 & 255,
|
|
h2 >>> 24 & 255,
|
|
h3 & 255,
|
|
h3 >>> 8 & 255,
|
|
h3 >>> 16 & 255,
|
|
h3 >>> 24 & 255
|
|
];
|
|
};
|
|
Md5.prototype.array = Md5.prototype.digest;
|
|
Md5.prototype.arrayBuffer = function() {
|
|
this.finalize();
|
|
var buffer2 = new ArrayBuffer(16);
|
|
var blocks2 = new Uint32Array(buffer2);
|
|
blocks2[0] = this.h0;
|
|
blocks2[1] = this.h1;
|
|
blocks2[2] = this.h2;
|
|
blocks2[3] = this.h3;
|
|
return buffer2;
|
|
};
|
|
Md5.prototype.buffer = Md5.prototype.arrayBuffer;
|
|
Md5.prototype.base64 = function() {
|
|
var v1, v2, v3, base64Str = "", bytes = this.array();
|
|
for (var i = 0; i < 15; ) {
|
|
v1 = bytes[i++];
|
|
v2 = bytes[i++];
|
|
v3 = bytes[i++];
|
|
base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] + BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] + BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] + BASE64_ENCODE_CHAR[v3 & 63];
|
|
}
|
|
v1 = bytes[i];
|
|
base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] + BASE64_ENCODE_CHAR[v1 << 4 & 63] + "==";
|
|
return base64Str;
|
|
};
|
|
function HmacMd5(key, sharedMemory) {
|
|
var i, result = formatMessage(key);
|
|
key = result[0];
|
|
if (result[1]) {
|
|
var bytes = [], length = key.length, index2 = 0, code2;
|
|
for (i = 0; i < length; ++i) {
|
|
code2 = key.charCodeAt(i);
|
|
if (code2 < 128) {
|
|
bytes[index2++] = code2;
|
|
} else if (code2 < 2048) {
|
|
bytes[index2++] = 192 | code2 >>> 6;
|
|
bytes[index2++] = 128 | code2 & 63;
|
|
} else if (code2 < 55296 || code2 >= 57344) {
|
|
bytes[index2++] = 224 | code2 >>> 12;
|
|
bytes[index2++] = 128 | code2 >>> 6 & 63;
|
|
bytes[index2++] = 128 | code2 & 63;
|
|
} else {
|
|
code2 = 65536 + ((code2 & 1023) << 10 | key.charCodeAt(++i) & 1023);
|
|
bytes[index2++] = 240 | code2 >>> 18;
|
|
bytes[index2++] = 128 | code2 >>> 12 & 63;
|
|
bytes[index2++] = 128 | code2 >>> 6 & 63;
|
|
bytes[index2++] = 128 | code2 & 63;
|
|
}
|
|
}
|
|
key = bytes;
|
|
}
|
|
if (key.length > 64) {
|
|
key = new Md5(true).update(key).array();
|
|
}
|
|
var oKeyPad = [], iKeyPad = [];
|
|
for (i = 0; i < 64; ++i) {
|
|
var b = key[i] || 0;
|
|
oKeyPad[i] = 92 ^ b;
|
|
iKeyPad[i] = 54 ^ b;
|
|
}
|
|
Md5.call(this, sharedMemory);
|
|
this.update(iKeyPad);
|
|
this.oKeyPad = oKeyPad;
|
|
this.inner = true;
|
|
this.sharedMemory = sharedMemory;
|
|
}
|
|
HmacMd5.prototype = new Md5();
|
|
HmacMd5.prototype.finalize = function() {
|
|
Md5.prototype.finalize.call(this);
|
|
if (this.inner) {
|
|
this.inner = false;
|
|
var innerHash = this.array();
|
|
Md5.call(this, this.sharedMemory);
|
|
this.update(this.oKeyPad);
|
|
this.update(innerHash);
|
|
Md5.prototype.finalize.call(this);
|
|
}
|
|
};
|
|
var exports = createMethod();
|
|
exports.md5 = exports;
|
|
exports.md5.hmac = createHmacMethod();
|
|
if (COMMON_JS) {
|
|
module.exports = exports;
|
|
} else {
|
|
root.md5 = exports;
|
|
}
|
|
})();
|
|
})(md5$1);
|
|
const md5 = md5Exports;
|
|
let { H5_API, WX_API, httpPrefix } = obj;
|
|
let secretKey = "22d90e09d1374f0f9e4accd07d333e55";
|
|
const request = (vm) => {
|
|
uni.$u.http.setConfig((config2) => {
|
|
let prefix = config2.prefix ? config2.prefix : httpPrefix;
|
|
config2.baseURL = H5_API + WX_API + prefix;
|
|
return config2;
|
|
});
|
|
uni.$u.http.interceptors.request.use((config2) => {
|
|
var _a;
|
|
config2.data = config2.data || {};
|
|
config2.data["timestamp"] = Date.now();
|
|
let jsonString2 = JSON.stringify(config2.data);
|
|
let strSecretKey = jsonString2 + secretKey;
|
|
let hash = md5(strSecretKey);
|
|
config2.header["Signature"] = hash;
|
|
config2.data = jsonString2;
|
|
let noToken = (_a = config2.custom) == null ? void 0 : _a.noToken;
|
|
if (noToken && config2.header.Authorization) {
|
|
delete config2.header.Authorization;
|
|
}
|
|
formatAppLog("log", "at config/request.js:45", "config");
|
|
formatAppLog("log", "at config/request.js:46", config2);
|
|
return config2;
|
|
}, (config2) => {
|
|
return Promise.reject(config2);
|
|
});
|
|
uni.$u.http.interceptors.response.use(async (response) => {
|
|
var _a;
|
|
const data = response.data;
|
|
if (data.code == 406 && response.config.url != "member/auth/refresh-token" && response.config.url !== "member/auth/logout") {
|
|
let obj2 = response.config;
|
|
let method = obj2.method.toLowerCase();
|
|
if (method == "get") {
|
|
return uni.$u.http[method](obj2.url, { params: obj2.params });
|
|
} else {
|
|
return uni.$u.http[method](obj2.url, obj2.data);
|
|
}
|
|
}
|
|
if (data.code == 401) {
|
|
formatAppLog("log", "at config/request.js:68", "报401的接口");
|
|
formatAppLog("log", "at config/request.js:69", response.config.url);
|
|
return uni.$u.debounce(vm.$store.commit("goLogin"), 1500);
|
|
}
|
|
const custom = (_a = response.config) == null ? void 0 : _a.custom;
|
|
if (data.code !== 0 && data.code != 406 && data.code != "200240213") {
|
|
formatAppLog("log", "at config/request.js:76", "不正常的code");
|
|
formatAppLog("log", "at config/request.js:77", data);
|
|
if (custom.toast !== false) {
|
|
uni.$u.toast(data.msg);
|
|
}
|
|
if (custom == null ? void 0 : custom.catch) {
|
|
return Promise.reject(data);
|
|
} else {
|
|
return new Promise(() => {
|
|
});
|
|
}
|
|
}
|
|
return data === void 0 ? {} : data;
|
|
}, (response) => {
|
|
return Promise.reject(response);
|
|
});
|
|
};
|
|
function createApp() {
|
|
const app = vue.createVueApp(App);
|
|
app.use(uviewPlus);
|
|
request(app);
|
|
return {
|
|
app
|
|
};
|
|
}
|
|
const { app: __app__, Vuex: __Vuex__, Pinia: __Pinia__ } = createApp();
|
|
uni.Vuex = __Vuex__;
|
|
uni.Pinia = __Pinia__;
|
|
__app__.provide("__globalStyles", __uniConfig.styles);
|
|
__app__._component.mpType = "app";
|
|
__app__._component.render = () => {
|
|
};
|
|
__app__.mount("#app");
|
|
})(Vue);
|