16853 lines
486 KiB
JavaScript
16853 lines
486 KiB
JavaScript
"use strict";
|
||
/**
|
||
* @vue/shared v3.4.21
|
||
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
||
* @license MIT
|
||
**/
|
||
function makeMap$1(str, expectsLowerCase) {
|
||
const set2 = new Set(str.split(","));
|
||
return expectsLowerCase ? (val) => set2.has(val.toLowerCase()) : (val) => set2.has(val);
|
||
}
|
||
const EMPTY_OBJ = Object.freeze({});
|
||
const EMPTY_ARR = Object.freeze([]);
|
||
const NOOP = () => {
|
||
};
|
||
const NO = () => false;
|
||
const isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter
|
||
(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97);
|
||
const isModelListener = (key) => key.startsWith("onUpdate:");
|
||
const extend = Object.assign;
|
||
const remove = (arr, el) => {
|
||
const i = arr.indexOf(el);
|
||
if (i > -1) {
|
||
arr.splice(i, 1);
|
||
}
|
||
};
|
||
const hasOwnProperty$2 = Object.prototype.hasOwnProperty;
|
||
const hasOwn$1 = (val, key) => hasOwnProperty$2.call(val, key);
|
||
const isArray$1 = Array.isArray;
|
||
const isMap = (val) => toTypeString(val) === "[object Map]";
|
||
const isSet = (val) => toTypeString(val) === "[object Set]";
|
||
const isFunction = (val) => typeof val === "function";
|
||
const isString = (val) => typeof val === "string";
|
||
const isSymbol = (val) => typeof val === "symbol";
|
||
const isObject$2 = (val) => val !== null && typeof val === "object";
|
||
const isPromise = (val) => {
|
||
return (isObject$2(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch);
|
||
};
|
||
const objectToString = Object.prototype.toString;
|
||
const toTypeString = (value2) => objectToString.call(value2);
|
||
const toRawType = (value2) => {
|
||
return toTypeString(value2).slice(8, -1);
|
||
};
|
||
const isPlainObject$1 = (val) => toTypeString(val) === "[object Object]";
|
||
const isIntegerKey = (key) => isString(key) && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key;
|
||
const isReservedProp = /* @__PURE__ */ makeMap$1(
|
||
// the leading comma is intentional so empty string "" is also included
|
||
",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"
|
||
);
|
||
const isBuiltInDirective = /* @__PURE__ */ makeMap$1(
|
||
"bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"
|
||
);
|
||
const cacheStringFunction = (fn) => {
|
||
const cache = /* @__PURE__ */ Object.create(null);
|
||
return (str) => {
|
||
const hit = cache[str];
|
||
return hit || (cache[str] = fn(str));
|
||
};
|
||
};
|
||
const camelizeRE = /-(\w)/g;
|
||
const camelize = cacheStringFunction((str) => {
|
||
return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : "");
|
||
});
|
||
const hyphenateRE = /\B([A-Z])/g;
|
||
const hyphenate = cacheStringFunction(
|
||
(str) => str.replace(hyphenateRE, "-$1").toLowerCase()
|
||
);
|
||
const capitalize = cacheStringFunction((str) => {
|
||
return str.charAt(0).toUpperCase() + str.slice(1);
|
||
});
|
||
const toHandlerKey = cacheStringFunction((str) => {
|
||
const s2 = str ? `on${capitalize(str)}` : ``;
|
||
return s2;
|
||
});
|
||
const hasChanged = (value2, oldValue) => !Object.is(value2, oldValue);
|
||
const invokeArrayFns$1 = (fns, arg) => {
|
||
for (let i = 0; i < fns.length; i++) {
|
||
fns[i](arg);
|
||
}
|
||
};
|
||
const def = (obj, key, value2) => {
|
||
Object.defineProperty(obj, key, {
|
||
configurable: true,
|
||
enumerable: false,
|
||
value: value2
|
||
});
|
||
};
|
||
const looseToNumber = (val) => {
|
||
const n2 = parseFloat(val);
|
||
return isNaN(n2) ? val : n2;
|
||
};
|
||
function normalizeStyle(value2) {
|
||
if (isArray$1(value2)) {
|
||
const res = {};
|
||
for (let i = 0; i < value2.length; i++) {
|
||
const item = value2[i];
|
||
const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item);
|
||
if (normalized) {
|
||
for (const key in normalized) {
|
||
res[key] = normalized[key];
|
||
}
|
||
}
|
||
}
|
||
return res;
|
||
} else if (isString(value2) || isObject$2(value2)) {
|
||
return value2;
|
||
}
|
||
}
|
||
const listDelimiterRE = /;(?![^(]*\))/g;
|
||
const propertyDelimiterRE = /:([^]+)/;
|
||
const styleCommentRE = /\/\*[^]*?\*\//g;
|
||
function parseStringStyle(cssText) {
|
||
const ret = {};
|
||
cssText.replace(styleCommentRE, "").split(listDelimiterRE).forEach((item) => {
|
||
if (item) {
|
||
const tmp = item.split(propertyDelimiterRE);
|
||
tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());
|
||
}
|
||
});
|
||
return ret;
|
||
}
|
||
function normalizeClass(value2) {
|
||
let res = "";
|
||
if (isString(value2)) {
|
||
res = value2;
|
||
} else if (isArray$1(value2)) {
|
||
for (let i = 0; i < value2.length; i++) {
|
||
const normalized = normalizeClass(value2[i]);
|
||
if (normalized) {
|
||
res += normalized + " ";
|
||
}
|
||
}
|
||
} else if (isObject$2(value2)) {
|
||
for (const name in value2) {
|
||
if (value2[name]) {
|
||
res += name + " ";
|
||
}
|
||
}
|
||
}
|
||
return res.trim();
|
||
}
|
||
const toDisplayString = (val) => {
|
||
return isString(val) ? val : val == null ? "" : isArray$1(val) || isObject$2(val) && (val.toString === objectToString || !isFunction(val.toString)) ? JSON.stringify(val, replacer, 2) : String(val);
|
||
};
|
||
const replacer = (_key, val) => {
|
||
if (val && val.__v_isRef) {
|
||
return replacer(_key, val.value);
|
||
} else if (isMap(val)) {
|
||
return {
|
||
[`Map(${val.size})`]: [...val.entries()].reduce(
|
||
(entries, [key, val2], i) => {
|
||
entries[stringifySymbol(key, i) + " =>"] = val2;
|
||
return entries;
|
||
},
|
||
{}
|
||
)
|
||
};
|
||
} else if (isSet(val)) {
|
||
return {
|
||
[`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v))
|
||
};
|
||
} else if (isSymbol(val)) {
|
||
return stringifySymbol(val);
|
||
} else if (isObject$2(val) && !isArray$1(val) && !isPlainObject$1(val)) {
|
||
return String(val);
|
||
}
|
||
return val;
|
||
};
|
||
const stringifySymbol = (v, i = "") => {
|
||
var _a;
|
||
return isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v;
|
||
};
|
||
const isObject$1 = (val) => val !== null && typeof val === "object";
|
||
const defaultDelimiters = ["{", "}"];
|
||
class BaseFormatter {
|
||
constructor() {
|
||
this._caches = /* @__PURE__ */ Object.create(null);
|
||
}
|
||
interpolate(message, values, delimiters = defaultDelimiters) {
|
||
if (!values) {
|
||
return [message];
|
||
}
|
||
let tokens = this._caches[message];
|
||
if (!tokens) {
|
||
tokens = parse(message, delimiters);
|
||
this._caches[message] = tokens;
|
||
}
|
||
return compile$1(tokens, values);
|
||
}
|
||
}
|
||
const RE_TOKEN_LIST_VALUE = /^(?:\d)+/;
|
||
const RE_TOKEN_NAMED_VALUE = /^(?:\w)+/;
|
||
function parse(format2, [startDelimiter, endDelimiter]) {
|
||
const tokens = [];
|
||
let position = 0;
|
||
let text = "";
|
||
while (position < format2.length) {
|
||
let char = format2[position++];
|
||
if (char === startDelimiter) {
|
||
if (text) {
|
||
tokens.push({ type: "text", value: text });
|
||
}
|
||
text = "";
|
||
let sub = "";
|
||
char = format2[position++];
|
||
while (char !== void 0 && char !== endDelimiter) {
|
||
sub += char;
|
||
char = format2[position++];
|
||
}
|
||
const isClosed = char === endDelimiter;
|
||
const type2 = RE_TOKEN_LIST_VALUE.test(sub) ? "list" : isClosed && RE_TOKEN_NAMED_VALUE.test(sub) ? "named" : "unknown";
|
||
tokens.push({ value: sub, type: type2 });
|
||
} else {
|
||
text += char;
|
||
}
|
||
}
|
||
text && tokens.push({ type: "text", value: text });
|
||
return tokens;
|
||
}
|
||
function compile$1(tokens, values) {
|
||
const compiled = [];
|
||
let index2 = 0;
|
||
const mode = Array.isArray(values) ? "list" : isObject$1(values) ? "named" : "unknown";
|
||
if (mode === "unknown") {
|
||
return compiled;
|
||
}
|
||
while (index2 < tokens.length) {
|
||
const token = tokens[index2];
|
||
switch (token.type) {
|
||
case "text":
|
||
compiled.push(token.value);
|
||
break;
|
||
case "list":
|
||
compiled.push(values[parseInt(token.value, 10)]);
|
||
break;
|
||
case "named":
|
||
if (mode === "named") {
|
||
compiled.push(values[token.value]);
|
||
} else {
|
||
{
|
||
console.warn(`Type of token '${token.type}' and format of value '${mode}' don't match!`);
|
||
}
|
||
}
|
||
break;
|
||
case "unknown":
|
||
{
|
||
console.warn(`Detect 'unknown' type of token!`);
|
||
}
|
||
break;
|
||
}
|
||
index2++;
|
||
}
|
||
return compiled;
|
||
}
|
||
const LOCALE_ZH_HANS = "zh-Hans";
|
||
const LOCALE_ZH_HANT = "zh-Hant";
|
||
const LOCALE_EN = "en";
|
||
const LOCALE_FR = "fr";
|
||
const LOCALE_ES = "es";
|
||
const hasOwnProperty$1 = Object.prototype.hasOwnProperty;
|
||
const hasOwn = (val, key) => hasOwnProperty$1.call(val, key);
|
||
const defaultFormatter = new BaseFormatter();
|
||
function include(str, parts) {
|
||
return !!parts.find((part) => str.indexOf(part) !== -1);
|
||
}
|
||
function startsWith(str, parts) {
|
||
return parts.find((part) => str.indexOf(part) === 0);
|
||
}
|
||
function normalizeLocale(locale, messages3) {
|
||
if (!locale) {
|
||
return;
|
||
}
|
||
locale = locale.trim().replace(/_/g, "-");
|
||
if (messages3 && messages3[locale]) {
|
||
return locale;
|
||
}
|
||
locale = locale.toLowerCase();
|
||
if (locale === "chinese") {
|
||
return LOCALE_ZH_HANS;
|
||
}
|
||
if (locale.indexOf("zh") === 0) {
|
||
if (locale.indexOf("-hans") > -1) {
|
||
return LOCALE_ZH_HANS;
|
||
}
|
||
if (locale.indexOf("-hant") > -1) {
|
||
return LOCALE_ZH_HANT;
|
||
}
|
||
if (include(locale, ["-tw", "-hk", "-mo", "-cht"])) {
|
||
return LOCALE_ZH_HANT;
|
||
}
|
||
return LOCALE_ZH_HANS;
|
||
}
|
||
let locales = [LOCALE_EN, LOCALE_FR, LOCALE_ES];
|
||
if (messages3 && Object.keys(messages3).length > 0) {
|
||
locales = Object.keys(messages3);
|
||
}
|
||
const lang = startsWith(locale, locales);
|
||
if (lang) {
|
||
return lang;
|
||
}
|
||
}
|
||
class I18n {
|
||
constructor({ locale, fallbackLocale, messages: messages3, watcher, formater: formater2 }) {
|
||
this.locale = LOCALE_EN;
|
||
this.fallbackLocale = LOCALE_EN;
|
||
this.message = {};
|
||
this.messages = {};
|
||
this.watchers = [];
|
||
if (fallbackLocale) {
|
||
this.fallbackLocale = fallbackLocale;
|
||
}
|
||
this.formater = formater2 || defaultFormatter;
|
||
this.messages = messages3 || {};
|
||
this.setLocale(locale || LOCALE_EN);
|
||
if (watcher) {
|
||
this.watchLocale(watcher);
|
||
}
|
||
}
|
||
setLocale(locale) {
|
||
const oldLocale = this.locale;
|
||
this.locale = normalizeLocale(locale, this.messages) || this.fallbackLocale;
|
||
if (!this.messages[this.locale]) {
|
||
this.messages[this.locale] = {};
|
||
}
|
||
this.message = this.messages[this.locale];
|
||
if (oldLocale !== this.locale) {
|
||
this.watchers.forEach((watcher) => {
|
||
watcher(this.locale, oldLocale);
|
||
});
|
||
}
|
||
}
|
||
getLocale() {
|
||
return this.locale;
|
||
}
|
||
watchLocale(fn) {
|
||
const index2 = this.watchers.push(fn) - 1;
|
||
return () => {
|
||
this.watchers.splice(index2, 1);
|
||
};
|
||
}
|
||
add(locale, message, override = true) {
|
||
const curMessages = this.messages[locale];
|
||
if (curMessages) {
|
||
if (override) {
|
||
Object.assign(curMessages, message);
|
||
} else {
|
||
Object.keys(message).forEach((key) => {
|
||
if (!hasOwn(curMessages, key)) {
|
||
curMessages[key] = message[key];
|
||
}
|
||
});
|
||
}
|
||
} else {
|
||
this.messages[locale] = message;
|
||
}
|
||
}
|
||
f(message, values, delimiters) {
|
||
return this.formater.interpolate(message, values, delimiters).join("");
|
||
}
|
||
t(key, locale, values) {
|
||
let message = this.message;
|
||
if (typeof locale === "string") {
|
||
locale = normalizeLocale(locale, this.messages);
|
||
locale && (message = this.messages[locale]);
|
||
} else {
|
||
values = locale;
|
||
}
|
||
if (!hasOwn(message, key)) {
|
||
console.warn(`Cannot translate the value of keypath ${key}. Use the value of keypath as default.`);
|
||
return key;
|
||
}
|
||
return this.formater.interpolate(message[key], values).join("");
|
||
}
|
||
}
|
||
function watchAppLocale(appVm, i18n) {
|
||
if (appVm.$watchLocale) {
|
||
appVm.$watchLocale((newLocale) => {
|
||
i18n.setLocale(newLocale);
|
||
});
|
||
} else {
|
||
appVm.$watch(() => appVm.$locale, (newLocale) => {
|
||
i18n.setLocale(newLocale);
|
||
});
|
||
}
|
||
}
|
||
function getDefaultLocale() {
|
||
if (typeof index$1 !== "undefined" && index$1.getLocale) {
|
||
return index$1.getLocale();
|
||
}
|
||
if (typeof global !== "undefined" && global.getLocale) {
|
||
return global.getLocale();
|
||
}
|
||
return LOCALE_EN;
|
||
}
|
||
function initVueI18n(locale, messages3 = {}, fallbackLocale, watcher) {
|
||
if (typeof locale !== "string") {
|
||
const options = [
|
||
messages3,
|
||
locale
|
||
];
|
||
locale = options[0];
|
||
messages3 = options[1];
|
||
}
|
||
if (typeof locale !== "string") {
|
||
locale = getDefaultLocale();
|
||
}
|
||
if (typeof fallbackLocale !== "string") {
|
||
fallbackLocale = typeof __uniConfig !== "undefined" && __uniConfig.fallbackLocale || LOCALE_EN;
|
||
}
|
||
const i18n = new I18n({
|
||
locale,
|
||
fallbackLocale,
|
||
messages: messages3,
|
||
watcher
|
||
});
|
||
let t2 = (key, values) => {
|
||
if (typeof getApp !== "function") {
|
||
t2 = function(key2, values2) {
|
||
return i18n.t(key2, values2);
|
||
};
|
||
} else {
|
||
let isWatchedAppLocale = false;
|
||
t2 = function(key2, values2) {
|
||
const appVm = getApp().$vm;
|
||
if (appVm) {
|
||
appVm.$locale;
|
||
if (!isWatchedAppLocale) {
|
||
isWatchedAppLocale = true;
|
||
watchAppLocale(appVm, i18n);
|
||
}
|
||
}
|
||
return i18n.t(key2, values2);
|
||
};
|
||
}
|
||
return t2(key, values);
|
||
};
|
||
return {
|
||
i18n,
|
||
f(message, values, delimiters) {
|
||
return i18n.f(message, values, delimiters);
|
||
},
|
||
t(key, values) {
|
||
return t2(key, values);
|
||
},
|
||
add(locale2, message, override = true) {
|
||
return i18n.add(locale2, message, override);
|
||
},
|
||
watch(fn) {
|
||
return i18n.watchLocale(fn);
|
||
},
|
||
getLocale() {
|
||
return i18n.getLocale();
|
||
},
|
||
setLocale(newLocale) {
|
||
return i18n.setLocale(newLocale);
|
||
}
|
||
};
|
||
}
|
||
const SLOT_DEFAULT_NAME = "d";
|
||
const ON_SHOW = "onShow";
|
||
const ON_HIDE = "onHide";
|
||
const ON_LAUNCH = "onLaunch";
|
||
const ON_ERROR = "onError";
|
||
const ON_THEME_CHANGE = "onThemeChange";
|
||
const ON_PAGE_NOT_FOUND = "onPageNotFound";
|
||
const ON_UNHANDLE_REJECTION = "onUnhandledRejection";
|
||
const ON_EXIT = "onExit";
|
||
const ON_LOAD = "onLoad";
|
||
const ON_READY = "onReady";
|
||
const ON_UNLOAD = "onUnload";
|
||
const ON_INIT = "onInit";
|
||
const ON_SAVE_EXIT_STATE = "onSaveExitState";
|
||
const ON_RESIZE = "onResize";
|
||
const ON_BACK_PRESS = "onBackPress";
|
||
const ON_PAGE_SCROLL = "onPageScroll";
|
||
const ON_TAB_ITEM_TAP = "onTabItemTap";
|
||
const ON_REACH_BOTTOM = "onReachBottom";
|
||
const ON_PULL_DOWN_REFRESH = "onPullDownRefresh";
|
||
const ON_SHARE_TIMELINE = "onShareTimeline";
|
||
const ON_SHARE_CHAT = "onShareChat";
|
||
const ON_ADD_TO_FAVORITES = "onAddToFavorites";
|
||
const ON_SHARE_APP_MESSAGE = "onShareAppMessage";
|
||
const ON_NAVIGATION_BAR_BUTTON_TAP = "onNavigationBarButtonTap";
|
||
const ON_NAVIGATION_BAR_SEARCH_INPUT_CLICKED = "onNavigationBarSearchInputClicked";
|
||
const ON_NAVIGATION_BAR_SEARCH_INPUT_CHANGED = "onNavigationBarSearchInputChanged";
|
||
const ON_NAVIGATION_BAR_SEARCH_INPUT_CONFIRMED = "onNavigationBarSearchInputConfirmed";
|
||
const ON_NAVIGATION_BAR_SEARCH_INPUT_FOCUS_CHANGED = "onNavigationBarSearchInputFocusChanged";
|
||
const VIRTUAL_HOST_STYLE = "virtualHostStyle";
|
||
const VIRTUAL_HOST_CLASS = "virtualHostClass";
|
||
const VIRTUAL_HOST_HIDDEN = "virtualHostHidden";
|
||
const VIRTUAL_HOST_ID = "virtualHostId";
|
||
function hasLeadingSlash(str) {
|
||
return str.indexOf("/") === 0;
|
||
}
|
||
function addLeadingSlash(str) {
|
||
return hasLeadingSlash(str) ? str : "/" + str;
|
||
}
|
||
const invokeArrayFns = (fns, arg) => {
|
||
let ret;
|
||
for (let i = 0; i < fns.length; i++) {
|
||
ret = fns[i](arg);
|
||
}
|
||
return ret;
|
||
};
|
||
function once(fn, ctx = null) {
|
||
let res;
|
||
return (...args) => {
|
||
if (fn) {
|
||
res = fn.apply(ctx, args);
|
||
fn = null;
|
||
}
|
||
return res;
|
||
};
|
||
}
|
||
function getValueByDataPath(obj, path) {
|
||
if (!isString(path)) {
|
||
return;
|
||
}
|
||
path = path.replace(/\[(\d+)\]/g, ".$1");
|
||
const parts = path.split(".");
|
||
let key = parts[0];
|
||
if (!obj) {
|
||
obj = {};
|
||
}
|
||
if (parts.length === 1) {
|
||
return obj[key];
|
||
}
|
||
return getValueByDataPath(obj[key], parts.slice(1).join("."));
|
||
}
|
||
function sortObject(obj) {
|
||
let sortObj = {};
|
||
if (isPlainObject$1(obj)) {
|
||
Object.keys(obj).sort().forEach((key) => {
|
||
const _key = key;
|
||
sortObj[_key] = obj[_key];
|
||
});
|
||
}
|
||
return !Object.keys(sortObj) ? obj : sortObj;
|
||
}
|
||
const customizeRE = /:/g;
|
||
function customizeEvent(str) {
|
||
return camelize(str.replace(customizeRE, "-"));
|
||
}
|
||
const encode$1 = encodeURIComponent;
|
||
function stringifyQuery(obj, encodeStr = encode$1) {
|
||
const res = obj ? Object.keys(obj).map((key) => {
|
||
let val = obj[key];
|
||
if (typeof val === void 0 || val === null) {
|
||
val = "";
|
||
} else if (isPlainObject$1(val)) {
|
||
val = JSON.stringify(val);
|
||
}
|
||
return encodeStr(key) + "=" + encodeStr(val);
|
||
}).filter((x) => x.length > 0).join("&") : null;
|
||
return res ? `?${res}` : "";
|
||
}
|
||
const PAGE_HOOKS = [
|
||
ON_INIT,
|
||
ON_LOAD,
|
||
ON_SHOW,
|
||
ON_HIDE,
|
||
ON_UNLOAD,
|
||
ON_BACK_PRESS,
|
||
ON_PAGE_SCROLL,
|
||
ON_TAB_ITEM_TAP,
|
||
ON_REACH_BOTTOM,
|
||
ON_PULL_DOWN_REFRESH,
|
||
ON_SHARE_TIMELINE,
|
||
ON_SHARE_APP_MESSAGE,
|
||
ON_SHARE_CHAT,
|
||
ON_ADD_TO_FAVORITES,
|
||
ON_SAVE_EXIT_STATE,
|
||
ON_NAVIGATION_BAR_BUTTON_TAP,
|
||
ON_NAVIGATION_BAR_SEARCH_INPUT_CLICKED,
|
||
ON_NAVIGATION_BAR_SEARCH_INPUT_CHANGED,
|
||
ON_NAVIGATION_BAR_SEARCH_INPUT_CONFIRMED,
|
||
ON_NAVIGATION_BAR_SEARCH_INPUT_FOCUS_CHANGED
|
||
];
|
||
function isRootHook(name) {
|
||
return PAGE_HOOKS.indexOf(name) > -1;
|
||
}
|
||
const UniLifecycleHooks = [
|
||
ON_SHOW,
|
||
ON_HIDE,
|
||
ON_LAUNCH,
|
||
ON_ERROR,
|
||
ON_THEME_CHANGE,
|
||
ON_PAGE_NOT_FOUND,
|
||
ON_UNHANDLE_REJECTION,
|
||
ON_EXIT,
|
||
ON_INIT,
|
||
ON_LOAD,
|
||
ON_READY,
|
||
ON_UNLOAD,
|
||
ON_RESIZE,
|
||
ON_BACK_PRESS,
|
||
ON_PAGE_SCROLL,
|
||
ON_TAB_ITEM_TAP,
|
||
ON_REACH_BOTTOM,
|
||
ON_PULL_DOWN_REFRESH,
|
||
ON_SHARE_TIMELINE,
|
||
ON_ADD_TO_FAVORITES,
|
||
ON_SHARE_APP_MESSAGE,
|
||
ON_SHARE_CHAT,
|
||
ON_SAVE_EXIT_STATE,
|
||
ON_NAVIGATION_BAR_BUTTON_TAP,
|
||
ON_NAVIGATION_BAR_SEARCH_INPUT_CLICKED,
|
||
ON_NAVIGATION_BAR_SEARCH_INPUT_CHANGED,
|
||
ON_NAVIGATION_BAR_SEARCH_INPUT_CONFIRMED,
|
||
ON_NAVIGATION_BAR_SEARCH_INPUT_FOCUS_CHANGED
|
||
];
|
||
const MINI_PROGRAM_PAGE_RUNTIME_HOOKS = /* @__PURE__ */ (() => {
|
||
return {
|
||
onPageScroll: 1,
|
||
onShareAppMessage: 1 << 1,
|
||
onShareTimeline: 1 << 2
|
||
};
|
||
})();
|
||
function isUniLifecycleHook(name, value2, checkType = true) {
|
||
if (checkType && !isFunction(value2)) {
|
||
return false;
|
||
}
|
||
if (UniLifecycleHooks.indexOf(name) > -1) {
|
||
return true;
|
||
} else if (name.indexOf("on") === 0) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
let vueApp;
|
||
const createVueAppHooks = [];
|
||
function onCreateVueApp(hook) {
|
||
if (vueApp) {
|
||
return hook(vueApp);
|
||
}
|
||
createVueAppHooks.push(hook);
|
||
}
|
||
function invokeCreateVueAppHook(app) {
|
||
vueApp = app;
|
||
createVueAppHooks.forEach((hook) => hook(app));
|
||
}
|
||
const invokeCreateErrorHandler = once((app, createErrorHandler2) => {
|
||
return createErrorHandler2(app);
|
||
});
|
||
const E = function() {
|
||
};
|
||
E.prototype = {
|
||
_id: 1,
|
||
on: function(name, callback, ctx) {
|
||
var e2 = this.e || (this.e = {});
|
||
(e2[name] || (e2[name] = [])).push({
|
||
fn: callback,
|
||
ctx,
|
||
_id: this._id
|
||
});
|
||
return this._id++;
|
||
},
|
||
once: function(name, callback, ctx) {
|
||
var self2 = this;
|
||
function listener() {
|
||
self2.off(name, listener);
|
||
callback.apply(ctx, arguments);
|
||
}
|
||
listener._ = callback;
|
||
return this.on(name, listener, ctx);
|
||
},
|
||
emit: function(name) {
|
||
var data = [].slice.call(arguments, 1);
|
||
var evtArr = ((this.e || (this.e = {}))[name] || []).slice();
|
||
var i = 0;
|
||
var len = evtArr.length;
|
||
for (i; i < len; i++) {
|
||
evtArr[i].fn.apply(evtArr[i].ctx, data);
|
||
}
|
||
return this;
|
||
},
|
||
off: function(name, event) {
|
||
var e2 = this.e || (this.e = {});
|
||
var evts = e2[name];
|
||
var liveEvents = [];
|
||
if (evts && event) {
|
||
for (var i = evts.length - 1; i >= 0; i--) {
|
||
if (evts[i].fn === event || evts[i].fn._ === event || evts[i]._id === event) {
|
||
evts.splice(i, 1);
|
||
break;
|
||
}
|
||
}
|
||
liveEvents = evts;
|
||
}
|
||
liveEvents.length ? e2[name] = liveEvents : delete e2[name];
|
||
return this;
|
||
}
|
||
};
|
||
var E$1 = E;
|
||
/**
|
||
* @dcloudio/uni-mp-vue v3.4.21
|
||
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
||
* @license MIT
|
||
**/
|
||
function warn$2(msg, ...args) {
|
||
console.warn(`[Vue warn] ${msg}`, ...args);
|
||
}
|
||
let activeEffectScope;
|
||
class EffectScope {
|
||
constructor(detached = false) {
|
||
this.detached = detached;
|
||
this._active = true;
|
||
this.effects = [];
|
||
this.cleanups = [];
|
||
this.parent = activeEffectScope;
|
||
if (!detached && activeEffectScope) {
|
||
this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(
|
||
this
|
||
) - 1;
|
||
}
|
||
}
|
||
get active() {
|
||
return this._active;
|
||
}
|
||
run(fn) {
|
||
if (this._active) {
|
||
const currentEffectScope = activeEffectScope;
|
||
try {
|
||
activeEffectScope = this;
|
||
return fn();
|
||
} finally {
|
||
activeEffectScope = currentEffectScope;
|
||
}
|
||
} else {
|
||
warn$2(`cannot run an inactive effect scope.`);
|
||
}
|
||
}
|
||
/**
|
||
* This should only be called on non-detached scopes
|
||
* @internal
|
||
*/
|
||
on() {
|
||
activeEffectScope = this;
|
||
}
|
||
/**
|
||
* This should only be called on non-detached scopes
|
||
* @internal
|
||
*/
|
||
off() {
|
||
activeEffectScope = this.parent;
|
||
}
|
||
stop(fromParent) {
|
||
if (this._active) {
|
||
let i, l;
|
||
for (i = 0, l = this.effects.length; i < l; i++) {
|
||
this.effects[i].stop();
|
||
}
|
||
for (i = 0, l = this.cleanups.length; i < l; i++) {
|
||
this.cleanups[i]();
|
||
}
|
||
if (this.scopes) {
|
||
for (i = 0, l = this.scopes.length; i < l; i++) {
|
||
this.scopes[i].stop(true);
|
||
}
|
||
}
|
||
if (!this.detached && this.parent && !fromParent) {
|
||
const last = this.parent.scopes.pop();
|
||
if (last && last !== this) {
|
||
this.parent.scopes[this.index] = last;
|
||
last.index = this.index;
|
||
}
|
||
}
|
||
this.parent = void 0;
|
||
this._active = false;
|
||
}
|
||
}
|
||
}
|
||
function recordEffectScope(effect2, scope = activeEffectScope) {
|
||
if (scope && scope.active) {
|
||
scope.effects.push(effect2);
|
||
}
|
||
}
|
||
function getCurrentScope() {
|
||
return activeEffectScope;
|
||
}
|
||
let activeEffect;
|
||
class ReactiveEffect {
|
||
constructor(fn, trigger2, scheduler, scope) {
|
||
this.fn = fn;
|
||
this.trigger = trigger2;
|
||
this.scheduler = scheduler;
|
||
this.active = true;
|
||
this.deps = [];
|
||
this._dirtyLevel = 4;
|
||
this._trackId = 0;
|
||
this._runnings = 0;
|
||
this._shouldSchedule = false;
|
||
this._depsLength = 0;
|
||
recordEffectScope(this, scope);
|
||
}
|
||
get dirty() {
|
||
if (this._dirtyLevel === 2 || this._dirtyLevel === 3) {
|
||
this._dirtyLevel = 1;
|
||
pauseTracking();
|
||
for (let i = 0; i < this._depsLength; i++) {
|
||
const dep = this.deps[i];
|
||
if (dep.computed) {
|
||
triggerComputed(dep.computed);
|
||
if (this._dirtyLevel >= 4) {
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if (this._dirtyLevel === 1) {
|
||
this._dirtyLevel = 0;
|
||
}
|
||
resetTracking();
|
||
}
|
||
return this._dirtyLevel >= 4;
|
||
}
|
||
set dirty(v) {
|
||
this._dirtyLevel = v ? 4 : 0;
|
||
}
|
||
run() {
|
||
this._dirtyLevel = 0;
|
||
if (!this.active) {
|
||
return this.fn();
|
||
}
|
||
let lastShouldTrack = shouldTrack;
|
||
let lastEffect = activeEffect;
|
||
try {
|
||
shouldTrack = true;
|
||
activeEffect = this;
|
||
this._runnings++;
|
||
preCleanupEffect(this);
|
||
return this.fn();
|
||
} finally {
|
||
postCleanupEffect(this);
|
||
this._runnings--;
|
||
activeEffect = lastEffect;
|
||
shouldTrack = lastShouldTrack;
|
||
}
|
||
}
|
||
stop() {
|
||
var _a;
|
||
if (this.active) {
|
||
preCleanupEffect(this);
|
||
postCleanupEffect(this);
|
||
(_a = this.onStop) == null ? void 0 : _a.call(this);
|
||
this.active = false;
|
||
}
|
||
}
|
||
}
|
||
function triggerComputed(computed2) {
|
||
return computed2.value;
|
||
}
|
||
function preCleanupEffect(effect2) {
|
||
effect2._trackId++;
|
||
effect2._depsLength = 0;
|
||
}
|
||
function postCleanupEffect(effect2) {
|
||
if (effect2.deps.length > effect2._depsLength) {
|
||
for (let i = effect2._depsLength; i < effect2.deps.length; i++) {
|
||
cleanupDepEffect(effect2.deps[i], effect2);
|
||
}
|
||
effect2.deps.length = effect2._depsLength;
|
||
}
|
||
}
|
||
function cleanupDepEffect(dep, effect2) {
|
||
const trackId = dep.get(effect2);
|
||
if (trackId !== void 0 && effect2._trackId !== trackId) {
|
||
dep.delete(effect2);
|
||
if (dep.size === 0) {
|
||
dep.cleanup();
|
||
}
|
||
}
|
||
}
|
||
let shouldTrack = true;
|
||
let pauseScheduleStack = 0;
|
||
const trackStack = [];
|
||
function pauseTracking() {
|
||
trackStack.push(shouldTrack);
|
||
shouldTrack = false;
|
||
}
|
||
function resetTracking() {
|
||
const last = trackStack.pop();
|
||
shouldTrack = last === void 0 ? true : last;
|
||
}
|
||
function pauseScheduling() {
|
||
pauseScheduleStack++;
|
||
}
|
||
function resetScheduling() {
|
||
pauseScheduleStack--;
|
||
while (!pauseScheduleStack && queueEffectSchedulers.length) {
|
||
queueEffectSchedulers.shift()();
|
||
}
|
||
}
|
||
function trackEffect(effect2, dep, debuggerEventExtraInfo) {
|
||
var _a;
|
||
if (dep.get(effect2) !== effect2._trackId) {
|
||
dep.set(effect2, effect2._trackId);
|
||
const oldDep = effect2.deps[effect2._depsLength];
|
||
if (oldDep !== dep) {
|
||
if (oldDep) {
|
||
cleanupDepEffect(oldDep, effect2);
|
||
}
|
||
effect2.deps[effect2._depsLength++] = dep;
|
||
} else {
|
||
effect2._depsLength++;
|
||
}
|
||
{
|
||
(_a = effect2.onTrack) == null ? void 0 : _a.call(effect2, extend({ effect: effect2 }, debuggerEventExtraInfo));
|
||
}
|
||
}
|
||
}
|
||
const queueEffectSchedulers = [];
|
||
function triggerEffects(dep, dirtyLevel, debuggerEventExtraInfo) {
|
||
var _a;
|
||
pauseScheduling();
|
||
for (const effect2 of dep.keys()) {
|
||
let tracking;
|
||
if (effect2._dirtyLevel < dirtyLevel && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) {
|
||
effect2._shouldSchedule || (effect2._shouldSchedule = effect2._dirtyLevel === 0);
|
||
effect2._dirtyLevel = dirtyLevel;
|
||
}
|
||
if (effect2._shouldSchedule && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) {
|
||
{
|
||
(_a = effect2.onTrigger) == null ? void 0 : _a.call(effect2, extend({ effect: effect2 }, debuggerEventExtraInfo));
|
||
}
|
||
effect2.trigger();
|
||
if ((!effect2._runnings || effect2.allowRecurse) && effect2._dirtyLevel !== 2) {
|
||
effect2._shouldSchedule = false;
|
||
if (effect2.scheduler) {
|
||
queueEffectSchedulers.push(effect2.scheduler);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
resetScheduling();
|
||
}
|
||
const createDep = (cleanup, computed2) => {
|
||
const dep = /* @__PURE__ */ new Map();
|
||
dep.cleanup = cleanup;
|
||
dep.computed = computed2;
|
||
return dep;
|
||
};
|
||
const targetMap = /* @__PURE__ */ new WeakMap();
|
||
const ITERATE_KEY = Symbol("iterate");
|
||
const MAP_KEY_ITERATE_KEY = Symbol("Map key iterate");
|
||
function track(target, type2, key) {
|
||
if (shouldTrack && activeEffect) {
|
||
let depsMap = targetMap.get(target);
|
||
if (!depsMap) {
|
||
targetMap.set(target, depsMap = /* @__PURE__ */ new Map());
|
||
}
|
||
let dep = depsMap.get(key);
|
||
if (!dep) {
|
||
depsMap.set(key, dep = createDep(() => depsMap.delete(key)));
|
||
}
|
||
trackEffect(
|
||
activeEffect,
|
||
dep,
|
||
{
|
||
target,
|
||
type: type2,
|
||
key
|
||
}
|
||
);
|
||
}
|
||
}
|
||
function trigger(target, type2, key, newValue, oldValue, oldTarget) {
|
||
const depsMap = targetMap.get(target);
|
||
if (!depsMap) {
|
||
return;
|
||
}
|
||
let deps = [];
|
||
if (type2 === "clear") {
|
||
deps = [...depsMap.values()];
|
||
} else if (key === "length" && isArray$1(target)) {
|
||
const newLength = Number(newValue);
|
||
depsMap.forEach((dep, key2) => {
|
||
if (key2 === "length" || !isSymbol(key2) && key2 >= newLength) {
|
||
deps.push(dep);
|
||
}
|
||
});
|
||
} else {
|
||
if (key !== void 0) {
|
||
deps.push(depsMap.get(key));
|
||
}
|
||
switch (type2) {
|
||
case "add":
|
||
if (!isArray$1(target)) {
|
||
deps.push(depsMap.get(ITERATE_KEY));
|
||
if (isMap(target)) {
|
||
deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));
|
||
}
|
||
} else if (isIntegerKey(key)) {
|
||
deps.push(depsMap.get("length"));
|
||
}
|
||
break;
|
||
case "delete":
|
||
if (!isArray$1(target)) {
|
||
deps.push(depsMap.get(ITERATE_KEY));
|
||
if (isMap(target)) {
|
||
deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));
|
||
}
|
||
}
|
||
break;
|
||
case "set":
|
||
if (isMap(target)) {
|
||
deps.push(depsMap.get(ITERATE_KEY));
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
pauseScheduling();
|
||
for (const dep of deps) {
|
||
if (dep) {
|
||
triggerEffects(
|
||
dep,
|
||
4,
|
||
{
|
||
target,
|
||
type: type2,
|
||
key,
|
||
newValue,
|
||
oldValue,
|
||
oldTarget
|
||
}
|
||
);
|
||
}
|
||
}
|
||
resetScheduling();
|
||
}
|
||
const isNonTrackableKeys = /* @__PURE__ */ makeMap$1(`__proto__,__v_isRef,__isVue`);
|
||
const builtInSymbols = new Set(
|
||
/* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== "arguments" && key !== "caller").map((key) => Symbol[key]).filter(isSymbol)
|
||
);
|
||
const arrayInstrumentations = /* @__PURE__ */ createArrayInstrumentations();
|
||
function createArrayInstrumentations() {
|
||
const instrumentations = {};
|
||
["includes", "indexOf", "lastIndexOf"].forEach((key) => {
|
||
instrumentations[key] = function(...args) {
|
||
const arr = toRaw(this);
|
||
for (let i = 0, l = this.length; i < l; i++) {
|
||
track(arr, "get", i + "");
|
||
}
|
||
const res = arr[key](...args);
|
||
if (res === -1 || res === false) {
|
||
return arr[key](...args.map(toRaw));
|
||
} else {
|
||
return res;
|
||
}
|
||
};
|
||
});
|
||
["push", "pop", "shift", "unshift", "splice"].forEach((key) => {
|
||
instrumentations[key] = function(...args) {
|
||
pauseTracking();
|
||
pauseScheduling();
|
||
const res = toRaw(this)[key].apply(this, args);
|
||
resetScheduling();
|
||
resetTracking();
|
||
return res;
|
||
};
|
||
});
|
||
return instrumentations;
|
||
}
|
||
function hasOwnProperty(key) {
|
||
const obj = toRaw(this);
|
||
track(obj, "has", key);
|
||
return obj.hasOwnProperty(key);
|
||
}
|
||
class BaseReactiveHandler {
|
||
constructor(_isReadonly = false, _isShallow = false) {
|
||
this._isReadonly = _isReadonly;
|
||
this._isShallow = _isShallow;
|
||
}
|
||
get(target, key, receiver) {
|
||
const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow;
|
||
if (key === "__v_isReactive") {
|
||
return !isReadonly2;
|
||
} else if (key === "__v_isReadonly") {
|
||
return isReadonly2;
|
||
} else if (key === "__v_isShallow") {
|
||
return isShallow2;
|
||
} else if (key === "__v_raw") {
|
||
if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype
|
||
// this means the reciever is a user proxy of the reactive proxy
|
||
Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) {
|
||
return target;
|
||
}
|
||
return;
|
||
}
|
||
const targetIsArray = isArray$1(target);
|
||
if (!isReadonly2) {
|
||
if (targetIsArray && hasOwn$1(arrayInstrumentations, key)) {
|
||
return Reflect.get(arrayInstrumentations, key, receiver);
|
||
}
|
||
if (key === "hasOwnProperty") {
|
||
return hasOwnProperty;
|
||
}
|
||
}
|
||
const res = Reflect.get(target, key, receiver);
|
||
if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {
|
||
return res;
|
||
}
|
||
if (!isReadonly2) {
|
||
track(target, "get", key);
|
||
}
|
||
if (isShallow2) {
|
||
return res;
|
||
}
|
||
if (isRef(res)) {
|
||
return targetIsArray && isIntegerKey(key) ? res : res.value;
|
||
}
|
||
if (isObject$2(res)) {
|
||
return isReadonly2 ? readonly(res) : reactive(res);
|
||
}
|
||
return res;
|
||
}
|
||
}
|
||
class MutableReactiveHandler extends BaseReactiveHandler {
|
||
constructor(isShallow2 = false) {
|
||
super(false, isShallow2);
|
||
}
|
||
set(target, key, value2, receiver) {
|
||
let oldValue = target[key];
|
||
if (!this._isShallow) {
|
||
const isOldValueReadonly = isReadonly(oldValue);
|
||
if (!isShallow(value2) && !isReadonly(value2)) {
|
||
oldValue = toRaw(oldValue);
|
||
value2 = toRaw(value2);
|
||
}
|
||
if (!isArray$1(target) && isRef(oldValue) && !isRef(value2)) {
|
||
if (isOldValueReadonly) {
|
||
return false;
|
||
} else {
|
||
oldValue.value = value2;
|
||
return true;
|
||
}
|
||
}
|
||
}
|
||
const hadKey = isArray$1(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn$1(target, key);
|
||
const result = Reflect.set(target, key, value2, receiver);
|
||
if (target === toRaw(receiver)) {
|
||
if (!hadKey) {
|
||
trigger(target, "add", key, value2);
|
||
} else if (hasChanged(value2, oldValue)) {
|
||
trigger(target, "set", key, value2, oldValue);
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
deleteProperty(target, key) {
|
||
const hadKey = hasOwn$1(target, key);
|
||
const oldValue = target[key];
|
||
const result = Reflect.deleteProperty(target, key);
|
||
if (result && hadKey) {
|
||
trigger(target, "delete", key, void 0, oldValue);
|
||
}
|
||
return result;
|
||
}
|
||
has(target, key) {
|
||
const result = Reflect.has(target, key);
|
||
if (!isSymbol(key) || !builtInSymbols.has(key)) {
|
||
track(target, "has", key);
|
||
}
|
||
return result;
|
||
}
|
||
ownKeys(target) {
|
||
track(
|
||
target,
|
||
"iterate",
|
||
isArray$1(target) ? "length" : ITERATE_KEY
|
||
);
|
||
return Reflect.ownKeys(target);
|
||
}
|
||
}
|
||
class ReadonlyReactiveHandler extends BaseReactiveHandler {
|
||
constructor(isShallow2 = false) {
|
||
super(true, isShallow2);
|
||
}
|
||
set(target, key) {
|
||
{
|
||
warn$2(
|
||
`Set operation on key "${String(key)}" failed: target is readonly.`,
|
||
target
|
||
);
|
||
}
|
||
return true;
|
||
}
|
||
deleteProperty(target, key) {
|
||
{
|
||
warn$2(
|
||
`Delete operation on key "${String(key)}" failed: target is readonly.`,
|
||
target
|
||
);
|
||
}
|
||
return true;
|
||
}
|
||
}
|
||
const mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler();
|
||
const readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler();
|
||
const shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler(
|
||
true
|
||
);
|
||
const shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true);
|
||
const toShallow = (value2) => value2;
|
||
const getProto = (v) => Reflect.getPrototypeOf(v);
|
||
function get(target, key, isReadonly2 = false, isShallow2 = false) {
|
||
target = target["__v_raw"];
|
||
const rawTarget = toRaw(target);
|
||
const rawKey = toRaw(key);
|
||
if (!isReadonly2) {
|
||
if (hasChanged(key, rawKey)) {
|
||
track(rawTarget, "get", key);
|
||
}
|
||
track(rawTarget, "get", rawKey);
|
||
}
|
||
const { has: has2 } = getProto(rawTarget);
|
||
const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;
|
||
if (has2.call(rawTarget, key)) {
|
||
return wrap(target.get(key));
|
||
} else if (has2.call(rawTarget, rawKey)) {
|
||
return wrap(target.get(rawKey));
|
||
} else if (target !== rawTarget) {
|
||
target.get(key);
|
||
}
|
||
}
|
||
function has$1(key, isReadonly2 = false) {
|
||
const target = this["__v_raw"];
|
||
const rawTarget = toRaw(target);
|
||
const rawKey = toRaw(key);
|
||
if (!isReadonly2) {
|
||
if (hasChanged(key, rawKey)) {
|
||
track(rawTarget, "has", key);
|
||
}
|
||
track(rawTarget, "has", rawKey);
|
||
}
|
||
return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);
|
||
}
|
||
function size(target, isReadonly2 = false) {
|
||
target = target["__v_raw"];
|
||
!isReadonly2 && track(toRaw(target), "iterate", ITERATE_KEY);
|
||
return Reflect.get(target, "size", target);
|
||
}
|
||
function add(value2) {
|
||
value2 = toRaw(value2);
|
||
const target = toRaw(this);
|
||
const proto = getProto(target);
|
||
const hadKey = proto.has.call(target, value2);
|
||
if (!hadKey) {
|
||
target.add(value2);
|
||
trigger(target, "add", value2, value2);
|
||
}
|
||
return this;
|
||
}
|
||
function set$1(key, value2) {
|
||
value2 = toRaw(value2);
|
||
const target = toRaw(this);
|
||
const { has: has2, get: get2 } = getProto(target);
|
||
let hadKey = has2.call(target, key);
|
||
if (!hadKey) {
|
||
key = toRaw(key);
|
||
hadKey = has2.call(target, key);
|
||
} else {
|
||
checkIdentityKeys(target, has2, key);
|
||
}
|
||
const oldValue = get2.call(target, key);
|
||
target.set(key, value2);
|
||
if (!hadKey) {
|
||
trigger(target, "add", key, value2);
|
||
} else if (hasChanged(value2, oldValue)) {
|
||
trigger(target, "set", key, value2, oldValue);
|
||
}
|
||
return this;
|
||
}
|
||
function deleteEntry(key) {
|
||
const target = toRaw(this);
|
||
const { has: has2, get: get2 } = getProto(target);
|
||
let hadKey = has2.call(target, key);
|
||
if (!hadKey) {
|
||
key = toRaw(key);
|
||
hadKey = has2.call(target, key);
|
||
} else {
|
||
checkIdentityKeys(target, has2, key);
|
||
}
|
||
const oldValue = get2 ? get2.call(target, key) : void 0;
|
||
const result = target.delete(key);
|
||
if (hadKey) {
|
||
trigger(target, "delete", key, void 0, oldValue);
|
||
}
|
||
return result;
|
||
}
|
||
function clear() {
|
||
const target = toRaw(this);
|
||
const hadItems = target.size !== 0;
|
||
const oldTarget = isMap(target) ? new Map(target) : new Set(target);
|
||
const result = target.clear();
|
||
if (hadItems) {
|
||
trigger(target, "clear", void 0, void 0, oldTarget);
|
||
}
|
||
return result;
|
||
}
|
||
function createForEach(isReadonly2, isShallow2) {
|
||
return function forEach3(callback, thisArg) {
|
||
const observed = this;
|
||
const target = observed["__v_raw"];
|
||
const rawTarget = toRaw(target);
|
||
const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;
|
||
!isReadonly2 && track(rawTarget, "iterate", ITERATE_KEY);
|
||
return target.forEach((value2, key) => {
|
||
return callback.call(thisArg, wrap(value2), wrap(key), observed);
|
||
});
|
||
};
|
||
}
|
||
function createIterableMethod(method3, isReadonly2, isShallow2) {
|
||
return function(...args) {
|
||
const target = this["__v_raw"];
|
||
const rawTarget = toRaw(target);
|
||
const targetIsMap = isMap(rawTarget);
|
||
const isPair = method3 === "entries" || method3 === Symbol.iterator && targetIsMap;
|
||
const isKeyOnly = method3 === "keys" && targetIsMap;
|
||
const innerIterator = target[method3](...args);
|
||
const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;
|
||
!isReadonly2 && track(
|
||
rawTarget,
|
||
"iterate",
|
||
isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY
|
||
);
|
||
return {
|
||
// iterator protocol
|
||
next() {
|
||
const { value: value2, done } = innerIterator.next();
|
||
return done ? { value: value2, done } : {
|
||
value: isPair ? [wrap(value2[0]), wrap(value2[1])] : wrap(value2),
|
||
done
|
||
};
|
||
},
|
||
// iterable protocol
|
||
[Symbol.iterator]() {
|
||
return this;
|
||
}
|
||
};
|
||
};
|
||
}
|
||
function createReadonlyMethod(type2) {
|
||
return function(...args) {
|
||
{
|
||
const key = args[0] ? `on key "${args[0]}" ` : ``;
|
||
warn$2(
|
||
`${capitalize(type2)} operation ${key}failed: target is readonly.`,
|
||
toRaw(this)
|
||
);
|
||
}
|
||
return type2 === "delete" ? false : type2 === "clear" ? void 0 : this;
|
||
};
|
||
}
|
||
function createInstrumentations() {
|
||
const mutableInstrumentations2 = {
|
||
get(key) {
|
||
return get(this, key);
|
||
},
|
||
get size() {
|
||
return size(this);
|
||
},
|
||
has: has$1,
|
||
add,
|
||
set: set$1,
|
||
delete: deleteEntry,
|
||
clear,
|
||
forEach: createForEach(false, false)
|
||
};
|
||
const shallowInstrumentations2 = {
|
||
get(key) {
|
||
return get(this, key, false, true);
|
||
},
|
||
get size() {
|
||
return size(this);
|
||
},
|
||
has: has$1,
|
||
add,
|
||
set: set$1,
|
||
delete: deleteEntry,
|
||
clear,
|
||
forEach: createForEach(false, true)
|
||
};
|
||
const readonlyInstrumentations2 = {
|
||
get(key) {
|
||
return get(this, key, true);
|
||
},
|
||
get size() {
|
||
return size(this, true);
|
||
},
|
||
has(key) {
|
||
return has$1.call(this, key, true);
|
||
},
|
||
add: createReadonlyMethod("add"),
|
||
set: createReadonlyMethod("set"),
|
||
delete: createReadonlyMethod("delete"),
|
||
clear: createReadonlyMethod("clear"),
|
||
forEach: createForEach(true, false)
|
||
};
|
||
const shallowReadonlyInstrumentations2 = {
|
||
get(key) {
|
||
return get(this, key, true, true);
|
||
},
|
||
get size() {
|
||
return size(this, true);
|
||
},
|
||
has(key) {
|
||
return has$1.call(this, key, true);
|
||
},
|
||
add: createReadonlyMethod("add"),
|
||
set: createReadonlyMethod("set"),
|
||
delete: createReadonlyMethod("delete"),
|
||
clear: createReadonlyMethod("clear"),
|
||
forEach: createForEach(true, true)
|
||
};
|
||
const iteratorMethods = [
|
||
"keys",
|
||
"values",
|
||
"entries",
|
||
Symbol.iterator
|
||
];
|
||
iteratorMethods.forEach((method3) => {
|
||
mutableInstrumentations2[method3] = createIterableMethod(method3, false, false);
|
||
readonlyInstrumentations2[method3] = createIterableMethod(method3, true, false);
|
||
shallowInstrumentations2[method3] = createIterableMethod(method3, false, true);
|
||
shallowReadonlyInstrumentations2[method3] = createIterableMethod(
|
||
method3,
|
||
true,
|
||
true
|
||
);
|
||
});
|
||
return [
|
||
mutableInstrumentations2,
|
||
readonlyInstrumentations2,
|
||
shallowInstrumentations2,
|
||
shallowReadonlyInstrumentations2
|
||
];
|
||
}
|
||
const [
|
||
mutableInstrumentations,
|
||
readonlyInstrumentations,
|
||
shallowInstrumentations,
|
||
shallowReadonlyInstrumentations
|
||
] = /* @__PURE__ */ createInstrumentations();
|
||
function createInstrumentationGetter(isReadonly2, shallow) {
|
||
const instrumentations = shallow ? isReadonly2 ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly2 ? readonlyInstrumentations : mutableInstrumentations;
|
||
return (target, key, receiver) => {
|
||
if (key === "__v_isReactive") {
|
||
return !isReadonly2;
|
||
} else if (key === "__v_isReadonly") {
|
||
return isReadonly2;
|
||
} else if (key === "__v_raw") {
|
||
return target;
|
||
}
|
||
return Reflect.get(
|
||
hasOwn$1(instrumentations, key) && key in target ? instrumentations : target,
|
||
key,
|
||
receiver
|
||
);
|
||
};
|
||
}
|
||
const mutableCollectionHandlers = {
|
||
get: /* @__PURE__ */ createInstrumentationGetter(false, false)
|
||
};
|
||
const shallowCollectionHandlers = {
|
||
get: /* @__PURE__ */ createInstrumentationGetter(false, true)
|
||
};
|
||
const readonlyCollectionHandlers = {
|
||
get: /* @__PURE__ */ createInstrumentationGetter(true, false)
|
||
};
|
||
const shallowReadonlyCollectionHandlers = {
|
||
get: /* @__PURE__ */ createInstrumentationGetter(true, true)
|
||
};
|
||
function checkIdentityKeys(target, has2, key) {
|
||
const rawKey = toRaw(key);
|
||
if (rawKey !== key && has2.call(target, rawKey)) {
|
||
const type2 = toRawType(target);
|
||
warn$2(
|
||
`Reactive ${type2} contains both the raw and reactive versions of the same object${type2 === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`
|
||
);
|
||
}
|
||
}
|
||
const reactiveMap = /* @__PURE__ */ new WeakMap();
|
||
const shallowReactiveMap = /* @__PURE__ */ new WeakMap();
|
||
const readonlyMap = /* @__PURE__ */ new WeakMap();
|
||
const shallowReadonlyMap = /* @__PURE__ */ new WeakMap();
|
||
function targetTypeMap(rawType) {
|
||
switch (rawType) {
|
||
case "Object":
|
||
case "Array":
|
||
return 1;
|
||
case "Map":
|
||
case "Set":
|
||
case "WeakMap":
|
||
case "WeakSet":
|
||
return 2;
|
||
default:
|
||
return 0;
|
||
}
|
||
}
|
||
function getTargetType(value2) {
|
||
return value2["__v_skip"] || !Object.isExtensible(value2) ? 0 : targetTypeMap(toRawType(value2));
|
||
}
|
||
function reactive(target) {
|
||
if (isReadonly(target)) {
|
||
return target;
|
||
}
|
||
return createReactiveObject(
|
||
target,
|
||
false,
|
||
mutableHandlers,
|
||
mutableCollectionHandlers,
|
||
reactiveMap
|
||
);
|
||
}
|
||
function shallowReactive(target) {
|
||
return createReactiveObject(
|
||
target,
|
||
false,
|
||
shallowReactiveHandlers,
|
||
shallowCollectionHandlers,
|
||
shallowReactiveMap
|
||
);
|
||
}
|
||
function readonly(target) {
|
||
return createReactiveObject(
|
||
target,
|
||
true,
|
||
readonlyHandlers,
|
||
readonlyCollectionHandlers,
|
||
readonlyMap
|
||
);
|
||
}
|
||
function shallowReadonly(target) {
|
||
return createReactiveObject(
|
||
target,
|
||
true,
|
||
shallowReadonlyHandlers,
|
||
shallowReadonlyCollectionHandlers,
|
||
shallowReadonlyMap
|
||
);
|
||
}
|
||
function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {
|
||
if (!isObject$2(target)) {
|
||
{
|
||
warn$2(`value cannot be made reactive: ${String(target)}`);
|
||
}
|
||
return target;
|
||
}
|
||
if (target["__v_raw"] && !(isReadonly2 && target["__v_isReactive"])) {
|
||
return target;
|
||
}
|
||
const existingProxy = proxyMap.get(target);
|
||
if (existingProxy) {
|
||
return existingProxy;
|
||
}
|
||
const targetType = getTargetType(target);
|
||
if (targetType === 0) {
|
||
return target;
|
||
}
|
||
const proxy = new Proxy(
|
||
target,
|
||
targetType === 2 ? collectionHandlers : baseHandlers
|
||
);
|
||
proxyMap.set(target, proxy);
|
||
return proxy;
|
||
}
|
||
function isReactive(value2) {
|
||
if (isReadonly(value2)) {
|
||
return isReactive(value2["__v_raw"]);
|
||
}
|
||
return !!(value2 && value2["__v_isReactive"]);
|
||
}
|
||
function isReadonly(value2) {
|
||
return !!(value2 && value2["__v_isReadonly"]);
|
||
}
|
||
function isShallow(value2) {
|
||
return !!(value2 && value2["__v_isShallow"]);
|
||
}
|
||
function isProxy(value2) {
|
||
return isReactive(value2) || isReadonly(value2);
|
||
}
|
||
function toRaw(observed) {
|
||
const raw = observed && observed["__v_raw"];
|
||
return raw ? toRaw(raw) : observed;
|
||
}
|
||
function markRaw(value2) {
|
||
if (Object.isExtensible(value2)) {
|
||
def(value2, "__v_skip", true);
|
||
}
|
||
return value2;
|
||
}
|
||
const toReactive = (value2) => isObject$2(value2) ? reactive(value2) : value2;
|
||
const toReadonly = (value2) => isObject$2(value2) ? readonly(value2) : value2;
|
||
const COMPUTED_SIDE_EFFECT_WARN = `Computed is still dirty after getter evaluation, likely because a computed is mutating its own dependency in its getter. State mutations in computed getters should be avoided. Check the docs for more details: https://vuejs.org/guide/essentials/computed.html#getters-should-be-side-effect-free`;
|
||
class ComputedRefImpl {
|
||
constructor(getter, _setter, isReadonly2, isSSR) {
|
||
this.getter = getter;
|
||
this._setter = _setter;
|
||
this.dep = void 0;
|
||
this.__v_isRef = true;
|
||
this["__v_isReadonly"] = false;
|
||
this.effect = new ReactiveEffect(
|
||
() => getter(this._value),
|
||
() => triggerRefValue(
|
||
this,
|
||
this.effect._dirtyLevel === 2 ? 2 : 3
|
||
)
|
||
);
|
||
this.effect.computed = this;
|
||
this.effect.active = this._cacheable = !isSSR;
|
||
this["__v_isReadonly"] = isReadonly2;
|
||
}
|
||
get value() {
|
||
const self2 = toRaw(this);
|
||
if ((!self2._cacheable || self2.effect.dirty) && hasChanged(self2._value, self2._value = self2.effect.run())) {
|
||
triggerRefValue(self2, 4);
|
||
}
|
||
trackRefValue(self2);
|
||
if (self2.effect._dirtyLevel >= 2) {
|
||
if (this._warnRecursive) {
|
||
warn$2(COMPUTED_SIDE_EFFECT_WARN, `
|
||
|
||
getter: `, this.getter);
|
||
}
|
||
triggerRefValue(self2, 2);
|
||
}
|
||
return self2._value;
|
||
}
|
||
set value(newValue) {
|
||
this._setter(newValue);
|
||
}
|
||
// #region polyfill _dirty for backward compatibility third party code for Vue <= 3.3.x
|
||
get _dirty() {
|
||
return this.effect.dirty;
|
||
}
|
||
set _dirty(v) {
|
||
this.effect.dirty = v;
|
||
}
|
||
// #endregion
|
||
}
|
||
function computed$1(getterOrOptions, debugOptions, isSSR = false) {
|
||
let getter;
|
||
let setter;
|
||
const onlyGetter = isFunction(getterOrOptions);
|
||
if (onlyGetter) {
|
||
getter = getterOrOptions;
|
||
setter = () => {
|
||
warn$2("Write operation failed: computed value is readonly");
|
||
};
|
||
} else {
|
||
getter = getterOrOptions.get;
|
||
setter = getterOrOptions.set;
|
||
}
|
||
const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);
|
||
if (debugOptions && !isSSR) {
|
||
cRef.effect.onTrack = debugOptions.onTrack;
|
||
cRef.effect.onTrigger = debugOptions.onTrigger;
|
||
}
|
||
return cRef;
|
||
}
|
||
function trackRefValue(ref2) {
|
||
var _a;
|
||
if (shouldTrack && activeEffect) {
|
||
ref2 = toRaw(ref2);
|
||
trackEffect(
|
||
activeEffect,
|
||
(_a = ref2.dep) != null ? _a : ref2.dep = createDep(
|
||
() => ref2.dep = void 0,
|
||
ref2 instanceof ComputedRefImpl ? ref2 : void 0
|
||
),
|
||
{
|
||
target: ref2,
|
||
type: "get",
|
||
key: "value"
|
||
}
|
||
);
|
||
}
|
||
}
|
||
function triggerRefValue(ref2, dirtyLevel = 4, newVal) {
|
||
ref2 = toRaw(ref2);
|
||
const dep = ref2.dep;
|
||
if (dep) {
|
||
triggerEffects(
|
||
dep,
|
||
dirtyLevel,
|
||
{
|
||
target: ref2,
|
||
type: "set",
|
||
key: "value",
|
||
newValue: newVal
|
||
}
|
||
);
|
||
}
|
||
}
|
||
function isRef(r2) {
|
||
return !!(r2 && r2.__v_isRef === true);
|
||
}
|
||
function ref(value2) {
|
||
return createRef(value2, false);
|
||
}
|
||
function createRef(rawValue, shallow) {
|
||
if (isRef(rawValue)) {
|
||
return rawValue;
|
||
}
|
||
return new RefImpl(rawValue, shallow);
|
||
}
|
||
class RefImpl {
|
||
constructor(value2, __v_isShallow) {
|
||
this.__v_isShallow = __v_isShallow;
|
||
this.dep = void 0;
|
||
this.__v_isRef = true;
|
||
this._rawValue = __v_isShallow ? value2 : toRaw(value2);
|
||
this._value = __v_isShallow ? value2 : toReactive(value2);
|
||
}
|
||
get value() {
|
||
trackRefValue(this);
|
||
return this._value;
|
||
}
|
||
set value(newVal) {
|
||
const useDirectValue = this.__v_isShallow || isShallow(newVal) || isReadonly(newVal);
|
||
newVal = useDirectValue ? newVal : toRaw(newVal);
|
||
if (hasChanged(newVal, this._rawValue)) {
|
||
this._rawValue = newVal;
|
||
this._value = useDirectValue ? newVal : toReactive(newVal);
|
||
triggerRefValue(this, 4, newVal);
|
||
}
|
||
}
|
||
}
|
||
function unref(ref2) {
|
||
return isRef(ref2) ? ref2.value : ref2;
|
||
}
|
||
const shallowUnwrapHandlers = {
|
||
get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),
|
||
set: (target, key, value2, receiver) => {
|
||
const oldValue = target[key];
|
||
if (isRef(oldValue) && !isRef(value2)) {
|
||
oldValue.value = value2;
|
||
return true;
|
||
} else {
|
||
return Reflect.set(target, key, value2, receiver);
|
||
}
|
||
}
|
||
};
|
||
function proxyRefs(objectWithRefs) {
|
||
return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);
|
||
}
|
||
const stack = [];
|
||
function pushWarningContext(vnode) {
|
||
stack.push(vnode);
|
||
}
|
||
function popWarningContext() {
|
||
stack.pop();
|
||
}
|
||
function warn$1(msg, ...args) {
|
||
pauseTracking();
|
||
const instance = stack.length ? stack[stack.length - 1].component : null;
|
||
const appWarnHandler = instance && instance.appContext.config.warnHandler;
|
||
const trace = getComponentTrace();
|
||
if (appWarnHandler) {
|
||
callWithErrorHandling(
|
||
appWarnHandler,
|
||
instance,
|
||
11,
|
||
[
|
||
msg + args.map((a) => {
|
||
var _a, _b;
|
||
return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a);
|
||
}).join(""),
|
||
instance && instance.proxy,
|
||
trace.map(
|
||
({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`
|
||
).join("\n"),
|
||
trace
|
||
]
|
||
);
|
||
} else {
|
||
const warnArgs = [`[Vue warn]: ${msg}`, ...args];
|
||
if (trace.length && // avoid spamming console during tests
|
||
true) {
|
||
warnArgs.push(`
|
||
`, ...formatTrace(trace));
|
||
}
|
||
console.warn(...warnArgs);
|
||
}
|
||
resetTracking();
|
||
}
|
||
function getComponentTrace() {
|
||
let currentVNode = stack[stack.length - 1];
|
||
if (!currentVNode) {
|
||
return [];
|
||
}
|
||
const normalizedStack = [];
|
||
while (currentVNode) {
|
||
const last = normalizedStack[0];
|
||
if (last && last.vnode === currentVNode) {
|
||
last.recurseCount++;
|
||
} else {
|
||
normalizedStack.push({
|
||
vnode: currentVNode,
|
||
recurseCount: 0
|
||
});
|
||
}
|
||
const parentInstance = currentVNode.component && currentVNode.component.parent;
|
||
currentVNode = parentInstance && parentInstance.vnode;
|
||
}
|
||
return normalizedStack;
|
||
}
|
||
function formatTrace(trace) {
|
||
const logs = [];
|
||
trace.forEach((entry, i) => {
|
||
logs.push(...i === 0 ? [] : [`
|
||
`], ...formatTraceEntry(entry));
|
||
});
|
||
return logs;
|
||
}
|
||
function formatTraceEntry({ vnode, recurseCount }) {
|
||
const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;
|
||
const isRoot = vnode.component ? vnode.component.parent == null : false;
|
||
const open = ` at <${formatComponentName(
|
||
vnode.component,
|
||
vnode.type,
|
||
isRoot
|
||
)}`;
|
||
const close = `>` + postfix;
|
||
return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close];
|
||
}
|
||
function formatProps(props2) {
|
||
const res = [];
|
||
const keys = Object.keys(props2);
|
||
keys.slice(0, 3).forEach((key) => {
|
||
res.push(...formatProp(key, props2[key]));
|
||
});
|
||
if (keys.length > 3) {
|
||
res.push(` ...`);
|
||
}
|
||
return res;
|
||
}
|
||
function formatProp(key, value2, raw) {
|
||
if (isString(value2)) {
|
||
value2 = JSON.stringify(value2);
|
||
return raw ? value2 : [`${key}=${value2}`];
|
||
} else if (typeof value2 === "number" || typeof value2 === "boolean" || value2 == null) {
|
||
return raw ? value2 : [`${key}=${value2}`];
|
||
} else if (isRef(value2)) {
|
||
value2 = formatProp(key, toRaw(value2.value), true);
|
||
return raw ? value2 : [`${key}=Ref<`, value2, `>`];
|
||
} else if (isFunction(value2)) {
|
||
return [`${key}=fn${value2.name ? `<${value2.name}>` : ``}`];
|
||
} else {
|
||
value2 = toRaw(value2);
|
||
return raw ? value2 : [`${key}=`, value2];
|
||
}
|
||
}
|
||
const ErrorTypeStrings = {
|
||
["sp"]: "serverPrefetch hook",
|
||
["bc"]: "beforeCreate hook",
|
||
["c"]: "created hook",
|
||
["bm"]: "beforeMount hook",
|
||
["m"]: "mounted hook",
|
||
["bu"]: "beforeUpdate hook",
|
||
["u"]: "updated",
|
||
["bum"]: "beforeUnmount hook",
|
||
["um"]: "unmounted hook",
|
||
["a"]: "activated hook",
|
||
["da"]: "deactivated hook",
|
||
["ec"]: "errorCaptured hook",
|
||
["rtc"]: "renderTracked hook",
|
||
["rtg"]: "renderTriggered hook",
|
||
[0]: "setup function",
|
||
[1]: "render function",
|
||
[2]: "watcher getter",
|
||
[3]: "watcher callback",
|
||
[4]: "watcher cleanup function",
|
||
[5]: "native event handler",
|
||
[6]: "component event handler",
|
||
[7]: "vnode hook",
|
||
[8]: "directive hook",
|
||
[9]: "transition hook",
|
||
[10]: "app errorHandler",
|
||
[11]: "app warnHandler",
|
||
[12]: "ref function",
|
||
[13]: "async component loader",
|
||
[14]: "scheduler flush. This is likely a Vue internals bug. Please open an issue at https://github.com/vuejs/core ."
|
||
};
|
||
function callWithErrorHandling(fn, instance, type2, args) {
|
||
try {
|
||
return args ? fn(...args) : fn();
|
||
} catch (err) {
|
||
handleError(err, instance, type2);
|
||
}
|
||
}
|
||
function callWithAsyncErrorHandling(fn, instance, type2, args) {
|
||
if (isFunction(fn)) {
|
||
const res = callWithErrorHandling(fn, instance, type2, args);
|
||
if (res && isPromise(res)) {
|
||
res.catch((err) => {
|
||
handleError(err, instance, type2);
|
||
});
|
||
}
|
||
return res;
|
||
}
|
||
const values = [];
|
||
for (let i = 0; i < fn.length; i++) {
|
||
values.push(callWithAsyncErrorHandling(fn[i], instance, type2, args));
|
||
}
|
||
return values;
|
||
}
|
||
function handleError(err, instance, type2, throwInDev = true) {
|
||
const contextVNode = instance ? instance.vnode : null;
|
||
if (instance) {
|
||
let cur = instance.parent;
|
||
const exposedInstance = instance.proxy;
|
||
const errorInfo = ErrorTypeStrings[type2] || type2;
|
||
while (cur) {
|
||
const errorCapturedHooks = cur.ec;
|
||
if (errorCapturedHooks) {
|
||
for (let i = 0; i < errorCapturedHooks.length; i++) {
|
||
if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
cur = cur.parent;
|
||
}
|
||
const appErrorHandler = instance.appContext.config.errorHandler;
|
||
if (appErrorHandler) {
|
||
callWithErrorHandling(
|
||
appErrorHandler,
|
||
null,
|
||
10,
|
||
[err, exposedInstance, errorInfo]
|
||
);
|
||
return;
|
||
}
|
||
}
|
||
logError(err, type2, contextVNode, throwInDev);
|
||
}
|
||
function logError(err, type2, contextVNode, throwInDev = true) {
|
||
{
|
||
const info = ErrorTypeStrings[type2] || type2;
|
||
if (contextVNode) {
|
||
pushWarningContext(contextVNode);
|
||
}
|
||
warn$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`);
|
||
if (contextVNode) {
|
||
popWarningContext();
|
||
}
|
||
if (throwInDev) {
|
||
console.error(err);
|
||
} else {
|
||
console.error(err);
|
||
}
|
||
}
|
||
}
|
||
let isFlushing = false;
|
||
let isFlushPending = false;
|
||
const queue$1 = [];
|
||
let flushIndex = 0;
|
||
const pendingPostFlushCbs = [];
|
||
let activePostFlushCbs = null;
|
||
let postFlushIndex = 0;
|
||
const resolvedPromise = /* @__PURE__ */ Promise.resolve();
|
||
let currentFlushPromise = null;
|
||
const RECURSION_LIMIT = 100;
|
||
function nextTick$1(fn) {
|
||
const p2 = currentFlushPromise || resolvedPromise;
|
||
return fn ? p2.then(this ? fn.bind(this) : fn) : p2;
|
||
}
|
||
function findInsertionIndex(id) {
|
||
let start = flushIndex + 1;
|
||
let end = queue$1.length;
|
||
while (start < end) {
|
||
const middle = start + end >>> 1;
|
||
const middleJob = queue$1[middle];
|
||
const middleJobId = getId(middleJob);
|
||
if (middleJobId < id || middleJobId === id && middleJob.pre) {
|
||
start = middle + 1;
|
||
} else {
|
||
end = middle;
|
||
}
|
||
}
|
||
return start;
|
||
}
|
||
function queueJob(job) {
|
||
if (!queue$1.length || !queue$1.includes(
|
||
job,
|
||
isFlushing && job.allowRecurse ? flushIndex + 1 : flushIndex
|
||
)) {
|
||
if (job.id == null) {
|
||
queue$1.push(job);
|
||
} else {
|
||
queue$1.splice(findInsertionIndex(job.id), 0, job);
|
||
}
|
||
queueFlush();
|
||
}
|
||
}
|
||
function queueFlush() {
|
||
if (!isFlushing && !isFlushPending) {
|
||
isFlushPending = true;
|
||
currentFlushPromise = resolvedPromise.then(flushJobs);
|
||
}
|
||
}
|
||
function hasQueueJob(job) {
|
||
return queue$1.indexOf(job) > -1;
|
||
}
|
||
function invalidateJob(job) {
|
||
const i = queue$1.indexOf(job);
|
||
if (i > flushIndex) {
|
||
queue$1.splice(i, 1);
|
||
}
|
||
}
|
||
function queuePostFlushCb(cb) {
|
||
if (!isArray$1(cb)) {
|
||
if (!activePostFlushCbs || !activePostFlushCbs.includes(
|
||
cb,
|
||
cb.allowRecurse ? postFlushIndex + 1 : postFlushIndex
|
||
)) {
|
||
pendingPostFlushCbs.push(cb);
|
||
}
|
||
} else {
|
||
pendingPostFlushCbs.push(...cb);
|
||
}
|
||
queueFlush();
|
||
}
|
||
function flushPreFlushCbs(instance, seen, i = isFlushing ? flushIndex + 1 : 0) {
|
||
{
|
||
seen = seen || /* @__PURE__ */ new Map();
|
||
}
|
||
for (; i < queue$1.length; i++) {
|
||
const cb = queue$1[i];
|
||
if (cb && cb.pre) {
|
||
if (checkRecursiveUpdates(seen, cb)) {
|
||
continue;
|
||
}
|
||
queue$1.splice(i, 1);
|
||
i--;
|
||
cb();
|
||
}
|
||
}
|
||
}
|
||
function flushPostFlushCbs(seen) {
|
||
if (pendingPostFlushCbs.length) {
|
||
const deduped = [...new Set(pendingPostFlushCbs)].sort(
|
||
(a, b) => getId(a) - getId(b)
|
||
);
|
||
pendingPostFlushCbs.length = 0;
|
||
if (activePostFlushCbs) {
|
||
activePostFlushCbs.push(...deduped);
|
||
return;
|
||
}
|
||
activePostFlushCbs = deduped;
|
||
{
|
||
seen = seen || /* @__PURE__ */ new Map();
|
||
}
|
||
for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {
|
||
if (checkRecursiveUpdates(seen, activePostFlushCbs[postFlushIndex])) {
|
||
continue;
|
||
}
|
||
activePostFlushCbs[postFlushIndex]();
|
||
}
|
||
activePostFlushCbs = null;
|
||
postFlushIndex = 0;
|
||
}
|
||
}
|
||
const getId = (job) => job.id == null ? Infinity : job.id;
|
||
const comparator = (a, b) => {
|
||
const diff2 = getId(a) - getId(b);
|
||
if (diff2 === 0) {
|
||
if (a.pre && !b.pre)
|
||
return -1;
|
||
if (b.pre && !a.pre)
|
||
return 1;
|
||
}
|
||
return diff2;
|
||
};
|
||
function flushJobs(seen) {
|
||
isFlushPending = false;
|
||
isFlushing = true;
|
||
{
|
||
seen = seen || /* @__PURE__ */ new Map();
|
||
}
|
||
queue$1.sort(comparator);
|
||
const check = (job) => checkRecursiveUpdates(seen, job);
|
||
try {
|
||
for (flushIndex = 0; flushIndex < queue$1.length; flushIndex++) {
|
||
const job = queue$1[flushIndex];
|
||
if (job && job.active !== false) {
|
||
if (check(job)) {
|
||
continue;
|
||
}
|
||
callWithErrorHandling(job, null, 14);
|
||
}
|
||
}
|
||
} finally {
|
||
flushIndex = 0;
|
||
queue$1.length = 0;
|
||
flushPostFlushCbs(seen);
|
||
isFlushing = false;
|
||
currentFlushPromise = null;
|
||
if (queue$1.length || pendingPostFlushCbs.length) {
|
||
flushJobs(seen);
|
||
}
|
||
}
|
||
}
|
||
function checkRecursiveUpdates(seen, fn) {
|
||
if (!seen.has(fn)) {
|
||
seen.set(fn, 1);
|
||
} else {
|
||
const count = seen.get(fn);
|
||
if (count > RECURSION_LIMIT) {
|
||
const instance = fn.ownerInstance;
|
||
const componentName = instance && getComponentName(instance.type);
|
||
handleError(
|
||
`Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`,
|
||
null,
|
||
10
|
||
);
|
||
return true;
|
||
} else {
|
||
seen.set(fn, count + 1);
|
||
}
|
||
}
|
||
}
|
||
let devtools;
|
||
let buffer = [];
|
||
let devtoolsNotInstalled = false;
|
||
function emit$1(event, ...args) {
|
||
if (devtools) {
|
||
devtools.emit(event, ...args);
|
||
} else if (!devtoolsNotInstalled) {
|
||
buffer.push({ event, args });
|
||
}
|
||
}
|
||
function setDevtoolsHook(hook, target) {
|
||
var _a, _b;
|
||
devtools = hook;
|
||
if (devtools) {
|
||
devtools.enabled = true;
|
||
buffer.forEach(({ event, args }) => devtools.emit(event, ...args));
|
||
buffer = [];
|
||
} else if (
|
||
// handle late devtools injection - only do this if we are in an actual
|
||
// browser environment to avoid the timer handle stalling test runner exit
|
||
// (#4815)
|
||
typeof window !== "undefined" && // some envs mock window but not fully
|
||
window.HTMLElement && // also exclude jsdom
|
||
!((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes("jsdom"))
|
||
) {
|
||
const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || [];
|
||
replay.push((newHook) => {
|
||
setDevtoolsHook(newHook, target);
|
||
});
|
||
setTimeout(() => {
|
||
if (!devtools) {
|
||
target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null;
|
||
devtoolsNotInstalled = true;
|
||
buffer = [];
|
||
}
|
||
}, 3e3);
|
||
} else {
|
||
devtoolsNotInstalled = true;
|
||
buffer = [];
|
||
}
|
||
}
|
||
function devtoolsInitApp(app, version2) {
|
||
emit$1("app:init", app, version2, {
|
||
Fragment,
|
||
Text: Text$1,
|
||
Comment,
|
||
Static
|
||
});
|
||
}
|
||
const devtoolsComponentAdded = /* @__PURE__ */ createDevtoolsComponentHook(
|
||
"component:added"
|
||
/* COMPONENT_ADDED */
|
||
);
|
||
const devtoolsComponentUpdated = /* @__PURE__ */ createDevtoolsComponentHook(
|
||
"component:updated"
|
||
/* COMPONENT_UPDATED */
|
||
);
|
||
const _devtoolsComponentRemoved = /* @__PURE__ */ createDevtoolsComponentHook(
|
||
"component:removed"
|
||
/* COMPONENT_REMOVED */
|
||
);
|
||
const devtoolsComponentRemoved = (component) => {
|
||
if (devtools && typeof devtools.cleanupBuffer === "function" && // remove the component if it wasn't buffered
|
||
!devtools.cleanupBuffer(component)) {
|
||
_devtoolsComponentRemoved(component);
|
||
}
|
||
};
|
||
/*! #__NO_SIDE_EFFECTS__ */
|
||
// @__NO_SIDE_EFFECTS__
|
||
function createDevtoolsComponentHook(hook) {
|
||
return (component) => {
|
||
emit$1(
|
||
hook,
|
||
component.appContext.app,
|
||
component.uid,
|
||
// fixed by xxxxxx
|
||
// 为 0 是 App,无 parent 是 Page 指向 App
|
||
component.uid === 0 ? void 0 : component.parent ? component.parent.uid : 0,
|
||
component
|
||
);
|
||
};
|
||
}
|
||
const devtoolsPerfStart = /* @__PURE__ */ createDevtoolsPerformanceHook(
|
||
"perf:start"
|
||
/* PERFORMANCE_START */
|
||
);
|
||
const devtoolsPerfEnd = /* @__PURE__ */ createDevtoolsPerformanceHook(
|
||
"perf:end"
|
||
/* PERFORMANCE_END */
|
||
);
|
||
function createDevtoolsPerformanceHook(hook) {
|
||
return (component, type2, time) => {
|
||
emit$1(hook, component.appContext.app, component.uid, component, type2, time);
|
||
};
|
||
}
|
||
function devtoolsComponentEmit(component, event, params) {
|
||
emit$1(
|
||
"component:emit",
|
||
component.appContext.app,
|
||
component,
|
||
event,
|
||
params
|
||
);
|
||
}
|
||
function emit(instance, event, ...rawArgs) {
|
||
if (instance.isUnmounted)
|
||
return;
|
||
const props2 = instance.vnode.props || EMPTY_OBJ;
|
||
{
|
||
const {
|
||
emitsOptions,
|
||
propsOptions: [propsOptions]
|
||
} = instance;
|
||
if (emitsOptions) {
|
||
if (!(event in emitsOptions) && true) {
|
||
if (!propsOptions || !(toHandlerKey(event) in propsOptions)) {
|
||
warn$1(
|
||
`Component emitted event "${event}" but it is neither declared in the emits option nor as an "${toHandlerKey(event)}" prop.`
|
||
);
|
||
}
|
||
} else {
|
||
const validator = emitsOptions[event];
|
||
if (isFunction(validator)) {
|
||
const isValid = validator(...rawArgs);
|
||
if (!isValid) {
|
||
warn$1(
|
||
`Invalid event arguments: event validation failed for event "${event}".`
|
||
);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
let args = rawArgs;
|
||
const isModelListener2 = event.startsWith("update:");
|
||
const modelArg = isModelListener2 && event.slice(7);
|
||
if (modelArg && modelArg in props2) {
|
||
const modifiersKey = `${modelArg === "modelValue" ? "model" : modelArg}Modifiers`;
|
||
const { number: number3, trim: trim2 } = props2[modifiersKey] || EMPTY_OBJ;
|
||
if (trim2) {
|
||
args = rawArgs.map((a) => isString(a) ? a.trim() : a);
|
||
}
|
||
if (number3) {
|
||
args = rawArgs.map(looseToNumber);
|
||
}
|
||
}
|
||
{
|
||
devtoolsComponentEmit(instance, event, args);
|
||
}
|
||
{
|
||
const lowerCaseEvent = event.toLowerCase();
|
||
if (lowerCaseEvent !== event && props2[toHandlerKey(lowerCaseEvent)]) {
|
||
warn$1(
|
||
`Event "${lowerCaseEvent}" is emitted in component ${formatComponentName(
|
||
instance,
|
||
instance.type
|
||
)} but the handler is registered for "${event}". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use "${hyphenate(
|
||
event
|
||
)}" instead of "${event}".`
|
||
);
|
||
}
|
||
}
|
||
let handlerName;
|
||
let handler = props2[handlerName = toHandlerKey(event)] || // also try camelCase event handler (#2249)
|
||
props2[handlerName = toHandlerKey(camelize(event))];
|
||
if (!handler && isModelListener2) {
|
||
handler = props2[handlerName = toHandlerKey(hyphenate(event))];
|
||
}
|
||
if (handler) {
|
||
callWithAsyncErrorHandling(
|
||
handler,
|
||
instance,
|
||
6,
|
||
args
|
||
);
|
||
}
|
||
const onceHandler = props2[handlerName + `Once`];
|
||
if (onceHandler) {
|
||
if (!instance.emitted) {
|
||
instance.emitted = {};
|
||
} else if (instance.emitted[handlerName]) {
|
||
return;
|
||
}
|
||
instance.emitted[handlerName] = true;
|
||
callWithAsyncErrorHandling(
|
||
onceHandler,
|
||
instance,
|
||
6,
|
||
args
|
||
);
|
||
}
|
||
}
|
||
function normalizeEmitsOptions(comp, appContext, asMixin = false) {
|
||
const cache = appContext.emitsCache;
|
||
const cached = cache.get(comp);
|
||
if (cached !== void 0) {
|
||
return cached;
|
||
}
|
||
const raw = comp.emits;
|
||
let normalized = {};
|
||
let hasExtends = false;
|
||
if (!isFunction(comp)) {
|
||
const extendEmits = (raw2) => {
|
||
const normalizedFromExtend = normalizeEmitsOptions(raw2, appContext, true);
|
||
if (normalizedFromExtend) {
|
||
hasExtends = true;
|
||
extend(normalized, normalizedFromExtend);
|
||
}
|
||
};
|
||
if (!asMixin && appContext.mixins.length) {
|
||
appContext.mixins.forEach(extendEmits);
|
||
}
|
||
if (comp.extends) {
|
||
extendEmits(comp.extends);
|
||
}
|
||
if (comp.mixins) {
|
||
comp.mixins.forEach(extendEmits);
|
||
}
|
||
}
|
||
if (!raw && !hasExtends) {
|
||
if (isObject$2(comp)) {
|
||
cache.set(comp, null);
|
||
}
|
||
return null;
|
||
}
|
||
if (isArray$1(raw)) {
|
||
raw.forEach((key) => normalized[key] = null);
|
||
} else {
|
||
extend(normalized, raw);
|
||
}
|
||
if (isObject$2(comp)) {
|
||
cache.set(comp, normalized);
|
||
}
|
||
return normalized;
|
||
}
|
||
function isEmitListener(options, key) {
|
||
if (!options || !isOn(key)) {
|
||
return false;
|
||
}
|
||
key = key.slice(2).replace(/Once$/, "");
|
||
return hasOwn$1(options, key[0].toLowerCase() + key.slice(1)) || hasOwn$1(options, hyphenate(key)) || hasOwn$1(options, key);
|
||
}
|
||
let currentRenderingInstance = null;
|
||
function setCurrentRenderingInstance(instance) {
|
||
const prev = currentRenderingInstance;
|
||
currentRenderingInstance = instance;
|
||
instance && instance.type.__scopeId || null;
|
||
return prev;
|
||
}
|
||
const COMPONENTS = "components";
|
||
function resolveComponent(name, maybeSelfReference) {
|
||
return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name;
|
||
}
|
||
function resolveAsset(type2, name, warnMissing = true, maybeSelfReference = false) {
|
||
const instance = currentRenderingInstance || currentInstance;
|
||
if (instance) {
|
||
const Component2 = instance.type;
|
||
if (type2 === COMPONENTS) {
|
||
const selfName = getComponentName(
|
||
Component2,
|
||
false
|
||
);
|
||
if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) {
|
||
return Component2;
|
||
}
|
||
}
|
||
const res = (
|
||
// local registration
|
||
// check instance[type] first which is resolved for options API
|
||
resolve(instance[type2] || Component2[type2], name) || // global registration
|
||
resolve(instance.appContext[type2], name)
|
||
);
|
||
if (!res && maybeSelfReference) {
|
||
return Component2;
|
||
}
|
||
if (warnMissing && !res) {
|
||
const extra = type2 === COMPONENTS ? `
|
||
If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``;
|
||
warn$1(`Failed to resolve ${type2.slice(0, -1)}: ${name}${extra}`);
|
||
}
|
||
return res;
|
||
} else {
|
||
warn$1(
|
||
`resolve${capitalize(type2.slice(0, -1))} can only be used in render() or setup().`
|
||
);
|
||
}
|
||
}
|
||
function resolve(registry, name) {
|
||
return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]);
|
||
}
|
||
const INITIAL_WATCHER_VALUE = {};
|
||
function watch(source, cb, options) {
|
||
if (!isFunction(cb)) {
|
||
warn$1(
|
||
`\`watch(fn, options?)\` signature has been moved to a separate API. Use \`watchEffect(fn, options?)\` instead. \`watch\` now only supports \`watch(source, cb, options?) signature.`
|
||
);
|
||
}
|
||
return doWatch(source, cb, options);
|
||
}
|
||
function doWatch(source, cb, {
|
||
immediate,
|
||
deep,
|
||
flush,
|
||
once: once2,
|
||
onTrack,
|
||
onTrigger
|
||
} = EMPTY_OBJ) {
|
||
if (cb && once2) {
|
||
const _cb = cb;
|
||
cb = (...args) => {
|
||
_cb(...args);
|
||
unwatch();
|
||
};
|
||
}
|
||
if (deep !== void 0 && typeof deep === "number") {
|
||
warn$1(
|
||
`watch() "deep" option with number value will be used as watch depth in future versions. Please use a boolean instead to avoid potential breakage.`
|
||
);
|
||
}
|
||
if (!cb) {
|
||
if (immediate !== void 0) {
|
||
warn$1(
|
||
`watch() "immediate" option is only respected when using the watch(source, callback, options?) signature.`
|
||
);
|
||
}
|
||
if (deep !== void 0) {
|
||
warn$1(
|
||
`watch() "deep" option is only respected when using the watch(source, callback, options?) signature.`
|
||
);
|
||
}
|
||
if (once2 !== void 0) {
|
||
warn$1(
|
||
`watch() "once" option is only respected when using the watch(source, callback, options?) signature.`
|
||
);
|
||
}
|
||
}
|
||
const warnInvalidSource = (s2) => {
|
||
warn$1(
|
||
`Invalid watch source: `,
|
||
s2,
|
||
`A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.`
|
||
);
|
||
};
|
||
const instance = currentInstance;
|
||
const reactiveGetter = (source2) => deep === true ? source2 : (
|
||
// for deep: false, only traverse root-level properties
|
||
traverse(source2, deep === false ? 1 : void 0)
|
||
);
|
||
let getter;
|
||
let forceTrigger = false;
|
||
let isMultiSource = false;
|
||
if (isRef(source)) {
|
||
getter = () => source.value;
|
||
forceTrigger = isShallow(source);
|
||
} else if (isReactive(source)) {
|
||
getter = () => reactiveGetter(source);
|
||
forceTrigger = true;
|
||
} else if (isArray$1(source)) {
|
||
isMultiSource = true;
|
||
forceTrigger = source.some((s2) => isReactive(s2) || isShallow(s2));
|
||
getter = () => source.map((s2) => {
|
||
if (isRef(s2)) {
|
||
return s2.value;
|
||
} else if (isReactive(s2)) {
|
||
return reactiveGetter(s2);
|
||
} else if (isFunction(s2)) {
|
||
return callWithErrorHandling(s2, instance, 2);
|
||
} else {
|
||
warnInvalidSource(s2);
|
||
}
|
||
});
|
||
} else if (isFunction(source)) {
|
||
if (cb) {
|
||
getter = () => callWithErrorHandling(source, instance, 2);
|
||
} else {
|
||
getter = () => {
|
||
if (cleanup) {
|
||
cleanup();
|
||
}
|
||
return callWithAsyncErrorHandling(
|
||
source,
|
||
instance,
|
||
3,
|
||
[onCleanup]
|
||
);
|
||
};
|
||
}
|
||
} else {
|
||
getter = NOOP;
|
||
warnInvalidSource(source);
|
||
}
|
||
if (cb && deep) {
|
||
const baseGetter = getter;
|
||
getter = () => traverse(baseGetter());
|
||
}
|
||
let cleanup;
|
||
let onCleanup = (fn) => {
|
||
cleanup = effect2.onStop = () => {
|
||
callWithErrorHandling(fn, instance, 4);
|
||
cleanup = effect2.onStop = void 0;
|
||
};
|
||
};
|
||
let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE;
|
||
const job = () => {
|
||
if (!effect2.active || !effect2.dirty) {
|
||
return;
|
||
}
|
||
if (cb) {
|
||
const newValue = effect2.run();
|
||
if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue)) || false) {
|
||
if (cleanup) {
|
||
cleanup();
|
||
}
|
||
callWithAsyncErrorHandling(cb, instance, 3, [
|
||
newValue,
|
||
// pass undefined as the old value when it's changed for the first time
|
||
oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue,
|
||
onCleanup
|
||
]);
|
||
oldValue = newValue;
|
||
}
|
||
} else {
|
||
effect2.run();
|
||
}
|
||
};
|
||
job.allowRecurse = !!cb;
|
||
let scheduler;
|
||
if (flush === "sync") {
|
||
scheduler = job;
|
||
} else if (flush === "post") {
|
||
scheduler = () => queuePostRenderEffect$1(job, instance && instance.suspense);
|
||
} else {
|
||
job.pre = true;
|
||
if (instance)
|
||
job.id = instance.uid;
|
||
scheduler = () => queueJob(job);
|
||
}
|
||
const effect2 = new ReactiveEffect(getter, NOOP, scheduler);
|
||
const scope = getCurrentScope();
|
||
const unwatch = () => {
|
||
effect2.stop();
|
||
if (scope) {
|
||
remove(scope.effects, effect2);
|
||
}
|
||
};
|
||
{
|
||
effect2.onTrack = onTrack;
|
||
effect2.onTrigger = onTrigger;
|
||
}
|
||
if (cb) {
|
||
if (immediate) {
|
||
job();
|
||
} else {
|
||
oldValue = effect2.run();
|
||
}
|
||
} else if (flush === "post") {
|
||
queuePostRenderEffect$1(
|
||
effect2.run.bind(effect2),
|
||
instance && instance.suspense
|
||
);
|
||
} else {
|
||
effect2.run();
|
||
}
|
||
return unwatch;
|
||
}
|
||
function instanceWatch(source, value2, options) {
|
||
const publicThis = this.proxy;
|
||
const getter = isString(source) ? source.includes(".") ? createPathGetter(publicThis, source) : () => publicThis[source] : source.bind(publicThis, publicThis);
|
||
let cb;
|
||
if (isFunction(value2)) {
|
||
cb = value2;
|
||
} else {
|
||
cb = value2.handler;
|
||
options = value2;
|
||
}
|
||
const reset = setCurrentInstance(this);
|
||
const res = doWatch(getter, cb.bind(publicThis), options);
|
||
reset();
|
||
return res;
|
||
}
|
||
function createPathGetter(ctx, path) {
|
||
const segments = path.split(".");
|
||
return () => {
|
||
let cur = ctx;
|
||
for (let i = 0; i < segments.length && cur; i++) {
|
||
cur = cur[segments[i]];
|
||
}
|
||
return cur;
|
||
};
|
||
}
|
||
function traverse(value2, depth, currentDepth = 0, seen) {
|
||
if (!isObject$2(value2) || value2["__v_skip"]) {
|
||
return value2;
|
||
}
|
||
if (depth && depth > 0) {
|
||
if (currentDepth >= depth) {
|
||
return value2;
|
||
}
|
||
currentDepth++;
|
||
}
|
||
seen = seen || /* @__PURE__ */ new Set();
|
||
if (seen.has(value2)) {
|
||
return value2;
|
||
}
|
||
seen.add(value2);
|
||
if (isRef(value2)) {
|
||
traverse(value2.value, depth, currentDepth, seen);
|
||
} else if (isArray$1(value2)) {
|
||
for (let i = 0; i < value2.length; i++) {
|
||
traverse(value2[i], depth, currentDepth, seen);
|
||
}
|
||
} else if (isSet(value2) || isMap(value2)) {
|
||
value2.forEach((v) => {
|
||
traverse(v, depth, currentDepth, seen);
|
||
});
|
||
} else if (isPlainObject$1(value2)) {
|
||
for (const key in value2) {
|
||
traverse(value2[key], depth, currentDepth, seen);
|
||
}
|
||
}
|
||
return value2;
|
||
}
|
||
function validateDirectiveName(name) {
|
||
if (isBuiltInDirective(name)) {
|
||
warn$1("Do not use built-in directive ids as custom directive id: " + name);
|
||
}
|
||
}
|
||
function createAppContext() {
|
||
return {
|
||
app: null,
|
||
config: {
|
||
isNativeTag: NO,
|
||
performance: false,
|
||
globalProperties: {},
|
||
optionMergeStrategies: {},
|
||
errorHandler: void 0,
|
||
warnHandler: void 0,
|
||
compilerOptions: {}
|
||
},
|
||
mixins: [],
|
||
components: {},
|
||
directives: {},
|
||
provides: /* @__PURE__ */ Object.create(null),
|
||
optionsCache: /* @__PURE__ */ new WeakMap(),
|
||
propsCache: /* @__PURE__ */ new WeakMap(),
|
||
emitsCache: /* @__PURE__ */ new WeakMap()
|
||
};
|
||
}
|
||
let uid$1 = 0;
|
||
function createAppAPI(render, hydrate) {
|
||
return function createApp2(rootComponent, rootProps = null) {
|
||
if (!isFunction(rootComponent)) {
|
||
rootComponent = extend({}, rootComponent);
|
||
}
|
||
if (rootProps != null && !isObject$2(rootProps)) {
|
||
warn$1(`root props passed to app.mount() must be an object.`);
|
||
rootProps = null;
|
||
}
|
||
const context = createAppContext();
|
||
const installedPlugins = /* @__PURE__ */ new WeakSet();
|
||
const app = context.app = {
|
||
_uid: uid$1++,
|
||
_component: rootComponent,
|
||
_props: rootProps,
|
||
_container: null,
|
||
_context: context,
|
||
_instance: null,
|
||
version: version$1,
|
||
get config() {
|
||
return context.config;
|
||
},
|
||
set config(v) {
|
||
{
|
||
warn$1(
|
||
`app.config cannot be replaced. Modify individual options instead.`
|
||
);
|
||
}
|
||
},
|
||
use(plugin2, ...options) {
|
||
if (installedPlugins.has(plugin2)) {
|
||
warn$1(`Plugin has already been applied to target app.`);
|
||
} else if (plugin2 && isFunction(plugin2.install)) {
|
||
installedPlugins.add(plugin2);
|
||
plugin2.install(app, ...options);
|
||
} else if (isFunction(plugin2)) {
|
||
installedPlugins.add(plugin2);
|
||
plugin2(app, ...options);
|
||
} else {
|
||
warn$1(
|
||
`A plugin must either be a function or an object with an "install" function.`
|
||
);
|
||
}
|
||
return app;
|
||
},
|
||
mixin(mixin2) {
|
||
{
|
||
if (!context.mixins.includes(mixin2)) {
|
||
context.mixins.push(mixin2);
|
||
} else {
|
||
warn$1(
|
||
"Mixin has already been applied to target app" + (mixin2.name ? `: ${mixin2.name}` : "")
|
||
);
|
||
}
|
||
}
|
||
return app;
|
||
},
|
||
component(name, component) {
|
||
{
|
||
validateComponentName(name, context.config);
|
||
}
|
||
if (!component) {
|
||
return context.components[name];
|
||
}
|
||
if (context.components[name]) {
|
||
warn$1(`Component "${name}" has already been registered in target app.`);
|
||
}
|
||
context.components[name] = component;
|
||
return app;
|
||
},
|
||
directive(name, directive) {
|
||
{
|
||
validateDirectiveName(name);
|
||
}
|
||
if (!directive) {
|
||
return context.directives[name];
|
||
}
|
||
if (context.directives[name]) {
|
||
warn$1(`Directive "${name}" has already been registered in target app.`);
|
||
}
|
||
context.directives[name] = directive;
|
||
return app;
|
||
},
|
||
// fixed by xxxxxx
|
||
mount() {
|
||
},
|
||
// fixed by xxxxxx
|
||
unmount() {
|
||
},
|
||
provide(key, value2) {
|
||
if (key in context.provides) {
|
||
warn$1(
|
||
`App already provides property with key "${String(key)}". It will be overwritten with the new value.`
|
||
);
|
||
}
|
||
context.provides[key] = value2;
|
||
return app;
|
||
},
|
||
runWithContext(fn) {
|
||
const lastApp = currentApp;
|
||
currentApp = app;
|
||
try {
|
||
return fn();
|
||
} finally {
|
||
currentApp = lastApp;
|
||
}
|
||
}
|
||
};
|
||
return app;
|
||
};
|
||
}
|
||
let currentApp = null;
|
||
function provide(key, value2) {
|
||
if (!currentInstance) {
|
||
{
|
||
warn$1(`provide() can only be used inside setup().`);
|
||
}
|
||
} else {
|
||
let provides = currentInstance.provides;
|
||
const parentProvides = currentInstance.parent && currentInstance.parent.provides;
|
||
if (parentProvides === provides) {
|
||
provides = currentInstance.provides = Object.create(parentProvides);
|
||
}
|
||
provides[key] = value2;
|
||
if (currentInstance.type.mpType === "app") {
|
||
currentInstance.appContext.app.provide(key, value2);
|
||
}
|
||
}
|
||
}
|
||
function inject(key, defaultValue, treatDefaultAsFactory = false) {
|
||
const instance = currentInstance || currentRenderingInstance;
|
||
if (instance || currentApp) {
|
||
const provides = instance ? instance.parent == null ? instance.vnode.appContext && instance.vnode.appContext.provides : instance.parent.provides : currentApp._context.provides;
|
||
if (provides && key in provides) {
|
||
return provides[key];
|
||
} else if (arguments.length > 1) {
|
||
return treatDefaultAsFactory && isFunction(defaultValue) ? defaultValue.call(instance && instance.proxy) : defaultValue;
|
||
} else {
|
||
warn$1(`injection "${String(key)}" not found.`);
|
||
}
|
||
} else {
|
||
warn$1(`inject() can only be used inside setup() or functional components.`);
|
||
}
|
||
}
|
||
const isKeepAlive = (vnode) => vnode.type.__isKeepAlive;
|
||
function onActivated(hook, target) {
|
||
registerKeepAliveHook(hook, "a", target);
|
||
}
|
||
function onDeactivated(hook, target) {
|
||
registerKeepAliveHook(hook, "da", target);
|
||
}
|
||
function registerKeepAliveHook(hook, type2, target = currentInstance) {
|
||
const wrappedHook = hook.__wdc || (hook.__wdc = () => {
|
||
let current = target;
|
||
while (current) {
|
||
if (current.isDeactivated) {
|
||
return;
|
||
}
|
||
current = current.parent;
|
||
}
|
||
return hook();
|
||
});
|
||
injectHook(type2, wrappedHook, target);
|
||
if (target) {
|
||
let current = target.parent;
|
||
while (current && current.parent) {
|
||
if (isKeepAlive(current.parent.vnode)) {
|
||
injectToKeepAliveRoot(wrappedHook, type2, target, current);
|
||
}
|
||
current = current.parent;
|
||
}
|
||
}
|
||
}
|
||
function injectToKeepAliveRoot(hook, type2, target, keepAliveRoot) {
|
||
const injected = injectHook(
|
||
type2,
|
||
hook,
|
||
keepAliveRoot,
|
||
true
|
||
/* prepend */
|
||
);
|
||
onUnmounted(() => {
|
||
remove(keepAliveRoot[type2], injected);
|
||
}, target);
|
||
}
|
||
function injectHook(type2, hook, target = currentInstance, prepend = false) {
|
||
if (target) {
|
||
if (isRootHook(type2)) {
|
||
target = target.root;
|
||
}
|
||
const hooks = target[type2] || (target[type2] = []);
|
||
const wrappedHook = hook.__weh || (hook.__weh = (...args) => {
|
||
if (target.isUnmounted) {
|
||
return;
|
||
}
|
||
pauseTracking();
|
||
const reset = setCurrentInstance(target);
|
||
const res = callWithAsyncErrorHandling(hook, target, type2, args);
|
||
reset();
|
||
resetTracking();
|
||
return res;
|
||
});
|
||
if (prepend) {
|
||
hooks.unshift(wrappedHook);
|
||
} else {
|
||
hooks.push(wrappedHook);
|
||
}
|
||
return wrappedHook;
|
||
} else {
|
||
const apiName = toHandlerKey(
|
||
(ErrorTypeStrings[type2] || type2.replace(/^on/, "")).replace(/ hook$/, "")
|
||
);
|
||
warn$1(
|
||
`${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup().`
|
||
);
|
||
}
|
||
}
|
||
const createHook = (lifecycle) => (hook, target = currentInstance) => (
|
||
// post-create lifecycle registrations are noops during SSR (except for serverPrefetch)
|
||
(!isInSSRComponentSetup || lifecycle === "sp") && injectHook(lifecycle, (...args) => hook(...args), target)
|
||
);
|
||
const onBeforeMount = createHook("bm");
|
||
const onMounted = createHook("m");
|
||
const onBeforeUpdate = createHook("bu");
|
||
const onUpdated = createHook("u");
|
||
const onBeforeUnmount = createHook("bum");
|
||
const onUnmounted = createHook("um");
|
||
const onServerPrefetch = createHook("sp");
|
||
const onRenderTriggered = createHook(
|
||
"rtg"
|
||
);
|
||
const onRenderTracked = createHook(
|
||
"rtc"
|
||
);
|
||
function onErrorCaptured(hook, target = currentInstance) {
|
||
injectHook("ec", hook, target);
|
||
}
|
||
const getPublicInstance = (i) => {
|
||
if (!i)
|
||
return null;
|
||
if (isStatefulComponent(i))
|
||
return getExposeProxy(i) || i.proxy;
|
||
return getPublicInstance(i.parent);
|
||
};
|
||
function getComponentInternalInstance(i) {
|
||
return i;
|
||
}
|
||
const publicPropertiesMap = (
|
||
// Move PURE marker to new line to workaround compiler discarding it
|
||
// due to type annotation
|
||
/* @__PURE__ */ extend(/* @__PURE__ */ Object.create(null), {
|
||
// fixed by xxxxxx
|
||
$: getComponentInternalInstance,
|
||
// fixed by xxxxxx vue-i18n 在 dev 模式,访问了 $el,故模拟一个假的
|
||
// $el: i => i.vnode.el,
|
||
$el: (i) => i.__$el || (i.__$el = {}),
|
||
$data: (i) => i.data,
|
||
$props: (i) => shallowReadonly(i.props),
|
||
$attrs: (i) => shallowReadonly(i.attrs),
|
||
$slots: (i) => shallowReadonly(i.slots),
|
||
$refs: (i) => shallowReadonly(i.refs),
|
||
$parent: (i) => getPublicInstance(i.parent),
|
||
$root: (i) => getPublicInstance(i.root),
|
||
$emit: (i) => i.emit,
|
||
$options: (i) => resolveMergedOptions(i),
|
||
$forceUpdate: (i) => i.f || (i.f = () => {
|
||
i.effect.dirty = true;
|
||
queueJob(i.update);
|
||
}),
|
||
// $nextTick: i => i.n || (i.n = nextTick.bind(i.proxy!)),// fixed by xxxxxx
|
||
$watch: (i) => instanceWatch.bind(i)
|
||
})
|
||
);
|
||
const isReservedPrefix = (key) => key === "_" || key === "$";
|
||
const hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn$1(state, key);
|
||
const PublicInstanceProxyHandlers = {
|
||
get({ _: instance }, key) {
|
||
const { ctx, setupState, data, props: props2, accessCache, type: type2, appContext } = instance;
|
||
if (key === "__isVue") {
|
||
return true;
|
||
}
|
||
let normalizedProps;
|
||
if (key[0] !== "$") {
|
||
const n2 = accessCache[key];
|
||
if (n2 !== void 0) {
|
||
switch (n2) {
|
||
case 1:
|
||
return setupState[key];
|
||
case 2:
|
||
return data[key];
|
||
case 4:
|
||
return ctx[key];
|
||
case 3:
|
||
return props2[key];
|
||
}
|
||
} else if (hasSetupBinding(setupState, key)) {
|
||
accessCache[key] = 1;
|
||
return setupState[key];
|
||
} else if (data !== EMPTY_OBJ && hasOwn$1(data, key)) {
|
||
accessCache[key] = 2;
|
||
return data[key];
|
||
} else if (
|
||
// only cache other properties when instance has declared (thus stable)
|
||
// props
|
||
(normalizedProps = instance.propsOptions[0]) && hasOwn$1(normalizedProps, key)
|
||
) {
|
||
accessCache[key] = 3;
|
||
return props2[key];
|
||
} else if (ctx !== EMPTY_OBJ && hasOwn$1(ctx, key)) {
|
||
accessCache[key] = 4;
|
||
return ctx[key];
|
||
} else if (shouldCacheAccess) {
|
||
accessCache[key] = 0;
|
||
}
|
||
}
|
||
const publicGetter = publicPropertiesMap[key];
|
||
let cssModule, globalProperties;
|
||
if (publicGetter) {
|
||
if (key === "$attrs") {
|
||
track(instance, "get", key);
|
||
} else if (key === "$slots") {
|
||
track(instance, "get", key);
|
||
}
|
||
return publicGetter(instance);
|
||
} else if (
|
||
// css module (injected by vue-loader)
|
||
(cssModule = type2.__cssModules) && (cssModule = cssModule[key])
|
||
) {
|
||
return cssModule;
|
||
} else if (ctx !== EMPTY_OBJ && hasOwn$1(ctx, key)) {
|
||
accessCache[key] = 4;
|
||
return ctx[key];
|
||
} else if (
|
||
// global properties
|
||
globalProperties = appContext.config.globalProperties, hasOwn$1(globalProperties, key)
|
||
) {
|
||
{
|
||
return globalProperties[key];
|
||
}
|
||
} else if (currentRenderingInstance && (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading
|
||
// to infinite warning loop
|
||
key.indexOf("__v") !== 0)) {
|
||
if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn$1(data, key)) {
|
||
warn$1(
|
||
`Property ${JSON.stringify(
|
||
key
|
||
)} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.`
|
||
);
|
||
} else if (instance === currentRenderingInstance) {
|
||
warn$1(
|
||
`Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.`
|
||
);
|
||
}
|
||
}
|
||
},
|
||
set({ _: instance }, key, value2) {
|
||
const { data, setupState, ctx } = instance;
|
||
if (hasSetupBinding(setupState, key)) {
|
||
setupState[key] = value2;
|
||
return true;
|
||
} else if (setupState.__isScriptSetup && hasOwn$1(setupState, key)) {
|
||
warn$1(`Cannot mutate <script setup> binding "${key}" from Options API.`);
|
||
return false;
|
||
} else if (data !== EMPTY_OBJ && hasOwn$1(data, key)) {
|
||
data[key] = value2;
|
||
return true;
|
||
} else if (hasOwn$1(instance.props, key)) {
|
||
warn$1(`Attempting to mutate prop "${key}". Props are readonly.`);
|
||
return false;
|
||
}
|
||
if (key[0] === "$" && key.slice(1) in instance) {
|
||
warn$1(
|
||
`Attempting to mutate public property "${key}". Properties starting with $ are reserved and readonly.`
|
||
);
|
||
return false;
|
||
} else {
|
||
if (key in instance.appContext.config.globalProperties) {
|
||
Object.defineProperty(ctx, key, {
|
||
enumerable: true,
|
||
configurable: true,
|
||
value: value2
|
||
});
|
||
} else {
|
||
ctx[key] = value2;
|
||
}
|
||
}
|
||
return true;
|
||
},
|
||
has({
|
||
_: { data, setupState, accessCache, ctx, appContext, propsOptions }
|
||
}, key) {
|
||
let normalizedProps;
|
||
return !!accessCache[key] || data !== EMPTY_OBJ && hasOwn$1(data, key) || hasSetupBinding(setupState, key) || (normalizedProps = propsOptions[0]) && hasOwn$1(normalizedProps, key) || hasOwn$1(ctx, key) || hasOwn$1(publicPropertiesMap, key) || hasOwn$1(appContext.config.globalProperties, key);
|
||
},
|
||
defineProperty(target, key, descriptor) {
|
||
if (descriptor.get != null) {
|
||
target._.accessCache[key] = 0;
|
||
} else if (hasOwn$1(descriptor, "value")) {
|
||
this.set(target, key, descriptor.value, null);
|
||
}
|
||
return Reflect.defineProperty(target, key, descriptor);
|
||
}
|
||
};
|
||
{
|
||
PublicInstanceProxyHandlers.ownKeys = (target) => {
|
||
warn$1(
|
||
`Avoid app logic that relies on enumerating keys on a component instance. The keys will be empty in production mode to avoid performance overhead.`
|
||
);
|
||
return Reflect.ownKeys(target);
|
||
};
|
||
}
|
||
function createDevRenderContext(instance) {
|
||
const target = {};
|
||
Object.defineProperty(target, `_`, {
|
||
configurable: true,
|
||
enumerable: false,
|
||
get: () => instance
|
||
});
|
||
Object.keys(publicPropertiesMap).forEach((key) => {
|
||
Object.defineProperty(target, key, {
|
||
configurable: true,
|
||
enumerable: false,
|
||
get: () => publicPropertiesMap[key](instance),
|
||
// intercepted by the proxy so no need for implementation,
|
||
// but needed to prevent set errors
|
||
set: NOOP
|
||
});
|
||
});
|
||
return target;
|
||
}
|
||
function exposePropsOnRenderContext(instance) {
|
||
const {
|
||
ctx,
|
||
propsOptions: [propsOptions]
|
||
} = instance;
|
||
if (propsOptions) {
|
||
Object.keys(propsOptions).forEach((key) => {
|
||
Object.defineProperty(ctx, key, {
|
||
enumerable: true,
|
||
configurable: true,
|
||
get: () => instance.props[key],
|
||
set: NOOP
|
||
});
|
||
});
|
||
}
|
||
}
|
||
function exposeSetupStateOnRenderContext(instance) {
|
||
const { ctx, setupState } = instance;
|
||
Object.keys(toRaw(setupState)).forEach((key) => {
|
||
if (!setupState.__isScriptSetup) {
|
||
if (isReservedPrefix(key[0])) {
|
||
warn$1(
|
||
`setup() return property ${JSON.stringify(
|
||
key
|
||
)} should not start with "$" or "_" which are reserved prefixes for Vue internals.`
|
||
);
|
||
return;
|
||
}
|
||
Object.defineProperty(ctx, key, {
|
||
enumerable: true,
|
||
configurable: true,
|
||
get: () => setupState[key],
|
||
set: NOOP
|
||
});
|
||
}
|
||
});
|
||
}
|
||
function normalizePropsOrEmits(props2) {
|
||
return isArray$1(props2) ? props2.reduce(
|
||
(normalized, p2) => (normalized[p2] = null, normalized),
|
||
{}
|
||
) : props2;
|
||
}
|
||
function createDuplicateChecker() {
|
||
const cache = /* @__PURE__ */ Object.create(null);
|
||
return (type2, key) => {
|
||
if (cache[key]) {
|
||
warn$1(`${type2} property "${key}" is already defined in ${cache[key]}.`);
|
||
} else {
|
||
cache[key] = type2;
|
||
}
|
||
};
|
||
}
|
||
let shouldCacheAccess = true;
|
||
function applyOptions$1(instance) {
|
||
const options = resolveMergedOptions(instance);
|
||
const publicThis = instance.proxy;
|
||
const ctx = instance.ctx;
|
||
shouldCacheAccess = false;
|
||
if (options.beforeCreate) {
|
||
callHook$1(options.beforeCreate, instance, "bc");
|
||
}
|
||
const {
|
||
// state
|
||
data: dataOptions,
|
||
computed: computedOptions,
|
||
methods,
|
||
watch: watchOptions,
|
||
provide: provideOptions,
|
||
inject: injectOptions,
|
||
// lifecycle
|
||
created,
|
||
beforeMount,
|
||
mounted,
|
||
beforeUpdate,
|
||
updated,
|
||
activated,
|
||
deactivated,
|
||
beforeDestroy,
|
||
beforeUnmount,
|
||
destroyed,
|
||
unmounted,
|
||
render,
|
||
renderTracked,
|
||
renderTriggered,
|
||
errorCaptured,
|
||
serverPrefetch,
|
||
// public API
|
||
expose,
|
||
inheritAttrs,
|
||
// assets
|
||
components,
|
||
directives,
|
||
filters
|
||
} = options;
|
||
const checkDuplicateProperties = createDuplicateChecker();
|
||
{
|
||
const [propsOptions] = instance.propsOptions;
|
||
if (propsOptions) {
|
||
for (const key in propsOptions) {
|
||
checkDuplicateProperties("Props", key);
|
||
}
|
||
}
|
||
}
|
||
function initInjections() {
|
||
if (injectOptions) {
|
||
resolveInjections(injectOptions, ctx, checkDuplicateProperties);
|
||
}
|
||
}
|
||
{
|
||
initInjections();
|
||
}
|
||
if (methods) {
|
||
for (const key in methods) {
|
||
const methodHandler = methods[key];
|
||
if (isFunction(methodHandler)) {
|
||
{
|
||
Object.defineProperty(ctx, key, {
|
||
value: methodHandler.bind(publicThis),
|
||
configurable: true,
|
||
enumerable: true,
|
||
writable: true
|
||
});
|
||
}
|
||
{
|
||
checkDuplicateProperties("Methods", key);
|
||
}
|
||
} else {
|
||
warn$1(
|
||
`Method "${key}" has type "${typeof methodHandler}" in the component definition. Did you reference the function correctly?`
|
||
);
|
||
}
|
||
}
|
||
}
|
||
if (dataOptions) {
|
||
if (!isFunction(dataOptions)) {
|
||
warn$1(
|
||
`The data option must be a function. Plain object usage is no longer supported.`
|
||
);
|
||
}
|
||
const data = dataOptions.call(publicThis, publicThis);
|
||
if (isPromise(data)) {
|
||
warn$1(
|
||
`data() returned a Promise - note data() cannot be async; If you intend to perform data fetching before component renders, use async setup() + <Suspense>.`
|
||
);
|
||
}
|
||
if (!isObject$2(data)) {
|
||
warn$1(`data() should return an object.`);
|
||
} else {
|
||
instance.data = reactive(data);
|
||
{
|
||
for (const key in data) {
|
||
checkDuplicateProperties("Data", key);
|
||
if (!isReservedPrefix(key[0])) {
|
||
Object.defineProperty(ctx, key, {
|
||
configurable: true,
|
||
enumerable: true,
|
||
get: () => data[key],
|
||
set: NOOP
|
||
});
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
shouldCacheAccess = true;
|
||
if (computedOptions) {
|
||
for (const key in computedOptions) {
|
||
const opt = computedOptions[key];
|
||
const get2 = isFunction(opt) ? opt.bind(publicThis, publicThis) : isFunction(opt.get) ? opt.get.bind(publicThis, publicThis) : NOOP;
|
||
if (get2 === NOOP) {
|
||
warn$1(`Computed property "${key}" has no getter.`);
|
||
}
|
||
const set2 = !isFunction(opt) && isFunction(opt.set) ? opt.set.bind(publicThis) : () => {
|
||
warn$1(
|
||
`Write operation failed: computed property "${key}" is readonly.`
|
||
);
|
||
};
|
||
const c2 = computed({
|
||
get: get2,
|
||
set: set2
|
||
});
|
||
Object.defineProperty(ctx, key, {
|
||
enumerable: true,
|
||
configurable: true,
|
||
get: () => c2.value,
|
||
set: (v) => c2.value = v
|
||
});
|
||
{
|
||
checkDuplicateProperties("Computed", key);
|
||
}
|
||
}
|
||
}
|
||
if (watchOptions) {
|
||
for (const key in watchOptions) {
|
||
createWatcher(watchOptions[key], ctx, publicThis, key);
|
||
}
|
||
}
|
||
function initProvides() {
|
||
if (provideOptions) {
|
||
const provides = isFunction(provideOptions) ? provideOptions.call(publicThis) : provideOptions;
|
||
Reflect.ownKeys(provides).forEach((key) => {
|
||
provide(key, provides[key]);
|
||
});
|
||
}
|
||
}
|
||
{
|
||
initProvides();
|
||
}
|
||
{
|
||
if (created) {
|
||
callHook$1(created, instance, "c");
|
||
}
|
||
}
|
||
function registerLifecycleHook(register2, hook) {
|
||
if (isArray$1(hook)) {
|
||
hook.forEach((_hook) => register2(_hook.bind(publicThis)));
|
||
} else if (hook) {
|
||
register2(hook.bind(publicThis));
|
||
}
|
||
}
|
||
registerLifecycleHook(onBeforeMount, beforeMount);
|
||
registerLifecycleHook(onMounted, mounted);
|
||
registerLifecycleHook(onBeforeUpdate, beforeUpdate);
|
||
registerLifecycleHook(onUpdated, updated);
|
||
registerLifecycleHook(onActivated, activated);
|
||
registerLifecycleHook(onDeactivated, deactivated);
|
||
registerLifecycleHook(onErrorCaptured, errorCaptured);
|
||
registerLifecycleHook(onRenderTracked, renderTracked);
|
||
registerLifecycleHook(onRenderTriggered, renderTriggered);
|
||
registerLifecycleHook(onBeforeUnmount, beforeUnmount);
|
||
registerLifecycleHook(onUnmounted, unmounted);
|
||
registerLifecycleHook(onServerPrefetch, serverPrefetch);
|
||
if (isArray$1(expose)) {
|
||
if (expose.length) {
|
||
const exposed = instance.exposed || (instance.exposed = {});
|
||
expose.forEach((key) => {
|
||
Object.defineProperty(exposed, key, {
|
||
get: () => publicThis[key],
|
||
set: (val) => publicThis[key] = val
|
||
});
|
||
});
|
||
} else if (!instance.exposed) {
|
||
instance.exposed = {};
|
||
}
|
||
}
|
||
if (render && instance.render === NOOP) {
|
||
instance.render = render;
|
||
}
|
||
if (inheritAttrs != null) {
|
||
instance.inheritAttrs = inheritAttrs;
|
||
}
|
||
if (components)
|
||
instance.components = components;
|
||
if (directives)
|
||
instance.directives = directives;
|
||
if (instance.ctx.$onApplyOptions) {
|
||
instance.ctx.$onApplyOptions(options, instance, publicThis);
|
||
}
|
||
}
|
||
function resolveInjections(injectOptions, ctx, checkDuplicateProperties = NOOP) {
|
||
if (isArray$1(injectOptions)) {
|
||
injectOptions = normalizeInject(injectOptions);
|
||
}
|
||
for (const key in injectOptions) {
|
||
const opt = injectOptions[key];
|
||
let injected;
|
||
if (isObject$2(opt)) {
|
||
if ("default" in opt) {
|
||
injected = inject(
|
||
opt.from || key,
|
||
opt.default,
|
||
true
|
||
);
|
||
} else {
|
||
injected = inject(opt.from || key);
|
||
}
|
||
} else {
|
||
injected = inject(opt);
|
||
}
|
||
if (isRef(injected)) {
|
||
Object.defineProperty(ctx, key, {
|
||
enumerable: true,
|
||
configurable: true,
|
||
get: () => injected.value,
|
||
set: (v) => injected.value = v
|
||
});
|
||
} else {
|
||
ctx[key] = injected;
|
||
}
|
||
{
|
||
checkDuplicateProperties("Inject", key);
|
||
}
|
||
}
|
||
}
|
||
function callHook$1(hook, instance, type2) {
|
||
callWithAsyncErrorHandling(
|
||
isArray$1(hook) ? hook.map((h2) => h2.bind(instance.proxy)) : hook.bind(instance.proxy),
|
||
instance,
|
||
type2
|
||
);
|
||
}
|
||
function createWatcher(raw, ctx, publicThis, key) {
|
||
const getter = key.includes(".") ? createPathGetter(publicThis, key) : () => publicThis[key];
|
||
if (isString(raw)) {
|
||
const handler = ctx[raw];
|
||
if (isFunction(handler)) {
|
||
watch(getter, handler);
|
||
} else {
|
||
warn$1(`Invalid watch handler specified by key "${raw}"`, handler);
|
||
}
|
||
} else if (isFunction(raw)) {
|
||
watch(getter, raw.bind(publicThis));
|
||
} else if (isObject$2(raw)) {
|
||
if (isArray$1(raw)) {
|
||
raw.forEach((r2) => createWatcher(r2, ctx, publicThis, key));
|
||
} else {
|
||
const handler = isFunction(raw.handler) ? raw.handler.bind(publicThis) : ctx[raw.handler];
|
||
if (isFunction(handler)) {
|
||
watch(getter, handler, raw);
|
||
} else {
|
||
warn$1(`Invalid watch handler specified by key "${raw.handler}"`, handler);
|
||
}
|
||
}
|
||
} else {
|
||
warn$1(`Invalid watch option: "${key}"`, raw);
|
||
}
|
||
}
|
||
function resolveMergedOptions(instance) {
|
||
const base = instance.type;
|
||
const { mixins, extends: extendsOptions } = base;
|
||
const {
|
||
mixins: globalMixins,
|
||
optionsCache: cache,
|
||
config: { optionMergeStrategies }
|
||
} = instance.appContext;
|
||
const cached = cache.get(base);
|
||
let resolved;
|
||
if (cached) {
|
||
resolved = cached;
|
||
} else if (!globalMixins.length && !mixins && !extendsOptions) {
|
||
{
|
||
resolved = base;
|
||
}
|
||
} else {
|
||
resolved = {};
|
||
if (globalMixins.length) {
|
||
globalMixins.forEach(
|
||
(m2) => mergeOptions(resolved, m2, optionMergeStrategies, true)
|
||
);
|
||
}
|
||
mergeOptions(resolved, base, optionMergeStrategies);
|
||
}
|
||
if (isObject$2(base)) {
|
||
cache.set(base, resolved);
|
||
}
|
||
return resolved;
|
||
}
|
||
function mergeOptions(to, from, strats, asMixin = false) {
|
||
const { mixins, extends: extendsOptions } = from;
|
||
if (extendsOptions) {
|
||
mergeOptions(to, extendsOptions, strats, true);
|
||
}
|
||
if (mixins) {
|
||
mixins.forEach(
|
||
(m2) => mergeOptions(to, m2, strats, true)
|
||
);
|
||
}
|
||
for (const key in from) {
|
||
if (asMixin && key === "expose") {
|
||
warn$1(
|
||
`"expose" option is ignored when declared in mixins or extends. It should only be declared in the base component itself.`
|
||
);
|
||
} else {
|
||
const strat = internalOptionMergeStrats[key] || strats && strats[key];
|
||
to[key] = strat ? strat(to[key], from[key]) : from[key];
|
||
}
|
||
}
|
||
return to;
|
||
}
|
||
const internalOptionMergeStrats = {
|
||
data: mergeDataFn,
|
||
props: mergeEmitsOrPropsOptions,
|
||
emits: mergeEmitsOrPropsOptions,
|
||
// objects
|
||
methods: mergeObjectOptions,
|
||
computed: mergeObjectOptions,
|
||
// lifecycle
|
||
beforeCreate: mergeAsArray$1,
|
||
created: mergeAsArray$1,
|
||
beforeMount: mergeAsArray$1,
|
||
mounted: mergeAsArray$1,
|
||
beforeUpdate: mergeAsArray$1,
|
||
updated: mergeAsArray$1,
|
||
beforeDestroy: mergeAsArray$1,
|
||
beforeUnmount: mergeAsArray$1,
|
||
destroyed: mergeAsArray$1,
|
||
unmounted: mergeAsArray$1,
|
||
activated: mergeAsArray$1,
|
||
deactivated: mergeAsArray$1,
|
||
errorCaptured: mergeAsArray$1,
|
||
serverPrefetch: mergeAsArray$1,
|
||
// assets
|
||
components: mergeObjectOptions,
|
||
directives: mergeObjectOptions,
|
||
// watch
|
||
watch: mergeWatchOptions,
|
||
// provide / inject
|
||
provide: mergeDataFn,
|
||
inject: mergeInject
|
||
};
|
||
function mergeDataFn(to, from) {
|
||
if (!from) {
|
||
return to;
|
||
}
|
||
if (!to) {
|
||
return from;
|
||
}
|
||
return function mergedDataFn() {
|
||
return extend(
|
||
isFunction(to) ? to.call(this, this) : to,
|
||
isFunction(from) ? from.call(this, this) : from
|
||
);
|
||
};
|
||
}
|
||
function mergeInject(to, from) {
|
||
return mergeObjectOptions(normalizeInject(to), normalizeInject(from));
|
||
}
|
||
function normalizeInject(raw) {
|
||
if (isArray$1(raw)) {
|
||
const res = {};
|
||
for (let i = 0; i < raw.length; i++) {
|
||
res[raw[i]] = raw[i];
|
||
}
|
||
return res;
|
||
}
|
||
return raw;
|
||
}
|
||
function mergeAsArray$1(to, from) {
|
||
return to ? [...new Set([].concat(to, from))] : from;
|
||
}
|
||
function mergeObjectOptions(to, from) {
|
||
return to ? extend(/* @__PURE__ */ Object.create(null), to, from) : from;
|
||
}
|
||
function mergeEmitsOrPropsOptions(to, from) {
|
||
if (to) {
|
||
if (isArray$1(to) && isArray$1(from)) {
|
||
return [.../* @__PURE__ */ new Set([...to, ...from])];
|
||
}
|
||
return extend(
|
||
/* @__PURE__ */ Object.create(null),
|
||
normalizePropsOrEmits(to),
|
||
normalizePropsOrEmits(from != null ? from : {})
|
||
);
|
||
} else {
|
||
return from;
|
||
}
|
||
}
|
||
function mergeWatchOptions(to, from) {
|
||
if (!to)
|
||
return from;
|
||
if (!from)
|
||
return to;
|
||
const merged = extend(/* @__PURE__ */ Object.create(null), to);
|
||
for (const key in from) {
|
||
merged[key] = mergeAsArray$1(to[key], from[key]);
|
||
}
|
||
return merged;
|
||
}
|
||
function initProps$1(instance, rawProps, isStateful, isSSR = false) {
|
||
const props2 = {};
|
||
const attrs = {};
|
||
instance.propsDefaults = /* @__PURE__ */ Object.create(null);
|
||
setFullProps(instance, rawProps, props2, attrs);
|
||
for (const key in instance.propsOptions[0]) {
|
||
if (!(key in props2)) {
|
||
props2[key] = void 0;
|
||
}
|
||
}
|
||
{
|
||
validateProps(rawProps || {}, props2, instance);
|
||
}
|
||
if (isStateful) {
|
||
instance.props = isSSR ? props2 : shallowReactive(props2);
|
||
} else {
|
||
if (!instance.type.props) {
|
||
instance.props = attrs;
|
||
} else {
|
||
instance.props = props2;
|
||
}
|
||
}
|
||
instance.attrs = attrs;
|
||
}
|
||
function isInHmrContext(instance) {
|
||
}
|
||
function updateProps(instance, rawProps, rawPrevProps, optimized) {
|
||
const {
|
||
props: props2,
|
||
attrs,
|
||
vnode: { patchFlag }
|
||
} = instance;
|
||
const rawCurrentProps = toRaw(props2);
|
||
const [options] = instance.propsOptions;
|
||
let hasAttrsChanged = false;
|
||
if (
|
||
// always force full diff in dev
|
||
// - #1942 if hmr is enabled with sfc component
|
||
// - vite#872 non-sfc component used by sfc component
|
||
!isInHmrContext() && (optimized || patchFlag > 0) && !(patchFlag & 16)
|
||
) {
|
||
if (patchFlag & 8) {
|
||
const propsToUpdate = instance.vnode.dynamicProps;
|
||
for (let i = 0; i < propsToUpdate.length; i++) {
|
||
let key = propsToUpdate[i];
|
||
if (isEmitListener(instance.emitsOptions, key)) {
|
||
continue;
|
||
}
|
||
const value2 = rawProps[key];
|
||
if (options) {
|
||
if (hasOwn$1(attrs, key)) {
|
||
if (value2 !== attrs[key]) {
|
||
attrs[key] = value2;
|
||
hasAttrsChanged = true;
|
||
}
|
||
} else {
|
||
const camelizedKey = camelize(key);
|
||
props2[camelizedKey] = resolvePropValue$1(
|
||
options,
|
||
rawCurrentProps,
|
||
camelizedKey,
|
||
value2,
|
||
instance,
|
||
false
|
||
);
|
||
}
|
||
} else {
|
||
if (value2 !== attrs[key]) {
|
||
attrs[key] = value2;
|
||
hasAttrsChanged = true;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
} else {
|
||
if (setFullProps(instance, rawProps, props2, attrs)) {
|
||
hasAttrsChanged = true;
|
||
}
|
||
let kebabKey;
|
||
for (const key in rawCurrentProps) {
|
||
if (!rawProps || // for camelCase
|
||
!hasOwn$1(rawProps, key) && // it's possible the original props was passed in as kebab-case
|
||
// and converted to camelCase (#955)
|
||
((kebabKey = hyphenate(key)) === key || !hasOwn$1(rawProps, kebabKey))) {
|
||
if (options) {
|
||
if (rawPrevProps && // for camelCase
|
||
(rawPrevProps[key] !== void 0 || // for kebab-case
|
||
rawPrevProps[kebabKey] !== void 0)) {
|
||
props2[key] = resolvePropValue$1(
|
||
options,
|
||
rawCurrentProps,
|
||
key,
|
||
void 0,
|
||
instance,
|
||
true
|
||
);
|
||
}
|
||
} else {
|
||
delete props2[key];
|
||
}
|
||
}
|
||
}
|
||
if (attrs !== rawCurrentProps) {
|
||
for (const key in attrs) {
|
||
if (!rawProps || !hasOwn$1(rawProps, key) && true) {
|
||
delete attrs[key];
|
||
hasAttrsChanged = true;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (hasAttrsChanged) {
|
||
trigger(instance, "set", "$attrs");
|
||
}
|
||
{
|
||
validateProps(rawProps || {}, props2, instance);
|
||
}
|
||
}
|
||
function setFullProps(instance, rawProps, props2, attrs) {
|
||
const [options, needCastKeys] = instance.propsOptions;
|
||
let hasAttrsChanged = false;
|
||
let rawCastValues;
|
||
if (rawProps) {
|
||
for (let key in rawProps) {
|
||
if (isReservedProp(key)) {
|
||
continue;
|
||
}
|
||
const value2 = rawProps[key];
|
||
let camelKey;
|
||
if (options && hasOwn$1(options, camelKey = camelize(key))) {
|
||
if (!needCastKeys || !needCastKeys.includes(camelKey)) {
|
||
props2[camelKey] = value2;
|
||
} else {
|
||
(rawCastValues || (rawCastValues = {}))[camelKey] = value2;
|
||
}
|
||
} else if (!isEmitListener(instance.emitsOptions, key)) {
|
||
if (!(key in attrs) || value2 !== attrs[key]) {
|
||
attrs[key] = value2;
|
||
hasAttrsChanged = true;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (needCastKeys) {
|
||
const rawCurrentProps = toRaw(props2);
|
||
const castValues = rawCastValues || EMPTY_OBJ;
|
||
for (let i = 0; i < needCastKeys.length; i++) {
|
||
const key = needCastKeys[i];
|
||
props2[key] = resolvePropValue$1(
|
||
options,
|
||
rawCurrentProps,
|
||
key,
|
||
castValues[key],
|
||
instance,
|
||
!hasOwn$1(castValues, key)
|
||
);
|
||
}
|
||
}
|
||
return hasAttrsChanged;
|
||
}
|
||
function resolvePropValue$1(options, props2, key, value2, instance, isAbsent) {
|
||
const opt = options[key];
|
||
if (opt != null) {
|
||
const hasDefault = hasOwn$1(opt, "default");
|
||
if (hasDefault && value2 === void 0) {
|
||
const defaultValue = opt.default;
|
||
if (opt.type !== Function && !opt.skipFactory && isFunction(defaultValue)) {
|
||
const { propsDefaults } = instance;
|
||
if (key in propsDefaults) {
|
||
value2 = propsDefaults[key];
|
||
} else {
|
||
const reset = setCurrentInstance(instance);
|
||
value2 = propsDefaults[key] = defaultValue.call(
|
||
null,
|
||
props2
|
||
);
|
||
reset();
|
||
}
|
||
} else {
|
||
value2 = defaultValue;
|
||
}
|
||
}
|
||
if (opt[
|
||
0
|
||
/* shouldCast */
|
||
]) {
|
||
if (isAbsent && !hasDefault) {
|
||
value2 = false;
|
||
} else if (opt[
|
||
1
|
||
/* shouldCastTrue */
|
||
] && (value2 === "" || value2 === hyphenate(key))) {
|
||
value2 = true;
|
||
}
|
||
}
|
||
}
|
||
return value2;
|
||
}
|
||
function normalizePropsOptions(comp, appContext, asMixin = false) {
|
||
const cache = appContext.propsCache;
|
||
const cached = cache.get(comp);
|
||
if (cached) {
|
||
return cached;
|
||
}
|
||
const raw = comp.props;
|
||
const normalized = {};
|
||
const needCastKeys = [];
|
||
let hasExtends = false;
|
||
if (!isFunction(comp)) {
|
||
const extendProps = (raw2) => {
|
||
hasExtends = true;
|
||
const [props2, keys] = normalizePropsOptions(raw2, appContext, true);
|
||
extend(normalized, props2);
|
||
if (keys)
|
||
needCastKeys.push(...keys);
|
||
};
|
||
if (!asMixin && appContext.mixins.length) {
|
||
appContext.mixins.forEach(extendProps);
|
||
}
|
||
if (comp.extends) {
|
||
extendProps(comp.extends);
|
||
}
|
||
if (comp.mixins) {
|
||
comp.mixins.forEach(extendProps);
|
||
}
|
||
}
|
||
if (!raw && !hasExtends) {
|
||
if (isObject$2(comp)) {
|
||
cache.set(comp, EMPTY_ARR);
|
||
}
|
||
return EMPTY_ARR;
|
||
}
|
||
if (isArray$1(raw)) {
|
||
for (let i = 0; i < raw.length; i++) {
|
||
if (!isString(raw[i])) {
|
||
warn$1(`props must be strings when using array syntax.`, raw[i]);
|
||
}
|
||
const normalizedKey = camelize(raw[i]);
|
||
if (validatePropName(normalizedKey)) {
|
||
normalized[normalizedKey] = EMPTY_OBJ;
|
||
}
|
||
}
|
||
} else if (raw) {
|
||
if (!isObject$2(raw)) {
|
||
warn$1(`invalid props options`, raw);
|
||
}
|
||
for (const key in raw) {
|
||
const normalizedKey = camelize(key);
|
||
if (validatePropName(normalizedKey)) {
|
||
const opt = raw[key];
|
||
const prop = normalized[normalizedKey] = isArray$1(opt) || isFunction(opt) ? { type: opt } : extend({}, opt);
|
||
if (prop) {
|
||
const booleanIndex = getTypeIndex(Boolean, prop.type);
|
||
const stringIndex = getTypeIndex(String, prop.type);
|
||
prop[
|
||
0
|
||
/* shouldCast */
|
||
] = booleanIndex > -1;
|
||
prop[
|
||
1
|
||
/* shouldCastTrue */
|
||
] = stringIndex < 0 || booleanIndex < stringIndex;
|
||
if (booleanIndex > -1 || hasOwn$1(prop, "default")) {
|
||
needCastKeys.push(normalizedKey);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
const res = [normalized, needCastKeys];
|
||
if (isObject$2(comp)) {
|
||
cache.set(comp, res);
|
||
}
|
||
return res;
|
||
}
|
||
function validatePropName(key) {
|
||
if (key[0] !== "$" && !isReservedProp(key)) {
|
||
return true;
|
||
} else {
|
||
warn$1(`Invalid prop name: "${key}" is a reserved property.`);
|
||
}
|
||
return false;
|
||
}
|
||
function getType$1(ctor) {
|
||
if (ctor === null) {
|
||
return "null";
|
||
}
|
||
if (typeof ctor === "function") {
|
||
return ctor.name || "";
|
||
} else if (typeof ctor === "object") {
|
||
const name = ctor.constructor && ctor.constructor.name;
|
||
return name || "";
|
||
}
|
||
return "";
|
||
}
|
||
function isSameType(a, b) {
|
||
return getType$1(a) === getType$1(b);
|
||
}
|
||
function getTypeIndex(type2, expectedTypes) {
|
||
if (isArray$1(expectedTypes)) {
|
||
return expectedTypes.findIndex((t2) => isSameType(t2, type2));
|
||
} else if (isFunction(expectedTypes)) {
|
||
return isSameType(expectedTypes, type2) ? 0 : -1;
|
||
}
|
||
return -1;
|
||
}
|
||
function validateProps(rawProps, props2, instance) {
|
||
const resolvedValues = toRaw(props2);
|
||
const options = instance.propsOptions[0];
|
||
for (const key in options) {
|
||
let opt = options[key];
|
||
if (opt == null)
|
||
continue;
|
||
validateProp$1(
|
||
key,
|
||
resolvedValues[key],
|
||
opt,
|
||
shallowReadonly(resolvedValues),
|
||
!hasOwn$1(rawProps, key) && !hasOwn$1(rawProps, hyphenate(key))
|
||
);
|
||
}
|
||
}
|
||
function validateProp$1(name, value2, prop, props2, isAbsent) {
|
||
const { type: type2, required: required2, validator, skipCheck } = prop;
|
||
if (required2 && isAbsent) {
|
||
warn$1('Missing required prop: "' + name + '"');
|
||
return;
|
||
}
|
||
if (value2 == null && !required2) {
|
||
return;
|
||
}
|
||
if (type2 != null && type2 !== true && !skipCheck) {
|
||
let isValid = false;
|
||
const types2 = isArray$1(type2) ? type2 : [type2];
|
||
const expectedTypes = [];
|
||
for (let i = 0; i < types2.length && !isValid; i++) {
|
||
const { valid, expectedType } = assertType$1(value2, types2[i]);
|
||
expectedTypes.push(expectedType || "");
|
||
isValid = valid;
|
||
}
|
||
if (!isValid) {
|
||
warn$1(getInvalidTypeMessage$1(name, value2, expectedTypes));
|
||
return;
|
||
}
|
||
}
|
||
if (validator && !validator(value2, props2)) {
|
||
warn$1('Invalid prop: custom validator check failed for prop "' + name + '".');
|
||
}
|
||
}
|
||
const isSimpleType$1 = /* @__PURE__ */ makeMap$1(
|
||
"String,Number,Boolean,Function,Symbol,BigInt"
|
||
);
|
||
function assertType$1(value2, type2) {
|
||
let valid;
|
||
const expectedType = getType$1(type2);
|
||
if (isSimpleType$1(expectedType)) {
|
||
const t2 = typeof value2;
|
||
valid = t2 === expectedType.toLowerCase();
|
||
if (!valid && t2 === "object") {
|
||
valid = value2 instanceof type2;
|
||
}
|
||
} else if (expectedType === "Object") {
|
||
valid = isObject$2(value2);
|
||
} else if (expectedType === "Array") {
|
||
valid = isArray$1(value2);
|
||
} else if (expectedType === "null") {
|
||
valid = value2 === null;
|
||
} else {
|
||
valid = value2 instanceof type2;
|
||
}
|
||
return {
|
||
valid,
|
||
expectedType
|
||
};
|
||
}
|
||
function getInvalidTypeMessage$1(name, value2, expectedTypes) {
|
||
if (expectedTypes.length === 0) {
|
||
return `Prop type [] for prop "${name}" won't match anything. Did you mean to use type Array instead?`;
|
||
}
|
||
let message = `Invalid prop: type check failed for prop "${name}". Expected ${expectedTypes.map(capitalize).join(" | ")}`;
|
||
const expectedType = expectedTypes[0];
|
||
const receivedType = toRawType(value2);
|
||
const expectedValue = styleValue$1(value2, expectedType);
|
||
const receivedValue = styleValue$1(value2, receivedType);
|
||
if (expectedTypes.length === 1 && isExplicable$1(expectedType) && !isBoolean$1(expectedType, receivedType)) {
|
||
message += ` with value ${expectedValue}`;
|
||
}
|
||
message += `, got ${receivedType} `;
|
||
if (isExplicable$1(receivedType)) {
|
||
message += `with value ${receivedValue}.`;
|
||
}
|
||
return message;
|
||
}
|
||
function styleValue$1(value2, type2) {
|
||
if (type2 === "String") {
|
||
return `"${value2}"`;
|
||
} else if (type2 === "Number") {
|
||
return `${Number(value2)}`;
|
||
} else {
|
||
return `${value2}`;
|
||
}
|
||
}
|
||
function isExplicable$1(type2) {
|
||
const explicitTypes = ["string", "number", "boolean"];
|
||
return explicitTypes.some((elem) => type2.toLowerCase() === elem);
|
||
}
|
||
function isBoolean$1(...args) {
|
||
return args.some((elem) => elem.toLowerCase() === "boolean");
|
||
}
|
||
let supported;
|
||
let perf;
|
||
function startMeasure(instance, type2) {
|
||
if (instance.appContext.config.performance && isSupported()) {
|
||
perf.mark(`vue-${type2}-${instance.uid}`);
|
||
}
|
||
{
|
||
devtoolsPerfStart(instance, type2, isSupported() ? perf.now() : Date.now());
|
||
}
|
||
}
|
||
function endMeasure(instance, type2) {
|
||
if (instance.appContext.config.performance && isSupported()) {
|
||
const startTag = `vue-${type2}-${instance.uid}`;
|
||
const endTag = startTag + `:end`;
|
||
perf.mark(endTag);
|
||
perf.measure(
|
||
`<${formatComponentName(instance, instance.type)}> ${type2}`,
|
||
startTag,
|
||
endTag
|
||
);
|
||
perf.clearMarks(startTag);
|
||
perf.clearMarks(endTag);
|
||
}
|
||
{
|
||
devtoolsPerfEnd(instance, type2, isSupported() ? perf.now() : Date.now());
|
||
}
|
||
}
|
||
function isSupported() {
|
||
if (supported !== void 0) {
|
||
return supported;
|
||
}
|
||
if (typeof window !== "undefined" && window.performance) {
|
||
supported = true;
|
||
perf = window.performance;
|
||
} else {
|
||
supported = false;
|
||
}
|
||
return supported;
|
||
}
|
||
const queuePostRenderEffect$1 = queuePostFlushCb;
|
||
const Fragment = Symbol.for("v-fgt");
|
||
const Text$1 = Symbol.for("v-txt");
|
||
const Comment = Symbol.for("v-cmt");
|
||
const Static = Symbol.for("v-stc");
|
||
function isVNode(value2) {
|
||
return value2 ? value2.__v_isVNode === true : false;
|
||
}
|
||
const InternalObjectKey = `__vInternal`;
|
||
function guardReactiveProps(props2) {
|
||
if (!props2)
|
||
return null;
|
||
return isProxy(props2) || InternalObjectKey in props2 ? extend({}, props2) : props2;
|
||
}
|
||
const emptyAppContext = createAppContext();
|
||
let uid = 0;
|
||
function createComponentInstance(vnode, parent, suspense) {
|
||
const type2 = vnode.type;
|
||
const appContext = (parent ? parent.appContext : vnode.appContext) || emptyAppContext;
|
||
const instance = {
|
||
uid: uid++,
|
||
vnode,
|
||
type: type2,
|
||
parent,
|
||
appContext,
|
||
root: null,
|
||
// to be immediately set
|
||
next: null,
|
||
subTree: null,
|
||
// will be set synchronously right after creation
|
||
effect: null,
|
||
update: null,
|
||
// will be set synchronously right after creation
|
||
scope: new EffectScope(
|
||
true
|
||
/* detached */
|
||
),
|
||
render: null,
|
||
proxy: null,
|
||
exposed: null,
|
||
exposeProxy: null,
|
||
withProxy: null,
|
||
provides: parent ? parent.provides : Object.create(appContext.provides),
|
||
accessCache: null,
|
||
renderCache: [],
|
||
// local resolved assets
|
||
components: null,
|
||
directives: null,
|
||
// resolved props and emits options
|
||
propsOptions: normalizePropsOptions(type2, appContext),
|
||
emitsOptions: normalizeEmitsOptions(type2, appContext),
|
||
// emit
|
||
emit: null,
|
||
// to be set immediately
|
||
emitted: null,
|
||
// props default value
|
||
propsDefaults: EMPTY_OBJ,
|
||
// inheritAttrs
|
||
inheritAttrs: type2.inheritAttrs,
|
||
// state
|
||
ctx: EMPTY_OBJ,
|
||
data: EMPTY_OBJ,
|
||
props: EMPTY_OBJ,
|
||
attrs: EMPTY_OBJ,
|
||
slots: EMPTY_OBJ,
|
||
refs: EMPTY_OBJ,
|
||
setupState: EMPTY_OBJ,
|
||
setupContext: null,
|
||
attrsProxy: null,
|
||
slotsProxy: null,
|
||
// suspense related
|
||
suspense,
|
||
suspenseId: suspense ? suspense.pendingId : 0,
|
||
asyncDep: null,
|
||
asyncResolved: false,
|
||
// lifecycle hooks
|
||
// not using enums here because it results in computed properties
|
||
isMounted: false,
|
||
isUnmounted: false,
|
||
isDeactivated: false,
|
||
bc: null,
|
||
c: null,
|
||
bm: null,
|
||
m: null,
|
||
bu: null,
|
||
u: null,
|
||
um: null,
|
||
bum: null,
|
||
da: null,
|
||
a: null,
|
||
rtg: null,
|
||
rtc: null,
|
||
ec: null,
|
||
sp: null,
|
||
// fixed by xxxxxx 用于存储uni-app的元素缓存
|
||
$uniElements: /* @__PURE__ */ new Map(),
|
||
$templateUniElementRefs: [],
|
||
$templateUniElementStyles: {},
|
||
$eS: {},
|
||
$eA: {}
|
||
};
|
||
{
|
||
instance.ctx = createDevRenderContext(instance);
|
||
}
|
||
instance.root = parent ? parent.root : instance;
|
||
instance.emit = emit.bind(null, instance);
|
||
if (vnode.ce) {
|
||
vnode.ce(instance);
|
||
}
|
||
return instance;
|
||
}
|
||
let currentInstance = null;
|
||
const getCurrentInstance = () => currentInstance || currentRenderingInstance;
|
||
let internalSetCurrentInstance;
|
||
let setInSSRSetupState;
|
||
{
|
||
internalSetCurrentInstance = (i) => {
|
||
currentInstance = i;
|
||
};
|
||
setInSSRSetupState = (v) => {
|
||
isInSSRComponentSetup = v;
|
||
};
|
||
}
|
||
const setCurrentInstance = (instance) => {
|
||
const prev = currentInstance;
|
||
internalSetCurrentInstance(instance);
|
||
instance.scope.on();
|
||
return () => {
|
||
instance.scope.off();
|
||
internalSetCurrentInstance(prev);
|
||
};
|
||
};
|
||
const unsetCurrentInstance = () => {
|
||
currentInstance && currentInstance.scope.off();
|
||
internalSetCurrentInstance(null);
|
||
};
|
||
const isBuiltInTag = /* @__PURE__ */ makeMap$1("slot,component");
|
||
function validateComponentName(name, { isNativeTag }) {
|
||
if (isBuiltInTag(name) || isNativeTag(name)) {
|
||
warn$1(
|
||
"Do not use built-in or reserved HTML elements as component id: " + name
|
||
);
|
||
}
|
||
}
|
||
function isStatefulComponent(instance) {
|
||
return instance.vnode.shapeFlag & 4;
|
||
}
|
||
let isInSSRComponentSetup = false;
|
||
function setupComponent(instance, isSSR = false) {
|
||
isSSR && setInSSRSetupState(isSSR);
|
||
const {
|
||
props: props2
|
||
/*, children*/
|
||
} = instance.vnode;
|
||
const isStateful = isStatefulComponent(instance);
|
||
initProps$1(instance, props2, isStateful, isSSR);
|
||
const setupResult = isStateful ? setupStatefulComponent(instance, isSSR) : void 0;
|
||
isSSR && setInSSRSetupState(false);
|
||
return setupResult;
|
||
}
|
||
function setupStatefulComponent(instance, isSSR) {
|
||
const Component2 = instance.type;
|
||
{
|
||
if (Component2.name) {
|
||
validateComponentName(Component2.name, instance.appContext.config);
|
||
}
|
||
if (Component2.components) {
|
||
const names = Object.keys(Component2.components);
|
||
for (let i = 0; i < names.length; i++) {
|
||
validateComponentName(names[i], instance.appContext.config);
|
||
}
|
||
}
|
||
if (Component2.directives) {
|
||
const names = Object.keys(Component2.directives);
|
||
for (let i = 0; i < names.length; i++) {
|
||
validateDirectiveName(names[i]);
|
||
}
|
||
}
|
||
if (Component2.compilerOptions && isRuntimeOnly()) {
|
||
warn$1(
|
||
`"compilerOptions" is only supported when using a build of Vue that includes the runtime compiler. Since you are using a runtime-only build, the options should be passed via your build tool config instead.`
|
||
);
|
||
}
|
||
}
|
||
instance.accessCache = /* @__PURE__ */ Object.create(null);
|
||
instance.proxy = markRaw(new Proxy(instance.ctx, PublicInstanceProxyHandlers));
|
||
{
|
||
exposePropsOnRenderContext(instance);
|
||
}
|
||
const { setup } = Component2;
|
||
if (setup) {
|
||
const setupContext = instance.setupContext = setup.length > 1 ? createSetupContext(instance) : null;
|
||
const reset = setCurrentInstance(instance);
|
||
pauseTracking();
|
||
const setupResult = callWithErrorHandling(
|
||
setup,
|
||
instance,
|
||
0,
|
||
[
|
||
shallowReadonly(instance.props),
|
||
setupContext
|
||
]
|
||
);
|
||
resetTracking();
|
||
reset();
|
||
if (isPromise(setupResult)) {
|
||
setupResult.then(unsetCurrentInstance, unsetCurrentInstance);
|
||
{
|
||
warn$1(
|
||
`setup() returned a Promise, but the version of Vue you are using does not support it yet.`
|
||
);
|
||
}
|
||
} else {
|
||
handleSetupResult(instance, setupResult, isSSR);
|
||
}
|
||
} else {
|
||
finishComponentSetup(instance, isSSR);
|
||
}
|
||
}
|
||
function handleSetupResult(instance, setupResult, isSSR) {
|
||
if (isFunction(setupResult)) {
|
||
{
|
||
instance.render = setupResult;
|
||
}
|
||
} else if (isObject$2(setupResult)) {
|
||
if (isVNode(setupResult)) {
|
||
warn$1(
|
||
`setup() should not return VNodes directly - return a render function instead.`
|
||
);
|
||
}
|
||
{
|
||
instance.devtoolsRawSetupState = setupResult;
|
||
}
|
||
instance.setupState = proxyRefs(setupResult);
|
||
{
|
||
exposeSetupStateOnRenderContext(instance);
|
||
}
|
||
} else if (setupResult !== void 0) {
|
||
warn$1(
|
||
`setup() should return an object. Received: ${setupResult === null ? "null" : typeof setupResult}`
|
||
);
|
||
}
|
||
finishComponentSetup(instance, isSSR);
|
||
}
|
||
let compile;
|
||
const isRuntimeOnly = () => !compile;
|
||
function finishComponentSetup(instance, isSSR, skipOptions) {
|
||
const Component2 = instance.type;
|
||
if (!instance.render) {
|
||
instance.render = Component2.render || NOOP;
|
||
}
|
||
{
|
||
const reset = setCurrentInstance(instance);
|
||
pauseTracking();
|
||
try {
|
||
applyOptions$1(instance);
|
||
} finally {
|
||
resetTracking();
|
||
reset();
|
||
}
|
||
}
|
||
if (!Component2.render && instance.render === NOOP && !isSSR) {
|
||
if (Component2.template) {
|
||
warn$1(
|
||
`Component provided template option but runtime compilation is not supported in this build of Vue. Configure your bundler to alias "vue" to "vue/dist/vue.esm-bundler.js".`
|
||
);
|
||
} else {
|
||
warn$1(`Component is missing template or render function.`);
|
||
}
|
||
}
|
||
}
|
||
function getAttrsProxy(instance) {
|
||
return instance.attrsProxy || (instance.attrsProxy = new Proxy(
|
||
instance.attrs,
|
||
{
|
||
get(target, key) {
|
||
track(instance, "get", "$attrs");
|
||
return target[key];
|
||
},
|
||
set() {
|
||
warn$1(`setupContext.attrs is readonly.`);
|
||
return false;
|
||
},
|
||
deleteProperty() {
|
||
warn$1(`setupContext.attrs is readonly.`);
|
||
return false;
|
||
}
|
||
}
|
||
));
|
||
}
|
||
function getSlotsProxy(instance) {
|
||
return instance.slotsProxy || (instance.slotsProxy = new Proxy(instance.slots, {
|
||
get(target, key) {
|
||
track(instance, "get", "$slots");
|
||
return target[key];
|
||
}
|
||
}));
|
||
}
|
||
function createSetupContext(instance) {
|
||
const expose = (exposed) => {
|
||
{
|
||
if (instance.exposed) {
|
||
warn$1(`expose() should be called only once per setup().`);
|
||
}
|
||
if (exposed != null) {
|
||
let exposedType = typeof exposed;
|
||
if (exposedType === "object") {
|
||
if (isArray$1(exposed)) {
|
||
exposedType = "array";
|
||
} else if (isRef(exposed)) {
|
||
exposedType = "ref";
|
||
}
|
||
}
|
||
if (exposedType !== "object") {
|
||
warn$1(
|
||
`expose() should be passed a plain object, received ${exposedType}.`
|
||
);
|
||
}
|
||
}
|
||
}
|
||
instance.exposed = exposed || {};
|
||
};
|
||
{
|
||
return Object.freeze({
|
||
get attrs() {
|
||
return getAttrsProxy(instance);
|
||
},
|
||
get slots() {
|
||
return getSlotsProxy(instance);
|
||
},
|
||
get emit() {
|
||
return (event, ...args) => instance.emit(event, ...args);
|
||
},
|
||
expose
|
||
});
|
||
}
|
||
}
|
||
function getExposeProxy(instance) {
|
||
if (instance.exposed) {
|
||
return instance.exposeProxy || (instance.exposeProxy = new Proxy(proxyRefs(markRaw(instance.exposed)), {
|
||
get(target, key) {
|
||
if (key in target) {
|
||
return target[key];
|
||
}
|
||
return instance.proxy[key];
|
||
},
|
||
has(target, key) {
|
||
return key in target || key in publicPropertiesMap;
|
||
}
|
||
}));
|
||
}
|
||
}
|
||
const classifyRE = /(?:^|[-_])(\w)/g;
|
||
const classify = (str) => str.replace(classifyRE, (c2) => c2.toUpperCase()).replace(/[-_]/g, "");
|
||
function getComponentName(Component2, includeInferred = true) {
|
||
return isFunction(Component2) ? Component2.displayName || Component2.name : Component2.name || includeInferred && Component2.__name;
|
||
}
|
||
function formatComponentName(instance, Component2, isRoot = false) {
|
||
let name = getComponentName(Component2);
|
||
if (!name && Component2.__file) {
|
||
const match = Component2.__file.match(/([^/\\]+)\.\w+$/);
|
||
if (match) {
|
||
name = match[1];
|
||
}
|
||
}
|
||
if (!name && instance && instance.parent) {
|
||
const inferFromRegistry = (registry) => {
|
||
for (const key in registry) {
|
||
if (registry[key] === Component2) {
|
||
return key;
|
||
}
|
||
}
|
||
};
|
||
name = inferFromRegistry(
|
||
instance.components || instance.parent.type.components
|
||
) || inferFromRegistry(instance.appContext.components);
|
||
}
|
||
return name ? classify(name) : isRoot ? `App` : `Anonymous`;
|
||
}
|
||
const computed = (getterOrOptions, debugOptions) => {
|
||
const c2 = computed$1(getterOrOptions, debugOptions, isInSSRComponentSetup);
|
||
{
|
||
const i = getCurrentInstance();
|
||
if (i && i.appContext.config.warnRecursiveComputed) {
|
||
c2._warnRecursive = true;
|
||
}
|
||
}
|
||
return c2;
|
||
};
|
||
const version$1 = "3.4.21";
|
||
const warn = warn$1;
|
||
function unwrapper(target) {
|
||
return unref(target);
|
||
}
|
||
const ARRAYTYPE = "[object Array]";
|
||
const OBJECTTYPE = "[object Object]";
|
||
function diff(current, pre) {
|
||
const result = {};
|
||
syncKeys(current, pre);
|
||
_diff(current, pre, "", result);
|
||
return result;
|
||
}
|
||
function syncKeys(current, pre) {
|
||
current = unwrapper(current);
|
||
if (current === pre)
|
||
return;
|
||
const rootCurrentType = toTypeString(current);
|
||
const rootPreType = toTypeString(pre);
|
||
if (rootCurrentType == OBJECTTYPE && rootPreType == OBJECTTYPE) {
|
||
for (let key in pre) {
|
||
const currentValue = current[key];
|
||
if (currentValue === void 0) {
|
||
current[key] = null;
|
||
} else {
|
||
syncKeys(currentValue, pre[key]);
|
||
}
|
||
}
|
||
} else if (rootCurrentType == ARRAYTYPE && rootPreType == ARRAYTYPE) {
|
||
if (current.length >= pre.length) {
|
||
pre.forEach((item, index2) => {
|
||
syncKeys(current[index2], item);
|
||
});
|
||
}
|
||
}
|
||
}
|
||
function _diff(current, pre, path, result) {
|
||
current = unwrapper(current);
|
||
if (current === pre)
|
||
return;
|
||
const rootCurrentType = toTypeString(current);
|
||
const rootPreType = toTypeString(pre);
|
||
if (rootCurrentType == OBJECTTYPE) {
|
||
if (rootPreType != OBJECTTYPE || Object.keys(current).length < Object.keys(pre).length) {
|
||
setResult(result, path, current);
|
||
} else {
|
||
for (let key in current) {
|
||
const currentValue = unwrapper(current[key]);
|
||
const preValue = pre[key];
|
||
const currentType = toTypeString(currentValue);
|
||
const preType = toTypeString(preValue);
|
||
if (currentType != ARRAYTYPE && currentType != OBJECTTYPE) {
|
||
if (currentValue != preValue) {
|
||
setResult(
|
||
result,
|
||
(path == "" ? "" : path + ".") + key,
|
||
currentValue
|
||
);
|
||
}
|
||
} else if (currentType == ARRAYTYPE) {
|
||
if (preType != ARRAYTYPE) {
|
||
setResult(
|
||
result,
|
||
(path == "" ? "" : path + ".") + key,
|
||
currentValue
|
||
);
|
||
} else {
|
||
if (currentValue.length < preValue.length) {
|
||
setResult(
|
||
result,
|
||
(path == "" ? "" : path + ".") + key,
|
||
currentValue
|
||
);
|
||
} else {
|
||
currentValue.forEach((item, index2) => {
|
||
_diff(
|
||
item,
|
||
preValue[index2],
|
||
(path == "" ? "" : path + ".") + key + "[" + index2 + "]",
|
||
result
|
||
);
|
||
});
|
||
}
|
||
}
|
||
} else if (currentType == OBJECTTYPE) {
|
||
if (preType != OBJECTTYPE || Object.keys(currentValue).length < Object.keys(preValue).length) {
|
||
setResult(
|
||
result,
|
||
(path == "" ? "" : path + ".") + key,
|
||
currentValue
|
||
);
|
||
} else {
|
||
for (let subKey in currentValue) {
|
||
_diff(
|
||
currentValue[subKey],
|
||
preValue[subKey],
|
||
(path == "" ? "" : path + ".") + key + "." + subKey,
|
||
result
|
||
);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
} else if (rootCurrentType == ARRAYTYPE) {
|
||
if (rootPreType != ARRAYTYPE) {
|
||
setResult(result, path, current);
|
||
} else {
|
||
if (current.length < pre.length) {
|
||
setResult(result, path, current);
|
||
} else {
|
||
current.forEach((item, index2) => {
|
||
_diff(item, pre[index2], path + "[" + index2 + "]", result);
|
||
});
|
||
}
|
||
}
|
||
} else {
|
||
setResult(result, path, current);
|
||
}
|
||
}
|
||
function setResult(result, k, v) {
|
||
result[k] = v;
|
||
}
|
||
function hasComponentEffect(instance) {
|
||
return queue$1.includes(instance.update);
|
||
}
|
||
function flushCallbacks(instance) {
|
||
const ctx = instance.ctx;
|
||
const callbacks = ctx.__next_tick_callbacks;
|
||
if (callbacks && callbacks.length) {
|
||
const copies = callbacks.slice(0);
|
||
callbacks.length = 0;
|
||
for (let i = 0; i < copies.length; i++) {
|
||
copies[i]();
|
||
}
|
||
}
|
||
}
|
||
function nextTick(instance, fn) {
|
||
const ctx = instance.ctx;
|
||
if (!ctx.__next_tick_pending && !hasComponentEffect(instance)) {
|
||
return nextTick$1(fn && fn.bind(instance.proxy));
|
||
}
|
||
let _resolve;
|
||
if (!ctx.__next_tick_callbacks) {
|
||
ctx.__next_tick_callbacks = [];
|
||
}
|
||
ctx.__next_tick_callbacks.push(() => {
|
||
if (fn) {
|
||
callWithErrorHandling(
|
||
fn.bind(instance.proxy),
|
||
instance,
|
||
14
|
||
);
|
||
} else if (_resolve) {
|
||
_resolve(instance.proxy);
|
||
}
|
||
});
|
||
return new Promise((resolve2) => {
|
||
_resolve = resolve2;
|
||
});
|
||
}
|
||
function clone$1(src, seen) {
|
||
src = unwrapper(src);
|
||
const type2 = typeof src;
|
||
if (type2 === "object" && src !== null) {
|
||
let copy = seen.get(src);
|
||
if (typeof copy !== "undefined") {
|
||
return copy;
|
||
}
|
||
if (isArray$1(src)) {
|
||
const len = src.length;
|
||
copy = new Array(len);
|
||
seen.set(src, copy);
|
||
for (let i = 0; i < len; i++) {
|
||
copy[i] = clone$1(src[i], seen);
|
||
}
|
||
} else {
|
||
copy = {};
|
||
seen.set(src, copy);
|
||
for (const name in src) {
|
||
if (hasOwn$1(src, name)) {
|
||
copy[name] = clone$1(src[name], seen);
|
||
}
|
||
}
|
||
}
|
||
return copy;
|
||
}
|
||
if (type2 !== "symbol") {
|
||
return src;
|
||
}
|
||
}
|
||
function deepCopy(src) {
|
||
return clone$1(src, typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : /* @__PURE__ */ new Map());
|
||
}
|
||
function getMPInstanceData(instance, keys) {
|
||
const data = instance.data;
|
||
const ret = /* @__PURE__ */ Object.create(null);
|
||
keys.forEach((key) => {
|
||
ret[key] = data[key];
|
||
});
|
||
return ret;
|
||
}
|
||
function patch(instance, data, oldData) {
|
||
if (!data) {
|
||
return;
|
||
}
|
||
data = deepCopy(data);
|
||
data.$eS = instance.$eS || {};
|
||
data.$eA = instance.$eA || {};
|
||
const ctx = instance.ctx;
|
||
const mpType = ctx.mpType;
|
||
if (mpType === "page" || mpType === "component") {
|
||
data.r0 = 1;
|
||
const mpInstance = ctx.$scope;
|
||
const keys = Object.keys(data);
|
||
const diffData = diff(data, oldData || getMPInstanceData(mpInstance, keys));
|
||
if (Object.keys(diffData).length) {
|
||
ctx.__next_tick_pending = true;
|
||
mpInstance.setData(diffData, () => {
|
||
ctx.__next_tick_pending = false;
|
||
flushCallbacks(instance);
|
||
});
|
||
flushPreFlushCbs();
|
||
} else {
|
||
flushCallbacks(instance);
|
||
}
|
||
}
|
||
}
|
||
function initAppConfig(appConfig) {
|
||
appConfig.globalProperties.$nextTick = function $nextTick(fn) {
|
||
return nextTick(this.$, fn);
|
||
};
|
||
}
|
||
function onApplyOptions(options, instance, publicThis) {
|
||
instance.appContext.config.globalProperties.$applyOptions(
|
||
options,
|
||
instance,
|
||
publicThis
|
||
);
|
||
const computedOptions = options.computed;
|
||
if (computedOptions) {
|
||
const keys = Object.keys(computedOptions);
|
||
if (keys.length) {
|
||
const ctx = instance.ctx;
|
||
if (!ctx.$computedKeys) {
|
||
ctx.$computedKeys = [];
|
||
}
|
||
ctx.$computedKeys.push(...keys);
|
||
}
|
||
}
|
||
delete instance.ctx.$onApplyOptions;
|
||
}
|
||
function setRef$1(instance, isUnmount = false) {
|
||
const {
|
||
setupState,
|
||
$templateRefs,
|
||
$templateUniElementRefs,
|
||
ctx: { $scope, $mpPlatform }
|
||
} = instance;
|
||
if ($mpPlatform === "mp-alipay") {
|
||
return;
|
||
}
|
||
if (!$scope || !$templateRefs && !$templateUniElementRefs) {
|
||
return;
|
||
}
|
||
if (isUnmount) {
|
||
$templateRefs && $templateRefs.forEach(
|
||
(templateRef) => setTemplateRef(templateRef, null, setupState)
|
||
);
|
||
$templateUniElementRefs && $templateUniElementRefs.forEach(
|
||
(templateRef) => setTemplateRef(templateRef, null, setupState)
|
||
);
|
||
return;
|
||
}
|
||
const check = $mpPlatform === "mp-baidu" || $mpPlatform === "mp-toutiao";
|
||
const doSetByRefs = (refs) => {
|
||
if (refs.length === 0) {
|
||
return [];
|
||
}
|
||
const mpComponents = (
|
||
// 字节小程序 selectAllComponents 可能返回 null
|
||
// https://github.com/dcloudio/uni-app/issues/3954
|
||
($scope.selectAllComponents(".r") || []).concat(
|
||
$scope.selectAllComponents(".r-i-f") || []
|
||
)
|
||
);
|
||
return refs.filter((templateRef) => {
|
||
const refValue = findComponentPublicInstance(mpComponents, templateRef.i);
|
||
if (check && refValue === null) {
|
||
return true;
|
||
}
|
||
setTemplateRef(templateRef, refValue, setupState);
|
||
return false;
|
||
});
|
||
};
|
||
const doSet = () => {
|
||
if ($templateRefs) {
|
||
const refs = doSetByRefs($templateRefs);
|
||
if (refs.length && instance.proxy && instance.proxy.$scope) {
|
||
instance.proxy.$scope.setData({ r1: 1 }, () => {
|
||
doSetByRefs(refs);
|
||
});
|
||
}
|
||
}
|
||
};
|
||
if ($templateUniElementRefs && $templateUniElementRefs.length) {
|
||
nextTick(instance, () => {
|
||
$templateUniElementRefs.forEach((templateRef) => {
|
||
if (isArray$1(templateRef.v)) {
|
||
templateRef.v.forEach((v) => {
|
||
setTemplateRef(templateRef, v, setupState);
|
||
});
|
||
} else {
|
||
setTemplateRef(templateRef, templateRef.v, setupState);
|
||
}
|
||
});
|
||
});
|
||
}
|
||
if ($scope._$setRef) {
|
||
$scope._$setRef(doSet);
|
||
} else {
|
||
nextTick(instance, doSet);
|
||
}
|
||
}
|
||
function toSkip(value2) {
|
||
if (isObject$2(value2)) {
|
||
markRaw(value2);
|
||
}
|
||
return value2;
|
||
}
|
||
function findComponentPublicInstance(mpComponents, id) {
|
||
const mpInstance = mpComponents.find(
|
||
(com) => com && (com.properties || com.props).uI === id
|
||
);
|
||
if (mpInstance) {
|
||
const vm = mpInstance.$vm;
|
||
if (vm) {
|
||
return getExposeProxy(vm.$) || vm;
|
||
}
|
||
return toSkip(mpInstance);
|
||
}
|
||
return null;
|
||
}
|
||
function setTemplateRef({ r: r2, f: f2 }, refValue, setupState) {
|
||
if (isFunction(r2)) {
|
||
r2(refValue, {});
|
||
} else {
|
||
const _isString = isString(r2);
|
||
const _isRef = isRef(r2);
|
||
if (_isString || _isRef) {
|
||
if (f2) {
|
||
if (!_isRef) {
|
||
return;
|
||
}
|
||
if (!isArray$1(r2.value)) {
|
||
r2.value = [];
|
||
}
|
||
const existing = r2.value;
|
||
if (existing.indexOf(refValue) === -1) {
|
||
existing.push(refValue);
|
||
if (!refValue) {
|
||
return;
|
||
}
|
||
if (refValue.$) {
|
||
onBeforeUnmount(() => remove(existing, refValue), refValue.$);
|
||
}
|
||
}
|
||
} else if (_isString) {
|
||
if (hasOwn$1(setupState, r2)) {
|
||
setupState[r2] = refValue;
|
||
}
|
||
} else if (isRef(r2)) {
|
||
r2.value = refValue;
|
||
} else {
|
||
warnRef(r2);
|
||
}
|
||
} else {
|
||
warnRef(r2);
|
||
}
|
||
}
|
||
}
|
||
function warnRef(ref2) {
|
||
warn("Invalid template ref type:", ref2, `(${typeof ref2})`);
|
||
}
|
||
const queuePostRenderEffect = queuePostFlushCb;
|
||
function mountComponent(initialVNode, options) {
|
||
const instance = initialVNode.component = createComponentInstance(initialVNode, options.parentComponent, null);
|
||
instance.renderer = options.mpType ? options.mpType : "component";
|
||
{
|
||
instance.ctx.$onApplyOptions = onApplyOptions;
|
||
instance.ctx.$children = [];
|
||
}
|
||
if (options.mpType === "app") {
|
||
instance.render = NOOP;
|
||
}
|
||
if (options.onBeforeSetup) {
|
||
options.onBeforeSetup(instance, options);
|
||
}
|
||
{
|
||
pushWarningContext(initialVNode);
|
||
startMeasure(instance, `mount`);
|
||
}
|
||
{
|
||
startMeasure(instance, `init`);
|
||
}
|
||
setupComponent(instance);
|
||
{
|
||
endMeasure(instance, `init`);
|
||
}
|
||
{
|
||
if (options.parentComponent && instance.proxy) {
|
||
options.parentComponent.ctx.$children.push(getExposeProxy(instance) || instance.proxy);
|
||
}
|
||
}
|
||
setupRenderEffect(instance);
|
||
{
|
||
popWarningContext();
|
||
endMeasure(instance, `mount`);
|
||
}
|
||
return instance.proxy;
|
||
}
|
||
const getFunctionalFallthrough = (attrs) => {
|
||
let res;
|
||
for (const key in attrs) {
|
||
if (key === "class" || key === "style" || isOn(key)) {
|
||
(res || (res = {}))[key] = attrs[key];
|
||
}
|
||
}
|
||
return res;
|
||
};
|
||
function renderComponentRoot(instance) {
|
||
const {
|
||
type: Component2,
|
||
vnode,
|
||
proxy,
|
||
withProxy,
|
||
props: props2,
|
||
propsOptions: [propsOptions],
|
||
slots,
|
||
attrs,
|
||
emit: emit2,
|
||
render,
|
||
renderCache,
|
||
data,
|
||
setupState,
|
||
ctx,
|
||
uid: uid2,
|
||
appContext: {
|
||
app: {
|
||
config: {
|
||
globalProperties: { pruneComponentPropsCache: pruneComponentPropsCache2 }
|
||
}
|
||
}
|
||
},
|
||
inheritAttrs
|
||
} = instance;
|
||
instance.$uniElementIds = /* @__PURE__ */ new Map();
|
||
instance.$templateRefs = [];
|
||
instance.$templateUniElementRefs = [];
|
||
instance.$templateUniElementStyles = {};
|
||
instance.$ei = 0;
|
||
pruneComponentPropsCache2(uid2);
|
||
instance.__counter = instance.__counter === 0 ? 1 : 0;
|
||
let result;
|
||
const prev = setCurrentRenderingInstance(instance);
|
||
try {
|
||
if (vnode.shapeFlag & 4) {
|
||
fallthroughAttrs(inheritAttrs, props2, propsOptions, attrs);
|
||
const proxyToUse = withProxy || proxy;
|
||
result = render.call(
|
||
proxyToUse,
|
||
proxyToUse,
|
||
renderCache,
|
||
props2,
|
||
setupState,
|
||
data,
|
||
ctx
|
||
);
|
||
} else {
|
||
fallthroughAttrs(
|
||
inheritAttrs,
|
||
props2,
|
||
propsOptions,
|
||
Component2.props ? attrs : getFunctionalFallthrough(attrs)
|
||
);
|
||
const render2 = Component2;
|
||
result = render2.length > 1 ? render2(props2, { attrs, slots, emit: emit2 }) : render2(
|
||
props2,
|
||
null
|
||
/* we know it doesn't need it */
|
||
);
|
||
}
|
||
} catch (err) {
|
||
handleError(err, instance, 1);
|
||
result = false;
|
||
}
|
||
setRef$1(instance);
|
||
setCurrentRenderingInstance(prev);
|
||
return result;
|
||
}
|
||
function fallthroughAttrs(inheritAttrs, props2, propsOptions, fallthroughAttrs2) {
|
||
if (props2 && fallthroughAttrs2 && inheritAttrs !== false) {
|
||
const keys = Object.keys(fallthroughAttrs2).filter(
|
||
(key) => key !== "class" && key !== "style"
|
||
);
|
||
if (!keys.length) {
|
||
return;
|
||
}
|
||
if (propsOptions && keys.some(isModelListener)) {
|
||
keys.forEach((key) => {
|
||
if (!isModelListener(key) || !(key.slice(9) in propsOptions)) {
|
||
props2[key] = fallthroughAttrs2[key];
|
||
}
|
||
});
|
||
} else {
|
||
keys.forEach((key) => props2[key] = fallthroughAttrs2[key]);
|
||
}
|
||
}
|
||
}
|
||
const updateComponentPreRender = (instance) => {
|
||
pauseTracking();
|
||
flushPreFlushCbs();
|
||
resetTracking();
|
||
};
|
||
function componentUpdateScopedSlotsFn() {
|
||
const scopedSlotsData = this.$scopedSlotsData;
|
||
if (!scopedSlotsData || scopedSlotsData.length === 0) {
|
||
return;
|
||
}
|
||
const mpInstance = this.ctx.$scope;
|
||
const oldData = mpInstance.data;
|
||
const diffData = /* @__PURE__ */ Object.create(null);
|
||
scopedSlotsData.forEach(({ path, index: index2, data }) => {
|
||
const oldScopedSlotData = getValueByDataPath(oldData, path);
|
||
const diffPath = isString(index2) ? `${path}.${index2}` : `${path}[${index2}]`;
|
||
if (typeof oldScopedSlotData === "undefined" || typeof oldScopedSlotData[index2] === "undefined") {
|
||
diffData[diffPath] = data;
|
||
} else {
|
||
const diffScopedSlotData = diff(
|
||
data,
|
||
oldScopedSlotData[index2]
|
||
);
|
||
Object.keys(diffScopedSlotData).forEach((name) => {
|
||
diffData[diffPath + "." + name] = diffScopedSlotData[name];
|
||
});
|
||
}
|
||
});
|
||
scopedSlotsData.length = 0;
|
||
if (Object.keys(diffData).length) {
|
||
mpInstance.setData(diffData);
|
||
}
|
||
}
|
||
function toggleRecurse({ effect: effect2, update }, allowed) {
|
||
effect2.allowRecurse = update.allowRecurse = allowed;
|
||
}
|
||
function setupRenderEffect(instance) {
|
||
const updateScopedSlots = componentUpdateScopedSlotsFn.bind(
|
||
instance
|
||
);
|
||
instance.$updateScopedSlots = () => nextTick$1(() => queueJob(updateScopedSlots));
|
||
const componentUpdateFn = () => {
|
||
if (!instance.isMounted) {
|
||
onBeforeUnmount(() => {
|
||
setRef$1(instance, true);
|
||
}, instance);
|
||
{
|
||
startMeasure(instance, `patch`);
|
||
}
|
||
patch(instance, renderComponentRoot(instance));
|
||
{
|
||
endMeasure(instance, `patch`);
|
||
}
|
||
{
|
||
devtoolsComponentAdded(instance);
|
||
}
|
||
} else {
|
||
const { next, bu, u } = instance;
|
||
{
|
||
pushWarningContext(next || instance.vnode);
|
||
}
|
||
toggleRecurse(instance, false);
|
||
updateComponentPreRender();
|
||
if (bu) {
|
||
invokeArrayFns$1(bu);
|
||
}
|
||
toggleRecurse(instance, true);
|
||
{
|
||
startMeasure(instance, `patch`);
|
||
}
|
||
patch(instance, renderComponentRoot(instance));
|
||
{
|
||
endMeasure(instance, `patch`);
|
||
}
|
||
if (u) {
|
||
queuePostRenderEffect(u);
|
||
}
|
||
{
|
||
devtoolsComponentUpdated(instance);
|
||
}
|
||
{
|
||
popWarningContext();
|
||
}
|
||
}
|
||
};
|
||
const effect2 = instance.effect = new ReactiveEffect(
|
||
componentUpdateFn,
|
||
NOOP,
|
||
() => queueJob(update),
|
||
instance.scope
|
||
// track it in component's effect scope
|
||
);
|
||
const update = instance.update = () => {
|
||
if (effect2.dirty) {
|
||
effect2.run();
|
||
}
|
||
};
|
||
update.id = instance.uid;
|
||
toggleRecurse(instance, true);
|
||
{
|
||
effect2.onTrack = instance.rtc ? (e2) => invokeArrayFns$1(instance.rtc, e2) : void 0;
|
||
effect2.onTrigger = instance.rtg ? (e2) => invokeArrayFns$1(instance.rtg, e2) : void 0;
|
||
update.ownerInstance = instance;
|
||
}
|
||
{
|
||
update();
|
||
}
|
||
}
|
||
function unmountComponent(instance) {
|
||
const { bum, scope, update, um } = instance;
|
||
if (bum) {
|
||
invokeArrayFns$1(bum);
|
||
}
|
||
{
|
||
const parentInstance = instance.parent;
|
||
if (parentInstance) {
|
||
const $children = parentInstance.ctx.$children;
|
||
const target = getExposeProxy(instance) || instance.proxy;
|
||
const index2 = $children.indexOf(target);
|
||
if (index2 > -1) {
|
||
$children.splice(index2, 1);
|
||
}
|
||
}
|
||
}
|
||
scope.stop();
|
||
if (update) {
|
||
update.active = false;
|
||
}
|
||
if (um) {
|
||
queuePostRenderEffect(um);
|
||
}
|
||
queuePostRenderEffect(() => {
|
||
instance.isUnmounted = true;
|
||
});
|
||
{
|
||
devtoolsComponentRemoved(instance);
|
||
}
|
||
}
|
||
const oldCreateApp = createAppAPI();
|
||
function getTarget() {
|
||
if (typeof window !== "undefined") {
|
||
return window;
|
||
}
|
||
if (typeof globalThis !== "undefined") {
|
||
return globalThis;
|
||
}
|
||
if (typeof global !== "undefined") {
|
||
return global;
|
||
}
|
||
if (typeof my !== "undefined") {
|
||
return my;
|
||
}
|
||
}
|
||
function createVueApp(rootComponent, rootProps = null) {
|
||
const target = getTarget();
|
||
target.__VUE__ = true;
|
||
{
|
||
setDevtoolsHook(target.__VUE_DEVTOOLS_GLOBAL_HOOK__, target);
|
||
}
|
||
const app = oldCreateApp(rootComponent, rootProps);
|
||
const appContext = app._context;
|
||
initAppConfig(appContext.config);
|
||
const createVNode2 = (initialVNode) => {
|
||
initialVNode.appContext = appContext;
|
||
initialVNode.shapeFlag = 6;
|
||
return initialVNode;
|
||
};
|
||
const createComponent2 = function createComponent22(initialVNode, options) {
|
||
return mountComponent(createVNode2(initialVNode), options);
|
||
};
|
||
const destroyComponent = function destroyComponent2(component) {
|
||
return component && unmountComponent(component.$);
|
||
};
|
||
app.mount = function mount() {
|
||
rootComponent.render = NOOP;
|
||
const instance = mountComponent(
|
||
createVNode2({ type: rootComponent }),
|
||
{
|
||
mpType: "app",
|
||
mpInstance: null,
|
||
parentComponent: null,
|
||
slots: [],
|
||
props: null
|
||
}
|
||
);
|
||
app._instance = instance.$;
|
||
{
|
||
devtoolsInitApp(app, version$1);
|
||
}
|
||
instance.$app = app;
|
||
instance.$createComponent = createComponent2;
|
||
instance.$destroyComponent = destroyComponent;
|
||
appContext.$appInstance = instance;
|
||
return instance;
|
||
};
|
||
app.unmount = function unmount() {
|
||
warn(`Cannot unmount an app.`);
|
||
};
|
||
return app;
|
||
}
|
||
function injectLifecycleHook(name, hook, publicThis, instance) {
|
||
if (isFunction(hook)) {
|
||
injectHook(name, hook.bind(publicThis), instance);
|
||
}
|
||
}
|
||
function initHooks$1(options, instance, publicThis) {
|
||
const mpType = options.mpType || publicThis.$mpType;
|
||
if (!mpType || mpType === "component" || // instance.renderer 标识页面是否作为组件渲染
|
||
mpType === "page" && instance.renderer === "component") {
|
||
return;
|
||
}
|
||
Object.keys(options).forEach((name) => {
|
||
if (isUniLifecycleHook(name, options[name], false)) {
|
||
const hooks = options[name];
|
||
if (isArray$1(hooks)) {
|
||
hooks.forEach((hook) => injectLifecycleHook(name, hook, publicThis, instance));
|
||
} else {
|
||
injectLifecycleHook(name, hooks, publicThis, instance);
|
||
}
|
||
}
|
||
});
|
||
}
|
||
function applyOptions$2(options, instance, publicThis) {
|
||
initHooks$1(options, instance, publicThis);
|
||
}
|
||
function set(target, key, val) {
|
||
return target[key] = val;
|
||
}
|
||
function $callMethod(method3, ...args) {
|
||
const fn = this[method3];
|
||
if (fn) {
|
||
return fn(...args);
|
||
}
|
||
console.error(`method ${method3} not found`);
|
||
return null;
|
||
}
|
||
function createErrorHandler(app) {
|
||
const userErrorHandler = app.config.errorHandler;
|
||
return function errorHandler(err, instance, info) {
|
||
if (userErrorHandler) {
|
||
userErrorHandler(err, instance, info);
|
||
}
|
||
const appInstance = app._instance;
|
||
if (!appInstance || !appInstance.proxy) {
|
||
throw err;
|
||
}
|
||
if (appInstance[ON_ERROR]) {
|
||
{
|
||
appInstance.proxy.$callHook(ON_ERROR, err);
|
||
}
|
||
} else {
|
||
logError(err, info, instance ? instance.$.vnode : null, false);
|
||
}
|
||
};
|
||
}
|
||
function mergeAsArray(to, from) {
|
||
return to ? [...new Set([].concat(to, from))] : from;
|
||
}
|
||
function initOptionMergeStrategies(optionMergeStrategies) {
|
||
UniLifecycleHooks.forEach((name) => {
|
||
optionMergeStrategies[name] = mergeAsArray;
|
||
});
|
||
}
|
||
let realAtob;
|
||
const b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
||
const b64re = /^(?:[A-Za-z\d+/]{4})*?(?:[A-Za-z\d+/]{2}(?:==)?|[A-Za-z\d+/]{3}=?)?$/;
|
||
if (typeof atob !== "function") {
|
||
realAtob = function(str) {
|
||
str = String(str).replace(/[\t\n\f\r ]+/g, "");
|
||
if (!b64re.test(str)) {
|
||
throw new Error("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.");
|
||
}
|
||
str += "==".slice(2 - (str.length & 3));
|
||
var bitmap;
|
||
var result = "";
|
||
var r1;
|
||
var r2;
|
||
var i = 0;
|
||
for (; i < str.length; ) {
|
||
bitmap = b64.indexOf(str.charAt(i++)) << 18 | b64.indexOf(str.charAt(i++)) << 12 | (r1 = b64.indexOf(str.charAt(i++))) << 6 | (r2 = b64.indexOf(str.charAt(i++)));
|
||
result += r1 === 64 ? String.fromCharCode(bitmap >> 16 & 255) : r2 === 64 ? String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255) : String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255, bitmap & 255);
|
||
}
|
||
return result;
|
||
};
|
||
} else {
|
||
realAtob = atob;
|
||
}
|
||
function b64DecodeUnicode(str) {
|
||
return decodeURIComponent(realAtob(str).split("").map(function(c2) {
|
||
return "%" + ("00" + c2.charCodeAt(0).toString(16)).slice(-2);
|
||
}).join(""));
|
||
}
|
||
function getCurrentUserInfo() {
|
||
const token = index$1.getStorageSync("uni_id_token") || "";
|
||
const tokenArr = token.split(".");
|
||
if (!token || tokenArr.length !== 3) {
|
||
return {
|
||
uid: null,
|
||
role: [],
|
||
permission: [],
|
||
tokenExpired: 0
|
||
};
|
||
}
|
||
let userInfo;
|
||
try {
|
||
userInfo = JSON.parse(b64DecodeUnicode(tokenArr[1]));
|
||
} catch (error2) {
|
||
throw new Error("获取当前用户信息出错,详细错误信息为:" + error2.message);
|
||
}
|
||
userInfo.tokenExpired = userInfo.exp * 1e3;
|
||
delete userInfo.exp;
|
||
delete userInfo.iat;
|
||
return userInfo;
|
||
}
|
||
function uniIdMixin(globalProperties) {
|
||
globalProperties.uniIDHasRole = function(roleId) {
|
||
const { role } = getCurrentUserInfo();
|
||
return role.indexOf(roleId) > -1;
|
||
};
|
||
globalProperties.uniIDHasPermission = function(permissionId) {
|
||
const { permission } = getCurrentUserInfo();
|
||
return this.uniIDHasRole("admin") || permission.indexOf(permissionId) > -1;
|
||
};
|
||
globalProperties.uniIDTokenValid = function() {
|
||
const { tokenExpired } = getCurrentUserInfo();
|
||
return tokenExpired > Date.now();
|
||
};
|
||
}
|
||
function initApp(app) {
|
||
const appConfig = app.config;
|
||
appConfig.errorHandler = invokeCreateErrorHandler(app, createErrorHandler);
|
||
initOptionMergeStrategies(appConfig.optionMergeStrategies);
|
||
const globalProperties = appConfig.globalProperties;
|
||
{
|
||
uniIdMixin(globalProperties);
|
||
}
|
||
{
|
||
globalProperties.$set = set;
|
||
globalProperties.$applyOptions = applyOptions$2;
|
||
globalProperties.$callMethod = $callMethod;
|
||
}
|
||
{
|
||
index$1.invokeCreateVueAppHook(app);
|
||
}
|
||
}
|
||
const propsCaches = /* @__PURE__ */ Object.create(null);
|
||
function renderProps(props2) {
|
||
const { uid: uid2, __counter } = getCurrentInstance();
|
||
const propsId = (propsCaches[uid2] || (propsCaches[uid2] = [])).push(guardReactiveProps(props2)) - 1;
|
||
return uid2 + "," + propsId + "," + __counter;
|
||
}
|
||
function pruneComponentPropsCache(uid2) {
|
||
delete propsCaches[uid2];
|
||
}
|
||
function findComponentPropsData(up) {
|
||
if (!up) {
|
||
return;
|
||
}
|
||
const [uid2, propsId] = up.split(",");
|
||
if (!propsCaches[uid2]) {
|
||
return;
|
||
}
|
||
return propsCaches[uid2][parseInt(propsId)];
|
||
}
|
||
var plugin = {
|
||
install(app) {
|
||
initApp(app);
|
||
app.config.globalProperties.pruneComponentPropsCache = pruneComponentPropsCache;
|
||
const oldMount = app.mount;
|
||
app.mount = function mount(rootContainer) {
|
||
const instance = oldMount.call(app, rootContainer);
|
||
const createApp2 = getCreateApp();
|
||
if (createApp2) {
|
||
createApp2(instance);
|
||
} else {
|
||
if (typeof createMiniProgramApp !== "undefined") {
|
||
createMiniProgramApp(instance);
|
||
}
|
||
}
|
||
return instance;
|
||
};
|
||
}
|
||
};
|
||
function getCreateApp() {
|
||
const method3 = "createApp";
|
||
if (typeof global !== "undefined" && typeof global[method3] !== "undefined") {
|
||
return global[method3];
|
||
} else if (typeof my !== "undefined") {
|
||
return my[method3];
|
||
}
|
||
}
|
||
function stringifyStyle(value2) {
|
||
if (isString(value2)) {
|
||
return value2;
|
||
}
|
||
return stringify(normalizeStyle(value2));
|
||
}
|
||
function stringify(styles) {
|
||
let ret = "";
|
||
if (!styles || isString(styles)) {
|
||
return ret;
|
||
}
|
||
for (const key in styles) {
|
||
ret += `${key.startsWith(`--`) ? key : hyphenate(key)}:${styles[key]};`;
|
||
}
|
||
return ret;
|
||
}
|
||
function vOn(value2, key) {
|
||
const instance = getCurrentInstance();
|
||
const ctx = instance.ctx;
|
||
const extraKey = typeof key !== "undefined" && (ctx.$mpPlatform === "mp-weixin" || ctx.$mpPlatform === "mp-qq" || ctx.$mpPlatform === "mp-xhs") && (isString(key) || typeof key === "number") ? "_" + key : "";
|
||
const name = "e" + instance.$ei++ + extraKey;
|
||
const mpInstance = ctx.$scope;
|
||
if (!value2) {
|
||
delete mpInstance[name];
|
||
return name;
|
||
}
|
||
const existingInvoker = mpInstance[name];
|
||
if (existingInvoker) {
|
||
existingInvoker.value = value2;
|
||
} else {
|
||
mpInstance[name] = createInvoker(value2, instance);
|
||
}
|
||
return name;
|
||
}
|
||
function createInvoker(initialValue, instance) {
|
||
const invoker = (e2) => {
|
||
patchMPEvent(e2);
|
||
let args = [e2];
|
||
if (instance && instance.ctx.$getTriggerEventDetail) {
|
||
if (typeof e2.detail === "number") {
|
||
e2.detail = instance.ctx.$getTriggerEventDetail(e2.detail);
|
||
}
|
||
}
|
||
if (e2.detail && e2.detail.__args__) {
|
||
args = e2.detail.__args__;
|
||
}
|
||
const eventValue = invoker.value;
|
||
const invoke = () => callWithAsyncErrorHandling(patchStopImmediatePropagation(e2, eventValue), instance, 5, args);
|
||
const eventTarget = e2.target;
|
||
const eventSync = eventTarget ? eventTarget.dataset ? String(eventTarget.dataset.eventsync) === "true" : false : false;
|
||
if (bubbles.includes(e2.type) && !eventSync) {
|
||
setTimeout(invoke);
|
||
} else {
|
||
const res = invoke();
|
||
if (e2.type === "input" && (isArray$1(res) || isPromise(res))) {
|
||
return;
|
||
}
|
||
return res;
|
||
}
|
||
};
|
||
invoker.value = initialValue;
|
||
return invoker;
|
||
}
|
||
const bubbles = [
|
||
// touch事件暂不做延迟,否则在 Android 上会影响性能,比如一些拖拽跟手手势等
|
||
// 'touchstart',
|
||
// 'touchmove',
|
||
// 'touchcancel',
|
||
// 'touchend',
|
||
"tap",
|
||
"longpress",
|
||
"longtap",
|
||
"transitionend",
|
||
"animationstart",
|
||
"animationiteration",
|
||
"animationend",
|
||
"touchforcechange"
|
||
];
|
||
function patchMPEvent(event, instance) {
|
||
if (event.type && event.target) {
|
||
event.preventDefault = NOOP;
|
||
event.stopPropagation = NOOP;
|
||
event.stopImmediatePropagation = NOOP;
|
||
if (!hasOwn$1(event, "detail")) {
|
||
event.detail = {};
|
||
}
|
||
if (hasOwn$1(event, "markerId")) {
|
||
event.detail = typeof event.detail === "object" ? event.detail : {};
|
||
event.detail.markerId = event.markerId;
|
||
}
|
||
if (isPlainObject$1(event.detail) && hasOwn$1(event.detail, "checked") && !hasOwn$1(event.detail, "value")) {
|
||
event.detail.value = event.detail.checked;
|
||
}
|
||
if (isPlainObject$1(event.detail)) {
|
||
event.target = extend({}, event.target, event.detail);
|
||
}
|
||
}
|
||
}
|
||
function patchStopImmediatePropagation(e2, value2) {
|
||
if (isArray$1(value2)) {
|
||
const originalStop = e2.stopImmediatePropagation;
|
||
e2.stopImmediatePropagation = () => {
|
||
originalStop && originalStop.call(e2);
|
||
e2._stopped = true;
|
||
};
|
||
return value2.map((fn) => (e3) => !e3._stopped && fn(e3));
|
||
} else {
|
||
return value2;
|
||
}
|
||
}
|
||
function vFor(source, renderItem) {
|
||
let ret;
|
||
if (isArray$1(source) || isString(source)) {
|
||
ret = new Array(source.length);
|
||
for (let i = 0, l = source.length; i < l; i++) {
|
||
ret[i] = renderItem(source[i], i, i);
|
||
}
|
||
} else if (typeof source === "number") {
|
||
if (!Number.isInteger(source)) {
|
||
warn(`The v-for range expect an integer value but got ${source}.`);
|
||
return [];
|
||
}
|
||
ret = new Array(source);
|
||
for (let i = 0; i < source; i++) {
|
||
ret[i] = renderItem(i + 1, i, i);
|
||
}
|
||
} else if (isObject$2(source)) {
|
||
if (source[Symbol.iterator]) {
|
||
ret = Array.from(source, (item, i) => renderItem(item, i, i));
|
||
} else {
|
||
const keys = Object.keys(source);
|
||
ret = new Array(keys.length);
|
||
for (let i = 0, l = keys.length; i < l; i++) {
|
||
const key = keys[i];
|
||
ret[i] = renderItem(source[key], key, i);
|
||
}
|
||
}
|
||
} else {
|
||
ret = [];
|
||
}
|
||
return ret;
|
||
}
|
||
function renderSlot(name, props2 = {}, key) {
|
||
const instance = getCurrentInstance();
|
||
const { parent, isMounted, ctx: { $scope } } = instance;
|
||
const vueIds = ($scope.properties || $scope.props).uI;
|
||
if (!vueIds) {
|
||
return;
|
||
}
|
||
if (!parent && !isMounted) {
|
||
onMounted(() => {
|
||
renderSlot(name, props2, key);
|
||
}, instance);
|
||
return;
|
||
}
|
||
const invoker = findScopedSlotInvoker(vueIds, instance);
|
||
if (invoker) {
|
||
invoker(name, props2, key);
|
||
}
|
||
}
|
||
function findScopedSlotInvoker(vueId, instance) {
|
||
let parent = instance.parent;
|
||
while (parent) {
|
||
const invokers = parent.$ssi;
|
||
if (invokers && invokers[vueId]) {
|
||
return invokers[vueId];
|
||
}
|
||
parent = parent.parent;
|
||
}
|
||
}
|
||
function setRef(ref2, id, opts = {}) {
|
||
const { $templateRefs } = getCurrentInstance();
|
||
$templateRefs.push({ i: id, r: ref2, k: opts.k, f: opts.f });
|
||
}
|
||
const o = (value2, key) => vOn(value2, key);
|
||
const f = (source, renderItem) => vFor(source, renderItem);
|
||
const r = (name, props2, key) => renderSlot(name, props2, key);
|
||
const s = (value2) => stringifyStyle(value2);
|
||
const e = (target, ...sources) => extend(target, ...sources);
|
||
const n = (value2) => normalizeClass(value2);
|
||
const t = (val) => toDisplayString(val);
|
||
const p = (props2) => renderProps(props2);
|
||
const sr = (ref2, id, opts) => setRef(ref2, id, opts);
|
||
function createApp$1(rootComponent, rootProps = null) {
|
||
rootComponent && (rootComponent.mpType = "app");
|
||
return createVueApp(rootComponent, rootProps).use(plugin);
|
||
}
|
||
const createSSRApp = createApp$1;
|
||
function getLocaleLanguage$1() {
|
||
var _a;
|
||
let localeLanguage = "";
|
||
{
|
||
const appBaseInfo = ((_a = wx.getAppBaseInfo) === null || _a === void 0 ? void 0 : _a.call(wx)) || wx.getSystemInfoSync();
|
||
const language = appBaseInfo && appBaseInfo.language ? appBaseInfo.language : LOCALE_EN;
|
||
localeLanguage = normalizeLocale(language) || LOCALE_EN;
|
||
}
|
||
return localeLanguage;
|
||
}
|
||
function validateProtocolFail(name, msg) {
|
||
console.warn(`${name}: ${msg}`);
|
||
}
|
||
function validateProtocol(name, data, protocol, onFail) {
|
||
if (!onFail) {
|
||
onFail = validateProtocolFail;
|
||
}
|
||
for (const key in protocol) {
|
||
const errMsg = validateProp(key, data[key], protocol[key], !hasOwn$1(data, key));
|
||
if (isString(errMsg)) {
|
||
onFail(name, errMsg);
|
||
}
|
||
}
|
||
}
|
||
function validateProtocols(name, args, protocol, onFail) {
|
||
if (!protocol) {
|
||
return;
|
||
}
|
||
if (!isArray$1(protocol)) {
|
||
return validateProtocol(name, args[0] || /* @__PURE__ */ Object.create(null), protocol, onFail);
|
||
}
|
||
const len = protocol.length;
|
||
const argsLen = args.length;
|
||
for (let i = 0; i < len; i++) {
|
||
const opts = protocol[i];
|
||
const data = /* @__PURE__ */ Object.create(null);
|
||
if (argsLen > i) {
|
||
data[opts.name] = args[i];
|
||
}
|
||
validateProtocol(name, data, { [opts.name]: opts }, onFail);
|
||
}
|
||
}
|
||
function validateProp(name, value2, prop, isAbsent) {
|
||
if (!isPlainObject$1(prop)) {
|
||
prop = { type: prop };
|
||
}
|
||
const { type: type2, required: required2, validator } = prop;
|
||
if (required2 && isAbsent) {
|
||
return 'Missing required args: "' + name + '"';
|
||
}
|
||
if (value2 == null && !required2) {
|
||
return;
|
||
}
|
||
if (type2 != null) {
|
||
let isValid = false;
|
||
const types2 = isArray$1(type2) ? type2 : [type2];
|
||
const expectedTypes = [];
|
||
for (let i = 0; i < types2.length && !isValid; i++) {
|
||
const { valid, expectedType } = assertType(value2, types2[i]);
|
||
expectedTypes.push(expectedType || "");
|
||
isValid = valid;
|
||
}
|
||
if (!isValid) {
|
||
return getInvalidTypeMessage(name, value2, expectedTypes);
|
||
}
|
||
}
|
||
if (validator) {
|
||
return validator(value2);
|
||
}
|
||
}
|
||
const isSimpleType = /* @__PURE__ */ makeMap$1("String,Number,Boolean,Function,Symbol");
|
||
function assertType(value2, type2) {
|
||
let valid;
|
||
const expectedType = getType(type2);
|
||
if (isSimpleType(expectedType)) {
|
||
const t2 = typeof value2;
|
||
valid = t2 === expectedType.toLowerCase();
|
||
if (!valid && t2 === "object") {
|
||
valid = value2 instanceof type2;
|
||
}
|
||
} else if (expectedType === "Object") {
|
||
valid = isObject$2(value2);
|
||
} else if (expectedType === "Array") {
|
||
valid = isArray$1(value2);
|
||
} else {
|
||
{
|
||
valid = value2 instanceof type2;
|
||
}
|
||
}
|
||
return {
|
||
valid,
|
||
expectedType
|
||
};
|
||
}
|
||
function getInvalidTypeMessage(name, value2, expectedTypes) {
|
||
let message = `Invalid args: type check failed for args "${name}". Expected ${expectedTypes.map(capitalize).join(", ")}`;
|
||
const expectedType = expectedTypes[0];
|
||
const receivedType = toRawType(value2);
|
||
const expectedValue = styleValue(value2, expectedType);
|
||
const receivedValue = styleValue(value2, receivedType);
|
||
if (expectedTypes.length === 1 && isExplicable(expectedType) && !isBoolean(expectedType, receivedType)) {
|
||
message += ` with value ${expectedValue}`;
|
||
}
|
||
message += `, got ${receivedType} `;
|
||
if (isExplicable(receivedType)) {
|
||
message += `with value ${receivedValue}.`;
|
||
}
|
||
return message;
|
||
}
|
||
function getType(ctor) {
|
||
const match = ctor && ctor.toString().match(/^\s*function (\w+)/);
|
||
return match ? match[1] : "";
|
||
}
|
||
function styleValue(value2, type2) {
|
||
if (type2 === "String") {
|
||
return `"${value2}"`;
|
||
} else if (type2 === "Number") {
|
||
return `${Number(value2)}`;
|
||
} else {
|
||
return `${value2}`;
|
||
}
|
||
}
|
||
function isExplicable(type2) {
|
||
const explicitTypes = ["string", "number", "boolean"];
|
||
return explicitTypes.some((elem) => type2.toLowerCase() === elem);
|
||
}
|
||
function isBoolean(...args) {
|
||
return args.some((elem) => elem.toLowerCase() === "boolean");
|
||
}
|
||
function tryCatch(fn) {
|
||
return function() {
|
||
try {
|
||
return fn.apply(fn, arguments);
|
||
} catch (e2) {
|
||
console.error(e2);
|
||
}
|
||
};
|
||
}
|
||
let invokeCallbackId = 1;
|
||
const invokeCallbacks = {};
|
||
function addInvokeCallback(id, name, callback, keepAlive = false) {
|
||
invokeCallbacks[id] = {
|
||
name,
|
||
keepAlive,
|
||
callback
|
||
};
|
||
return id;
|
||
}
|
||
function invokeCallback(id, res, extras) {
|
||
if (typeof id === "number") {
|
||
const opts = invokeCallbacks[id];
|
||
if (opts) {
|
||
if (!opts.keepAlive) {
|
||
delete invokeCallbacks[id];
|
||
}
|
||
return opts.callback(res, extras);
|
||
}
|
||
}
|
||
return res;
|
||
}
|
||
const API_SUCCESS = "success";
|
||
const API_FAIL = "fail";
|
||
const API_COMPLETE = "complete";
|
||
function getApiCallbacks(args) {
|
||
const apiCallbacks = {};
|
||
for (const name in args) {
|
||
const fn = args[name];
|
||
if (isFunction(fn)) {
|
||
apiCallbacks[name] = tryCatch(fn);
|
||
delete args[name];
|
||
}
|
||
}
|
||
return apiCallbacks;
|
||
}
|
||
function normalizeErrMsg(errMsg, name) {
|
||
if (!errMsg || errMsg.indexOf(":fail") === -1) {
|
||
return name + ":ok";
|
||
}
|
||
return name + errMsg.substring(errMsg.indexOf(":fail"));
|
||
}
|
||
function createAsyncApiCallback(name, args = {}, { beforeAll, beforeSuccess } = {}) {
|
||
if (!isPlainObject$1(args)) {
|
||
args = {};
|
||
}
|
||
const { success, fail, complete } = getApiCallbacks(args);
|
||
const hasSuccess = isFunction(success);
|
||
const hasFail = isFunction(fail);
|
||
const hasComplete = isFunction(complete);
|
||
const callbackId = invokeCallbackId++;
|
||
addInvokeCallback(callbackId, name, (res) => {
|
||
res = res || {};
|
||
res.errMsg = normalizeErrMsg(res.errMsg, name);
|
||
isFunction(beforeAll) && beforeAll(res);
|
||
if (res.errMsg === name + ":ok") {
|
||
isFunction(beforeSuccess) && beforeSuccess(res, args);
|
||
hasSuccess && success(res);
|
||
} else {
|
||
hasFail && fail(res);
|
||
}
|
||
hasComplete && complete(res);
|
||
});
|
||
return callbackId;
|
||
}
|
||
const HOOK_SUCCESS = "success";
|
||
const HOOK_FAIL = "fail";
|
||
const HOOK_COMPLETE = "complete";
|
||
const globalInterceptors = {};
|
||
const scopedInterceptors = {};
|
||
function wrapperHook(hook, params) {
|
||
return function(data) {
|
||
return hook(data, params) || data;
|
||
};
|
||
}
|
||
function queue(hooks, data, params) {
|
||
let promise2 = false;
|
||
for (let i = 0; i < hooks.length; i++) {
|
||
const hook = hooks[i];
|
||
if (promise2) {
|
||
promise2 = Promise.resolve(wrapperHook(hook, params));
|
||
} else {
|
||
const res = hook(data, params);
|
||
if (isPromise(res)) {
|
||
promise2 = Promise.resolve(res);
|
||
}
|
||
if (res === false) {
|
||
return {
|
||
then() {
|
||
},
|
||
catch() {
|
||
}
|
||
};
|
||
}
|
||
}
|
||
}
|
||
return promise2 || {
|
||
then(callback) {
|
||
return callback(data);
|
||
},
|
||
catch() {
|
||
}
|
||
};
|
||
}
|
||
function wrapperOptions(interceptors2, options = {}) {
|
||
[HOOK_SUCCESS, HOOK_FAIL, HOOK_COMPLETE].forEach((name) => {
|
||
const hooks = interceptors2[name];
|
||
if (!isArray$1(hooks)) {
|
||
return;
|
||
}
|
||
const oldCallback = options[name];
|
||
options[name] = function callbackInterceptor(res) {
|
||
queue(hooks, res, options).then((res2) => {
|
||
return isFunction(oldCallback) && oldCallback(res2) || res2;
|
||
});
|
||
};
|
||
});
|
||
return options;
|
||
}
|
||
function wrapperReturnValue(method3, returnValue) {
|
||
const returnValueHooks = [];
|
||
if (isArray$1(globalInterceptors.returnValue)) {
|
||
returnValueHooks.push(...globalInterceptors.returnValue);
|
||
}
|
||
const interceptor = scopedInterceptors[method3];
|
||
if (interceptor && isArray$1(interceptor.returnValue)) {
|
||
returnValueHooks.push(...interceptor.returnValue);
|
||
}
|
||
returnValueHooks.forEach((hook) => {
|
||
returnValue = hook(returnValue) || returnValue;
|
||
});
|
||
return returnValue;
|
||
}
|
||
function getApiInterceptorHooks(method3) {
|
||
const interceptor = /* @__PURE__ */ Object.create(null);
|
||
Object.keys(globalInterceptors).forEach((hook) => {
|
||
if (hook !== "returnValue") {
|
||
interceptor[hook] = globalInterceptors[hook].slice();
|
||
}
|
||
});
|
||
const scopedInterceptor = scopedInterceptors[method3];
|
||
if (scopedInterceptor) {
|
||
Object.keys(scopedInterceptor).forEach((hook) => {
|
||
if (hook !== "returnValue") {
|
||
interceptor[hook] = (interceptor[hook] || []).concat(scopedInterceptor[hook]);
|
||
}
|
||
});
|
||
}
|
||
return interceptor;
|
||
}
|
||
function invokeApi(method3, api, options, params) {
|
||
const interceptor = getApiInterceptorHooks(method3);
|
||
if (interceptor && Object.keys(interceptor).length) {
|
||
if (isArray$1(interceptor.invoke)) {
|
||
const res = queue(interceptor.invoke, options);
|
||
return res.then((options2) => {
|
||
return api(wrapperOptions(getApiInterceptorHooks(method3), options2), ...params);
|
||
});
|
||
} else {
|
||
return api(wrapperOptions(interceptor, options), ...params);
|
||
}
|
||
}
|
||
return api(options, ...params);
|
||
}
|
||
function hasCallback(args) {
|
||
if (isPlainObject$1(args) && [API_SUCCESS, API_FAIL, API_COMPLETE].find((cb) => isFunction(args[cb]))) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
function handlePromise(promise2) {
|
||
return promise2;
|
||
}
|
||
function promisify$1(name, fn) {
|
||
return (args = {}, ...rest) => {
|
||
if (hasCallback(args)) {
|
||
return wrapperReturnValue(name, invokeApi(name, fn, extend({}, args), rest));
|
||
}
|
||
return wrapperReturnValue(name, handlePromise(new Promise((resolve2, reject) => {
|
||
invokeApi(name, fn, extend({}, args, { success: resolve2, fail: reject }), rest);
|
||
})));
|
||
};
|
||
}
|
||
function formatApiArgs(args, options) {
|
||
args[0];
|
||
{
|
||
return;
|
||
}
|
||
}
|
||
function invokeSuccess(id, name, res) {
|
||
const result = {
|
||
errMsg: name + ":ok"
|
||
};
|
||
return invokeCallback(id, extend(res || {}, result));
|
||
}
|
||
function invokeFail(id, name, errMsg, errRes = {}) {
|
||
const errMsgPrefix = name + ":fail";
|
||
let apiErrMsg = "";
|
||
if (!errMsg) {
|
||
apiErrMsg = errMsgPrefix;
|
||
} else if (errMsg.indexOf(errMsgPrefix) === 0) {
|
||
apiErrMsg = errMsg;
|
||
} else {
|
||
apiErrMsg = errMsgPrefix + " " + errMsg;
|
||
}
|
||
{
|
||
delete errRes.errCode;
|
||
}
|
||
let res = extend({ errMsg: apiErrMsg }, errRes);
|
||
return invokeCallback(id, res);
|
||
}
|
||
function beforeInvokeApi(name, args, protocol, options) {
|
||
{
|
||
validateProtocols(name, args, protocol);
|
||
}
|
||
const errMsg = formatApiArgs(args);
|
||
if (errMsg) {
|
||
return errMsg;
|
||
}
|
||
}
|
||
function parseErrMsg(errMsg) {
|
||
if (!errMsg || isString(errMsg)) {
|
||
return errMsg;
|
||
}
|
||
if (errMsg.stack) {
|
||
if (typeof globalThis === "undefined" || !globalThis.harmonyChannel) {
|
||
console.error(errMsg.message + "\n" + errMsg.stack);
|
||
}
|
||
return errMsg.message;
|
||
}
|
||
return errMsg;
|
||
}
|
||
function wrapperTaskApi(name, fn, protocol, options) {
|
||
return (args) => {
|
||
const id = createAsyncApiCallback(name, args, options);
|
||
const errMsg = beforeInvokeApi(name, [args], protocol);
|
||
if (errMsg) {
|
||
return invokeFail(id, name, errMsg);
|
||
}
|
||
return fn(args, {
|
||
resolve: (res) => invokeSuccess(id, name, res),
|
||
reject: (errMsg2, errRes) => invokeFail(id, name, parseErrMsg(errMsg2), errRes)
|
||
});
|
||
};
|
||
}
|
||
function wrapperSyncApi(name, fn, protocol, options) {
|
||
return (...args) => {
|
||
const errMsg = beforeInvokeApi(name, args, protocol);
|
||
if (errMsg) {
|
||
throw new Error(errMsg);
|
||
}
|
||
return fn.apply(null, args);
|
||
};
|
||
}
|
||
function wrapperAsyncApi(name, fn, protocol, options) {
|
||
return wrapperTaskApi(name, fn, protocol, options);
|
||
}
|
||
function defineSyncApi(name, fn, protocol, options) {
|
||
return wrapperSyncApi(name, fn, protocol);
|
||
}
|
||
function defineAsyncApi(name, fn, protocol, options) {
|
||
return promisify$1(name, wrapperAsyncApi(name, fn, protocol, options));
|
||
}
|
||
const API_UPX2PX = "upx2px";
|
||
const Upx2pxProtocol = [
|
||
{
|
||
name: "upx",
|
||
type: [Number, String],
|
||
required: true
|
||
}
|
||
];
|
||
const EPS = 1e-4;
|
||
const BASE_DEVICE_WIDTH = 750;
|
||
let isIOS = false;
|
||
let deviceWidth = 0;
|
||
let deviceDPR = 0;
|
||
function checkDeviceWidth() {
|
||
var _a, _b;
|
||
let windowWidth2, pixelRatio, platform2;
|
||
{
|
||
const windowInfo = ((_a = wx.getWindowInfo) === null || _a === void 0 ? void 0 : _a.call(wx)) || wx.getSystemInfoSync();
|
||
const deviceInfo = ((_b = wx.getDeviceInfo) === null || _b === void 0 ? void 0 : _b.call(wx)) || wx.getSystemInfoSync();
|
||
windowWidth2 = windowInfo.windowWidth;
|
||
pixelRatio = windowInfo.pixelRatio;
|
||
platform2 = deviceInfo.platform;
|
||
}
|
||
deviceWidth = windowWidth2;
|
||
deviceDPR = pixelRatio;
|
||
isIOS = platform2 === "ios";
|
||
}
|
||
const upx2px = defineSyncApi(API_UPX2PX, (number3, newDeviceWidth) => {
|
||
if (deviceWidth === 0) {
|
||
checkDeviceWidth();
|
||
}
|
||
number3 = Number(number3);
|
||
if (number3 === 0) {
|
||
return 0;
|
||
}
|
||
let width = newDeviceWidth || deviceWidth;
|
||
let result = number3 / BASE_DEVICE_WIDTH * width;
|
||
if (result < 0) {
|
||
result = -result;
|
||
}
|
||
result = Math.floor(result + EPS);
|
||
if (result === 0) {
|
||
if (deviceDPR === 1 || !isIOS) {
|
||
result = 1;
|
||
} else {
|
||
result = 0.5;
|
||
}
|
||
}
|
||
return number3 < 0 ? -result : result;
|
||
}, Upx2pxProtocol);
|
||
function __f__(type2, filename, ...args) {
|
||
if (filename) {
|
||
args.push(filename);
|
||
}
|
||
console[type2].apply(console, args);
|
||
}
|
||
const API_ADD_INTERCEPTOR = "addInterceptor";
|
||
const API_REMOVE_INTERCEPTOR = "removeInterceptor";
|
||
const AddInterceptorProtocol = [
|
||
{
|
||
name: "method",
|
||
type: [String, Object],
|
||
required: true
|
||
}
|
||
];
|
||
const RemoveInterceptorProtocol = AddInterceptorProtocol;
|
||
function mergeInterceptorHook(interceptors2, interceptor) {
|
||
Object.keys(interceptor).forEach((hook) => {
|
||
if (isFunction(interceptor[hook])) {
|
||
interceptors2[hook] = mergeHook(interceptors2[hook], interceptor[hook]);
|
||
}
|
||
});
|
||
}
|
||
function removeInterceptorHook(interceptors2, interceptor) {
|
||
if (!interceptors2 || !interceptor) {
|
||
return;
|
||
}
|
||
Object.keys(interceptor).forEach((name) => {
|
||
const hooks = interceptors2[name];
|
||
const hook = interceptor[name];
|
||
if (isArray$1(hooks) && isFunction(hook)) {
|
||
remove(hooks, hook);
|
||
}
|
||
});
|
||
}
|
||
function mergeHook(parentVal, childVal) {
|
||
const res = childVal ? parentVal ? parentVal.concat(childVal) : isArray$1(childVal) ? childVal : [childVal] : parentVal;
|
||
return res ? dedupeHooks(res) : res;
|
||
}
|
||
function dedupeHooks(hooks) {
|
||
const res = [];
|
||
for (let i = 0; i < hooks.length; i++) {
|
||
if (res.indexOf(hooks[i]) === -1) {
|
||
res.push(hooks[i]);
|
||
}
|
||
}
|
||
return res;
|
||
}
|
||
const addInterceptor = defineSyncApi(API_ADD_INTERCEPTOR, (method3, interceptor) => {
|
||
if (isString(method3) && isPlainObject$1(interceptor)) {
|
||
mergeInterceptorHook(scopedInterceptors[method3] || (scopedInterceptors[method3] = {}), interceptor);
|
||
} else if (isPlainObject$1(method3)) {
|
||
mergeInterceptorHook(globalInterceptors, method3);
|
||
}
|
||
}, AddInterceptorProtocol);
|
||
const removeInterceptor = defineSyncApi(API_REMOVE_INTERCEPTOR, (method3, interceptor) => {
|
||
if (isString(method3)) {
|
||
if (isPlainObject$1(interceptor)) {
|
||
removeInterceptorHook(scopedInterceptors[method3], interceptor);
|
||
} else {
|
||
delete scopedInterceptors[method3];
|
||
}
|
||
} else if (isPlainObject$1(method3)) {
|
||
removeInterceptorHook(globalInterceptors, method3);
|
||
}
|
||
}, RemoveInterceptorProtocol);
|
||
const interceptors = {};
|
||
const API_ON = "$on";
|
||
const OnProtocol = [
|
||
{
|
||
name: "event",
|
||
type: String,
|
||
required: true
|
||
},
|
||
{
|
||
name: "callback",
|
||
type: Function,
|
||
required: true
|
||
}
|
||
];
|
||
const API_ONCE = "$once";
|
||
const OnceProtocol = OnProtocol;
|
||
const API_OFF = "$off";
|
||
const OffProtocol = [
|
||
{
|
||
name: "event",
|
||
type: [String, Array]
|
||
},
|
||
{
|
||
name: "callback",
|
||
type: [Function, Number]
|
||
}
|
||
];
|
||
const API_EMIT = "$emit";
|
||
const EmitProtocol = [
|
||
{
|
||
name: "event",
|
||
type: String,
|
||
required: true
|
||
}
|
||
];
|
||
class EventBus {
|
||
constructor() {
|
||
this.$emitter = new E$1();
|
||
}
|
||
on(name, callback) {
|
||
return this.$emitter.on(name, callback);
|
||
}
|
||
once(name, callback) {
|
||
return this.$emitter.once(name, callback);
|
||
}
|
||
off(name, callback) {
|
||
if (!name) {
|
||
this.$emitter.e = {};
|
||
return;
|
||
}
|
||
this.$emitter.off(name, callback);
|
||
}
|
||
emit(name, ...args) {
|
||
this.$emitter.emit(name, ...args);
|
||
}
|
||
}
|
||
const eventBus = new EventBus();
|
||
const $on = defineSyncApi(API_ON, (name, callback) => {
|
||
eventBus.on(name, callback);
|
||
return () => eventBus.off(name, callback);
|
||
}, OnProtocol);
|
||
const $once = defineSyncApi(API_ONCE, (name, callback) => {
|
||
eventBus.once(name, callback);
|
||
return () => eventBus.off(name, callback);
|
||
}, OnceProtocol);
|
||
const $off = defineSyncApi(API_OFF, (name, callback) => {
|
||
if (!isArray$1(name))
|
||
name = name ? [name] : [];
|
||
name.forEach((n2) => {
|
||
eventBus.off(n2, callback);
|
||
});
|
||
}, OffProtocol);
|
||
const $emit = defineSyncApi(API_EMIT, (name, ...args) => {
|
||
eventBus.emit(name, ...args);
|
||
}, EmitProtocol);
|
||
let cid;
|
||
let cidErrMsg;
|
||
let enabled;
|
||
function normalizePushMessage(message) {
|
||
try {
|
||
return JSON.parse(message);
|
||
} catch (e2) {
|
||
}
|
||
return message;
|
||
}
|
||
function invokePushCallback(args) {
|
||
if (args.type === "enabled") {
|
||
enabled = true;
|
||
} else if (args.type === "clientId") {
|
||
cid = args.cid;
|
||
cidErrMsg = args.errMsg;
|
||
invokeGetPushCidCallbacks(cid, args.errMsg);
|
||
} else if (args.type === "pushMsg") {
|
||
const message = {
|
||
type: "receive",
|
||
data: normalizePushMessage(args.message)
|
||
};
|
||
for (let i = 0; i < onPushMessageCallbacks.length; i++) {
|
||
const callback = onPushMessageCallbacks[i];
|
||
callback(message);
|
||
if (message.stopped) {
|
||
break;
|
||
}
|
||
}
|
||
} else if (args.type === "click") {
|
||
onPushMessageCallbacks.forEach((callback) => {
|
||
callback({
|
||
type: "click",
|
||
data: normalizePushMessage(args.message)
|
||
});
|
||
});
|
||
}
|
||
}
|
||
const getPushCidCallbacks = [];
|
||
function invokeGetPushCidCallbacks(cid2, errMsg) {
|
||
getPushCidCallbacks.forEach((callback) => {
|
||
callback(cid2, errMsg);
|
||
});
|
||
getPushCidCallbacks.length = 0;
|
||
}
|
||
const API_GET_PUSH_CLIENT_ID = "getPushClientId";
|
||
const getPushClientId = defineAsyncApi(API_GET_PUSH_CLIENT_ID, (_, { resolve: resolve2, reject }) => {
|
||
Promise.resolve().then(() => {
|
||
if (typeof enabled === "undefined") {
|
||
enabled = false;
|
||
cid = "";
|
||
cidErrMsg = "uniPush is not enabled";
|
||
}
|
||
getPushCidCallbacks.push((cid2, errMsg) => {
|
||
if (cid2) {
|
||
resolve2({ cid: cid2 });
|
||
} else {
|
||
reject(errMsg);
|
||
}
|
||
});
|
||
if (typeof cid !== "undefined") {
|
||
invokeGetPushCidCallbacks(cid, cidErrMsg);
|
||
}
|
||
});
|
||
});
|
||
const onPushMessageCallbacks = [];
|
||
const onPushMessage = (fn) => {
|
||
if (onPushMessageCallbacks.indexOf(fn) === -1) {
|
||
onPushMessageCallbacks.push(fn);
|
||
}
|
||
};
|
||
const offPushMessage = (fn) => {
|
||
if (!fn) {
|
||
onPushMessageCallbacks.length = 0;
|
||
} else {
|
||
const index2 = onPushMessageCallbacks.indexOf(fn);
|
||
if (index2 > -1) {
|
||
onPushMessageCallbacks.splice(index2, 1);
|
||
}
|
||
}
|
||
};
|
||
const SYNC_API_RE = /^\$|__f__|getLocale|setLocale|sendNativeEvent|restoreGlobal|requireGlobal|getCurrentSubNVue|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|rpx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64|getDeviceInfo|getAppBaseInfo|getWindowInfo|getSystemSetting|getAppAuthorizeSetting/;
|
||
const CONTEXT_API_RE = /^create|Manager$/;
|
||
const CONTEXT_API_RE_EXC = ["createBLEConnection"];
|
||
const TASK_APIS = ["request", "downloadFile", "uploadFile", "connectSocket"];
|
||
const ASYNC_API = ["createBLEConnection"];
|
||
const CALLBACK_API_RE = /^on|^off/;
|
||
function isContextApi(name) {
|
||
return CONTEXT_API_RE.test(name) && CONTEXT_API_RE_EXC.indexOf(name) === -1;
|
||
}
|
||
function isSyncApi(name) {
|
||
return SYNC_API_RE.test(name) && ASYNC_API.indexOf(name) === -1;
|
||
}
|
||
function isCallbackApi(name) {
|
||
return CALLBACK_API_RE.test(name) && name !== "onPush";
|
||
}
|
||
function isTaskApi(name) {
|
||
return TASK_APIS.indexOf(name) !== -1;
|
||
}
|
||
function shouldPromise(name) {
|
||
if (isContextApi(name) || isSyncApi(name) || isCallbackApi(name)) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
if (!Promise.prototype.finally) {
|
||
Promise.prototype.finally = function(onfinally) {
|
||
const promise2 = this.constructor;
|
||
return this.then((value2) => promise2.resolve(onfinally && onfinally()).then(() => value2), (reason) => promise2.resolve(onfinally && onfinally()).then(() => {
|
||
throw reason;
|
||
}));
|
||
};
|
||
}
|
||
function promisify(name, api) {
|
||
if (!shouldPromise(name)) {
|
||
return api;
|
||
}
|
||
if (!isFunction(api)) {
|
||
return api;
|
||
}
|
||
return function promiseApi(options = {}, ...rest) {
|
||
if (isFunction(options.success) || isFunction(options.fail) || isFunction(options.complete)) {
|
||
return wrapperReturnValue(name, invokeApi(name, api, extend({}, options), rest));
|
||
}
|
||
return wrapperReturnValue(name, handlePromise(new Promise((resolve2, reject) => {
|
||
invokeApi(name, api, extend({}, options, {
|
||
success: resolve2,
|
||
fail: reject
|
||
}), rest);
|
||
})));
|
||
};
|
||
}
|
||
const CALLBACKS = ["success", "fail", "cancel", "complete"];
|
||
function initWrapper(protocols2) {
|
||
function processCallback(methodName, method3, returnValue) {
|
||
return function(res) {
|
||
return method3(processReturnValue(methodName, res, returnValue));
|
||
};
|
||
}
|
||
function processArgs(methodName, fromArgs, argsOption = {}, returnValue = {}, keepFromArgs = false) {
|
||
if (isPlainObject$1(fromArgs)) {
|
||
const toArgs = keepFromArgs === true ? fromArgs : {};
|
||
if (isFunction(argsOption)) {
|
||
argsOption = argsOption(fromArgs, toArgs) || {};
|
||
}
|
||
for (const key in fromArgs) {
|
||
if (hasOwn$1(argsOption, key)) {
|
||
let keyOption = argsOption[key];
|
||
if (isFunction(keyOption)) {
|
||
keyOption = keyOption(fromArgs[key], fromArgs, toArgs);
|
||
}
|
||
if (!keyOption) {
|
||
console.warn(`微信小程序 ${methodName} 暂不支持 ${key}`);
|
||
} else if (isString(keyOption)) {
|
||
toArgs[keyOption] = fromArgs[key];
|
||
} else if (isPlainObject$1(keyOption)) {
|
||
toArgs[keyOption.name ? keyOption.name : key] = keyOption.value;
|
||
}
|
||
} else if (CALLBACKS.indexOf(key) !== -1) {
|
||
const callback = fromArgs[key];
|
||
if (isFunction(callback)) {
|
||
toArgs[key] = processCallback(methodName, callback, returnValue);
|
||
}
|
||
} else {
|
||
if (!keepFromArgs && !hasOwn$1(toArgs, key)) {
|
||
toArgs[key] = fromArgs[key];
|
||
}
|
||
}
|
||
}
|
||
return toArgs;
|
||
} else if (isFunction(fromArgs)) {
|
||
if (isFunction(argsOption)) {
|
||
argsOption(fromArgs, {});
|
||
}
|
||
fromArgs = processCallback(methodName, fromArgs, returnValue);
|
||
}
|
||
return fromArgs;
|
||
}
|
||
function processReturnValue(methodName, res, returnValue, keepReturnValue = false) {
|
||
if (isFunction(protocols2.returnValue)) {
|
||
res = protocols2.returnValue(methodName, res);
|
||
}
|
||
const realKeepReturnValue = keepReturnValue || false;
|
||
return processArgs(methodName, res, returnValue, {}, realKeepReturnValue);
|
||
}
|
||
return function wrapper(methodName, method3) {
|
||
const hasProtocol = hasOwn$1(protocols2, methodName);
|
||
if (!hasProtocol && typeof wx[methodName] !== "function") {
|
||
return method3;
|
||
}
|
||
const needWrapper = hasProtocol || isFunction(protocols2.returnValue) || isContextApi(methodName) || isTaskApi(methodName);
|
||
const hasMethod = hasProtocol || isFunction(method3);
|
||
if (!hasProtocol && !method3) {
|
||
return function() {
|
||
console.error(`微信小程序 暂不支持${methodName}`);
|
||
};
|
||
}
|
||
if (!needWrapper || !hasMethod) {
|
||
return method3;
|
||
}
|
||
const protocol = protocols2[methodName];
|
||
return function(arg1, arg2) {
|
||
let options = protocol || {};
|
||
if (isFunction(protocol)) {
|
||
options = protocol(arg1);
|
||
}
|
||
arg1 = processArgs(methodName, arg1, options.args, options.returnValue);
|
||
const args = [arg1];
|
||
if (typeof arg2 !== "undefined") {
|
||
args.push(arg2);
|
||
}
|
||
const returnValue = wx[options.name || methodName].apply(wx, args);
|
||
if (isContextApi(methodName) || isTaskApi(methodName)) {
|
||
if (returnValue && !returnValue.__v_skip) {
|
||
returnValue.__v_skip = true;
|
||
}
|
||
}
|
||
if (isSyncApi(methodName)) {
|
||
return processReturnValue(methodName, returnValue, options.returnValue, isContextApi(methodName));
|
||
}
|
||
return returnValue;
|
||
};
|
||
};
|
||
}
|
||
const getLocale = () => {
|
||
const app = isFunction(getApp) && getApp({ allowDefault: true });
|
||
if (app && app.$vm) {
|
||
return app.$vm.$locale;
|
||
}
|
||
return getLocaleLanguage$1();
|
||
};
|
||
const setLocale = (locale) => {
|
||
const app = isFunction(getApp) && getApp();
|
||
if (!app) {
|
||
return false;
|
||
}
|
||
const oldLocale = app.$vm.$locale;
|
||
if (oldLocale !== locale) {
|
||
app.$vm.$locale = locale;
|
||
onLocaleChangeCallbacks.forEach((fn) => fn({ locale }));
|
||
return true;
|
||
}
|
||
return false;
|
||
};
|
||
const onLocaleChangeCallbacks = [];
|
||
const onLocaleChange = (fn) => {
|
||
if (onLocaleChangeCallbacks.indexOf(fn) === -1) {
|
||
onLocaleChangeCallbacks.push(fn);
|
||
}
|
||
};
|
||
if (typeof global !== "undefined") {
|
||
global.getLocale = getLocale;
|
||
}
|
||
const UUID_KEY = "__DC_STAT_UUID";
|
||
let deviceId;
|
||
function useDeviceId(global2 = wx) {
|
||
return function addDeviceId(_, toRes) {
|
||
deviceId = deviceId || global2.getStorageSync(UUID_KEY);
|
||
if (!deviceId) {
|
||
deviceId = Date.now() + "" + Math.floor(Math.random() * 1e7);
|
||
wx.setStorage({
|
||
key: UUID_KEY,
|
||
data: deviceId
|
||
});
|
||
}
|
||
toRes.deviceId = deviceId;
|
||
};
|
||
}
|
||
function addSafeAreaInsets(fromRes, toRes) {
|
||
if (fromRes.safeArea) {
|
||
const safeArea = fromRes.safeArea;
|
||
toRes.safeAreaInsets = {
|
||
top: safeArea.top,
|
||
left: safeArea.left,
|
||
right: fromRes.windowWidth - safeArea.right,
|
||
bottom: fromRes.screenHeight - safeArea.bottom
|
||
};
|
||
}
|
||
}
|
||
function getOSInfo(system2, platform2) {
|
||
let osName = "";
|
||
let osVersion = "";
|
||
if (platform2 && false) {
|
||
osName = platform2;
|
||
osVersion = system2;
|
||
} else {
|
||
osName = system2.split(" ")[0] || platform2;
|
||
osVersion = system2.split(" ")[1] || "";
|
||
}
|
||
osName = osName.toLowerCase();
|
||
switch (osName) {
|
||
case "harmony":
|
||
case "ohos":
|
||
case "openharmony":
|
||
osName = "harmonyos";
|
||
break;
|
||
case "iphone os":
|
||
osName = "ios";
|
||
break;
|
||
case "mac":
|
||
case "darwin":
|
||
osName = "macos";
|
||
break;
|
||
case "windows_nt":
|
||
osName = "windows";
|
||
break;
|
||
}
|
||
return {
|
||
osName,
|
||
osVersion
|
||
};
|
||
}
|
||
function populateParameters(fromRes, toRes) {
|
||
const { brand = "", model = "", system: system2 = "", language = "", theme, version: version2, platform: platform2, fontSizeSetting, SDKVersion, pixelRatio, deviceOrientation } = fromRes;
|
||
const { osName, osVersion } = getOSInfo(system2, platform2);
|
||
let hostVersion = version2;
|
||
let deviceType = getGetDeviceType(fromRes, model);
|
||
let deviceBrand = getDeviceBrand(brand);
|
||
let _hostName = getHostName(fromRes);
|
||
let _deviceOrientation = deviceOrientation;
|
||
let _devicePixelRatio = pixelRatio;
|
||
let _SDKVersion = SDKVersion;
|
||
const hostLanguage = (language || "").replace(/_/g, "-");
|
||
const parameters = {
|
||
appId: "__UNI__C5266FA",
|
||
appName: "caseDataBase",
|
||
appVersion: "1.0.0",
|
||
appVersionCode: "100",
|
||
appLanguage: getAppLanguage(hostLanguage),
|
||
uniCompileVersion: "4.75",
|
||
uniCompilerVersion: "4.75",
|
||
uniRuntimeVersion: "4.75",
|
||
uniPlatform: "mp-weixin",
|
||
deviceBrand,
|
||
deviceModel: model,
|
||
deviceType,
|
||
devicePixelRatio: _devicePixelRatio,
|
||
deviceOrientation: _deviceOrientation,
|
||
osName,
|
||
osVersion,
|
||
hostTheme: theme,
|
||
hostVersion,
|
||
hostLanguage,
|
||
hostName: _hostName,
|
||
hostSDKVersion: _SDKVersion,
|
||
hostFontSizeSetting: fontSizeSetting,
|
||
windowTop: 0,
|
||
windowBottom: 0,
|
||
// TODO
|
||
osLanguage: void 0,
|
||
osTheme: void 0,
|
||
ua: void 0,
|
||
hostPackageName: void 0,
|
||
browserName: void 0,
|
||
browserVersion: void 0,
|
||
isUniAppX: false
|
||
};
|
||
extend(toRes, parameters);
|
||
}
|
||
function getGetDeviceType(fromRes, model) {
|
||
let deviceType = fromRes.deviceType || "phone";
|
||
{
|
||
const deviceTypeMaps = {
|
||
ipad: "pad",
|
||
windows: "pc",
|
||
mac: "pc"
|
||
};
|
||
const deviceTypeMapsKeys = Object.keys(deviceTypeMaps);
|
||
const _model = model.toLowerCase();
|
||
for (let index2 = 0; index2 < deviceTypeMapsKeys.length; index2++) {
|
||
const _m = deviceTypeMapsKeys[index2];
|
||
if (_model.indexOf(_m) !== -1) {
|
||
deviceType = deviceTypeMaps[_m];
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
return deviceType;
|
||
}
|
||
function getDeviceBrand(brand) {
|
||
let deviceBrand = brand;
|
||
if (deviceBrand) {
|
||
deviceBrand = deviceBrand.toLowerCase();
|
||
}
|
||
return deviceBrand;
|
||
}
|
||
function getAppLanguage(defaultLanguage) {
|
||
return getLocale ? getLocale() : defaultLanguage;
|
||
}
|
||
function getHostName(fromRes) {
|
||
const _platform = "WeChat";
|
||
let _hostName = fromRes.hostName || _platform;
|
||
{
|
||
if (fromRes.environment) {
|
||
_hostName = fromRes.environment;
|
||
} else if (fromRes.host && fromRes.host.env) {
|
||
_hostName = fromRes.host.env;
|
||
}
|
||
}
|
||
return _hostName;
|
||
}
|
||
const getSystemInfo = {
|
||
returnValue: (fromRes, toRes) => {
|
||
addSafeAreaInsets(fromRes, toRes);
|
||
useDeviceId()(fromRes, toRes);
|
||
populateParameters(fromRes, toRes);
|
||
}
|
||
};
|
||
const getSystemInfoSync = getSystemInfo;
|
||
const redirectTo = {};
|
||
const previewImage = {
|
||
args(fromArgs, toArgs) {
|
||
let currentIndex = parseInt(fromArgs.current);
|
||
if (isNaN(currentIndex)) {
|
||
return;
|
||
}
|
||
const urls = fromArgs.urls;
|
||
if (!isArray$1(urls)) {
|
||
return;
|
||
}
|
||
const len = urls.length;
|
||
if (!len) {
|
||
return;
|
||
}
|
||
if (currentIndex < 0) {
|
||
currentIndex = 0;
|
||
} else if (currentIndex >= len) {
|
||
currentIndex = len - 1;
|
||
}
|
||
if (currentIndex > 0) {
|
||
toArgs.current = urls[currentIndex];
|
||
toArgs.urls = urls.filter((item, index2) => index2 < currentIndex ? item !== urls[currentIndex] : true);
|
||
} else {
|
||
toArgs.current = urls[0];
|
||
}
|
||
return {
|
||
indicator: false,
|
||
loop: false
|
||
};
|
||
}
|
||
};
|
||
const showActionSheet = {
|
||
args(fromArgs, toArgs) {
|
||
toArgs.alertText = fromArgs.title;
|
||
}
|
||
};
|
||
const getDeviceInfo = {
|
||
returnValue: (fromRes, toRes) => {
|
||
const { brand, model, system: system2 = "", platform: platform2 = "" } = fromRes;
|
||
let deviceType = getGetDeviceType(fromRes, model);
|
||
let deviceBrand = getDeviceBrand(brand);
|
||
useDeviceId()(fromRes, toRes);
|
||
const { osName, osVersion } = getOSInfo(system2, platform2);
|
||
toRes = sortObject(extend(toRes, {
|
||
deviceType,
|
||
deviceBrand,
|
||
deviceModel: model,
|
||
osName,
|
||
osVersion
|
||
}));
|
||
}
|
||
};
|
||
const getAppBaseInfo = {
|
||
returnValue: (fromRes, toRes) => {
|
||
const { version: version2, language, SDKVersion, theme } = fromRes;
|
||
let _hostName = getHostName(fromRes);
|
||
let hostLanguage = (language || "").replace(/_/g, "-");
|
||
const parameters = {
|
||
hostVersion: version2,
|
||
hostLanguage,
|
||
hostName: _hostName,
|
||
hostSDKVersion: SDKVersion,
|
||
hostTheme: theme,
|
||
appId: "__UNI__C5266FA",
|
||
appName: "caseDataBase",
|
||
appVersion: "1.0.0",
|
||
appVersionCode: "100",
|
||
appLanguage: getAppLanguage(hostLanguage),
|
||
isUniAppX: false,
|
||
uniPlatform: "mp-weixin",
|
||
uniCompileVersion: "4.75",
|
||
uniCompilerVersion: "4.75",
|
||
uniRuntimeVersion: "4.75"
|
||
};
|
||
extend(toRes, parameters);
|
||
}
|
||
};
|
||
const getWindowInfo$1 = {
|
||
returnValue: (fromRes, toRes) => {
|
||
addSafeAreaInsets(fromRes, toRes);
|
||
toRes = sortObject(extend(toRes, {
|
||
windowTop: 0,
|
||
windowBottom: 0
|
||
}));
|
||
}
|
||
};
|
||
const getAppAuthorizeSetting = {
|
||
returnValue: function(fromRes, toRes) {
|
||
const { locationReducedAccuracy } = fromRes;
|
||
toRes.locationAccuracy = "unsupported";
|
||
if (locationReducedAccuracy === true) {
|
||
toRes.locationAccuracy = "reduced";
|
||
} else if (locationReducedAccuracy === false) {
|
||
toRes.locationAccuracy = "full";
|
||
}
|
||
}
|
||
};
|
||
const onError = {
|
||
args(fromArgs) {
|
||
const app = getApp({ allowDefault: true }) || {};
|
||
if (!app.$vm) {
|
||
if (!wx.$onErrorHandlers) {
|
||
wx.$onErrorHandlers = [];
|
||
}
|
||
wx.$onErrorHandlers.push(fromArgs);
|
||
} else {
|
||
injectHook(ON_ERROR, fromArgs, app.$vm.$);
|
||
}
|
||
}
|
||
};
|
||
const offError = {
|
||
args(fromArgs) {
|
||
const app = getApp({ allowDefault: true }) || {};
|
||
if (!app.$vm) {
|
||
if (!wx.$onErrorHandlers) {
|
||
return;
|
||
}
|
||
const index2 = wx.$onErrorHandlers.findIndex((fn) => fn === fromArgs);
|
||
if (index2 !== -1) {
|
||
wx.$onErrorHandlers.splice(index2, 1);
|
||
}
|
||
} else if (fromArgs.__weh) {
|
||
const onErrors = app.$vm.$[ON_ERROR];
|
||
if (onErrors) {
|
||
const index2 = onErrors.indexOf(fromArgs.__weh);
|
||
if (index2 > -1) {
|
||
onErrors.splice(index2, 1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
};
|
||
const onSocketOpen = {
|
||
args() {
|
||
if (wx.__uni_console__) {
|
||
if (wx.__uni_console_warned__) {
|
||
return;
|
||
}
|
||
wx.__uni_console_warned__ = true;
|
||
console.warn(`开发模式下小程序日志回显会使用 socket 连接,为了避免冲突,建议使用 SocketTask 的方式去管理 WebSocket 或手动关闭日志回显功能。[详情](https://uniapp.dcloud.net.cn/tutorial/run/mp-log.html)`);
|
||
}
|
||
}
|
||
};
|
||
const onSocketMessage = onSocketOpen;
|
||
const baseApis = {
|
||
$on,
|
||
$off,
|
||
$once,
|
||
$emit,
|
||
upx2px,
|
||
rpx2px: upx2px,
|
||
interceptors,
|
||
addInterceptor,
|
||
removeInterceptor,
|
||
onCreateVueApp,
|
||
invokeCreateVueAppHook,
|
||
getLocale,
|
||
setLocale,
|
||
onLocaleChange,
|
||
getPushClientId,
|
||
onPushMessage,
|
||
offPushMessage,
|
||
invokePushCallback,
|
||
__f__
|
||
};
|
||
function initUni(api, protocols2, platform2 = wx) {
|
||
const wrapper = initWrapper(protocols2);
|
||
const UniProxyHandlers = {
|
||
get(target, key) {
|
||
if (hasOwn$1(target, key)) {
|
||
return target[key];
|
||
}
|
||
if (hasOwn$1(api, key)) {
|
||
return promisify(key, api[key]);
|
||
}
|
||
if (hasOwn$1(baseApis, key)) {
|
||
return promisify(key, baseApis[key]);
|
||
}
|
||
return promisify(key, wrapper(key, platform2[key]));
|
||
}
|
||
};
|
||
return new Proxy({}, UniProxyHandlers);
|
||
}
|
||
function initGetProvider(providers) {
|
||
return function getProvider2({ service, success, fail, complete }) {
|
||
let res;
|
||
if (providers[service]) {
|
||
res = {
|
||
errMsg: "getProvider:ok",
|
||
service,
|
||
provider: providers[service]
|
||
};
|
||
isFunction(success) && success(res);
|
||
} else {
|
||
res = {
|
||
errMsg: "getProvider:fail:服务[" + service + "]不存在"
|
||
};
|
||
isFunction(fail) && fail(res);
|
||
}
|
||
isFunction(complete) && complete(res);
|
||
};
|
||
}
|
||
const objectKeys = [
|
||
"qy",
|
||
"env",
|
||
"error",
|
||
"version",
|
||
"lanDebug",
|
||
"cloud",
|
||
"serviceMarket",
|
||
"router",
|
||
"worklet",
|
||
"__webpack_require_UNI_MP_PLUGIN__"
|
||
];
|
||
const singlePageDisableKey = ["lanDebug", "router", "worklet"];
|
||
const launchOption = wx.getLaunchOptionsSync ? wx.getLaunchOptionsSync() : null;
|
||
function isWxKey(key) {
|
||
if (launchOption && launchOption.scene === 1154 && singlePageDisableKey.includes(key)) {
|
||
return false;
|
||
}
|
||
return objectKeys.indexOf(key) > -1 || typeof wx[key] === "function";
|
||
}
|
||
function initWx() {
|
||
const newWx = {};
|
||
for (const key in wx) {
|
||
if (isWxKey(key)) {
|
||
newWx[key] = wx[key];
|
||
}
|
||
}
|
||
if (typeof globalThis !== "undefined" && typeof requireMiniProgram === "undefined") {
|
||
globalThis.wx = newWx;
|
||
}
|
||
return newWx;
|
||
}
|
||
const mocks$1 = ["__route__", "__wxExparserNodeId__", "__wxWebviewId__"];
|
||
const getProvider = initGetProvider({
|
||
oauth: ["weixin"],
|
||
share: ["weixin"],
|
||
payment: ["wxpay"],
|
||
push: ["weixin"]
|
||
});
|
||
function initComponentMocks(component) {
|
||
const res = /* @__PURE__ */ Object.create(null);
|
||
mocks$1.forEach((name) => {
|
||
res[name] = component[name];
|
||
});
|
||
return res;
|
||
}
|
||
function createSelectorQuery() {
|
||
const query = wx$2.createSelectorQuery();
|
||
const oldIn = query.in;
|
||
query.in = function newIn(component) {
|
||
if (component.$scope) {
|
||
return oldIn.call(this, component.$scope);
|
||
}
|
||
return oldIn.call(this, initComponentMocks(component));
|
||
};
|
||
return query;
|
||
}
|
||
const wx$2 = initWx();
|
||
if (!wx$2.canIUse("getAppBaseInfo")) {
|
||
wx$2.getAppBaseInfo = wx$2.getSystemInfoSync;
|
||
}
|
||
if (!wx$2.canIUse("getWindowInfo")) {
|
||
wx$2.getWindowInfo = wx$2.getSystemInfoSync;
|
||
}
|
||
if (!wx$2.canIUse("getDeviceInfo")) {
|
||
wx$2.getDeviceInfo = wx$2.getSystemInfoSync;
|
||
}
|
||
let baseInfo = wx$2.getAppBaseInfo && wx$2.getAppBaseInfo();
|
||
if (!baseInfo) {
|
||
baseInfo = wx$2.getSystemInfoSync();
|
||
}
|
||
const host = baseInfo ? baseInfo.host : null;
|
||
const shareVideoMessage = host && host.env === "SAAASDK" ? wx$2.miniapp.shareVideoMessage : wx$2.shareVideoMessage;
|
||
var shims = /* @__PURE__ */ Object.freeze({
|
||
__proto__: null,
|
||
createSelectorQuery,
|
||
getProvider,
|
||
shareVideoMessage
|
||
});
|
||
const compressImage = {
|
||
args(fromArgs, toArgs) {
|
||
if (fromArgs.compressedHeight && !toArgs.compressHeight) {
|
||
toArgs.compressHeight = fromArgs.compressedHeight;
|
||
}
|
||
if (fromArgs.compressedWidth && !toArgs.compressWidth) {
|
||
toArgs.compressWidth = fromArgs.compressedWidth;
|
||
}
|
||
}
|
||
};
|
||
var protocols = /* @__PURE__ */ Object.freeze({
|
||
__proto__: null,
|
||
compressImage,
|
||
getAppAuthorizeSetting,
|
||
getAppBaseInfo,
|
||
getDeviceInfo,
|
||
getSystemInfo,
|
||
getSystemInfoSync,
|
||
getWindowInfo: getWindowInfo$1,
|
||
offError,
|
||
onError,
|
||
onSocketMessage,
|
||
onSocketOpen,
|
||
previewImage,
|
||
redirectTo,
|
||
showActionSheet
|
||
});
|
||
const wx$1 = initWx();
|
||
var index$1 = initUni(shims, protocols, wx$1);
|
||
function initRuntimeSocket(hosts, port, id) {
|
||
if (hosts == "" || port == "" || id == "")
|
||
return Promise.resolve(null);
|
||
return hosts.split(",").reduce((promise2, host2) => {
|
||
return promise2.then((socket) => {
|
||
if (socket != null)
|
||
return Promise.resolve(socket);
|
||
return tryConnectSocket(host2, port, id);
|
||
});
|
||
}, Promise.resolve(null));
|
||
}
|
||
const SOCKET_TIMEOUT = 500;
|
||
function tryConnectSocket(host2, port, id) {
|
||
return new Promise((resolve2, reject) => {
|
||
const socket = index$1.connectSocket({
|
||
url: `ws://${host2}:${port}/${id}`,
|
||
multiple: true,
|
||
// 支付宝小程序 是否开启多实例
|
||
fail() {
|
||
resolve2(null);
|
||
}
|
||
});
|
||
const timer = setTimeout(() => {
|
||
socket.close({
|
||
code: 1006,
|
||
reason: "connect timeout"
|
||
});
|
||
resolve2(null);
|
||
}, SOCKET_TIMEOUT);
|
||
socket.onOpen((e2) => {
|
||
clearTimeout(timer);
|
||
resolve2(socket);
|
||
});
|
||
socket.onClose((e2) => {
|
||
clearTimeout(timer);
|
||
resolve2(null);
|
||
});
|
||
socket.onError((e2) => {
|
||
clearTimeout(timer);
|
||
resolve2(null);
|
||
});
|
||
});
|
||
}
|
||
const CONSOLE_TYPES = ["log", "warn", "error", "info", "debug"];
|
||
const originalConsole = /* @__PURE__ */ CONSOLE_TYPES.reduce((methods, type2) => {
|
||
methods[type2] = console[type2].bind(console);
|
||
return methods;
|
||
}, {});
|
||
let sendError = null;
|
||
const errorQueue = /* @__PURE__ */ new Set();
|
||
const errorExtra = {};
|
||
function sendErrorMessages(errors) {
|
||
if (sendError == null) {
|
||
errors.forEach((error2) => {
|
||
errorQueue.add(error2);
|
||
});
|
||
return;
|
||
}
|
||
const data = errors.map((err) => {
|
||
if (typeof err === "string") {
|
||
return err;
|
||
}
|
||
const isPromiseRejection = err && "promise" in err && "reason" in err;
|
||
const prefix = isPromiseRejection ? "UnhandledPromiseRejection: " : "";
|
||
if (isPromiseRejection) {
|
||
err = err.reason;
|
||
}
|
||
if (err instanceof Error && err.stack) {
|
||
if (err.message && !err.stack.includes(err.message)) {
|
||
return `${prefix}${err.message}
|
||
${err.stack}`;
|
||
}
|
||
return `${prefix}${err.stack}`;
|
||
}
|
||
if (typeof err === "object" && err !== null) {
|
||
try {
|
||
return prefix + JSON.stringify(err);
|
||
} catch (err2) {
|
||
return prefix + String(err2);
|
||
}
|
||
}
|
||
return prefix + String(err);
|
||
}).filter(Boolean);
|
||
if (data.length > 0) {
|
||
sendError(JSON.stringify(Object.assign({
|
||
type: "error",
|
||
data
|
||
}, errorExtra)));
|
||
}
|
||
}
|
||
function setSendError(value2, extra = {}) {
|
||
sendError = value2;
|
||
Object.assign(errorExtra, extra);
|
||
if (value2 != null && errorQueue.size > 0) {
|
||
const errors = Array.from(errorQueue);
|
||
errorQueue.clear();
|
||
sendErrorMessages(errors);
|
||
}
|
||
}
|
||
function initOnError() {
|
||
function onError2(error2) {
|
||
try {
|
||
if (typeof PromiseRejectionEvent !== "undefined" && error2 instanceof PromiseRejectionEvent && error2.reason instanceof Error && error2.reason.message && error2.reason.message.includes(`Cannot create property 'errMsg' on string 'taskId`)) {
|
||
return;
|
||
}
|
||
if (true) {
|
||
originalConsole.error(error2);
|
||
}
|
||
sendErrorMessages([error2]);
|
||
} catch (err) {
|
||
originalConsole.error(err);
|
||
}
|
||
}
|
||
if (typeof index$1.onError === "function") {
|
||
index$1.onError(onError2);
|
||
}
|
||
if (typeof index$1.onUnhandledRejection === "function") {
|
||
index$1.onUnhandledRejection(onError2);
|
||
}
|
||
return function offError2() {
|
||
if (typeof index$1.offError === "function") {
|
||
index$1.offError(onError2);
|
||
}
|
||
if (typeof index$1.offUnhandledRejection === "function") {
|
||
index$1.offUnhandledRejection(onError2);
|
||
}
|
||
};
|
||
}
|
||
function formatMessage(type2, args) {
|
||
try {
|
||
return {
|
||
type: type2,
|
||
args: formatArgs(args)
|
||
};
|
||
} catch (e2) {
|
||
}
|
||
return {
|
||
type: type2,
|
||
args: []
|
||
};
|
||
}
|
||
function formatArgs(args) {
|
||
return args.map((arg) => formatArg(arg));
|
||
}
|
||
function formatArg(arg, depth = 0) {
|
||
if (depth >= 7) {
|
||
return {
|
||
type: "object",
|
||
value: "[Maximum depth reached]"
|
||
};
|
||
}
|
||
const type2 = typeof arg;
|
||
switch (type2) {
|
||
case "string":
|
||
return formatString(arg);
|
||
case "number":
|
||
return formatNumber(arg);
|
||
case "boolean":
|
||
return formatBoolean(arg);
|
||
case "object":
|
||
try {
|
||
return formatObject(arg, depth);
|
||
} catch (e2) {
|
||
return {
|
||
type: "object",
|
||
value: {
|
||
properties: []
|
||
}
|
||
};
|
||
}
|
||
case "undefined":
|
||
return formatUndefined();
|
||
case "function":
|
||
return formatFunction(arg);
|
||
case "symbol": {
|
||
return formatSymbol(arg);
|
||
}
|
||
case "bigint":
|
||
return formatBigInt(arg);
|
||
}
|
||
}
|
||
function formatFunction(value2) {
|
||
return {
|
||
type: "function",
|
||
value: `function ${value2.name}() {}`
|
||
};
|
||
}
|
||
function formatUndefined() {
|
||
return {
|
||
type: "undefined"
|
||
};
|
||
}
|
||
function formatBoolean(value2) {
|
||
return {
|
||
type: "boolean",
|
||
value: String(value2)
|
||
};
|
||
}
|
||
function formatNumber(value2) {
|
||
return {
|
||
type: "number",
|
||
value: String(value2)
|
||
};
|
||
}
|
||
function formatBigInt(value2) {
|
||
return {
|
||
type: "bigint",
|
||
value: String(value2)
|
||
};
|
||
}
|
||
function formatString(value2) {
|
||
return {
|
||
type: "string",
|
||
value: value2
|
||
};
|
||
}
|
||
function formatSymbol(value2) {
|
||
return {
|
||
type: "symbol",
|
||
value: value2.description
|
||
};
|
||
}
|
||
function formatObject(value2, depth) {
|
||
if (value2 === null) {
|
||
return {
|
||
type: "null"
|
||
};
|
||
}
|
||
{
|
||
if (isComponentPublicInstance(value2)) {
|
||
return formatComponentPublicInstance(value2, depth);
|
||
}
|
||
if (isComponentInternalInstance(value2)) {
|
||
return formatComponentInternalInstance(value2, depth);
|
||
}
|
||
if (isUniElement(value2)) {
|
||
return formatUniElement(value2, depth);
|
||
}
|
||
if (isCSSStyleDeclaration(value2)) {
|
||
return formatCSSStyleDeclaration(value2, depth);
|
||
}
|
||
}
|
||
if (Array.isArray(value2)) {
|
||
return {
|
||
type: "object",
|
||
subType: "array",
|
||
value: {
|
||
properties: value2.map((v, i) => formatArrayElement(v, i, depth + 1))
|
||
}
|
||
};
|
||
}
|
||
if (value2 instanceof Set) {
|
||
return {
|
||
type: "object",
|
||
subType: "set",
|
||
className: "Set",
|
||
description: `Set(${value2.size})`,
|
||
value: {
|
||
entries: Array.from(value2).map((v) => formatSetEntry(v, depth + 1))
|
||
}
|
||
};
|
||
}
|
||
if (value2 instanceof Map) {
|
||
return {
|
||
type: "object",
|
||
subType: "map",
|
||
className: "Map",
|
||
description: `Map(${value2.size})`,
|
||
value: {
|
||
entries: Array.from(value2.entries()).map((v) => formatMapEntry(v, depth + 1))
|
||
}
|
||
};
|
||
}
|
||
if (value2 instanceof Promise) {
|
||
return {
|
||
type: "object",
|
||
subType: "promise",
|
||
value: {
|
||
properties: []
|
||
}
|
||
};
|
||
}
|
||
if (value2 instanceof RegExp) {
|
||
return {
|
||
type: "object",
|
||
subType: "regexp",
|
||
value: String(value2),
|
||
className: "Regexp"
|
||
};
|
||
}
|
||
if (value2 instanceof Date) {
|
||
return {
|
||
type: "object",
|
||
subType: "date",
|
||
value: String(value2),
|
||
className: "Date"
|
||
};
|
||
}
|
||
if (value2 instanceof Error) {
|
||
return {
|
||
type: "object",
|
||
subType: "error",
|
||
value: value2.message || String(value2),
|
||
className: value2.name || "Error"
|
||
};
|
||
}
|
||
let className = void 0;
|
||
{
|
||
const constructor = value2.constructor;
|
||
if (constructor) {
|
||
if (constructor.get$UTSMetadata$) {
|
||
className = constructor.get$UTSMetadata$().name;
|
||
}
|
||
}
|
||
}
|
||
let entries = Object.entries(value2);
|
||
if (isHarmonyBuilderParams(value2)) {
|
||
entries = entries.filter(([key]) => key !== "modifier" && key !== "nodeContent");
|
||
}
|
||
return {
|
||
type: "object",
|
||
className,
|
||
value: {
|
||
properties: entries.map((entry) => formatObjectProperty(entry[0], entry[1], depth + 1))
|
||
}
|
||
};
|
||
}
|
||
function isHarmonyBuilderParams(value2) {
|
||
return value2.modifier && value2.modifier._attribute && value2.nodeContent;
|
||
}
|
||
function isComponentPublicInstance(value2) {
|
||
return value2.$ && isComponentInternalInstance(value2.$);
|
||
}
|
||
function isComponentInternalInstance(value2) {
|
||
return value2.type && value2.uid != null && value2.appContext;
|
||
}
|
||
function formatComponentPublicInstance(value2, depth) {
|
||
return {
|
||
type: "object",
|
||
className: "ComponentPublicInstance",
|
||
value: {
|
||
properties: Object.entries(value2.$.type).map(([name, value22]) => formatObjectProperty(name, value22, depth + 1))
|
||
}
|
||
};
|
||
}
|
||
function formatComponentInternalInstance(value2, depth) {
|
||
return {
|
||
type: "object",
|
||
className: "ComponentInternalInstance",
|
||
value: {
|
||
properties: Object.entries(value2.type).map(([name, value22]) => formatObjectProperty(name, value22, depth + 1))
|
||
}
|
||
};
|
||
}
|
||
function isUniElement(value2) {
|
||
return value2.style && value2.tagName != null && value2.nodeName != null;
|
||
}
|
||
function formatUniElement(value2, depth) {
|
||
return {
|
||
type: "object",
|
||
// 非 x 没有 UniElement 的概念
|
||
// className: 'UniElement',
|
||
value: {
|
||
properties: Object.entries(value2).filter(([name]) => [
|
||
"id",
|
||
"tagName",
|
||
"nodeName",
|
||
"dataset",
|
||
"offsetTop",
|
||
"offsetLeft",
|
||
"style"
|
||
].includes(name)).map(([name, value22]) => formatObjectProperty(name, value22, depth + 1))
|
||
}
|
||
};
|
||
}
|
||
function isCSSStyleDeclaration(value2) {
|
||
return typeof value2.getPropertyValue === "function" && typeof value2.setProperty === "function" && value2.$styles;
|
||
}
|
||
function formatCSSStyleDeclaration(style, depth) {
|
||
return {
|
||
type: "object",
|
||
value: {
|
||
properties: Object.entries(style.$styles).map(([name, value2]) => formatObjectProperty(name, value2, depth + 1))
|
||
}
|
||
};
|
||
}
|
||
function formatObjectProperty(name, value2, depth) {
|
||
const result = formatArg(value2, depth);
|
||
result.name = name;
|
||
return result;
|
||
}
|
||
function formatArrayElement(value2, index2, depth) {
|
||
const result = formatArg(value2, depth);
|
||
result.name = `${index2}`;
|
||
return result;
|
||
}
|
||
function formatSetEntry(value2, depth) {
|
||
return {
|
||
value: formatArg(value2, depth)
|
||
};
|
||
}
|
||
function formatMapEntry(value2, depth) {
|
||
return {
|
||
key: formatArg(value2[0], depth),
|
||
value: formatArg(value2[1], depth)
|
||
};
|
||
}
|
||
let sendConsole = null;
|
||
const messageQueue = [];
|
||
const messageExtra = {};
|
||
const EXCEPTION_BEGIN_MARK = "---BEGIN:EXCEPTION---";
|
||
const EXCEPTION_END_MARK = "---END:EXCEPTION---";
|
||
function sendConsoleMessages(messages3) {
|
||
if (sendConsole == null) {
|
||
messageQueue.push(...messages3);
|
||
return;
|
||
}
|
||
sendConsole(JSON.stringify(Object.assign({
|
||
type: "console",
|
||
data: messages3
|
||
}, messageExtra)));
|
||
}
|
||
function setSendConsole(value2, extra = {}) {
|
||
sendConsole = value2;
|
||
Object.assign(messageExtra, extra);
|
||
if (value2 != null && messageQueue.length > 0) {
|
||
const messages3 = messageQueue.slice();
|
||
messageQueue.length = 0;
|
||
sendConsoleMessages(messages3);
|
||
}
|
||
}
|
||
const atFileRegex = /^\s*at\s+[\w/./-]+:\d+$/;
|
||
function rewriteConsole() {
|
||
function wrapConsole(type2) {
|
||
return function(...args) {
|
||
{
|
||
const originalArgs = [...args];
|
||
if (originalArgs.length) {
|
||
const maybeAtFile = originalArgs[originalArgs.length - 1];
|
||
if (typeof maybeAtFile === "string" && atFileRegex.test(maybeAtFile)) {
|
||
originalArgs.pop();
|
||
}
|
||
}
|
||
originalConsole[type2](...originalArgs);
|
||
}
|
||
if (type2 === "error" && args.length === 1) {
|
||
const arg = args[0];
|
||
if (typeof arg === "string" && arg.startsWith(EXCEPTION_BEGIN_MARK)) {
|
||
const startIndex = EXCEPTION_BEGIN_MARK.length;
|
||
const endIndex = arg.length - EXCEPTION_END_MARK.length;
|
||
sendErrorMessages([arg.slice(startIndex, endIndex)]);
|
||
return;
|
||
} else if (arg instanceof Error) {
|
||
sendErrorMessages([arg]);
|
||
return;
|
||
}
|
||
}
|
||
sendConsoleMessages([formatMessage(type2, args)]);
|
||
};
|
||
}
|
||
if (isConsoleWritable()) {
|
||
CONSOLE_TYPES.forEach((type2) => {
|
||
console[type2] = wrapConsole(type2);
|
||
});
|
||
return function restoreConsole() {
|
||
CONSOLE_TYPES.forEach((type2) => {
|
||
console[type2] = originalConsole[type2];
|
||
});
|
||
};
|
||
} else {
|
||
{
|
||
if (typeof index$1 !== "undefined" && index$1.__f__) {
|
||
const oldLog = index$1.__f__;
|
||
if (oldLog) {
|
||
index$1.__f__ = function(...args) {
|
||
const [type2, filename, ...rest] = args;
|
||
oldLog(type2, "", ...rest);
|
||
sendConsoleMessages([formatMessage(type2, [...rest, filename])]);
|
||
};
|
||
return function restoreConsole() {
|
||
index$1.__f__ = oldLog;
|
||
};
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return function restoreConsole() {
|
||
};
|
||
}
|
||
function isConsoleWritable() {
|
||
const value2 = console.log;
|
||
const sym = Symbol();
|
||
try {
|
||
console.log = sym;
|
||
} catch (ex) {
|
||
return false;
|
||
}
|
||
const isWritable = console.log === sym;
|
||
console.log = value2;
|
||
return isWritable;
|
||
}
|
||
function initRuntimeSocketService() {
|
||
const hosts = "192.168.100.165,127.0.0.1";
|
||
const port = "8090";
|
||
const id = "mp-weixin_nxyKT8";
|
||
const lazy = typeof swan !== "undefined";
|
||
let restoreError = lazy ? () => {
|
||
} : initOnError();
|
||
let restoreConsole = lazy ? () => {
|
||
} : rewriteConsole();
|
||
return Promise.resolve().then(() => {
|
||
if (lazy) {
|
||
restoreError = initOnError();
|
||
restoreConsole = rewriteConsole();
|
||
}
|
||
return initRuntimeSocket(hosts, port, id).then((socket) => {
|
||
if (!socket) {
|
||
restoreError();
|
||
restoreConsole();
|
||
originalConsole.error(wrapError("开发模式下日志通道建立 socket 连接失败。"));
|
||
{
|
||
originalConsole.error(wrapError("小程序平台,请勾选不校验合法域名配置。"));
|
||
}
|
||
originalConsole.error(wrapError("如果是运行到真机,请确认手机与电脑处于同一网络。"));
|
||
return false;
|
||
}
|
||
{
|
||
initMiniProgramGlobalFlag();
|
||
}
|
||
socket.onClose(() => {
|
||
{
|
||
originalConsole.error(wrapError("开发模式下日志通道 socket 连接关闭,请在 HBuilderX 中重新运行。"));
|
||
}
|
||
restoreError();
|
||
restoreConsole();
|
||
});
|
||
setSendConsole((data) => {
|
||
socket.send({
|
||
data
|
||
});
|
||
});
|
||
setSendError((data) => {
|
||
socket.send({
|
||
data
|
||
});
|
||
});
|
||
return true;
|
||
});
|
||
});
|
||
}
|
||
const ERROR_CHAR = "";
|
||
function wrapError(error2) {
|
||
return `${ERROR_CHAR}${error2}${ERROR_CHAR}`;
|
||
}
|
||
function initMiniProgramGlobalFlag() {
|
||
if (typeof wx$1 !== "undefined") {
|
||
wx$1.__uni_console__ = true;
|
||
} else if (typeof my !== "undefined") {
|
||
my.__uni_console__ = true;
|
||
} else if (typeof tt !== "undefined") {
|
||
tt.__uni_console__ = true;
|
||
} else if (typeof swan !== "undefined") {
|
||
swan.__uni_console__ = true;
|
||
} else if (typeof qq !== "undefined") {
|
||
qq.__uni_console__ = true;
|
||
} else if (typeof ks !== "undefined") {
|
||
ks.__uni_console__ = true;
|
||
} else if (typeof jd !== "undefined") {
|
||
jd.__uni_console__ = true;
|
||
} else if (typeof xhs !== "undefined") {
|
||
xhs.__uni_console__ = true;
|
||
} else if (typeof has !== "undefined") {
|
||
has.__uni_console__ = true;
|
||
} else if (typeof qa !== "undefined") {
|
||
qa.__uni_console__ = true;
|
||
}
|
||
}
|
||
initRuntimeSocketService();
|
||
const _export_sfc = (sfc, props2) => {
|
||
const target = sfc.__vccOpts || sfc;
|
||
for (const [key, val] of props2) {
|
||
target[key] = val;
|
||
}
|
||
return target;
|
||
};
|
||
function initVueIds(vueIds, mpInstance) {
|
||
if (!vueIds) {
|
||
return;
|
||
}
|
||
const ids = vueIds.split(",");
|
||
const len = ids.length;
|
||
if (len === 1) {
|
||
mpInstance._$vueId = ids[0];
|
||
} else if (len === 2) {
|
||
mpInstance._$vueId = ids[0];
|
||
mpInstance._$vuePid = ids[1];
|
||
}
|
||
}
|
||
const EXTRAS = ["externalClasses"];
|
||
function initExtraOptions(miniProgramComponentOptions, vueOptions) {
|
||
EXTRAS.forEach((name) => {
|
||
if (hasOwn$1(vueOptions, name)) {
|
||
miniProgramComponentOptions[name] = vueOptions[name];
|
||
}
|
||
});
|
||
}
|
||
const WORKLET_RE = /_(.*)_worklet_factory_/;
|
||
function initWorkletMethods(mpMethods, vueMethods) {
|
||
if (vueMethods) {
|
||
Object.keys(vueMethods).forEach((name) => {
|
||
const matches = name.match(WORKLET_RE);
|
||
if (matches) {
|
||
const workletName = matches[1];
|
||
mpMethods[name] = vueMethods[name];
|
||
mpMethods[workletName] = vueMethods[workletName];
|
||
}
|
||
});
|
||
}
|
||
}
|
||
function initWxsCallMethods(methods, wxsCallMethods) {
|
||
if (!isArray$1(wxsCallMethods)) {
|
||
return;
|
||
}
|
||
wxsCallMethods.forEach((callMethod) => {
|
||
methods[callMethod] = function(args) {
|
||
return this.$vm[callMethod](args);
|
||
};
|
||
});
|
||
}
|
||
function selectAllComponents(mpInstance, selector, $refs) {
|
||
const components = mpInstance.selectAllComponents(selector);
|
||
components.forEach((component) => {
|
||
const ref2 = component.properties.uR;
|
||
$refs[ref2] = component.$vm || component;
|
||
});
|
||
}
|
||
function initRefs(instance, mpInstance) {
|
||
Object.defineProperty(instance, "refs", {
|
||
get() {
|
||
const $refs = {};
|
||
selectAllComponents(mpInstance, ".r", $refs);
|
||
const forComponents = mpInstance.selectAllComponents(".r-i-f");
|
||
forComponents.forEach((component) => {
|
||
const ref2 = component.properties.uR;
|
||
if (!ref2) {
|
||
return;
|
||
}
|
||
if (!$refs[ref2]) {
|
||
$refs[ref2] = [];
|
||
}
|
||
$refs[ref2].push(component.$vm || component);
|
||
});
|
||
return $refs;
|
||
}
|
||
});
|
||
}
|
||
function findVmByVueId(instance, vuePid) {
|
||
const $children = instance.$children;
|
||
for (let i = $children.length - 1; i >= 0; i--) {
|
||
const childVm = $children[i];
|
||
if (childVm.$scope._$vueId === vuePid) {
|
||
return childVm;
|
||
}
|
||
}
|
||
let parentVm;
|
||
for (let i = $children.length - 1; i >= 0; i--) {
|
||
parentVm = findVmByVueId($children[i], vuePid);
|
||
if (parentVm) {
|
||
return parentVm;
|
||
}
|
||
}
|
||
}
|
||
function getLocaleLanguage() {
|
||
var _a;
|
||
let localeLanguage = "";
|
||
{
|
||
const appBaseInfo = ((_a = wx.getAppBaseInfo) === null || _a === void 0 ? void 0 : _a.call(wx)) || wx.getSystemInfoSync();
|
||
const language = appBaseInfo && appBaseInfo.language ? appBaseInfo.language : LOCALE_EN;
|
||
localeLanguage = normalizeLocale(language) || LOCALE_EN;
|
||
}
|
||
return localeLanguage;
|
||
}
|
||
const MP_METHODS = [
|
||
"createSelectorQuery",
|
||
"createIntersectionObserver",
|
||
"selectAllComponents",
|
||
"selectComponent"
|
||
];
|
||
function createEmitFn(oldEmit, ctx) {
|
||
return function emit2(event, ...args) {
|
||
const scope = ctx.$scope;
|
||
if (scope && event) {
|
||
const detail = { __args__: args };
|
||
{
|
||
scope.triggerEvent(event, detail);
|
||
}
|
||
}
|
||
return oldEmit.apply(this, [event, ...args]);
|
||
};
|
||
}
|
||
function initBaseInstance(instance, options) {
|
||
const ctx = instance.ctx;
|
||
ctx.mpType = options.mpType;
|
||
ctx.$mpType = options.mpType;
|
||
ctx.$mpPlatform = "mp-weixin";
|
||
ctx.$scope = options.mpInstance;
|
||
{
|
||
Object.defineProperties(ctx, {
|
||
// only id
|
||
[VIRTUAL_HOST_ID]: {
|
||
get() {
|
||
const id = this.$scope.data[VIRTUAL_HOST_ID];
|
||
return id === void 0 ? "" : id;
|
||
}
|
||
}
|
||
});
|
||
}
|
||
ctx.$mp = {};
|
||
{
|
||
ctx._self = {};
|
||
}
|
||
instance.slots = {};
|
||
if (isArray$1(options.slots) && options.slots.length) {
|
||
options.slots.forEach((name) => {
|
||
instance.slots[name] = true;
|
||
});
|
||
if (instance.slots[SLOT_DEFAULT_NAME]) {
|
||
instance.slots.default = true;
|
||
}
|
||
}
|
||
ctx.getOpenerEventChannel = function() {
|
||
{
|
||
return options.mpInstance.getOpenerEventChannel();
|
||
}
|
||
};
|
||
ctx.$hasHook = hasHook;
|
||
ctx.$callHook = callHook;
|
||
instance.emit = createEmitFn(instance.emit, ctx);
|
||
}
|
||
function initComponentInstance(instance, options) {
|
||
initBaseInstance(instance, options);
|
||
const ctx = instance.ctx;
|
||
MP_METHODS.forEach((method3) => {
|
||
ctx[method3] = function(...args) {
|
||
const mpInstance = ctx.$scope;
|
||
if (mpInstance && mpInstance[method3]) {
|
||
return mpInstance[method3].apply(mpInstance, args);
|
||
}
|
||
};
|
||
});
|
||
}
|
||
function initMocks(instance, mpInstance, mocks2) {
|
||
const ctx = instance.ctx;
|
||
mocks2.forEach((mock) => {
|
||
if (hasOwn$1(mpInstance, mock)) {
|
||
instance[mock] = ctx[mock] = mpInstance[mock];
|
||
}
|
||
});
|
||
}
|
||
function hasHook(name) {
|
||
const hooks = this.$[name];
|
||
if (hooks && hooks.length) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
function callHook(name, args) {
|
||
if (name === "mounted") {
|
||
callHook.call(this, "bm");
|
||
this.$.isMounted = true;
|
||
name = "m";
|
||
}
|
||
const hooks = this.$[name];
|
||
return hooks && invokeArrayFns(hooks, args);
|
||
}
|
||
const PAGE_INIT_HOOKS = [
|
||
ON_LOAD,
|
||
ON_SHOW,
|
||
ON_HIDE,
|
||
ON_UNLOAD,
|
||
ON_RESIZE,
|
||
ON_TAB_ITEM_TAP,
|
||
ON_REACH_BOTTOM,
|
||
ON_PULL_DOWN_REFRESH,
|
||
ON_ADD_TO_FAVORITES
|
||
// 'onReady', // lifetimes.ready
|
||
// 'onPageScroll', // 影响性能,开发者手动注册
|
||
// 'onShareTimeline', // 右上角菜单,开发者手动注册
|
||
// 'onShareAppMessage' // 右上角菜单,开发者手动注册
|
||
];
|
||
function findHooks(vueOptions, hooks = /* @__PURE__ */ new Set()) {
|
||
if (vueOptions) {
|
||
Object.keys(vueOptions).forEach((name) => {
|
||
if (isUniLifecycleHook(name, vueOptions[name])) {
|
||
hooks.add(name);
|
||
}
|
||
});
|
||
{
|
||
const { extends: extendsOptions, mixins } = vueOptions;
|
||
if (mixins) {
|
||
mixins.forEach((mixin2) => findHooks(mixin2, hooks));
|
||
}
|
||
if (extendsOptions) {
|
||
findHooks(extendsOptions, hooks);
|
||
}
|
||
}
|
||
}
|
||
return hooks;
|
||
}
|
||
function initHook(mpOptions, hook, excludes) {
|
||
if (excludes.indexOf(hook) === -1 && !hasOwn$1(mpOptions, hook)) {
|
||
mpOptions[hook] = function(args) {
|
||
return this.$vm && this.$vm.$callHook(hook, args);
|
||
};
|
||
}
|
||
}
|
||
const EXCLUDE_HOOKS = [ON_READY];
|
||
function initHooks(mpOptions, hooks, excludes = EXCLUDE_HOOKS) {
|
||
hooks.forEach((hook) => initHook(mpOptions, hook, excludes));
|
||
}
|
||
function initUnknownHooks(mpOptions, vueOptions, excludes = EXCLUDE_HOOKS) {
|
||
findHooks(vueOptions).forEach((hook) => initHook(mpOptions, hook, excludes));
|
||
}
|
||
function initRuntimeHooks(mpOptions, runtimeHooks) {
|
||
if (!runtimeHooks) {
|
||
return;
|
||
}
|
||
const hooks = Object.keys(MINI_PROGRAM_PAGE_RUNTIME_HOOKS);
|
||
hooks.forEach((hook) => {
|
||
if (runtimeHooks & MINI_PROGRAM_PAGE_RUNTIME_HOOKS[hook]) {
|
||
initHook(mpOptions, hook, []);
|
||
}
|
||
});
|
||
}
|
||
const findMixinRuntimeHooks = /* @__PURE__ */ once(() => {
|
||
const runtimeHooks = [];
|
||
const app = isFunction(getApp) && getApp({ allowDefault: true });
|
||
if (app && app.$vm && app.$vm.$) {
|
||
const mixins = app.$vm.$.appContext.mixins;
|
||
if (isArray$1(mixins)) {
|
||
const hooks = Object.keys(MINI_PROGRAM_PAGE_RUNTIME_HOOKS);
|
||
mixins.forEach((mixin2) => {
|
||
hooks.forEach((hook) => {
|
||
if (hasOwn$1(mixin2, hook) && !runtimeHooks.includes(hook)) {
|
||
runtimeHooks.push(hook);
|
||
}
|
||
});
|
||
});
|
||
}
|
||
}
|
||
return runtimeHooks;
|
||
});
|
||
function initMixinRuntimeHooks(mpOptions) {
|
||
initHooks(mpOptions, findMixinRuntimeHooks());
|
||
}
|
||
const HOOKS = [
|
||
ON_SHOW,
|
||
ON_HIDE,
|
||
ON_ERROR,
|
||
ON_THEME_CHANGE,
|
||
ON_PAGE_NOT_FOUND,
|
||
ON_UNHANDLE_REJECTION
|
||
];
|
||
function parseApp(instance, parseAppOptions) {
|
||
const internalInstance = instance.$;
|
||
const appOptions = {
|
||
globalData: instance.$options && instance.$options.globalData || {},
|
||
$vm: instance,
|
||
// mp-alipay 组件 data 初始化比 onLaunch 早,提前挂载
|
||
onLaunch(options) {
|
||
this.$vm = instance;
|
||
const ctx = internalInstance.ctx;
|
||
if (this.$vm && ctx.$scope && ctx.$callHook) {
|
||
return;
|
||
}
|
||
initBaseInstance(internalInstance, {
|
||
mpType: "app",
|
||
mpInstance: this,
|
||
slots: []
|
||
});
|
||
ctx.globalData = this.globalData;
|
||
instance.$callHook(ON_LAUNCH, options);
|
||
}
|
||
};
|
||
const onErrorHandlers = wx.$onErrorHandlers;
|
||
if (onErrorHandlers) {
|
||
onErrorHandlers.forEach((fn) => {
|
||
injectHook(ON_ERROR, fn, internalInstance);
|
||
});
|
||
onErrorHandlers.length = 0;
|
||
}
|
||
initLocale(instance);
|
||
const vueOptions = instance.$.type;
|
||
initHooks(appOptions, HOOKS);
|
||
initUnknownHooks(appOptions, vueOptions);
|
||
{
|
||
const methods = vueOptions.methods;
|
||
methods && extend(appOptions, methods);
|
||
}
|
||
return appOptions;
|
||
}
|
||
function initCreateApp(parseAppOptions) {
|
||
return function createApp2(vm) {
|
||
return App(parseApp(vm));
|
||
};
|
||
}
|
||
function initCreateSubpackageApp(parseAppOptions) {
|
||
return function createApp2(vm) {
|
||
const appOptions = parseApp(vm);
|
||
const app = isFunction(getApp) && getApp({
|
||
allowDefault: true
|
||
});
|
||
if (!app)
|
||
return;
|
||
vm.$.ctx.$scope = app;
|
||
const globalData = app.globalData;
|
||
if (globalData) {
|
||
Object.keys(appOptions.globalData).forEach((name) => {
|
||
if (!hasOwn$1(globalData, name)) {
|
||
globalData[name] = appOptions.globalData[name];
|
||
}
|
||
});
|
||
}
|
||
Object.keys(appOptions).forEach((name) => {
|
||
if (!hasOwn$1(app, name)) {
|
||
app[name] = appOptions[name];
|
||
}
|
||
});
|
||
initAppLifecycle(appOptions, vm);
|
||
};
|
||
}
|
||
function initAppLifecycle(appOptions, vm) {
|
||
if (isFunction(appOptions.onLaunch)) {
|
||
const args = wx.getLaunchOptionsSync && wx.getLaunchOptionsSync();
|
||
appOptions.onLaunch(args);
|
||
}
|
||
if (isFunction(appOptions.onShow) && wx.onAppShow) {
|
||
wx.onAppShow((args) => {
|
||
vm.$callHook("onShow", args);
|
||
});
|
||
}
|
||
if (isFunction(appOptions.onHide) && wx.onAppHide) {
|
||
wx.onAppHide((args) => {
|
||
vm.$callHook("onHide", args);
|
||
});
|
||
}
|
||
}
|
||
function initLocale(appVm) {
|
||
const locale = ref(getLocaleLanguage());
|
||
Object.defineProperty(appVm, "$locale", {
|
||
get() {
|
||
return locale.value;
|
||
},
|
||
set(v) {
|
||
locale.value = v;
|
||
}
|
||
});
|
||
}
|
||
const builtInProps = [
|
||
// 百度小程序,快手小程序自定义组件不支持绑定动态事件,动态dataset,故通过props传递事件信息
|
||
// event-opts
|
||
"eO",
|
||
// 组件 ref
|
||
"uR",
|
||
// 组件 ref-in-for
|
||
"uRIF",
|
||
// 组件 id
|
||
"uI",
|
||
// 组件类型 m: 小程序组件
|
||
"uT",
|
||
// 组件 props
|
||
"uP",
|
||
// 小程序不能直接定义 $slots 的 props,所以通过 vueSlots 转换到 $slots
|
||
"uS"
|
||
];
|
||
function initDefaultProps(options, isBehavior = false) {
|
||
const properties = {};
|
||
if (!isBehavior) {
|
||
let observerSlots = function(newVal) {
|
||
const $slots = /* @__PURE__ */ Object.create(null);
|
||
newVal && newVal.forEach((slotName) => {
|
||
$slots[slotName] = true;
|
||
});
|
||
this.setData({
|
||
$slots
|
||
});
|
||
};
|
||
builtInProps.forEach((name) => {
|
||
properties[name] = {
|
||
type: null,
|
||
value: ""
|
||
};
|
||
});
|
||
properties.uS = {
|
||
type: null,
|
||
value: []
|
||
};
|
||
{
|
||
properties.uS.observer = observerSlots;
|
||
}
|
||
}
|
||
if (options.behaviors) {
|
||
if (options.behaviors.includes("wx://form-field")) {
|
||
if (!options.properties || !options.properties.name) {
|
||
properties.name = {
|
||
type: null,
|
||
value: ""
|
||
};
|
||
}
|
||
if (!options.properties || !options.properties.value) {
|
||
properties.value = {
|
||
type: null,
|
||
value: ""
|
||
};
|
||
}
|
||
}
|
||
}
|
||
return properties;
|
||
}
|
||
function initVirtualHostProps(options) {
|
||
const properties = {};
|
||
{
|
||
if (options && options.virtualHost) {
|
||
properties[VIRTUAL_HOST_STYLE] = {
|
||
type: null,
|
||
value: ""
|
||
};
|
||
properties[VIRTUAL_HOST_CLASS] = {
|
||
type: null,
|
||
value: ""
|
||
};
|
||
properties[VIRTUAL_HOST_HIDDEN] = {
|
||
type: null,
|
||
value: ""
|
||
};
|
||
properties[VIRTUAL_HOST_ID] = {
|
||
type: null,
|
||
value: ""
|
||
};
|
||
}
|
||
}
|
||
return properties;
|
||
}
|
||
function initProps(mpComponentOptions) {
|
||
if (!mpComponentOptions.properties) {
|
||
mpComponentOptions.properties = {};
|
||
}
|
||
extend(mpComponentOptions.properties, initDefaultProps(mpComponentOptions), initVirtualHostProps(mpComponentOptions.options));
|
||
}
|
||
const PROP_TYPES = [String, Number, Boolean, Object, Array, null];
|
||
function parsePropType(type2, defaultValue) {
|
||
if (isArray$1(type2) && type2.length === 1) {
|
||
return type2[0];
|
||
}
|
||
return type2;
|
||
}
|
||
function normalizePropType(type2, defaultValue) {
|
||
const res = parsePropType(type2);
|
||
return PROP_TYPES.indexOf(res) !== -1 ? res : null;
|
||
}
|
||
function initPageProps({ properties }, rawProps) {
|
||
if (isArray$1(rawProps)) {
|
||
rawProps.forEach((key) => {
|
||
properties[key] = {
|
||
type: String,
|
||
value: ""
|
||
};
|
||
});
|
||
} else if (isPlainObject$1(rawProps)) {
|
||
Object.keys(rawProps).forEach((key) => {
|
||
const opts = rawProps[key];
|
||
if (isPlainObject$1(opts)) {
|
||
let value2 = opts.default;
|
||
if (isFunction(value2)) {
|
||
value2 = value2();
|
||
}
|
||
const type2 = opts.type;
|
||
opts.type = normalizePropType(type2);
|
||
properties[key] = {
|
||
type: opts.type,
|
||
value: value2
|
||
};
|
||
} else {
|
||
properties[key] = {
|
||
type: normalizePropType(opts)
|
||
};
|
||
}
|
||
});
|
||
}
|
||
}
|
||
function findPropsData(properties, isPage2) {
|
||
return (isPage2 ? findPagePropsData(properties) : findComponentPropsData(resolvePropValue(properties.uP))) || {};
|
||
}
|
||
function findPagePropsData(properties) {
|
||
const propsData = {};
|
||
if (isPlainObject$1(properties)) {
|
||
Object.keys(properties).forEach((name) => {
|
||
if (builtInProps.indexOf(name) === -1) {
|
||
propsData[name] = resolvePropValue(properties[name]);
|
||
}
|
||
});
|
||
}
|
||
return propsData;
|
||
}
|
||
function initFormField(vm) {
|
||
const vueOptions = vm.$options;
|
||
if (isArray$1(vueOptions.behaviors) && vueOptions.behaviors.includes("uni://form-field")) {
|
||
vm.$watch("modelValue", () => {
|
||
vm.$scope && vm.$scope.setData({
|
||
name: vm.name,
|
||
value: vm.modelValue
|
||
});
|
||
}, {
|
||
immediate: true
|
||
});
|
||
}
|
||
}
|
||
function resolvePropValue(prop) {
|
||
return prop;
|
||
}
|
||
function initData(_) {
|
||
return {};
|
||
}
|
||
function initPropsObserver(componentOptions) {
|
||
const observe = function observe2() {
|
||
const up = this.properties.uP;
|
||
if (!up) {
|
||
return;
|
||
}
|
||
if (this.$vm) {
|
||
updateComponentProps(resolvePropValue(up), this.$vm.$);
|
||
} else if (resolvePropValue(this.properties.uT) === "m") {
|
||
updateMiniProgramComponentProperties(resolvePropValue(up), this);
|
||
}
|
||
};
|
||
{
|
||
if (!componentOptions.observers) {
|
||
componentOptions.observers = {};
|
||
}
|
||
componentOptions.observers.uP = observe;
|
||
}
|
||
}
|
||
function updateMiniProgramComponentProperties(up, mpInstance) {
|
||
const prevProps = mpInstance.properties;
|
||
const nextProps = findComponentPropsData(up) || {};
|
||
if (hasPropsChanged(prevProps, nextProps, false)) {
|
||
mpInstance.setData(nextProps);
|
||
}
|
||
}
|
||
function updateComponentProps(up, instance) {
|
||
const prevProps = toRaw(instance.props);
|
||
const nextProps = findComponentPropsData(up) || {};
|
||
if (hasPropsChanged(prevProps, nextProps)) {
|
||
updateProps(instance, nextProps, prevProps, false);
|
||
if (hasQueueJob(instance.update)) {
|
||
invalidateJob(instance.update);
|
||
}
|
||
{
|
||
instance.update();
|
||
}
|
||
}
|
||
}
|
||
function hasPropsChanged(prevProps, nextProps, checkLen = true) {
|
||
const nextKeys = Object.keys(nextProps);
|
||
if (checkLen && nextKeys.length !== Object.keys(prevProps).length) {
|
||
return true;
|
||
}
|
||
for (let i = 0; i < nextKeys.length; i++) {
|
||
const key = nextKeys[i];
|
||
if (nextProps[key] !== prevProps[key]) {
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
function initBehaviors(vueOptions) {
|
||
const vueBehaviors = vueOptions.behaviors;
|
||
let vueProps = vueOptions.props;
|
||
if (!vueProps) {
|
||
vueOptions.props = vueProps = [];
|
||
}
|
||
const behaviors = [];
|
||
if (isArray$1(vueBehaviors)) {
|
||
vueBehaviors.forEach((behavior) => {
|
||
behaviors.push(behavior.replace("uni://", "wx://"));
|
||
if (behavior === "uni://form-field") {
|
||
if (isArray$1(vueProps)) {
|
||
vueProps.push("name");
|
||
vueProps.push("modelValue");
|
||
} else {
|
||
vueProps.name = {
|
||
type: String,
|
||
default: ""
|
||
};
|
||
vueProps.modelValue = {
|
||
type: [String, Number, Boolean, Array, Object, Date],
|
||
default: ""
|
||
};
|
||
}
|
||
}
|
||
});
|
||
}
|
||
return behaviors;
|
||
}
|
||
function applyOptions(componentOptions, vueOptions) {
|
||
componentOptions.data = initData();
|
||
componentOptions.behaviors = initBehaviors(vueOptions);
|
||
}
|
||
function parseComponent(vueOptions, { parse: parse2, mocks: mocks2, isPage: isPage2, isPageInProject, initRelation: initRelation2, handleLink: handleLink2, initLifetimes: initLifetimes2 }) {
|
||
vueOptions = vueOptions.default || vueOptions;
|
||
const options = {
|
||
multipleSlots: true,
|
||
// styleIsolation: 'apply-shared',
|
||
addGlobalClass: true,
|
||
pureDataPattern: /^uP$/
|
||
};
|
||
if (isArray$1(vueOptions.mixins)) {
|
||
vueOptions.mixins.forEach((item) => {
|
||
if (isObject$2(item.options)) {
|
||
extend(options, item.options);
|
||
}
|
||
});
|
||
}
|
||
if (vueOptions.options) {
|
||
extend(options, vueOptions.options);
|
||
}
|
||
const mpComponentOptions = {
|
||
options,
|
||
lifetimes: initLifetimes2({ mocks: mocks2, isPage: isPage2, initRelation: initRelation2, vueOptions }),
|
||
pageLifetimes: {
|
||
show() {
|
||
this.$vm && this.$vm.$callHook("onPageShow");
|
||
},
|
||
hide() {
|
||
this.$vm && this.$vm.$callHook("onPageHide");
|
||
},
|
||
resize(size2) {
|
||
this.$vm && this.$vm.$callHook("onPageResize", size2);
|
||
}
|
||
},
|
||
methods: {
|
||
__l: handleLink2
|
||
}
|
||
};
|
||
{
|
||
applyOptions(mpComponentOptions, vueOptions);
|
||
}
|
||
initProps(mpComponentOptions);
|
||
initPropsObserver(mpComponentOptions);
|
||
initExtraOptions(mpComponentOptions, vueOptions);
|
||
initWxsCallMethods(mpComponentOptions.methods, vueOptions.wxsCallMethods);
|
||
{
|
||
initWorkletMethods(mpComponentOptions.methods, vueOptions.methods);
|
||
}
|
||
if (parse2) {
|
||
parse2(mpComponentOptions, { handleLink: handleLink2 });
|
||
}
|
||
return mpComponentOptions;
|
||
}
|
||
function initCreateComponent(parseOptions2) {
|
||
return function createComponent2(vueComponentOptions) {
|
||
return Component(parseComponent(vueComponentOptions, parseOptions2));
|
||
};
|
||
}
|
||
let $createComponentFn;
|
||
let $destroyComponentFn;
|
||
function getAppVm() {
|
||
return getApp().$vm;
|
||
}
|
||
function $createComponent(initialVNode, options) {
|
||
if (!$createComponentFn) {
|
||
$createComponentFn = getAppVm().$createComponent;
|
||
}
|
||
const proxy = $createComponentFn(initialVNode, options);
|
||
return getExposeProxy(proxy.$) || proxy;
|
||
}
|
||
function $destroyComponent(instance) {
|
||
if (!$destroyComponentFn) {
|
||
$destroyComponentFn = getAppVm().$destroyComponent;
|
||
}
|
||
return $destroyComponentFn(instance);
|
||
}
|
||
function parsePage(vueOptions, parseOptions2) {
|
||
const { parse: parse2, mocks: mocks2, isPage: isPage2, initRelation: initRelation2, handleLink: handleLink2, initLifetimes: initLifetimes2 } = parseOptions2;
|
||
const miniProgramPageOptions = parseComponent(vueOptions, {
|
||
mocks: mocks2,
|
||
isPage: isPage2,
|
||
isPageInProject: true,
|
||
initRelation: initRelation2,
|
||
handleLink: handleLink2,
|
||
initLifetimes: initLifetimes2
|
||
});
|
||
initPageProps(miniProgramPageOptions, (vueOptions.default || vueOptions).props);
|
||
const methods = miniProgramPageOptions.methods;
|
||
methods.onLoad = function(query) {
|
||
{
|
||
this.options = query;
|
||
}
|
||
this.$page = {
|
||
fullPath: addLeadingSlash(this.route + stringifyQuery(query))
|
||
};
|
||
return this.$vm && this.$vm.$callHook(ON_LOAD, query);
|
||
};
|
||
initHooks(methods, PAGE_INIT_HOOKS);
|
||
{
|
||
initUnknownHooks(methods, vueOptions);
|
||
}
|
||
initRuntimeHooks(methods, vueOptions.__runtimeHooks);
|
||
initMixinRuntimeHooks(methods);
|
||
parse2 && parse2(miniProgramPageOptions, { handleLink: handleLink2 });
|
||
return miniProgramPageOptions;
|
||
}
|
||
function initCreatePage(parseOptions2) {
|
||
return function createPage2(vuePageOptions) {
|
||
return Component(parsePage(vuePageOptions, parseOptions2));
|
||
};
|
||
}
|
||
function initCreatePluginApp(parseAppOptions) {
|
||
return function createApp2(vm) {
|
||
initAppLifecycle(parseApp(vm), vm);
|
||
};
|
||
}
|
||
const MPPage = Page;
|
||
const MPComponent = Component;
|
||
function initTriggerEvent(mpInstance) {
|
||
const oldTriggerEvent = mpInstance.triggerEvent;
|
||
const newTriggerEvent = function(event, ...args) {
|
||
return oldTriggerEvent.apply(mpInstance, [
|
||
customizeEvent(event),
|
||
...args
|
||
]);
|
||
};
|
||
try {
|
||
mpInstance.triggerEvent = newTriggerEvent;
|
||
} catch (error2) {
|
||
mpInstance._triggerEvent = newTriggerEvent;
|
||
}
|
||
}
|
||
function initMiniProgramHook(name, options, isComponent) {
|
||
const oldHook = options[name];
|
||
if (!oldHook) {
|
||
options[name] = function() {
|
||
initTriggerEvent(this);
|
||
};
|
||
} else {
|
||
options[name] = function(...args) {
|
||
initTriggerEvent(this);
|
||
return oldHook.apply(this, args);
|
||
};
|
||
}
|
||
}
|
||
Page = function(options) {
|
||
initMiniProgramHook(ON_LOAD, options);
|
||
return MPPage(options);
|
||
};
|
||
Component = function(options) {
|
||
initMiniProgramHook("created", options);
|
||
const isVueComponent = options.properties && options.properties.uP;
|
||
if (!isVueComponent) {
|
||
initProps(options);
|
||
initPropsObserver(options);
|
||
}
|
||
return MPComponent(options);
|
||
};
|
||
function initLifetimes({ mocks: mocks2, isPage: isPage2, initRelation: initRelation2, vueOptions }) {
|
||
return {
|
||
attached() {
|
||
let properties = this.properties;
|
||
initVueIds(properties.uI, this);
|
||
const relationOptions = {
|
||
vuePid: this._$vuePid
|
||
};
|
||
initRelation2(this, relationOptions);
|
||
const mpInstance = this;
|
||
const isMiniProgramPage = isPage2(mpInstance);
|
||
let propsData = properties;
|
||
this.$vm = $createComponent({
|
||
type: vueOptions,
|
||
props: findPropsData(propsData, isMiniProgramPage)
|
||
}, {
|
||
mpType: isMiniProgramPage ? "page" : "component",
|
||
mpInstance,
|
||
slots: properties.uS || {},
|
||
// vueSlots
|
||
parentComponent: relationOptions.parent && relationOptions.parent.$,
|
||
onBeforeSetup(instance, options) {
|
||
initRefs(instance, mpInstance);
|
||
initMocks(instance, mpInstance, mocks2);
|
||
initComponentInstance(instance, options);
|
||
}
|
||
});
|
||
if (!isMiniProgramPage) {
|
||
initFormField(this.$vm);
|
||
}
|
||
},
|
||
ready() {
|
||
if (this.$vm) {
|
||
{
|
||
this.$vm.$callHook("mounted");
|
||
this.$vm.$callHook(ON_READY);
|
||
}
|
||
}
|
||
},
|
||
detached() {
|
||
if (this.$vm) {
|
||
pruneComponentPropsCache(this.$vm.$.uid);
|
||
$destroyComponent(this.$vm);
|
||
}
|
||
}
|
||
};
|
||
}
|
||
const mocks = ["__route__", "__wxExparserNodeId__", "__wxWebviewId__"];
|
||
function isPage(mpInstance) {
|
||
return !!mpInstance.route;
|
||
}
|
||
function initRelation(mpInstance, detail) {
|
||
mpInstance.triggerEvent("__l", detail);
|
||
}
|
||
function handleLink(event) {
|
||
const detail = event.detail || event.value;
|
||
const vuePid = detail.vuePid;
|
||
let parentVm;
|
||
if (vuePid) {
|
||
parentVm = findVmByVueId(this.$vm, vuePid);
|
||
}
|
||
if (!parentVm) {
|
||
parentVm = this.$vm;
|
||
}
|
||
detail.parent = parentVm;
|
||
}
|
||
var parseOptions = /* @__PURE__ */ Object.freeze({
|
||
__proto__: null,
|
||
handleLink,
|
||
initLifetimes,
|
||
initRelation,
|
||
isPage,
|
||
mocks
|
||
});
|
||
const createApp = initCreateApp();
|
||
const createPage = initCreatePage(parseOptions);
|
||
const createComponent = initCreateComponent(parseOptions);
|
||
const createPluginApp = initCreatePluginApp();
|
||
const createSubpackageApp = initCreateSubpackageApp();
|
||
{
|
||
wx.createApp = global.createApp = createApp;
|
||
wx.createPage = createPage;
|
||
wx.createComponent = createComponent;
|
||
wx.createPluginApp = global.createPluginApp = createPluginApp;
|
||
wx.createSubpackageApp = global.createSubpackageApp = createSubpackageApp;
|
||
}
|
||
const createLifeCycleHook = (lifecycle, flag2 = 0) => (hook, target = getCurrentInstance()) => {
|
||
!isInSSRComponentSetup && injectHook(lifecycle, hook, target);
|
||
};
|
||
const onShow = /* @__PURE__ */ createLifeCycleHook(
|
||
ON_SHOW,
|
||
1 | 2
|
||
/* HookFlags.PAGE */
|
||
);
|
||
const onHide = /* @__PURE__ */ createLifeCycleHook(
|
||
ON_HIDE,
|
||
1 | 2
|
||
/* HookFlags.PAGE */
|
||
);
|
||
const onLaunch = /* @__PURE__ */ createLifeCycleHook(
|
||
ON_LAUNCH,
|
||
1
|
||
/* HookFlags.APP */
|
||
);
|
||
const onLoad = /* @__PURE__ */ createLifeCycleHook(
|
||
ON_LOAD,
|
||
2
|
||
/* HookFlags.PAGE */
|
||
);
|
||
const onReady = /* @__PURE__ */ createLifeCycleHook(
|
||
ON_READY,
|
||
2
|
||
/* HookFlags.PAGE */
|
||
);
|
||
const defineMixin = (options) => {
|
||
return options;
|
||
};
|
||
function email(value2) {
|
||
return /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/.test(value2);
|
||
}
|
||
function mobile(value2) {
|
||
return /^1[23456789]\d{9}$/.test(value2);
|
||
}
|
||
function url(value2) {
|
||
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(value2);
|
||
}
|
||
function date(value2) {
|
||
if (!value2)
|
||
return false;
|
||
if (typeof value2 === "number") {
|
||
if (value2.toString().length !== 10 && value2.toString().length !== 13) {
|
||
return false;
|
||
}
|
||
return !isNaN(new Date(value2).getTime());
|
||
}
|
||
if (typeof value2 === "string") {
|
||
const numV = Number(value2);
|
||
if (!isNaN(numV)) {
|
||
if (numV.toString().length === 10 || numV.toString().length === 13) {
|
||
return !isNaN(new Date(numV).getTime());
|
||
}
|
||
}
|
||
if (value2.length < 10 || value2.length > 19) {
|
||
return false;
|
||
}
|
||
const dateRegex = /^\d{4}[-\/]\d{2}[-\/]\d{2}( \d{1,2}:\d{2}(:\d{2})?)?$/;
|
||
if (!dateRegex.test(value2)) {
|
||
return false;
|
||
}
|
||
const dateValue = new Date(value2);
|
||
return !isNaN(dateValue.getTime());
|
||
}
|
||
return false;
|
||
}
|
||
function dateISO(value2) {
|
||
return /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(value2);
|
||
}
|
||
function number(value2) {
|
||
return /^[\+-]?(\d+\.?\d*|\.\d+|\d\.\d+e\+\d+)$/.test(value2);
|
||
}
|
||
function string$1(value2) {
|
||
return typeof value2 === "string";
|
||
}
|
||
function digits(value2) {
|
||
return /^\d+$/.test(value2);
|
||
}
|
||
function idCard(value2) {
|
||
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(
|
||
value2
|
||
);
|
||
}
|
||
function carNo(value2) {
|
||
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 (value2.length === 7) {
|
||
return creg.test(value2);
|
||
}
|
||
if (value2.length === 8) {
|
||
return xreg.test(value2);
|
||
}
|
||
return false;
|
||
}
|
||
function amount(value2) {
|
||
return /^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0\.\d{1,2}$/.test(value2);
|
||
}
|
||
function chinese(value2) {
|
||
const reg = /^[\u4e00-\u9fa5]+$/gi;
|
||
return reg.test(value2);
|
||
}
|
||
function letter(value2) {
|
||
return /^[a-zA-Z]*$/.test(value2);
|
||
}
|
||
function enOrNum(value2) {
|
||
const reg = /^[0-9a-zA-Z]*$/g;
|
||
return reg.test(value2);
|
||
}
|
||
function contains(value2, param) {
|
||
return value2.indexOf(param) >= 0;
|
||
}
|
||
function range$2(value2, param) {
|
||
return value2 >= param[0] && value2 <= param[1];
|
||
}
|
||
function rangeLength(value2, param) {
|
||
return value2.length >= param[0] && value2.length <= param[1];
|
||
}
|
||
function landline(value2) {
|
||
const reg = /^\d{3,4}-\d{7,8}(-\d{3,4})?$/;
|
||
return reg.test(value2);
|
||
}
|
||
function empty(value2) {
|
||
switch (typeof value2) {
|
||
case "undefined":
|
||
return true;
|
||
case "string":
|
||
if (value2.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g, "").length == 0)
|
||
return true;
|
||
break;
|
||
case "boolean":
|
||
if (!value2)
|
||
return true;
|
||
break;
|
||
case "number":
|
||
if (value2 === 0 || isNaN(value2))
|
||
return true;
|
||
break;
|
||
case "object":
|
||
if (value2 === null || value2.length === 0)
|
||
return true;
|
||
for (const i in value2) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
function jsonString(value2) {
|
||
if (typeof value2 === "string") {
|
||
try {
|
||
const obj = JSON.parse(value2);
|
||
if (typeof obj === "object" && obj) {
|
||
return true;
|
||
}
|
||
return false;
|
||
} catch (e2) {
|
||
return false;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
function array(value2) {
|
||
if (typeof Array.isArray === "function") {
|
||
return Array.isArray(value2);
|
||
}
|
||
return Object.prototype.toString.call(value2) === "[object Array]";
|
||
}
|
||
function object(value2) {
|
||
return Object.prototype.toString.call(value2) === "[object Object]";
|
||
}
|
||
function code(value2, len = 6) {
|
||
return new RegExp(`^\\d{${len}}$`).test(value2);
|
||
}
|
||
function func(value2) {
|
||
return typeof value2 === "function";
|
||
}
|
||
function promise(value2) {
|
||
return object(value2) && func(value2.then) && func(value2.catch);
|
||
}
|
||
function image(value2) {
|
||
const newValue = value2.split("?")[0];
|
||
const IMAGE_REGEXP = /\.(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg)/i;
|
||
return IMAGE_REGEXP.test(newValue);
|
||
}
|
||
function video(value2) {
|
||
const VIDEO_REGEXP = /\.(mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv|m3u8)/i;
|
||
return VIDEO_REGEXP.test(value2);
|
||
}
|
||
function regExp(o2) {
|
||
return o2 && Object.prototype.toString.call(o2) === "[object RegExp]";
|
||
}
|
||
const test = {
|
||
email,
|
||
mobile,
|
||
url,
|
||
date,
|
||
dateISO,
|
||
number,
|
||
digits,
|
||
idCard,
|
||
carNo,
|
||
amount,
|
||
chinese,
|
||
letter,
|
||
enOrNum,
|
||
contains,
|
||
range: range$2,
|
||
rangeLength,
|
||
empty,
|
||
isEmpty: empty,
|
||
jsonString,
|
||
landline,
|
||
object,
|
||
array,
|
||
code,
|
||
func,
|
||
promise,
|
||
video,
|
||
image,
|
||
regExp,
|
||
string: string$1
|
||
};
|
||
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) {
|
||
index$1.__f__("warn", "at node_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";
|
||
{
|
||
index$1.__f__("log", "at node_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$1 = {
|
||
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",
|
||
"up-primary": "#2979ff",
|
||
"up-warning": "#ff9900",
|
||
"up-success": "#19be6b",
|
||
"up-error": "#fa3534",
|
||
"up-info": "#909399",
|
||
"up-main-color": "#303133",
|
||
"up-content-color": "#606266",
|
||
"up-tips-color": "#909399",
|
||
"up-light-color": "#c0c4cc"
|
||
},
|
||
// 默认单位,可以通过配置为rpx,那么在用于传入组件大小参数为数值时,就默认为rpx
|
||
unit: "px",
|
||
// 拦截器
|
||
interceptor: {
|
||
navbarLeftClick: null
|
||
}
|
||
};
|
||
function range$1(min = 0, max = 0, value2 = 0) {
|
||
return Math.max(min, Math.min(max, Number(value2)));
|
||
}
|
||
function getPx(value2, unit = false) {
|
||
if (number(value2)) {
|
||
return unit ? `${value2}px` : Number(value2);
|
||
}
|
||
if (/(rpx|upx)$/.test(value2)) {
|
||
return unit ? `${index$1.upx2px(parseInt(value2))}px` : Number(index$1.upx2px(parseInt(value2)));
|
||
}
|
||
return unit ? `${parseInt(value2)}px` : parseInt(value2);
|
||
}
|
||
function sleep(value2 = 30) {
|
||
return new Promise((resolve2) => {
|
||
setTimeout(() => {
|
||
resolve2();
|
||
}, value2);
|
||
});
|
||
}
|
||
function os() {
|
||
return index$1.getDeviceInfo().platform.toLowerCase();
|
||
}
|
||
function sys() {
|
||
return index$1.getSystemInfoSync();
|
||
}
|
||
function getWindowInfo() {
|
||
let ret = {};
|
||
ret = index$1.getWindowInfo();
|
||
return ret;
|
||
}
|
||
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 r2;
|
||
uuid[8] = uuid[13] = uuid[18] = uuid[23] = "-";
|
||
uuid[14] = "4";
|
||
for (let i = 0; i < 36; i++) {
|
||
if (!uuid[i]) {
|
||
r2 = 0 | Math.random() * 16;
|
||
uuid[i] = chars[i == 19 ? r2 & 3 | 8 : r2];
|
||
}
|
||
}
|
||
}
|
||
if (firstU) {
|
||
uuid.shift();
|
||
return `u${uuid.join("")}`;
|
||
}
|
||
return uuid.join("");
|
||
}
|
||
function $parent(name = void 0) {
|
||
let parent = this.$parent;
|
||
while (parent) {
|
||
name = name.replace(/up-([a-zA-Z0-9-_]+)/g, "u-$1");
|
||
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(value2 = "auto", unit = "") {
|
||
if (!unit) {
|
||
unit = config$1.unit || "px";
|
||
}
|
||
if (unit == "rpx" && number(String(value2))) {
|
||
value2 = value2 * 2;
|
||
}
|
||
value2 = String(value2);
|
||
return number(value2) ? `${value2}${unit}` : value2;
|
||
}
|
||
function deepClone(obj) {
|
||
if ([null, void 0, NaN, false].includes(obj))
|
||
return obj;
|
||
if (typeof obj !== "object" && typeof obj !== "function") {
|
||
return obj;
|
||
}
|
||
const o2 = array(obj) ? [] : {};
|
||
for (const i in obj) {
|
||
if (obj.hasOwnProperty(i)) {
|
||
o2[i] = typeof obj[i] === "object" ? deepClone(obj[i]) : obj[i];
|
||
}
|
||
}
|
||
return o2;
|
||
}
|
||
function deepMerge$2(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$2(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) {
|
||
{
|
||
index$1.__f__("error", "at node_modules/uview-plus/libs/function/index.js:304", `uView提示:${err}`);
|
||
}
|
||
}
|
||
function randomArray(array3 = []) {
|
||
return array3.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 date3;
|
||
if (!dateTime) {
|
||
date3 = /* @__PURE__ */ new Date();
|
||
} else if (/^\d{10}$/.test(dateTime.toString().trim())) {
|
||
date3 = new Date(dateTime * 1e3);
|
||
} else if (typeof dateTime === "string" && /^\d+$/.test(dateTime.trim())) {
|
||
date3 = new Date(Number(dateTime));
|
||
} else {
|
||
date3 = new Date(
|
||
typeof dateTime === "string" ? dateTime.replace(/-/g, "/") : dateTime
|
||
);
|
||
}
|
||
const timeSource = {
|
||
"y": date3.getFullYear().toString(),
|
||
// 年
|
||
"m": (date3.getMonth() + 1).toString().padStart(2, "0"),
|
||
// 月
|
||
"d": date3.getDate().toString().padStart(2, "0"),
|
||
// 日
|
||
"h": date3.getHours().toString().padStart(2, "0"),
|
||
// 时
|
||
"M": date3.getMinutes().toString().padStart(2, "0"),
|
||
// 分
|
||
"s": date3.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, format2 = "yyyy-mm-dd") {
|
||
if (timestamp == null)
|
||
timestamp = Number(/* @__PURE__ */ new Date());
|
||
timestamp = parseInt(timestamp);
|
||
if (timestamp.toString().length == 10)
|
||
timestamp *= 1e3;
|
||
let timer = (/* @__PURE__ */ new Date()).getTime() - timestamp;
|
||
timer = parseInt(timer / 1e3);
|
||
let tips = "";
|
||
switch (true) {
|
||
case timer < 300:
|
||
tips = "刚刚";
|
||
break;
|
||
case (timer >= 300 && timer < 3600):
|
||
tips = `${parseInt(timer / 60)}分钟前`;
|
||
break;
|
||
case (timer >= 3600 && timer < 86400):
|
||
tips = `${parseInt(timer / 3600)}小时前`;
|
||
break;
|
||
case (timer >= 86400 && timer < 2592e3):
|
||
tips = `${parseInt(timer / 86400)}天前`;
|
||
break;
|
||
default:
|
||
if (format2 === false) {
|
||
if (timer >= 2592e3 && timer < 365 * 86400) {
|
||
tips = `${parseInt(timer / (86400 * 30))}个月前`;
|
||
} else {
|
||
tips = `${parseInt(timer / (86400 * 365))}年前`;
|
||
}
|
||
} else {
|
||
tips = timeFormat(timestamp, format2);
|
||
}
|
||
}
|
||
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 value2 = data[key];
|
||
if (["", void 0, null].indexOf(value2) >= 0) {
|
||
continue;
|
||
}
|
||
if (value2.constructor === Array) {
|
||
switch (arrayFormat) {
|
||
case "indices":
|
||
for (let i = 0; i < value2.length; i++) {
|
||
_result.push(`${key}[${i}]=${value2[i]}`);
|
||
}
|
||
break;
|
||
case "brackets":
|
||
value2.forEach((_value) => {
|
||
_result.push(`${key}[]=${_value}`);
|
||
});
|
||
break;
|
||
case "repeat":
|
||
value2.forEach((_value) => {
|
||
_result.push(`${key}=${_value}`);
|
||
});
|
||
break;
|
||
case "comma":
|
||
let commaStr = "";
|
||
value2.forEach((_value) => {
|
||
commaStr += (commaStr ? "," : "") + _value;
|
||
});
|
||
_result.push(`${key}=${commaStr}`);
|
||
break;
|
||
default:
|
||
value2.forEach((_value) => {
|
||
_result.push(`${key}[]=${_value}`);
|
||
});
|
||
}
|
||
} else {
|
||
_result.push(`${key}=${value2}`);
|
||
}
|
||
}
|
||
return _result.length ? prefix + _result.join("&") : "";
|
||
}
|
||
function toast(title, duration = 2e3) {
|
||
index$1.showToast({
|
||
title: String(title),
|
||
icon: "none",
|
||
duration
|
||
});
|
||
}
|
||
function type2icon(type2 = "success", fill = false) {
|
||
if (["primary", "info", "error", "warning", "success"].indexOf(type2) == -1)
|
||
type2 = "success";
|
||
let iconName = "";
|
||
switch (type2) {
|
||
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(number3, decimals = 0, decimalPoint = ".", thousandsSeparator = ",") {
|
||
number3 = `${number3}`.replace(/[^0-9+-Ee.]/g, "");
|
||
const n2 = !isFinite(+number3) ? 0 : +number3;
|
||
const prec = !isFinite(+decimals) ? 0 : Math.abs(decimals);
|
||
const sep = typeof thousandsSeparator === "undefined" ? "," : thousandsSeparator;
|
||
const dec = typeof decimalPoint === "undefined" ? "." : decimalPoint;
|
||
let s2 = "";
|
||
s2 = (prec ? round(n2, prec) + "" : `${Math.round(n2)}`).split(".");
|
||
const re = /(-?\d+)(\d{3})/;
|
||
while (re.test(s2[0])) {
|
||
s2[0] = s2[0].replace(re, `$1${sep}$2`);
|
||
}
|
||
if ((s2[1] || "").length < prec) {
|
||
s2[1] = s2[1] || "";
|
||
s2[1] += new Array(prec - s2[1].length + 1).join("0");
|
||
}
|
||
return s2.join(dec);
|
||
}
|
||
function getDuration(value2, unit = true) {
|
||
const valueNum = parseInt(value2);
|
||
if (unit) {
|
||
if (/s$/.test(value2))
|
||
return value2;
|
||
return value2 > 30 ? `${value2}ms` : `${value2}s`;
|
||
}
|
||
if (/ms$/.test(value2))
|
||
return valueNum;
|
||
if (/s$/.test(value2))
|
||
return valueNum > 30 ? valueNum : valueNum * 1e3;
|
||
return valueNum;
|
||
}
|
||
function padZero(value2) {
|
||
return `00${value2}`.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(obj, key) {
|
||
if (typeof obj !== "object" || null == obj) {
|
||
return "";
|
||
}
|
||
if (typeof key !== "string" || key === "") {
|
||
return "";
|
||
}
|
||
if (key.indexOf(".") !== -1) {
|
||
const keys = key.split(".");
|
||
let firstObj = obj[keys[0]] || {};
|
||
for (let i = 1; i < keys.length; i++) {
|
||
if (firstObj) {
|
||
firstObj = firstObj[keys[i]];
|
||
}
|
||
}
|
||
return firstObj;
|
||
}
|
||
return obj[key];
|
||
}
|
||
function setProperty(obj, key, value2) {
|
||
if (typeof obj !== "object" || null == obj) {
|
||
return;
|
||
}
|
||
const inFn = function(_obj, keys, v) {
|
||
if (keys.length === 1) {
|
||
_obj[keys[0]] = v;
|
||
return;
|
||
}
|
||
while (keys.length > 1) {
|
||
const k = keys[0];
|
||
if (!_obj[k] || typeof _obj[k] !== "object") {
|
||
_obj[k] = {};
|
||
}
|
||
keys.shift();
|
||
inFn(_obj[k], keys, v);
|
||
}
|
||
};
|
||
if (typeof key !== "string" || key === "")
|
||
;
|
||
else if (key.indexOf(".") !== -1) {
|
||
const keys = key.split(".");
|
||
inFn(obj, keys, value2);
|
||
} else {
|
||
obj[key] = value2;
|
||
}
|
||
}
|
||
function page() {
|
||
const pages2 = getCurrentPages();
|
||
return `/${pages2[pages2.length - 1].route || ""}`;
|
||
}
|
||
function pages() {
|
||
const pages2 = getCurrentPages();
|
||
return pages2;
|
||
}
|
||
function getValueByPath(obj, path) {
|
||
const pathArr = path.split(".");
|
||
return pathArr.reduce((acc, curr) => {
|
||
return acc && acc[curr] !== void 0 ? acc[curr] : void 0;
|
||
}, obj);
|
||
}
|
||
const index = {
|
||
range: range$1,
|
||
getPx,
|
||
sleep,
|
||
os,
|
||
sys,
|
||
getWindowInfo,
|
||
random,
|
||
guid,
|
||
$parent,
|
||
addStyle,
|
||
addUnit,
|
||
deepClone,
|
||
deepMerge: deepMerge$2,
|
||
shallowMerge,
|
||
error,
|
||
randomArray,
|
||
timeFormat,
|
||
timeFrom,
|
||
trim,
|
||
queryParams,
|
||
toast,
|
||
type2icon,
|
||
priceFormat,
|
||
getDuration,
|
||
padZero,
|
||
formValidate,
|
||
getProperty,
|
||
setProperty,
|
||
page,
|
||
pages,
|
||
getValueByPath
|
||
// 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(url3) {
|
||
return url3[0] === "/" ? url3 : `/${url3}`;
|
||
}
|
||
// 整合路由参数
|
||
mixinParam(url3, params) {
|
||
url3 = url3 && this.addRootPath(url3);
|
||
let query = "";
|
||
if (/.*\/.*\?.*=.*/.test(url3)) {
|
||
query = queryParams(params, false);
|
||
return url3 += `&${query}`;
|
||
}
|
||
query = queryParams(params);
|
||
return url3 += query;
|
||
}
|
||
// 对外的方法名称
|
||
async route(options = {}, params = {}) {
|
||
let mergeConfig2 = {};
|
||
if (typeof options === "string") {
|
||
mergeConfig2.url = this.mixinParam(options, params);
|
||
mergeConfig2.type = "navigateTo";
|
||
} else {
|
||
mergeConfig2 = deepMerge$2(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$2(this.config, mergeConfig2);
|
||
if (typeof index$1.$u.routeIntercept === "function") {
|
||
const isNext = await new Promise((resolve2, reject) => {
|
||
index$1.$u.routeIntercept(mergeConfig2, resolve2);
|
||
});
|
||
isNext && this.openPage(mergeConfig2);
|
||
} else {
|
||
this.openPage(mergeConfig2);
|
||
}
|
||
}
|
||
// 执行路由跳转
|
||
openPage(config2) {
|
||
const {
|
||
url: url3,
|
||
type: type2,
|
||
delta,
|
||
animationType,
|
||
animationDuration
|
||
} = config2;
|
||
if (config2.type == "navigateTo" || config2.type == "to") {
|
||
index$1.navigateTo({
|
||
url: url3,
|
||
animationType,
|
||
animationDuration
|
||
});
|
||
}
|
||
if (config2.type == "redirectTo" || config2.type == "redirect") {
|
||
index$1.redirectTo({
|
||
url: url3
|
||
});
|
||
}
|
||
if (config2.type == "switchTab" || config2.type == "tab") {
|
||
index$1.switchTab({
|
||
url: url3
|
||
});
|
||
}
|
||
if (config2.type == "reLaunch" || config2.type == "launch") {
|
||
index$1.reLaunch({
|
||
url: url3
|
||
});
|
||
}
|
||
if (config2.type == "navigateBack" || config2.type == "back") {
|
||
index$1.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$2(index$1.$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 url3 = this[urlKey];
|
||
if (url3) {
|
||
route({ type: this.linkType, url: url3 });
|
||
}
|
||
},
|
||
navTo(url3 = "", linkType = "navigateTo") {
|
||
route({ type: this.linkType, url: url3 });
|
||
},
|
||
// 查询节点信息
|
||
// 目前此方法在支付宝小程序中无法获取组件跟接点的尺寸,为支付宝的bug(2020-07-21)
|
||
// 解决办法为在组件根部再套一个没有任何作用的view元素
|
||
$uGetRect(selector, all) {
|
||
return new Promise((resolve2) => {
|
||
index$1.createSelectorQuery().in(this)[all ? "selectAll" : "select"](selector).boundingClientRect((rect) => {
|
||
if (all && Array.isArray(rect) && rect.length) {
|
||
resolve2(rect);
|
||
}
|
||
if (!all && rect) {
|
||
resolve2(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(e2) {
|
||
e2 && typeof e2.stopPropagation === "function" && e2.stopPropagation();
|
||
},
|
||
// 空操作
|
||
noop(e2) {
|
||
this.preventEvent(e2);
|
||
}
|
||
},
|
||
onReachBottom() {
|
||
index$1.$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({
|
||
// 将自定义节点设置成虚拟的,更加接近Vue组件的表现,能更好的使用flex属性
|
||
options: {
|
||
virtualHost: true
|
||
}
|
||
});
|
||
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 hex2 = rgbToHex(`rgb(${Math.round(sR * i + startR)},${Math.round(sG * i + startG)},${Math.round(sB * i + startB)})`);
|
||
if (i === 0)
|
||
hex2 = rgbToHex(startColor);
|
||
if (i === step - 1)
|
||
hex2 = rgbToHex(endColor);
|
||
colorArr.push(hex2);
|
||
}
|
||
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 hex2 = Number(aColor[i]).toString(16);
|
||
hex2 = String(hex2).length == 1 ? `${0}${hex2}` : hex2;
|
||
if (hex2 === "0") {
|
||
hex2 += hex2;
|
||
}
|
||
strHex += hex2;
|
||
}
|
||
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 zIndex = {
|
||
toast: 10090,
|
||
noNetwork: 10080,
|
||
// popup包含popup,actionsheet,keyboard,picker的值
|
||
popup: 10075,
|
||
mask: 10070,
|
||
navbar: 980,
|
||
topTips: 975,
|
||
sticky: 970,
|
||
indexListSticky: 965
|
||
};
|
||
const color$3 = {
|
||
primary: "#3c9cff",
|
||
info: "#909399",
|
||
default: "#909399",
|
||
warning: "#f9ae3d",
|
||
error: "#f56c6c",
|
||
success: "#5ac725",
|
||
mainColor: "#303133",
|
||
contentColor: "#606266",
|
||
tipsColor: "#909399",
|
||
lightColor: "#c0c4cc",
|
||
borderColor: "#e4e7ed"
|
||
};
|
||
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(obj, fn) {
|
||
if (obj === null || typeof obj === "undefined") {
|
||
return;
|
||
}
|
||
if (typeof obj !== "object") {
|
||
obj = [obj];
|
||
}
|
||
if (isArray(obj)) {
|
||
for (let i = 0, l = obj.length; i < l; i++) {
|
||
fn.call(null, obj[i], i, obj);
|
||
}
|
||
} else {
|
||
for (const key in obj) {
|
||
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
||
fn.call(null, obj[key], key, obj);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
function isPlainObject(obj) {
|
||
return Object.prototype.toString.call(obj) === "[object Object]";
|
||
}
|
||
function deepMerge$1() {
|
||
const result = {};
|
||
function assignValue(val, key) {
|
||
if (typeof result[key] === "object" && typeof val === "object") {
|
||
result[key] = deepMerge$1(result[key], val);
|
||
} else if (typeof val === "object") {
|
||
result[key] = deepMerge$1({}, 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(url3, params) {
|
||
if (!params) {
|
||
return url3;
|
||
}
|
||
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 = url3.indexOf("#");
|
||
if (hashmarkIndex !== -1) {
|
||
url3 = url3.slice(0, hashmarkIndex);
|
||
}
|
||
url3 += (url3.indexOf("?") === -1 ? "?" : "&") + serializedParams;
|
||
}
|
||
return url3;
|
||
}
|
||
function isAbsoluteURL(url3) {
|
||
return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url3);
|
||
}
|
||
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(resolve2, reject, response) {
|
||
const { validateStatus: validateStatus2 } = response.config;
|
||
const status = response.statusCode;
|
||
if (status && (!validateStatus2 || validateStatus2(status))) {
|
||
resolve2(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((resolve2, 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 (e2) {
|
||
}
|
||
settle(resolve2, 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 = [
|
||
"formData"
|
||
];
|
||
requestTask = index$1.uploadFile({ ..._config, ...otherConfig, ...mergeKeys$1(optionalKeys, config2) });
|
||
} else if (config2.method === "DOWNLOAD") {
|
||
requestTask = index$1.downloadFile(_config);
|
||
} else {
|
||
const optionalKeys = [
|
||
"data",
|
||
"method",
|
||
"timeout",
|
||
"dataType",
|
||
"responseType"
|
||
];
|
||
requestTask = index$1.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 method3 = config2.method || globalsConfig.method || "GET";
|
||
let config3 = {
|
||
baseURL: globalsConfig.baseURL || "",
|
||
method: method3,
|
||
url: config2.url || "",
|
||
params: config2.params || {},
|
||
custom: { ...globalsConfig.custom || {}, ...config2.custom || {} },
|
||
header: deepMerge$1(globalsConfig.header || {}, config2.header || {})
|
||
};
|
||
const defaultToConfig2Keys = ["getTask", "validateStatus"];
|
||
config3 = { ...config3, ...mergeKeys(defaultToConfig2Keys, globalsConfig, config2) };
|
||
if (method3 === "DOWNLOAD")
|
||
;
|
||
else if (method3 === "UPLOAD") {
|
||
delete config3.header["content-type"];
|
||
delete config3.header["Content-Type"];
|
||
const uploadKeys = [
|
||
"filePath",
|
||
"name",
|
||
"formData"
|
||
];
|
||
uploadKeys.forEach((prop) => {
|
||
if (!isUndefined(config2[prop])) {
|
||
config3[prop] = config2[prop];
|
||
}
|
||
});
|
||
} else {
|
||
const defaultsKeys = [
|
||
"data",
|
||
"timeout",
|
||
"dataType",
|
||
"responseType"
|
||
];
|
||
config3 = { ...config3, ...mergeKeys(defaultsKeys, globalsConfig, config2) };
|
||
}
|
||
return config3;
|
||
};
|
||
const defaults = {
|
||
baseURL: "",
|
||
header: {},
|
||
method: "GET",
|
||
dataType: "json",
|
||
responseType: "text",
|
||
custom: {},
|
||
timeout: 6e4,
|
||
validateStatus: function validateStatus(status) {
|
||
return status >= 200 && status < 300;
|
||
}
|
||
};
|
||
var clone = function() {
|
||
function _instanceof(obj, type2) {
|
||
return type2 != null && obj instanceof type2;
|
||
}
|
||
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(resolve2, reject) {
|
||
parent2.then(function(value2) {
|
||
resolve2(_clone(value2, 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(value2, key) {
|
||
var keyChild = _clone(key, depth2 - 1);
|
||
var valueChild = _clone(value2, depth2 - 1);
|
||
child.set(keyChild, valueChild);
|
||
});
|
||
}
|
||
if (_instanceof(parent2, nativeSet)) {
|
||
parent2.forEach(function(value2) {
|
||
var entryChild = _clone(value2, 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 (e2) {
|
||
if (e2 instanceof TypeError) {
|
||
continue;
|
||
} else if (e2 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(o2) {
|
||
return Object.prototype.toString.call(o2);
|
||
}
|
||
clone2.__objToStr = __objToStr;
|
||
function __isDate(o2) {
|
||
return typeof o2 === "object" && __objToStr(o2) === "[object Date]";
|
||
}
|
||
clone2.__isDate = __isDate;
|
||
function __isArray(o2) {
|
||
return typeof o2 === "object" && __objToStr(o2) === "[object Array]";
|
||
}
|
||
clone2.__isArray = __isArray;
|
||
function __isRegExp(o2) {
|
||
return typeof o2 === "object" && __objToStr(o2) === "[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 = {};
|
||
index$1.__f__("warn", "at node_modules/uview-plus/libs/luch-request/core/Request.js:40", "设置全局参数必须接收一个Object");
|
||
}
|
||
this.config = clone({ ...defaults, ...arg });
|
||
this.interceptors = {
|
||
request: new InterceptorManager(),
|
||
response: new InterceptorManager()
|
||
};
|
||
}
|
||
/**
|
||
* @Function
|
||
* @param {Request~setConfigCallback} f - 设置全局默认配置
|
||
*/
|
||
setConfig(f2) {
|
||
this.config = f2(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(url3, options = {}) {
|
||
return this.middleware({
|
||
url: url3,
|
||
method: "GET",
|
||
...options
|
||
});
|
||
}
|
||
post(url3, data, options = {}) {
|
||
return this.middleware({
|
||
url: url3,
|
||
data,
|
||
method: "POST",
|
||
...options
|
||
});
|
||
}
|
||
put(url3, data, options = {}) {
|
||
return this.middleware({
|
||
url: url3,
|
||
data,
|
||
method: "PUT",
|
||
...options
|
||
});
|
||
}
|
||
delete(url3, data, options = {}) {
|
||
return this.middleware({
|
||
url: url3,
|
||
data,
|
||
method: "DELETE",
|
||
...options
|
||
});
|
||
}
|
||
connect(url3, data, options = {}) {
|
||
return this.middleware({
|
||
url: url3,
|
||
data,
|
||
method: "CONNECT",
|
||
...options
|
||
});
|
||
}
|
||
head(url3, data, options = {}) {
|
||
return this.middleware({
|
||
url: url3,
|
||
data,
|
||
method: "HEAD",
|
||
...options
|
||
});
|
||
}
|
||
options(url3, data, options = {}) {
|
||
return this.middleware({
|
||
url: url3,
|
||
data,
|
||
method: "OPTIONS",
|
||
...options
|
||
});
|
||
}
|
||
trace(url3, data, options = {}) {
|
||
return this.middleware({
|
||
url: url3,
|
||
data,
|
||
method: "TRACE",
|
||
...options
|
||
});
|
||
}
|
||
upload(url3, config2 = {}) {
|
||
config2.url = url3;
|
||
config2.method = "UPLOAD";
|
||
return this.middleware(config2);
|
||
}
|
||
download(url3, config2 = {}) {
|
||
config2.url = url3;
|
||
config2.method = "DOWNLOAD";
|
||
return this.middleware(config2);
|
||
}
|
||
}
|
||
const http = new Request();
|
||
const ActionSheet = {
|
||
// action-sheet组件
|
||
actionSheet: {
|
||
show: false,
|
||
title: "",
|
||
description: "",
|
||
actions: [],
|
||
index: "",
|
||
cancelText: "",
|
||
closeOnClickAction: true,
|
||
safeAreaInsetBottom: true,
|
||
openType: "",
|
||
closeOnClickOverlay: true,
|
||
round: 0,
|
||
wrapMaxHeight: "600px"
|
||
}
|
||
};
|
||
const Album = {
|
||
// album 组件
|
||
album: {
|
||
urls: [],
|
||
keyName: "",
|
||
singleSize: 180,
|
||
multipleSize: 70,
|
||
space: 6,
|
||
singleMode: "scaleToFill",
|
||
multipleMode: "aspectFill",
|
||
maxCount: 9,
|
||
previewFullImage: true,
|
||
rowCount: 3,
|
||
showMore: true,
|
||
autoWrap: false,
|
||
unit: "px",
|
||
stop: 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: "",
|
||
stop: true
|
||
}
|
||
};
|
||
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,
|
||
weekText: ["一", "二", "三", "四", "五", "六", "日"],
|
||
forbidDays: [],
|
||
forbidDaysToast: "该日期已禁用"
|
||
}
|
||
};
|
||
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,
|
||
showRight: true,
|
||
titleStyle: {},
|
||
iconStyle: {},
|
||
rightIconStyle: {},
|
||
cellCustomStyle: {},
|
||
cellCustomClass: ""
|
||
}
|
||
};
|
||
const ColumnNotice = {
|
||
// columnNotice 组件
|
||
columnNotice: {
|
||
text: "",
|
||
icon: "volume",
|
||
mode: "",
|
||
color: "#f9ae3d",
|
||
bgColor: "#fdf6ec",
|
||
fontSize: 14,
|
||
speed: 80,
|
||
step: false,
|
||
duration: 1500,
|
||
disableTouch: true,
|
||
justifyContent: "flex-start"
|
||
}
|
||
};
|
||
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((/* @__PURE__ */ new Date()).getFullYear() + 10, 0, 1).getTime(),
|
||
minDate: new Date((/* @__PURE__ */ 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: "",
|
||
rules: [],
|
||
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$2
|
||
} = config$1;
|
||
const Icon = {
|
||
// icon组件
|
||
icon: {
|
||
name: "",
|
||
color: color$2["u-content-color"],
|
||
size: "16px",
|
||
bold: false,
|
||
index: "",
|
||
hoverClass: "",
|
||
customPrefix: "uicon",
|
||
label: "",
|
||
labelPos: "right",
|
||
labelSize: "15px",
|
||
labelColor: color$2["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,
|
||
safeBottomFix: false
|
||
}
|
||
};
|
||
const Input = {
|
||
// index 组件
|
||
input: {
|
||
value: "",
|
||
type: "text",
|
||
fixed: false,
|
||
disabled: false,
|
||
disabledColor: "#f5f7fa",
|
||
clearable: false,
|
||
password: false,
|
||
maxlength: 140,
|
||
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$1
|
||
} = config$1;
|
||
const Link = {
|
||
// link超链接组件props参数
|
||
link: {
|
||
color: color$1["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
|
||
} = config$1;
|
||
const LoadingIcon = {
|
||
// loading-icon加载中图标组件
|
||
loadingIcon: {
|
||
show: true,
|
||
color: color["u-tips-color"],
|
||
textColor: color["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",
|
||
zIndex: 10
|
||
}
|
||
};
|
||
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: "",
|
||
contentTextAlign: "left",
|
||
asyncCloseTip: "操作中...",
|
||
asyncCancelClose: false
|
||
}
|
||
};
|
||
const Navbar = {
|
||
// navbar 组件
|
||
navbar: {
|
||
safeAreaInsetTop: true,
|
||
placeholder: false,
|
||
fixed: true,
|
||
border: false,
|
||
leftIcon: "arrow-left",
|
||
leftText: "",
|
||
rightText: "",
|
||
rightIcon: "",
|
||
title: "",
|
||
titleColor: "",
|
||
bgColor: "#ffffff",
|
||
titleWidth: "400rpx",
|
||
height: "44px",
|
||
leftIconSize: 20,
|
||
leftIconColor: color$3.mainColor,
|
||
autoBack: false,
|
||
titleStyle: ""
|
||
}
|
||
};
|
||
const NoNetwork = {
|
||
// noNetwork
|
||
noNetwork: {
|
||
tips: "哎呀,网络信号丢失",
|
||
zIndex: "",
|
||
image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAABLKADAAQAAAABAAABLAAAAADYYILnAABAAElEQVR4Ae29CZhkV3kefNeq6m2W7tn3nl0aCbHIAgmQPGB+sLCNzSID9g9PYrAf57d/+4+DiW0cy8QBJ06c2In/PLFDHJ78+MGCGNsYgyxwIwktwEijAc1ohtmnZ+2Z7p5eq6vu9r/vuXWrq25VdVV1V3dXVX9Hmj73nv285963vvOd75yraeIEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQaD8E9PbrkvRopSMwMBBYRs+5O/yJS68cPnzYXel4tFP/jXbqjPRFEAiCQNe6Bw/6gdFn9Oy9Q90LLG2DgBBW2wyldIQIPPPCte2a5q3jtR+4ff/4wuBuXotrDwSEsNpjHKUXQODppy+udYJMEUEZgbd94DvnNwlA7YGAEFZ7jOOK78Xp06eTTkq7sxwQhmXuf/754VXl4iSstRAQwmqt8ZLWlkHg0UcD49qYfUjXfLtMtOZ7npExJu4iqZWLl7DWQUAIq3XGSlpaAYHD77q8xwuCOSUoXw8Sl0eMux977DGzQjES3AIICGG1wCBJEysj8PXnz230XXdr5RQFMYbRvWnv6w8UhMhliyGwYghr4Pjg3oEXL34ey9zyC9tiD2ml5h47dr1LN7S6CMjz/A3PvHh1Z6UyJby5EVgRhKUe7Kz/JU0LfvrJo5f+Y3MPibSuFgQGBgasYSd9l6GDsup0WS/T/9RTp9fXmU2SNwECdQ92E7S57iaMeJnPQLK6ixkDLfjlb7546RfrLkQyNBcC3dsP6oHWMd9G+V3JgwPHh7rnm1/yLQ8CbU9Y33zp0j+nZFUMb/DHmB7+SHGY3LUKAk8cObtD00xlHDrfNge+Z2ozU3c9dvx4Yr5lSL6lR6CtCWvg6OAPw9z538ZhhZRl6XrwhW8du1KX/iNejtwvPQIDR8+vSRqJ/obU7GupjdNdh2gW0ZDypJBFR6BtB2rg2OVtuub9JcmpHIpBoK1xfffLzx4f7C0XL2HNiYDp6bs9z23Ypn1fC1Y/9PCFDc3ZW2lVHIG2JKzTp4Ok7nv/G6Q054MIvda+bNb74pEgKGtwGAdL7pcfAa8vOKEZ2kyjWuLr7uDh+/qvN6o8KWdxEWhLwroyeek/g4zuqwU6kNrhyZcu/UktaSXN8iNwuL9/RuvVXtJ9PbPQ1vhmcP6t9+47u9ByJP/SIdB2hDVw9MJHQFYfrQdCph84evFX68kjaZcPAZJWwjMXRFpJ2zr91tfuvrh8vZCa54NA2xGWrunvmg8QWCJ/N4ir7fCYDxatkOeBB7an501agXbygVdvv9IK/ZQ2FiPQdi9osGbH+zRNf7y4m9Xu9Me7N9nv0HXdr5ZS4psHgXpJC9P/wDRTx0Vn1TxjWG9LGrbaUm/Fi5meSvcrkxf/Cg/ow9XqAUk91v3qHT97r6471dJKfHMi8Oyzgx1Z03t1YAQVT2MwgsC3u+yXHzi0faQ5eyGtqgWBtpOw2Ol9+/TM+sTOn8L08MtzgQCy+tOHXr3jA0JWc6HU/HF5Scssr4jXcYqfP6V/T8iq+ceyWgvbUsKKOn38eJAYyl56TAuCEr2WYei//9Crd/5GlFb81kdASVopSFrerKRlaoZj9HR+700H10+0fg+lB21NWBxe2lhNHsUpDZr27mi4dV379R9+za4/iO7Fbx8ECknLCPTsTDJ17O33bJpqnx6u7J60PWFxeAcCbMV56dJfQKf1bkMLfuGh1+76zMoe9vbuPUnLsb2DtmOe5HSxvXsrvWtLBEhaTx29+Ma27Jx0ShAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQaEsEVoQdVluO3BJ06ptHL34b1XRjp4Ch6Rq24+kmjG4Nwwg+9uA9u/73EjRBqhAEihAoe3xwUQq5WTYEzp0b3ZnV/Ncf6O/9AvY9wlh/6dy3X7ncN512Zw9BVLXjuAP4np44vnQtkZoEgVkEhLBmsWiKqwsXpjbPBOn3gRfenwnc+7GBe+zsjclvonFDS9nA9Iy/u3x9+vAP3735VPk4CRUEFhcBIazFxbfm0k9fHD7k+v4nQFaPQIrx8Gmyx/GJ0J/t7ez7mw0b9MmaC2pQQgh0/ZSm4g5TwueWWtqLt0HuVy4CQljLPPYnB0depTn+b3t+8B4t0AdBUv93h2H9xc6da0aXs2m+r1WQsLRnl7NdUvfKRkAIa5nG//r1oGtsZvjTgev/kqYHF/TA+AXoqv4npJemOEiQU1Eo2l+G0movBK1UBBPU7s9E1+ILAkuNgKwSLjXiqO/khVtvARH8dxDBRkMzPrF/V+9/BlG5y9CUqlXinHv9mRPXtvuus88L9H3JPv2zD2yXExCqAicJBIFWRwAvv3Xqwq0/Pnn+lv/K+ZvfPH3p9p5W75O0fxaBp793ce3AwIDMWmYhafiVgNtwSMsXeHp4eNXJC8Nf0PAdRCiuf/XgrnWUqsqotcvnl9DmRkCdweX4b9N7+m/ih+mbMraLM14yJVwcXItKpT1VRve+ArC3Qqn+3gM7132jKEGZm6tXg86J7OhDfuA/iHwPUpfUZSfu2L59tXxEoQxeyxkEgjKeOnLxHb4RqC+NY5H3+2953d4XlrNN7Vq3ENYij+yZwbG9jpt9GkBPQ5H9zgP9607OVeWp87cOQtn9zwJf+xDMNFfj+jryPqXpxj8c2Nn7P+SXey70lidu4IXzb0DNB4tr9751+HV7zxSHyd1CERDCWiiCc+QPjUCnsaqmZ62O5IN7N/VUNP48ee7mAZDTf4Tt049iUG4Guv4ZfNLos9UIbo7qJWoJEHjy+bP7fNsoOcnW0A0/aacef8PdG28sQTNWTBVCWIs01OfPj66BpfqTmq732UnjgT1bei+Vq4pTv7HM8Ceg2/o1qLQug7T+FaaM3IqTLZdewpoHgYEjV9fphvOj+OShWa5V+CxvZtpzv/LwG/aNl4uXsPoRwI+4uEYjAJ2GmdG8L0FK2mYa+tsrkdXZy+P7x2ZuHdW14P+BLdank9q6Qwd3rf+ckFWjR6Tx5Q2cP58K9Jm3VCIr1ogt48lO237r3//96YofeG18y9q7RFklXITxPXV+5DchKb3ZDMy37Nu5tuxG4R9cHH6b42QfAzlds+3EPXu2rfrBIjRFilwkBIIR7SHoJDurFU89ZOd680Gke6JaWomvjoBIWNUxqivFD87fej0e0n8Fwvr0/t1rnyqX+QfnRz7g+8FX8Rv8vL3auF/IqhxKzR2WCPxXqKeq3krDTdj2ierpJEUtCIgOqxaUakwzNBR0D09yiqePHOjveyOkpxLr9VMXb73V97S/h3nDXx7Y2fdPkAYbncW1IgIDxy5vM7LZt/hgrnLtxyaBrJNxv/72N+6tuNhSLp+EVUZACKsyNnXHvHL+1qcgNf2KbSXu2bt9dcmS9qlzo/fARgcmCtpzB3b1/Vg5QiuslLowENyDWDn8cSjl98PgdBviu03N+rl9/WufLEwr18uDwLdevLTF1YK3xnVZ2HI1bUxrT7z5zTuXdRP78qCyeLUKYTUI25OXbm4JPO00TBj+6I7+db8ZL3ZwMOiYdG4dA1lN9HWte2iuI2NAVPapC8O/CGPR34Ip/AZIbIMo7yX8G9QMbcS09P+2b1vf5XgdrXaPfiYns9oeLLEd8D1/B7Dp0E1jGP042pXQj7RKf546cmGzp+tv1TRf6YQD35/QO3seP3xow5IfC9QqmM23naJ0ny9ysXwgq98BWc0kVhv/Nhalbqe8kd/Fr8MOSEr3zEVWrwyO3I29hl+E9LUHGf+nAXI6sGPdd8uV2YphIKnE5IyL6bLxk7cn3bdkHHefrpvJAExMZ1uBZmqeNzXtfzUzk/m/ens7LjV7Px+8d9e1579/44l0duZtge+Np5zEEw8c2pBu9na3YvtEwmrAqNE8IZvNHsep5//yjl3r/0O8yFOXbv0QCO05gP0JGIL+fjw+uj91YeRh/Dp/PtCDM7Zpfmjvjt6Xo7hW9ycmJjaYduf7Hdf/8HTGfa3rG9rYxLSWnsloPg7fijZV8oFM2Ja2a9t6EJd7bCztvHP7us4rrdD/r3/7ct9I99jEI4cOiQ3dIg2YEFYDgOUJDFj1e8TqX7cT4kImXuQr5279A4DeBEX8ayvprU4N3rovcALot/TH13T0fXDTJn0qXk4r3k9OTm4y7a6PzjjORzOOvn1kbEqbnEprPhRzwAKzwFLHk05hv6Yd6N+o3R6beG50aPSdr3qV6IJKkVp5ITIlXOCYn4Yexr0w/DO6YXymHFlR0e5r7tsM3fxgJbI6fW1ivTeT+SsYmr54cFff+5Cu5X+hb94Merp6/J/PusGvTE6724eGJ7RpSFOkKPCUZvBPBccoHBet3Rwe13rX9tw/PjXzZ5hKvr8SfhWKkeA2REAIa4GD6p0feRdWBnvxjv2PckVhVfBf4A29uG/X2i+Ui2eYn8n8NryuDr3jPfWSFV5k44UT137eshIP2K7/64cObbheqZ6lCp+Ydt8TBO7vTM5od1+/NR4SFVhoLpKKt410lnE8LTMzo3V2dLznxLkhYgQ9obiVjEDln7mVjEodfYcpw+MAsftg/7qSDbAnb97sCSb0Yei2fqOcbovVqKNnNO8HmAE9Cv3Wp+uoWjt27HpXNqH9WTKR+kBHKqEFbvo5y3N/avfu4g23R45f3WGa1k9ZicTd0zPTf/f6O7f8dT311Jp2fHzmgJlI/N70jPPe4bEZ6Kg4qw0lqlrLiNKBiLWerpTW25PUbkPXZViW62ecHz+4d8PXojTirzwEyhq8rTwYFtRjvpX/rlwJ+iSXugPbMuyKBOHo3geRJtuT7PujcmVUCuPJlhnL/9NUqvMD2eyM5sxMaIlE4n7XML907tyNjcxHQjty4sZv66Z1xEok/xNW5n4uZSf+8sT5m++vVO58wkEu5sR09pd9w/rWyET2vReujiqygrSopn/zKZN5qMeirotKeTyolm7p/+X06Wvr51ue5Gt9BISwFjiGsLl6N6SrvylXDNTK70D4mX071pwtF88w6Jd/DG/1E1u26NOV0pQL71y3/8PJVOcHMzPTWkcCH2YGOaTTaS2RTN6f1fQvvvDK1bdnbO2JZCr1SeRfn05Pa1PTU0gXJBKW+ecnzlxvCGndhFQ1NRP8bcY1/vjS9bF1V26MwHwsVKiXa3etYVw1TNhYJ3TDjQCO42jJVMcez7J+t9YyJF37ISCEtahjGjxkGDr2DJZ31D8h5vUQJL5RPkXlUMM07u3qSGidICvkzzuSlmlZb0olrK9hD9v9JCrPC196JoPMAolFg6CV+PPj54YeyWecx8Vk2v1Q0rSfhFT18LnBmzBRyNalp5qrSuq7kiAsh4SFa7oZ9M0wzI+cPHOjZPo9V1kS1z4ICGEt4lhiCvZrSa2jol7qzPXJPk6nIGbVbWfUvcr7hO9MP97ZVXpggOu6ajplYStj7l1XvbRMXbPAbp6HzSSBlkraNknrvfVCcPt2sHYi7f3pTDb47KUbYxuvKqkKpYBXKBnV869c3WgbDEixAck0FGFFfEzJzbIsO9C1TyrcymWWsLZGIHoW2rqTzdo5dXyykz0NC8l779i5vu4zwM+eHVntGP5jqVTq/6AkVc5NZ3wNH2lVxNWZNIukMSjiNd9z0+CHp5DXAdX4SAg203w8GB5IATtODHzdK8C15kEjhXvNS9rWA11dnfcMDY9prscss48RySakrOLWqODCoIKAgkuVgsS0urtD60haeV1YYVbbtjUn6/74HXvW/11huFy3PwKzT1r797Upe3jq4sib9u9Y+wxe+vh7W1N7jx49v6ZzbffnQD4/Cj1Pfjx54XiBls6GVuTUc9mQsOIO9mPQFdkIRlz4fy5JLm2ZMOqTcJaXIqpcqnixVe+rdbZ3dbc2OT0D0wZIibHSksmklslknvx+//q3PiKnXcTQae/b+LPQ3r1t0969cOL6G7o6E09qgZegdMJBpVQ1DbKCpyUt6oPKz/4NEJalCAuZFIuEVBJd+jgLh4rvAiFqUVGkhJZMWFp3Z0obGSu/d5gSnWmavuO6h+/cvYHSobgVgoAYjrb4QPMUiGtj1/79jBMkLBwiTlMASlYzTkhWCJyTrGAyMOFkst/BoYMmuIIyGJYcMXMMdNwHPhYN1qWS1t6ZLGaKZL8yzFXTr15BooLLMugHMBRNKgW+It8y9TEcJGt4rvcRFCCEVQbFdg0Swmrxkb0+cf2XOzq73kgdFieEXF2jdEUJKQH6SVWQrNjtZDKlpTPp38U58iUbthk/Ph7sN6zg/xudSGvD4xkq6otcnnjyF0XRRTflkyC0IIJE1JG0QbqGNpMNp5xFhRTcZDNoj66988SFm5vv3LX+WkGUXLYxAuXnCW3c4XbqGs9hwjv+a9lsuN+ahOJSCoLjNDAFvVUll0p1aNPp6adTweSflEszPO48oFn+4yOTmR+6enOshKyYhzWpf/jDuuf6x2aV/qNRaPG/1d0gUXWCA0uu7GhMmkqmerEc8KOVU0lMuyFQ+Ylut562YX9Sncmf7Ojo3BDZWbGLtMkiUVXSWTFNuMqWuYG530f7+/tnGFboxsfdd9mm8XdDo9O7rg6NFq0CFqZr5DWlK9qV0fZqGvZchSuPlevB2VmG/hOV4yWm3RAQwmrhEcW64qu4ykfJho52Vp3J8quBYQooqWDKADftBd6HD+5efyoKj/zR8ew/hWXY56/cnFh7a3RCTTGjuMX0SVB9qzu1qfQM+jO3dBW1g6uVSHv/qVNX10Vh4rc3AkJYLTy+WA/8ou9kJjo7bOh+DLVFZ64TEbCyBktxI5PJZj56R//Gx+NdH5vM4vuI+p8NXh9LjU1iw3EZhXc8TyPuuV9wDaaCfBjTM06N0hVWQmHBDzvSDZ5tvqYR7ZAymh8BIazmH6OKLbzv0KZvJEz3ZzEFnEolaEtV2XEaCLKadrIz//TQnk1/EU85NuH8th8Yf4j9gMZUOrNkZEVZCnsbtTU9KW18GqcKFyjh420sd2+j33pg3F8uTsLaDwEhrBYf04O7N/2t7/o/C2FoGnsIy/YGlvAwSfCvZzLOe+8oR1ZT3u/5uvHJC9dGtJlMrfqjslXVHwjpat2aLi2rjFFLjUSrFUjlO0juddXSSXx7ICCE1QbjiHO0/hofbPgwpnDTOR2V6hWNQqGUx34890noet5yaO+Gko3Y45PO7/uB/lvnrwxrWdha1absbgxo1FWtwplXqYSJY5Nn5lU3bLHQmGA/yko0plVSSjMjIITVzKNTR9sO7dv8RSeb/T9BWmMkKv4D+YzBXuljV7yxd+zfte6VeHGKrHTz4+cv38JWmyUmKzSGG5z7VndoE7kz3uPtq+Welvhwm39weVjOyaoFsBZPI4TV4gNY2Pw79mz8KyebeRIH+VEZTaX0sf27+v794TKmCxNTzr/2NOPj5wZBVjjdYSklq6jN69dyKuhqmWztivYob+RTSkPbe/xMdlMUJn77IiCE1W5jq+s4dYEO6mzsYAmvi/+CrH7LDYxPcBq4HGTFVcG1ULLT5orS1ULIkoSFI2cMHKG8obiXcteOCAhhtdmo6gaOh4EWWlkyYU9gvHswXfgV19d/7+LVkSWfBrItJJhObL/p7elQR8fUZnEV70XxPc01sM+xrzhU7toRgZIHuh07uZL6xA3LBaYB+Ar8rBsfz34YX1j+D5eu317QNGy2xPquSE4mDuXb2IujY2AgytNE67RiKFshzuwCR5s9ZSMlsK0QEMJqq+GkBKOF5yFzRoidK5BoFCeMjM/8mG+a//Xy0Li55KYLBRiTrGjwOQ1br4VMBQuKVJeQKVPxMLlvPwSEsNpsTEECmBLSgbHUpwD1YGwse59l2p+9fmuig4fiNZIowrqq/6Xeqm9Vh9JbjcOKvqFtACX7gV8kTVZvkaRoRQSEsFpx1OZoM2iKxxuHLtDcsZlgLzYZfv7m7XSv+r7fIm234XSP/8o5ktWqzqSyZr89PoXPYDTYkZvziw0NLluKayoEyq4iNVULpTF1IaDjHHZmoAW4aep9geN8fiLt998cGYdtVp7K6iqzXGJFUCAi7jdkuapsBJKcPBwgyP8YRyV7B04Q3dDbpY3jg6gupoMNla5U41BbUN9n0sr1ScKaHwEhrOYfo7paCAW0WiWknihhW/0Tabf/6tDtxpIVSIhGnz1dSXUkDL8fSHKi4/lWPId9Kp3Vxqegp8J/m9f14D6DQ/nmb281FwgkZ1Dj7bnSSFx7ICCE1R7jmO8FJJr8jCvjeNrIxFjDJBpKVaSlXhwDw384MyucBoLAGEfHI5ptO6n1YAq4FjorH9IWjUOnFlF3pj62aui3whbI33ZGQAir/UY3XCVEvzgdw/8NcSyGUhSlpVWQrFg2p39xp0JYLyIohaXxdZ2FGofG6yi85/QS32F0Asu8URgu1+2JgCjd22xcsVElPC85169Gaa1YTkRWJKpSqooBiQQzONvq9sRULKKxtzzAEJw1api2EFZjoW3K0oSwmnJY5tcoSD09HanEDztubnfO/IopyUWC6sUmZUpW5aSqkgwgK04DxxaZrFivacCaIdAuH9zaM1rSDgloOwSEsNpoSMenvU93dXb+EE5taFivKElRqd67qrNmsqIF+yjMF/i56MV2JqadYKxXMDXM6+4Wu04pf/kQEMJaPuwbWvPticwj4Il/NnTrdl7JrqaDC5wTUle1GmdWWVCw1+JotjA6PgnThsIdQrXknF8arkJi/+R355dbcrUaArU9ha3WqxXW3tHR9C5dN//T9eEJ3aGdUwP7T0V7F86Mr0VW4mF6o2NTS/ilaB2HDmb8wA2+08AuS1FNjIAQVhMPTi1NgwRkGKbxRxMz3uaJSRzVUkumOtLwo6Zc7aOkVdEhynN9NQ1cyuNqeEqD67mX9TXGyxXbJhFthYAQVosP58S0909czfqJqzdGODVqaG/IUbCWr2p0yukfp4FUtDfeir1yl8IPUGjPHFy/fqJyKolpJwSEsFp4NEfT6Z3YBvOp8MvMc0hAi9hHNQ1cBrJil5TUZxhfXsTuSdFNhoAQVpMNSD3NMTzzU1PZYAM/ProYkg3UV5rHT8lXmA7SwnwEq4FLLVkRI04HM+n0LdvzvlEPZpK2tREQwmrR8ZucCd7hePr7rw2N5PfxLUZXON1zHKz4kb0KnIttP6Njk8tyaimbwXPrsW/yq3v3bhoqaJZctjkCQlgtOMCYCnU4GedTI+NpQ32XbxH7QOmKG5nzdIWZJz8HNkKygqI9TmSL2JSiovGVn0A39c8WBcpN2yMghNWCQ4zPc0HRbr6GEs6chJFnmfl3knZO4/hmII1B6fiFG9br0s6qAeXPp2WUrhzHeXH/jr6n5pNf8rQuAkJYLTZ2kK7Wul7w6zeGx9DyUsZovOodOizosTg1TM9k1Wogpa7lIisOF+w48E/7E5B1Y/cgtdizsBKbK6c1tNioT6X9n3MDcyePOo7OoJqrC6S0+ZIYV+GSOHxvc18PJCxXG4ed13I727axqTp9yk9rX1jutkj9S4+ASFhLj/m8axwdDdbgELxfGsLpoZyqVXPVU1QugVJUV0dC27p+FaaBWWxknq6ceAljTNMiAf/BoUMbJpewWqmqSRAQCatJBqKWZpgJ731Zx9pJM4aK0hXe5vlKVFEbKFlxs3PvqpSSqpbzKztRm+gnEkktnU6/2GFMfa4wXK5XDgJCWC0y1iAR6/Z49iOjY7C5qkG6mk+3SFQGlEP8FFdnygrNFqBsn1OxP5+K5pGHbcBhqhT8fqu/v39mHkVIljZAQAirRQYx7Wj3Zj3tddQjVVJ4l50CMjHe8mqOTJCCvmoTyIrENXx7Uinbm4Gs2PZUqkObnp76i0N7N36tWl8kvn0RaGnCGhgILKPn3B3+xKVXDh8+nPseX3sOlpt13+P4uonv71WeDqLr1ampFB8S1JrulNaHc9rTMxltcpofOeWns0rTLkeIZUHRnpm5YibMf7kc9UudzYNAyyrd8ZLpWvfgQT8w+oyevXeo++bBtaEtQd9s1/ffRsV3I6eDJCp+nourgH04UZQnhIYfWm1o8xdUGCU8/E/bil89sH3dlQUVJplbHoGWJaxnXri2HTvd1nEEcCBS3z++MLi75UejQgcmJjL92ax/gNJPo6QekhVXAbdvXI3D+XQ1Bcxiu02zTAEjKFIdHTQS/S8Hd2/4YhQm/spFoCUJ6+mnL651gkwRQRmBt33gO+c3teNQYin/oG6aKX5rcKEukqqoWN+Ij5vy81v8UATDG0WGC21jlJ96K6wKPpWd8H8jChN/ZSPQcoR1+vTppJPS7iw3bIZl7n/++eFV5eJaOczX9Z2YvM1LPxWpocBHKv8qHHdMqSphGUqqahaThfj40ITBcbLnsDj6oXvu2bS4n96JVy73TYtASxHWo48GxrUx+5Cu+XY5RH3PMzLGxF0ktXLxrRoGNVPPfNtOolIrgElLGYH2wbZqcipdIFVFlDbfGhqfj9bskCaHHS/7gTt3r73Y+BqkxFZFoKUI6/C7Lu/Bl1jmlKB8PUhcHjHufuyxx/g5lbZw+BL7bX4EoiZqyS0T0uM0j1+82QSl+ua+bhxj7GjD2LicwWkLzaarigbKsmDJ7gcTmezMBw/t3ixntUfAiK8QaBmzhq8/f26j77pbaxo3w+jetPf1B5D2RE3pmzyR4/nH+Mti4Wx1dUrCHO0lSVGqskFUnakkpn6mhu086jgYHkWTW3Wbo4Tli6L5gqYHE47vfeDufVv+YflaIjU3KwItIWEdO3a9Szc0ElDNDqcLbHjmxas7a87QxAnX9ljfxcr+Mzs29ykpi1O8iJjoR/cm5o7dnUl89LRLW93dyWmVIip+Kp7pmlWqIvQ8Mga9Gslm3Efu3LX+K008HNK0ZUSgplnGMrZPGxgYsIKeXa/TA61jPu0w0+7xBx/cd3M+eZspD0wbDgWm+RXP13cODY/jWGKuGAb48jG+agNpilbqlKZoWDqDY2AyjtNUlupzYZlKpXgaxIVMNv0zd+/d+uxcaSVuZSPQ/IT13TN34QRvZW81n6HSDdMLUqmjh9tgd//Fi8OHEl3JL3Z2dh3MzGA7XU664llVWRz/QhLjNYmsmaWp/DjCjqIDdlaZTOZZ1/A+fGj7hjP5OLkQBMog0NSE9cSRszuswNhdpt31BRnazM3U9IuPHDrUuG+419eChqU+cvzqjp7u5P9KJpMPpqc51Zv9QntLkFQBEqZluVCw/7nhaP9i376+8YIouRQEyiLQtIQ1cPT8GjOw7vE8tyFtxBrb2MBXdh579FF99g0vC0nzB548ebNHT2l/aFmJj1BPBYyav9EFLaQ+jdPAVNL8/pZ13a8qiJLLOhAAjvrTRy/d0enbF+69d0tzHFhWR/vnk7Rple6mp+9uFFkRGF8LVj/08IUN8wGp2fIcPLh+4sCu9R+F3ucj0MLf4vaVVnChqYWmdaQS2jpY2vd0djh86Vqh7c3Yxm8dudTPxaW0lrn7yJEjZW0Tm7HdC2lT0xKW1xecgHE3FDWNcb7uDh6+r/96Y0prjlIO7ur7TOD5b3ayzt9ylY0Gl83qKFXZsCXrXdOlrV3djf2LBr556JOshLDmMWhPPXV6vav5O5jVxYLUhNl3iIbV8yiqpbI0bQcP85C2Xu0l3dczC0XUN4Pzb71339mFltOM+Q/0rzu5f2fvu1zH+QDOt3uZ0pbVRMRFouJK5qqeTkhVqyBdtdUmhGV5JI4cudrpd5kHiyp3tTU/8s6r+4rC2vCmaQmLWJO0Ep65INJK2tbpt75298U2HLuiLh3oX/95L+0/kHUyvwTieiUJHVEimVzy1UKeWMqv2pCoKEVFRNXT1aHawnBx80eAZj7TwcxdAc5Gi5fiaNnNT37nCk4xaV/X1IRF2B94YHt63qQVaCcfePX2K+07fMU9U7qtHev+xE/7r3cc70O+6w1gxuV0dHZiusgvJS/O7IskRXLs6KCxqj+B26t9a3uUREWi4plbQlTFYzXvu+7tB3EIUGel/L6e3TNw5NS8zYAqldss4YvzBC9C7559drAja3qvDoyg6pwCP+KBZaVOPPjazS1vMLpQKE9fuPnawDB+EqehPwzWuAuSl8LPg90WVxhJJPWQCUmPBAWTBEz1TFUGpqO3wYYvIPgr2az35a2b1/50V6f1e1NTlVcvEzB0xRekj67usu5FmS2/crvQcaol/zeeObfTSOj91dIq28PxiaOHDx9quy8LtQxhcZBqIS0Dhkl2l/3yA4e2j1Qb2JUUD1Iyz1waOQib0vsxKXsAFvH3wMB0JySwtZC+DBPTN5BOCEnhrI1BuKe9l6tIzsVCiD6E0DOabrwI2elZ09aP7N3aNxjheXvK+a1OENa0EFYEyYL9rz072Ju03ZpNQKj7Xd899cKhNrA9LASvZTY/s9GcHoK0XsrakLS8UklLxyl+/rj+/Qfu2367sJNyTS7SuZfneO7ffweBGScu3NwAqWgrTvTc5jjBZmw87tMCfRXYKQWOgula4OiBOQUZ7DZuhrAGdQXxV0zPuCaGnkv3VPGHOpPw7+QPR62OM5HhdNddGOeX2kmCbSnC4mDlSStVTFr4eLljdHV+702vWz9R66Cu5HS5h5hmHvz3QiOxwJTRo2BGgY06dm7OVhewYGAY6s75oD+ZDs4JPY9JyqSCQ7ABqftd5VFM3/j2Ja4mtsWpJQSq6ZXu5UZTKeJnsHpohiYPRqBn04nkS2+CQWW59BK2dAjwS0Y4IHDz2ERWG8Gnwm7iK9W3sFmbvrqGPzw6gW8eTmvTM07XmTPX28KYd7EQ3rjnvv1QFHbPt3zT9DcMPHd+13zzN1s+/hC2rKOo7NjeQdsxT5LEWrYjbdLw05eHtwWe9jl0542u62HZHZIVpalY/yIlP5X3MHYddLLZfy4fmYiBhNuB509vw+rG3tKY+kOwGHLi7W/cS91jS7v4s9TSnZHGLx8CICH9lXNDX+zpWfXuycnaBV2e3e567nAm4973qv0bzy1fD5qr5oEB7KXt0u7B3Loh7yhWVfypbOalh9+wr6U3mbfklLC5Hi1pDRE4ef7Wj+EEiZ+amqpvJT2bzWjJRLIPR3n9riA5i4DZg720DSIrlsrvHXSZ9p7ZGlrzSgirNcetqVp9/vz5FJTqj6JRejTdq6eBMzNpHP9s//QrF4bvrydfO6f1JrCX1mvcXlo98Kembjotr3wXwmrnp36J+pYNeh5JdqRem83O77gxkpxtW3bgOZ/g1HKJmt3U1Rw+3D+zrc89aunagnWzpq6PdxujLz388L4F78tdbtCEsJZ7BFq8/sHBoMPX/I9hyrGgnuDUUZzrnnz7yQu3HlxQQW2Ued++fZmJ1e5LoPB5k5ZpWCPXz+08du+99zrtAI0QVjuM4jL2YcIZeh+2+9wF49MFtYJSlgmHE0g/JlLWLJQPg7RmhtyXsJ18eja0tivsXhj6xy9ve/mRR5TRcG2ZmjyViN9NPkDN3Dz1FW5z9XM4i+s1ME1YcFNpUIrVLHzJzHnwjl0bn1twgW1UwPHjxxPXpztejR0HFTc+F3YXRwxdfdM9W08D0zrs4wtLaM5rkbCac1xaolWOvurhZIPIih0OdVm2haNTfqUlAFjCRnJP4HBn+iUqz6tVa2nGpTe/etsP2o2s2G8hrGqjL/FlEQC5GHghfplSUSMdvwaEA/9+4vjpa3c2stx2KIsfUek2dr+EuXNF2xEjSJx98w/tbFt7NiGsdniSl6EPp84O3W/Z1oPzXRms1GRKWdCJdeCIlJ+vlGYlh997r+70+EPH8NHJEtLCauCph+7bmj81ox1xEsJqx1Fdij4Zxi9AT2KSYBrtslgxhOD2gWOyz7AstFzx6zFHj1mGobYUYAgC9cHge3ddK5uhjQKFsNpoMJeqK6+8cm0X6noXiWUxHA8WxAdWNyQM45HFKL8dyiRpueM7jllmMGpnjO+1w9fNaxmXxiogaqlR0jQdAkeOBPjczrnOiQ6jw88ESSOA6KT7iQzOHEvavu1pZsLQg4QPP/DdZG9Xx/vWrOr+mfR03SvtNffdxleAQIgvTzjBT0w409Mpu2faufZy+vDhw5WPMa25dEnYqggIYbXqyNXY7i/jCyvdfmaVb5hdVsLp9LJGp43j1/1A7/RdvdMwPRzEboRnLVHe9vEvL3eXBOB4ZMta22H+TiqV2LJQ26u5u6Bju44Z3J7O/Lvp6cwPmBanOwQ4uNHRTWMK21bSvh1Mm642nTWCtKkH07rnTE72aOO0XZq7bIltVQSEsFp15HLthg5J/+aJE12m3tVjOPYq1/dW4cTjHnwMYhXOce8xDd3y/PJW6OpMdsTRVy4iK/rKMR/jwvz825VIHFzT3fkx13UW/dnhRy3GJyeeHEs7n1XNibUPFvY6vtGDw5vV9w0Vofn81qGhZfDhi3HX8SfQ/3HPMse9CWcCX0gel2OIFJIt+2fRH7qWRaYJG85NxldGzV4tGayFSLQ24+q9ULyu9gJfMU5ELTn6wUISTl03NHz1KzyiJLqmX657OLLdSJgoXTO7cBxyN172blier4YCvBsFdSNXV2dC35tKJrbzfPfFdjwvC/qs9MSMxxNRsSqmT6LhUDQHE+jUBE7UnATXTuLsrRn01K2l/x6+qItiR3TNG8V59KNB0DGSfNXGUXwJY2Gm+osNhpSvEBDCasIHgVLTt75/aQ0MnXpBNb2QgNYEntfr4wu/nBYpKQLtxtdwAh0SBX3VDe7nM/Ha5vf1Fb/CURS2bCTAWWuxR229qRsbQQQbUed61LfW14JVKKsTJ5sk8WUcHbtlNANyTOhgcmAGKH7p3m1FWpqtuZCu+LByVdKHVMjpKEQrBwIW9tnpXOIH+QTDSH/D9f0bmCLewDn1I4HmwtAypPDZ/oe9oXKf/aMPsWxSs/RR13FHrURiZE1gDR86tKHEdCDMKX+XCwEhrOVCvqBeHNaW6ui11/mWDtLQ1kEiWodXE4rwYgepAPssTPCMOjIdAk94TZ8pMZjch8HjDorGFUTUAwlkh64be0A9/ZCatiDZWtOyE7ClQmIdJICJFYhA+TRV4Fo5/QIHiUvrTEbkVRCxiJfsSBbfYk87OTExXxdazY5yUgiRKfpHQ1YSkONmAZY+gV4NIeVFfCXoLNA5h/Plb5LzWAyzF+IVXdNnvO/6GcsyhjC1vmWZ7s2pO3fdOqzriy9asnJxZREoerDLppDAhiIAEtCfO3F5rW0a6z1PX4/nf53nG5RqqrpieSnULEVh8cx4E7ugH78H8tG9eP/24oVezY+pkpA8b/abhPF8le75BqdsXUtaFeaTlTI2IByEoU1l8oq1mkokcZHElIRoWmpejMMCMyCvQXyy7JjjuUcgOl4tLCzCMpTHgFpcgkViX/dH/ax2Szf8m2Yqc/MN+1r7BM/C/rfCtRDWEozSkbMjq7NTY5t13dqE6dhG3wsSqlp+C9DDi0ifLrqmT1f6BgUaPjiHN0lJAGAfvpWcI4XjiHIMF6ocO/EjmMa9HeelQ1LT1PRpoce/sJwOTCQtc+kfGQp6Uxl+9JWtmL+jNEaJ0gKBgbsygR58B4sHfwV5aliVWg3vCHv6ymHcdG868IzrVsK6pnd71+/dsmXxbD3m3/W2ybn0T1/bQFe5I8euX+9ybuqbXMPbDA7ZCKV4uMOecyz+9OfmWvj9x9zEw6JW+JuOX298WhE6qtwLEV3TL1tb/AWj7sqwfqaro/sdmcyM+vBp2XzzDEzaBiQsNH+e+eeTjQ+ohwqnG0BYhfVzNYKrkOmpyauYYH8KvD8G6RPBszrC6Jq+ystl0ghzXEZjR5+O4+iZwTh+eG7Yqa5rq/3hGzzTSkXKn4YgIITVABjBP+ZzP7i8ydasrZCetuCHvIvFRs92SEdlpnCYE2LOQi12OA7RNf1yjrphHIyE9yOXPnfNMDg70DpdTf8DWDKs5rRvMVwChAWrUgh21HzllD0NrigqlxKVC7bKQuOOWeGiuI7OTkhb6T8C/Xw3xkel9cXxj6eIxiY3Hhx3X9dHsWJwDaa3l1+zd9Mt/F4tUk/ijWnP+/DBb8++LWqvnh0c7NDGta0pO7kl6zpb8AJzEUr91kYEFdeBRCt69Nm4+AsSl6jwjVGckY6VwPwUpLhLURx9xliWvxFHi/w+zB0SWCnLsVpxnoXesSI2ngp4zmRJXPgf/0IleGH51R6uwjeX5MR76qtITh7+8N9Cp4GF7Sm8Zl1s35pVXVomm/5c1vG+Wm284njHJeJq44/FjixUAld8w7uijW6+xo3MhW2S6+oIVHumqpewglJ87+LFtcFUcqur+1vxwPcZJqYPMOyhXw6GKI4+4/GwQpjCBhe+6XDIpFb06PM+np5hhS5eXzw9bLJ2pBLGv4Fe36BU4kA6IQGw8MUY6MJywVeqDs54Z69zrWdY7jI3G1ZtUiSV6zzDI3IqLLew/wu9jspl+yywrA1pEed5QceXPT3jBb/DLrA5ua5UHZ/4eMTbFx+fwvE3DJO8fANrjlctL7giJhRx9MrfR89R+VgJ1Y6currONuwd0FNsxwtV02mPlWGLy1TxlPHf6Hh8PH9xesvw9yRM+5PIRT2ZIgVKKZxWUY/PT8aTFPji0i3m4Ed1hDWV/7uY9bNGtiGqAyorJRWSqCgdkrQiR5KddrwPlsq8xfhG6efvx8dvtiQczDdmmPaldDBxSVYeZ3GJXxUMWzxq5d4fPz7Ym7X1HTAL2A7NqtJHEQ3qtCPjw3LoxB/v+OMZ5VVzR5aHWRuErYA+y4uu6fM+Xl9J/lh7bFvbY+vmv0bWos9tsXAWSLIiaSnyApHxJz6SbFSFuXTw8i86r5vVRW1m+6IHmUREAuI0lcREP5q2ztWPrO9/YK54xsXHI56+cePvj3qBfimZNS+J5FWMcrjptThsRd4dPX9+DcwEd5iQphwozfkCwJKaLv9ewHYKeicfSudwShcnJDBBOD3MTwGRO0cqLIj73jQTaejDBYaPHTBgJ/i5+HyYijd95sFhRzkzB7yL2IrCtGwezj9nOQVTUlfPwiicifnu5J0qHHd8mXHIG6ZD7JQqIk9kJK6QwAokMWRUhMaSeJ0vcfaiXNhs7PyuwpYV51Vh+EM/Pu2M9GckpyiOuZm2Wvtom+Y4me8xPbvIIujzPu6Wbvyt1ejL3U7Sv/v754ZHsORwaX3KGdwiJhO5pzY+Mivk/urVq52jTnIXlEc78LKu8qAMx/G8kHhyOicosz0ovM3IrIDKb15HSvDoOoqv+hMLYCOWI8ash0vmufryZVcqLz4u8fym3ov1xT/EVp4UDUTn4/iS0xW+sZTMojASmLqGp64iH4FRXJQ2TKj+lv7JVRTVxwQkm9APyaboGnGMzSVR6VR87ipsVT645ovOzi5tamb6zzB1/nqzjz+s9YetwLioZW5C8jq08K9+1IxS8yQsfF6ap1WL2BK8VOaJc6NbPcPrx7wJ++hmHQUPvOaQgMJ3ETtVlERDP0wVsQ19uPgcLQyt/Dc+p4jlL6k/1xa2qVyh5ApEzEoErm/DsPOTXV3de6anq36roFyRdYWVbVSshHJEMt98saIXfIu9koplYZL6m/hUz7kS/Jt0/PE8+Jj6X/Y6k+fv2tA1BKIvB/OC8WnGAmp5dpqx3XW36fjgYK/upXbhFd+BrRlqn16MfkrspkoC4hnirYjbUVWzs4rHx8uL3cerjwt0TA4RcBcsuX8Rn97q54okVsCKJJ9YkSvy1gJR4aOtnAr6OJP+L13d+BKBKMEzHhAfgDh6yzD+vqHjTDDvYpAxLqwEfVdbE9bpIEi6V27tdLP+LnzPrWS/XrRTnz5d4e79+LNY7r4kP+Z7Jv7z1LyPL0B4Tb+ci9cXLy+eJ54e8Rw//rqqcUR+HOrgYVprJbBl5E2w63oI64J7k8mUDZLGhmAXs19ucVkxP8gKQu4ptCxbMy2TW3KAGI4u1P207ztH3CDx/7bL+Cdse8h1Zy5ev7Dp8uHD7blJuy0J69TV8XW6l92Dl3cbLG6g98idbhDgdANcY1ZY9o2N4mpNr96GRf1Da3Wui0RW69F1bWslvp81LD2xDTOGu9DhQzBc7AcYfYlkAqo6A6ozqHNBYJTESGitTGShsp0qQSxT4AcoPJQw0LBlEPhBFakHDjoLvY+XgVIyg7WK77tG8n9pvpHXBbXL+OMBd7FN6KLu+uf27esbX9RHdIkLbxvCGhgYsDb3v2a7obt7YHakpKmYiqgE2ioqJbzIOszXcSov/DAzRRNehyJKvPx4+igv/ZLKEaCkoZxUFMYXE1I8f7Xyq/UHp9CkAlfbCF3NdlhS7IQguA0N2wiJYy1ktC5IISb1Okr5jSYruy2SGlYkIkKLSC3yy/WrUWGzSnjaTUX/QEhYQuNewLCdwBFKRkpOuAfr4sBnwwfDg6B0MHagORhBHNqHw5WxTwYav6lAt/42MBLfrYZXHO9w3Ftr/B0Hp0pY+tkD29ddAz5ln8NGjddSlNPyhHV8aKjbzAS7Dd3egRcvgRHJWyrHASw9Pyp+vlSxEluH0jWAGQF9VVZMpxHVRZ/xSKQU4PR5Xy0+/sLQZCFS9DN/XKtSeh5WrL2x+sMyZv+W67+vwz5eC7oDx12rm9pakNg639B68XL3Qh+2Bm94DySxHhg0daBHSQhiCbyyyMS9SDi8RhEHyYP1qD9qak0S4VGn5VYrSTRKEkKHWYYiHuQmCYb/YKYLqS+3H5LYckxJmz6qhSYJ5yNgzgtuclESpncBfN8Fj3lgJdCSGpHcGECoxrouMoHjzO+4evLLMB1VKxJV8Wyj8Q80Ix043jnTu32hlTdkh08Yn7UWcnio9Qs3pzZm0lN7LCOxIdIZxbuQ1+lAVFFxJB7aMeUIiPkiPRPjo2v6dPF4FVjHnxi/oQK0Az/bymf5uI7ayGLj6eM63nrbF5VNXzV7nv3HViQL3JAEaSV1z0iBNJIgJBCYkSKJYbdjEiSHw7a0BI5s6QBBbINUswMUsQ6E11UojZGccA9dcZDBdQY+TgyFTgkiEKYyIBvstAQzIRk8cBJ+A2j4gZFDFWAqjAp3V5IhQYYwwUJ57ByS0QINzMYK8FyrRxt3KNbXb2qG/UVNT5wDyCt6/A0boGbdqzPA4tD21SPquWihPy1FWHjQzYs3xnZkM95ePIZd8RccBx1xez/UPowp46I4+uVcLD9/8Plq0Gfy6Jp+uez5uqPyY+UtNN5DuVQc06drpv4bIDXsjtsMpdkOSC79QK4Xog3PzwF4IBNCBiIhpBSpoE8jioqWaM2KCRuOqwLXgIQItKIe0lCYD/lZjoqgGIo0+J++SsmMKA8eqQ21qHuUh2PfzQHN6vgG6vVK8GfmQhcbr3Yff+AEi3rtdCtNF8u/eIWD2ATXx4Mg0XH1Vr/hm7sDQw8PvyvTrriKWocEE0C6oM/kJRJHrAykgj6WGlq+JUifu6YfS6pu4/UVa6AgQcXKi78ApekhcWFBwMstEkTX9MvVHw+Lt2ex+4+Pg62CxgsHEwZbAdgWIJfA+ICkfDRYtyAwWWB7Ay8F8VT/KB0bOJ4Gx/CQfUKSwZGrJJs8iZHYgB0zMB+zk8hopQ8hEcEog2ERASIBAOL5fIrVIKLxXKtzKPZLgZUckvGf+/nH5HsK0+Uz3316zeAjj3D23Lwu90w0ZwNpiZ72UnvwfO/AXIFnXfLBxLOsHn6yiLqmr3oQ04LHX9hq6TFHI6txrlYWkHj98UT1lh8vryR/rIKq6aO204drdP8hRWF3itmLUw42QnW1CSTSA2IAIXkWOBYKLWw8wjVqNkEaFqjFwLQNJhWI4ZiFoiq6QX0SbsEo6HMoWVFCYprwjw6FP65BXCSoXJwiOwpnFK9A6yiWkQhRDwA9XAfpwLS/AqnqSKP7jwapquiznXFXMn6x8Yg/X/HySvLHKqiaPlZfvf0H6BloAM/v3tpzHkJwUx59Uxb4GE5Lfnt2ZGS16SX3+F5mq4llfegtwnaSR6J5EC8hPUV6IDaS6aDnoZ5DpYe6AtdgOr4pyhXLNPH0KKCo/DDP7N+S+mI6qHzbQr7AbdgW+iylWn0l5cf6E29ftfSN6L9lGl04x30tOtMHklmLhxpClW9BL4S1T+i2uNPRp+0FflD0AN9A9LHnmHGBBfJCE3QL9ALiguoJqiu+64gDzWGIIAlhzhaSDsMV/yjJi3BxyY9khP9BXBSzEMY/AFORGMmM1yyKZfmm+ZKuJf4uMHV1THEj+o+S864E7zYd/8Dliqp2MamvPbt9uw4dY/M4DnXTuMuXx/scK9iHLcbryzfKwvOJBSGNPl10Tb8WV0xYyMFymDdXXv46Kq+ueChJQI4WlSUqf8StOf5CNdXqr9afxe8/Gm6AoLAqGKyCGLSG350ACFzKM2FvaeOseEhFOsjItdQ2S6wYYmkOdl2+CfLBvmpIV55vYY2Qn6uAxAWC40zbhxSmWArcQj0TSIiSU37mx0kgVesgLereOSz8E5EWJa6Qzyh1hZEcO7xY4Ct9WLfNvwa+5xA2h6uGP6vMPxMsZ8WNf0Gf+cOCw9usq51a5+kNG9Sn1IjJsjoO0LI7EpVra/vxhPdFs7JyjYriohlbTAKGxO1C6oJEljseOLqmTxfPX66OucJK66OUNzuDjK7p05UIbGwX25I/vrj4BYrnD0uZ/Rtvfzz9fPsPIkgkbL0DZNMFRVEHFEY2ZCBTcwMLdfCsCCVN4SwpE9YG+ARNgD24IDHYSYB1yNCYDkLRFoC8oOUG40AKQx5IYyAmlQ6SF7dDoSof0hbJiApzqLs43aPc5UG+AvVQ/4T7nGQFQiJ5kdbAkmgH2Sz0FaWB4gLrad22v4nmuvPt/yzCc1+V4t0e4z93r8PYwDCvNANxLSthkai0jmCf5+jq6y6Y4SkjTfoKprgWufj9Dg3AozBmiK7pl3H8WDH3u0YfLY6u6c/HVS2vSvsxoygyTF2q/qNenEyjJ5NJPYGPRidME1M1/JYqwyoNq32Ihu4J0z5M+WA2DoqwEI9wfmEaEhQJzPNsKNOh0jJwrfRVJqbnNOrC6IGwQFzgHiKrpCuq2kE+FizrMXWE7IWCEKemg7hSiimOQchNIC3EchqpHlBO95TshQThkwF5TL9k+Mm/MZLGzVo3AlQdLzagDle1vCYd/wU9/5Z5ZcyZPnNow/J8ZHZZCGtsbKw3rdn7nIzTx42o0WfP1cPKuYJ6XPFs5q7p8zmKx5v8cdcxDeMPOR1fj+gh4X10TV/dukiC+nJPeLy8eH1hrtm/UVvpKxcrP2oL/dlcs1eQ9PCeo73wGcp+R2Xyvlp74vH19B9EkoA2CYKUlcQqJCQj6vkoyBjh/IurcJiy4Zxy2FMptRBO7sK3kClR0UYUZAX+wMqfC1ICiYHMYBsKSQsSFKaAUEqZLoiK00ASFsgpN0UEUWE6yOkiiArE6NmUb91OWwAAEuNJREFUszCNxA0c/uBoF04W86YOarWQAYjGmHBBEIkUiXEqib025hNmInWknv6zKo77Sh3/RvcfSx5Xl4O4yr5Y7NxiuEEQFT4uvs8yrF5VvosX28LLS185vsiRHkc9YPiJtrCbJIzHyx3gJdfpl80flZWPR6qIxJghus7xjSqj4E9UNn2VvN76Csqq6XIR+48OYEeGlcAaXhLfQwxNQcgQEI9IErOOxBUuCuDLz9Arm5iyOTaYy7Jty8hAb2VCm43ZmwnwQTbgFpAWyA4SGEKhaMdgYNpngKAcpeMCAfFjYGE4yAqco3RZ0LorUqOkxVkf6AgzvFBPFbISSsOUD+WRrWijpcwbmI4Gomj4yxAIv4bPVU+q9sfxk/EP36UlfP49N3vNWr/m9CZdX/zzjDDofAoW3XHVr9NPHdB8p2+uORl/mjFLUktMbBTtkSJbpLCRxYyD5OpJps/4+DJuvq5IIgoLqfi3pLzcRuloM7QSzKImsBSWG80LVKkxkSvOkFHaCjL5QvrPN9rwvaSVtEg2ICmQCNRQkGjwnlOpNktMxdds+GxcRFrIyCmhTQMEUJjl4qwtzPbAOVC8o0DUZroGiMmBpEUfRBZ4DvRUJC4/1GOpij1ML9XU0PJdFxIZGsOpJkkOQ0YdFh5CPodKl0WfRqQkVUhTIEf1iN4GkdJU4Rx/xsJfHkpfMv4cd+IAUJb1+YdkfSU7NXp6+/bti7qquKiEdfVq0Gl2TO2DonYzAcUTCv0slCB8FuGia/q8j7iAPl30aNIPHVKq55w+00MvjFLo05WmV8H5P9XLzydVF/H0xbGl9UGfjm226B98po2u6fO+0f3H9M7SbT1h+FoS00ybSmm+5/RZHxzbwWvVHtSvNuLRR4BKl0vPtHRhWh1SESUsNBkH0qjvNiAx4MA1JDBc4yBmTPmwJArJCFM+dA1SE5XsmFIqRTzKUrZYkMio78IUkauFoW6Mcbin1GWrOR8nqOEUEUQFmuK3ZdEw6NFg92s9j3XLp0CIsAuS8VdPkcKhCZ9/KAc81x/c3NdzFjy6KHZc0YPNh7VhDg9jYnh4co9n2dvx1nLalys7Rimx2xLGigfEJBQ0Xr149FkBVb04BQiTlPAFbTiDxRGKM1pJf5AgarPKG0sQu413N07hkCANO5m0fSebtCwziW5DqMISHTRMJCDF23inYbmsauNCHq+Vn1ta5dErzKN8psP/RiIXVpAegKJQ30Y06AQSEXdAIpdL0wbTNsLpoSIeCwRJHZYBpTusIFAIlPC0iqL5AxoCcmLPQkkLdITRCc0dSFqQD1A51g4pLOXmhZCwDMO2BpH9q6ZtDoU4oKQIy5yEynFnv+mzw+0+/q3Sf5yT4aYs89zq1alLIK7wYeQANcCpgW5AOaqIARzxcudrXrMTz+cuFAxBI1Rw06eLKz3xsnDikt+Mmr9mWBlXrbySeJAlTt8MXJImXHRNv0zx2GpWZ3r0KKqzXHlRHH26+fQf+mkbg56ADjppUuihMJl7BEhGtmnj+4Phj1lEUAzjaQcgJkzcqPPmlI/yjdJV8Trf/+hbeYyP0uMS0zSVF8SEaSELxkhR6a7IC1IVHkNMBWEkCljxYQ7YXgWKrDCHw2ohJDDKSkr5Tst3TANBp7DdgkTFKSOpxYMtV2i3hXQoJjwbBo3L4oibAajdXmSbCl01PEvi6x3PetMvwfi3cv+xHpPRk8GZvo6Oq5y5FvZlvtfqQZ5v5igfH7iRdHqrn/H24McyEb6ejCUxkCwqEATi8JDNKtWRIxI6wrLj+aOyQgIqLT/KTZ+OLYnCFGHE60PdSgzIgVmcfrbt5evjYkB97VeNyv8plx/UYoChElhYgB7KtD3PAUWRpejIVNzNAjNzyDuYRqnrMF5dIx4CkTrlAJQRps2FhZIX5lqYwfFLOygTBeSmkUhDEgNvIC7MR5ML6JhozoCpn+858G1utbH4j7BRT0Z9VlZzbTyOKJCKeCjkqYbkFBJh+DXCPVcKuXKIFURlm8WBoZSFOBCYmk6i33ioT+Kw1CegEMspcFfe+M8+rRySNum/YUwm9I7TPT04NWOBDg/nwtz16xMbEp3mPswIOuI6G7wBSlynz1pQWZEIP0smIcEEWN3QsfJDn+nj9FFSPh73wilgdE2f+eOumo4pPqWI2kI/LKu4RVXLq7H/kJopRUFhnkj4joNT9KC/BlZgAIVD1I+cwASVUBgCIsF1KEQxJLpGPKHGP5LYrAs5ikREnmJ61KF4K5cG1+REVS6HC1JauGroYYcOrLWUEp6MSF0UpoZgK5hV2dgEzeNLYbMBnRQZEUPnOwGMT6GOp57Kg/0WTCMYjnsQHpDmlJFTR5IcNt/alvV1PdF5NsKcLSpGG03L6QcjnWDpeIXqgFYb//A9wGi1+fMPDeqY7nae6uvT530KKp+JebkhHJyX6Fqz33X83tCgRr1d6gXBH+XnFtEwDmEVMBfAtbK7UvHxVTb1gGLQokbFVBZMDtUJHmT+dsPxmqSRU2nkrxkWxhfbOfEVwLov4sIaonSRr1qZy6vy8xliPbn+qPjYHxSm6mJwdB357DfaVtJ/BMLeW0/ayVQSR6TA5AB7h8kwmFeRrFBUSFYkJk7GsM+F5SuiCQmFBEriCskHYcxfEM9ozBjBS/yaKD//rBzndjD3BHswAcmqwFdhOWGugCw5owwpEt9sxMlVGWQEK4GlcAOi1XAcL6eLICfdcMFmNDnH7xdO/YTCHTkxM2B6EiSPbuXmHrZO5eJy4Iu6lfo2Gu8orFfA+PM9UMjnHpBIx9v+/Q9Wm8nMfcMTE1d7u7vP4Ec6fzy1wqOGP3xI63JHjgT2/rsy/boTbMP0pe78dVUWS5wjK0VUjIqNN3kA62ZYeIcfxofXDFNFUZBTT4W6m71mWBlXrb4yWSoEYWh0jVIUdJEmzA6o18mRDN7dCplCEkK8IiP4WRAU9OO8j5wimZB3SAhKYlJEphLkJCaSEP7PEdxsfVG5UWFxP6qPPngTlvBED6IWLN8dTPmg8ocFPPRXWBdlFWqqCEmLlhAgLRtKdLaAkpQNfRUM6DUQGOUiTimNEaT7FvRVw/F6K91XG4/mHf9KPaovvJ36jzfSS1mpc6mUdhnvhZL4a0GjZsKBKK+n0+kt0AHvztCAsIzjeeAeUKVPF1l101cBWCICxcGmcPalUeHRnyguIsJYej79fFnpKxdjrKhu+spVK69Ke+OW6SXlh7Xk/8b7D5umJKY6nUiQAEmp5ZKoD5Ay8kTFzcAsJIrL+ZREYCWAaU4ubXRNP8wfpuSuGubHMwCJhSuGPCiYJIMw5GV6xkfY0Wd+WoPiBAlEhvnzNluw3SKZYTkQHIQ5J1RQDg7Lw/QQGUIdFp4wcC9KgQ/7KkxjucEHROVmc3ZaCFfEjMxUvlPvBZ0WhT1Q1zG06hQKyGPA9qEh4bPRJuO/0p//WvoPyXpa77BPr9L1mn64QiJRT0vlP3jg1oyn0/th1dnN6VOkQyh8wVRuPpLUH9GHi+sckD4vLaj43NSHLwfv8cKjbGxdgc97JUpFpIRbpovKYHTUltkpHYkyEqNYf1gWfZU+Vn+JiMZERS4qKyTAMv1hmwoItLT/aL6OL9cn8A4mknhDkR5CUuh43ExhAXjnIQVxRQ9UwnU1JM73meHISINzlY/1Ir3jwNQBtui5IpU3K2mFZbEUEhgJiHlZhkqI8rws7hPFxBHlZ5romu1CGRSv2HyQEQiLPkwefJcSk2o0mU+F8Z46KswbKd8qvRUWiq7BsuoYlF/q+Jd839p4/KNnFHhw+Fbc819r/y3dHO7qsk9D2lLPBvEq59SLXC6CYSCq1OTk5F48g+FxLyQSvvyzhFK8taaYL1ACiYdkkSOg/HVO4irmAySLlR8+yHy5wnaWysTF7YmnRxdyecMXFDcxx3KjNCUEGUtb2r4Iixwh5qebxEG58v2Hkh0ERqlLp5kClNLkngLSyF8XExrZi089SYbFm9DRg1FCbEKyoxQE8sqFkTOgTwrDVIPCP/k8qpRcGrxMEXmxnpwjUeXbhjpgA2bBNsp0HPQWOiwNOnddw5YcNIdSFyzTlUKehEbrLDxDNn7osjCXPw5FO22qgPfKHn/pf8XxxxetvSvYlX8BxBVKCdGDmPPDhz0W+Oijjxof//jHt+Hh2oko/qKqFx4l0BJQmQIwS3RNn/fxZXqGFbq4nQzimI9tKFs+S1S1KJ9XoQkEfUQwtKg98fSzefMMwmx5F28/IqK2RLjM2b54/gX0H0v6+IiDZSVgHJogfYWNzDMUpCtsUkKg4pKIUJAsnNTlkjNWzfBCPMOhi8JAiCSqPBmyMFVQ1OdctQwLywNZ5cPCpDl80D6IhjzBASQF0sUeREpSJCyE4ceSpJXbEO2612AHepaTSRn/YrtEAD3n8xV/ntv4+S96nyGRO9gccQZmEPiBK3bRi5kPHcG+v2T32n2+53bxNY8oQyWIB0SR9OmqxMeTh5lm/8azx8srEbCQNSqTpUTX+eagwCiPqiWeQAXO/olHV2tPaYUFjWCxsQJjt7MV564K6iOB2Xj1adNGa3PqDMFl4XwSSnAQCUIibqFPlwtTwbiOkoSR+JvLx3KYv9BXaSrlLyifSegQBNMFTAWhiIeFArRZnoX+8Y2EzKhbnuNlYO9wFpZXkwoH5Kmj/6qOFTz+0n8+Y4Y/2pVIcJqY35+YJ6wjEN33ZzL9kPY3hWjx6Sv+RcByLIQAZZYQJSn2C944FRF/QkvjQ31XZDcV04GVPOGl+WdJEhVGbaNPV3d7Va7ZP83U/1ACgzTjkg4gjUFvHhGWkrPAPnnBLNeFSEKKfAbzOu9yBAUdVj6cZURpZuU3XOUILioD93x2IEnxxFGc9c6M+M93cHSNZVzHquBQDeMn4x898wQ2us7pgGvAbyU8/z5e5EupVEqtJirCgp4KHxVI7sbrQIYKHyKF3+yvIvEEX8FsQNk9qXwgBpgQwNo7p9OKrukzfdzF08+WTmYrV35YF+tU8bEpYImInGtLVH+8PkzZ8iQcVpjrawXCLOHH5uo/9JmWjbXHJMQcNhVW8bOklbsumnJw7Q+cgtVK2mJxAUNNKKncp54KHuzAwnjCE01B1UIHA1A80ik/IkdIfTj6mE8MXh2sSKZhdHUd+IcDykwFLj4eMv7Fv+il75c8/xEmeHaojD+jZ4LgbsPVVvO5iutg4oSAFCCiAqVp/jrUKRU8mzVexsube05ff3tiD0Q1wkP/ojrYgeiaftiheHsjLKL4GrudTxYvb0H9h94bpzeAwCD4cAqJf5SmlBjFH5D8ChVC1Q8KyIkrjtgbE64y4lqtINJHel5Hq4q4ZdsYzsWBWaU+rkFWtFzQbiNNnWciNbT/qD4+Hitq/FdE/3mWzmvQU+W4hZZPenQuRHRNfylcvfVjpUqz0Tj6dNE1/fm4euufTx1z5am3/hr6z6lj9A9ElneKwPJ3IYEVEpqKys0YFeUhoDBP4TV/+bjVIkfqKuu8/ixC/+tqR73111V4DYnrrb+G8a+h1tkk9dY/m7MxV7XUzwdP3ApBgCYG6Co+L6/+kcB4X0g0ERFFzwXjojBc5q8ZhqOKtWEoROmLEwSWBIHowVySyqSS5kIABEYhisRFEov8SgRWGD6K9OMgq8IwBIkTBBYXASGsxcW3pUoHgfF5iIiLPv9x+03kuLxMqaqsUj1KJL4gsFgICGEtFrJtUG6OwDhtJHHhqLOl+dBAG0AnXRAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBIGVhMD/D0fV/fpMMM+gAAAAAElFTkSuQmCC"
|
||
}
|
||
};
|
||
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",
|
||
justifyContent: "flex-start"
|
||
}
|
||
};
|
||
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",
|
||
buttonWidth: 30,
|
||
buttonSize: 30,
|
||
buttonRadius: "0px",
|
||
bgColor: "#EBECEE",
|
||
inputBgColor: "#EBECEE",
|
||
cursorSpacing: 100,
|
||
disableMinus: false,
|
||
disablePlus: false,
|
||
iconStyle: "",
|
||
miniMode: false
|
||
}
|
||
};
|
||
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,
|
||
zIndex: 10076
|
||
}
|
||
};
|
||
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",
|
||
gap: "10px"
|
||
}
|
||
};
|
||
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: {},
|
||
useNative: false,
|
||
height: "2px"
|
||
}
|
||
};
|
||
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,
|
||
closeOnClick: true,
|
||
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,
|
||
activeIcon: "",
|
||
inactiveIcon: "",
|
||
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",
|
||
iconStyle: {}
|
||
}
|
||
};
|
||
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",
|
||
flex1: true
|
||
}
|
||
};
|
||
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,
|
||
message: "",
|
||
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$B = {
|
||
...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
|
||
};
|
||
function setConfig$1(configs) {
|
||
shallowMerge(config$1, configs.config || {});
|
||
shallowMerge(props$B, configs.props || {});
|
||
shallowMerge(color$3, configs.color || {});
|
||
shallowMerge(zIndex, configs.zIndex || {});
|
||
}
|
||
if (index$1 && index$1.upuiParams) {
|
||
index$1.__f__("log", "at node_modules/uview-plus/libs/config/props.js:204", "setting uview-plus");
|
||
let temp = index$1.upuiParams();
|
||
if (temp.httpIns) {
|
||
temp.httpIns(http);
|
||
}
|
||
if (temp.options) {
|
||
setConfig$1(temp.options);
|
||
}
|
||
}
|
||
let platform = "none";
|
||
platform = "vue3";
|
||
platform = "mp";
|
||
platform = "weixin";
|
||
const platform$1 = platform;
|
||
let themeType = ["primary", "success", "error", "warning", "info"];
|
||
function setConfig(configs) {
|
||
index.shallowMerge(config$1, configs.config || {});
|
||
index.shallowMerge(props$B, configs.props || {});
|
||
index.shallowMerge(color$3, 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: config$1,
|
||
// uview-plus配置信息相关,比如版本号
|
||
zIndex,
|
||
debounce,
|
||
throttle,
|
||
mixin,
|
||
mpMixin,
|
||
props: props$B,
|
||
...index,
|
||
color: color$3,
|
||
platform: platform$1
|
||
};
|
||
const install = (Vue, upuiParams = "") => {
|
||
if (upuiParams) {
|
||
index$1.upuiParams = upuiParams;
|
||
let temp = upuiParams();
|
||
if (temp.httpIns) {
|
||
temp.httpIns(http);
|
||
}
|
||
if (temp.options) {
|
||
setConfig(temp.options);
|
||
}
|
||
}
|
||
index$1.$u = $u;
|
||
Vue.config.globalProperties.$u = $u;
|
||
Vue.mixin(mixin);
|
||
};
|
||
const uviewPlus = {
|
||
install
|
||
};
|
||
var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
|
||
function getDefaultExportFromCjs(x) {
|
||
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
|
||
}
|
||
var dayjs_min = { exports: {} };
|
||
(function(module2, exports2) {
|
||
!function(t2, e2) {
|
||
module2.exports = e2();
|
||
}(commonjsGlobal, function() {
|
||
var t2 = 1e3, e2 = 6e4, n2 = 36e5, r2 = "millisecond", i = "second", s2 = "minute", u = "hour", a = "day", o2 = "week", c = "month", f2 = "quarter", h = "year", d = "date", l = "Invalid Date", $ = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/, y = /\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g, M = { name: "en", weekdays: "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), months: "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), ordinal: function(t3) {
|
||
var e3 = ["th", "st", "nd", "rd"], n3 = t3 % 100;
|
||
return "[" + t3 + (e3[(n3 - 20) % 10] || e3[n3] || e3[0]) + "]";
|
||
} }, m = function(t3, e3, n3) {
|
||
var r3 = String(t3);
|
||
return !r3 || r3.length >= e3 ? t3 : "" + Array(e3 + 1 - r3.length).join(n3) + t3;
|
||
}, v = { s: m, z: function(t3) {
|
||
var e3 = -t3.utcOffset(), n3 = Math.abs(e3), r3 = Math.floor(n3 / 60), i2 = n3 % 60;
|
||
return (e3 <= 0 ? "+" : "-") + m(r3, 2, "0") + ":" + m(i2, 2, "0");
|
||
}, m: function t3(e3, n3) {
|
||
if (e3.date() < n3.date())
|
||
return -t3(n3, e3);
|
||
var r3 = 12 * (n3.year() - e3.year()) + (n3.month() - e3.month()), i2 = e3.clone().add(r3, c), s3 = n3 - i2 < 0, u2 = e3.clone().add(r3 + (s3 ? -1 : 1), c);
|
||
return +(-(r3 + (n3 - i2) / (s3 ? i2 - u2 : u2 - i2)) || 0);
|
||
}, a: function(t3) {
|
||
return t3 < 0 ? Math.ceil(t3) || 0 : Math.floor(t3);
|
||
}, p: function(t3) {
|
||
return { M: c, y: h, w: o2, d: a, D: d, h: u, m: s2, s: i, ms: r2, Q: f2 }[t3] || String(t3 || "").toLowerCase().replace(/s$/, "");
|
||
}, u: function(t3) {
|
||
return void 0 === t3;
|
||
} }, g = "en", D = {};
|
||
D[g] = M;
|
||
var p2 = "$isDayjsObject", S = function(t3) {
|
||
return t3 instanceof _ || !(!t3 || !t3[p2]);
|
||
}, w = function t3(e3, n3, r3) {
|
||
var i2;
|
||
if (!e3)
|
||
return g;
|
||
if ("string" == typeof e3) {
|
||
var s3 = e3.toLowerCase();
|
||
D[s3] && (i2 = s3), n3 && (D[s3] = n3, i2 = s3);
|
||
var u2 = e3.split("-");
|
||
if (!i2 && u2.length > 1)
|
||
return t3(u2[0]);
|
||
} else {
|
||
var a2 = e3.name;
|
||
D[a2] = e3, i2 = a2;
|
||
}
|
||
return !r3 && i2 && (g = i2), i2 || !r3 && g;
|
||
}, O = function(t3, e3) {
|
||
if (S(t3))
|
||
return t3.clone();
|
||
var n3 = "object" == typeof e3 ? e3 : {};
|
||
return n3.date = t3, n3.args = arguments, new _(n3);
|
||
}, b = v;
|
||
b.l = w, b.i = S, b.w = function(t3, e3) {
|
||
return O(t3, { locale: e3.$L, utc: e3.$u, x: e3.$x, $offset: e3.$offset });
|
||
};
|
||
var _ = function() {
|
||
function M2(t3) {
|
||
this.$L = w(t3.locale, null, true), this.parse(t3), this.$x = this.$x || t3.x || {}, this[p2] = true;
|
||
}
|
||
var m2 = M2.prototype;
|
||
return m2.parse = function(t3) {
|
||
this.$d = function(t4) {
|
||
var e3 = t4.date, n3 = t4.utc;
|
||
if (null === e3)
|
||
return /* @__PURE__ */ new Date(NaN);
|
||
if (b.u(e3))
|
||
return /* @__PURE__ */ new Date();
|
||
if (e3 instanceof Date)
|
||
return new Date(e3);
|
||
if ("string" == typeof e3 && !/Z$/i.test(e3)) {
|
||
var r3 = e3.match($);
|
||
if (r3) {
|
||
var i2 = r3[2] - 1 || 0, s3 = (r3[7] || "0").substring(0, 3);
|
||
return n3 ? new Date(Date.UTC(r3[1], i2, r3[3] || 1, r3[4] || 0, r3[5] || 0, r3[6] || 0, s3)) : new Date(r3[1], i2, r3[3] || 1, r3[4] || 0, r3[5] || 0, r3[6] || 0, s3);
|
||
}
|
||
}
|
||
return new Date(e3);
|
||
}(t3), this.init();
|
||
}, m2.init = function() {
|
||
var t3 = this.$d;
|
||
this.$y = t3.getFullYear(), this.$M = t3.getMonth(), this.$D = t3.getDate(), this.$W = t3.getDay(), this.$H = t3.getHours(), this.$m = t3.getMinutes(), this.$s = t3.getSeconds(), this.$ms = t3.getMilliseconds();
|
||
}, m2.$utils = function() {
|
||
return b;
|
||
}, m2.isValid = function() {
|
||
return !(this.$d.toString() === l);
|
||
}, m2.isSame = function(t3, e3) {
|
||
var n3 = O(t3);
|
||
return this.startOf(e3) <= n3 && n3 <= this.endOf(e3);
|
||
}, m2.isAfter = function(t3, e3) {
|
||
return O(t3) < this.startOf(e3);
|
||
}, m2.isBefore = function(t3, e3) {
|
||
return this.endOf(e3) < O(t3);
|
||
}, m2.$g = function(t3, e3, n3) {
|
||
return b.u(t3) ? this[e3] : this.set(n3, t3);
|
||
}, m2.unix = function() {
|
||
return Math.floor(this.valueOf() / 1e3);
|
||
}, m2.valueOf = function() {
|
||
return this.$d.getTime();
|
||
}, m2.startOf = function(t3, e3) {
|
||
var n3 = this, r3 = !!b.u(e3) || e3, f3 = b.p(t3), l2 = function(t4, e4) {
|
||
var i2 = b.w(n3.$u ? Date.UTC(n3.$y, e4, t4) : new Date(n3.$y, e4, t4), n3);
|
||
return r3 ? i2 : i2.endOf(a);
|
||
}, $2 = function(t4, e4) {
|
||
return b.w(n3.toDate()[t4].apply(n3.toDate("s"), (r3 ? [0, 0, 0, 0] : [23, 59, 59, 999]).slice(e4)), n3);
|
||
}, y2 = this.$W, M3 = this.$M, m3 = this.$D, v2 = "set" + (this.$u ? "UTC" : "");
|
||
switch (f3) {
|
||
case h:
|
||
return r3 ? l2(1, 0) : l2(31, 11);
|
||
case c:
|
||
return r3 ? l2(1, M3) : l2(0, M3 + 1);
|
||
case o2:
|
||
var g2 = this.$locale().weekStart || 0, D2 = (y2 < g2 ? y2 + 7 : y2) - g2;
|
||
return l2(r3 ? m3 - D2 : m3 + (6 - D2), M3);
|
||
case a:
|
||
case d:
|
||
return $2(v2 + "Hours", 0);
|
||
case u:
|
||
return $2(v2 + "Minutes", 1);
|
||
case s2:
|
||
return $2(v2 + "Seconds", 2);
|
||
case i:
|
||
return $2(v2 + "Milliseconds", 3);
|
||
default:
|
||
return this.clone();
|
||
}
|
||
}, m2.endOf = function(t3) {
|
||
return this.startOf(t3, false);
|
||
}, m2.$set = function(t3, e3) {
|
||
var n3, o3 = b.p(t3), f3 = "set" + (this.$u ? "UTC" : ""), l2 = (n3 = {}, n3[a] = f3 + "Date", n3[d] = f3 + "Date", n3[c] = f3 + "Month", n3[h] = f3 + "FullYear", n3[u] = f3 + "Hours", n3[s2] = f3 + "Minutes", n3[i] = f3 + "Seconds", n3[r2] = f3 + "Milliseconds", n3)[o3], $2 = o3 === a ? this.$D + (e3 - this.$W) : e3;
|
||
if (o3 === c || o3 === h) {
|
||
var y2 = this.clone().set(d, 1);
|
||
y2.$d[l2]($2), y2.init(), this.$d = y2.set(d, Math.min(this.$D, y2.daysInMonth())).$d;
|
||
} else
|
||
l2 && this.$d[l2]($2);
|
||
return this.init(), this;
|
||
}, m2.set = function(t3, e3) {
|
||
return this.clone().$set(t3, e3);
|
||
}, m2.get = function(t3) {
|
||
return this[b.p(t3)]();
|
||
}, m2.add = function(r3, f3) {
|
||
var d2, l2 = this;
|
||
r3 = Number(r3);
|
||
var $2 = b.p(f3), y2 = function(t3) {
|
||
var e3 = O(l2);
|
||
return b.w(e3.date(e3.date() + Math.round(t3 * r3)), l2);
|
||
};
|
||
if ($2 === c)
|
||
return this.set(c, this.$M + r3);
|
||
if ($2 === h)
|
||
return this.set(h, this.$y + r3);
|
||
if ($2 === a)
|
||
return y2(1);
|
||
if ($2 === o2)
|
||
return y2(7);
|
||
var M3 = (d2 = {}, d2[s2] = e2, d2[u] = n2, d2[i] = t2, d2)[$2] || 1, m3 = this.$d.getTime() + r3 * M3;
|
||
return b.w(m3, this);
|
||
}, m2.subtract = function(t3, e3) {
|
||
return this.add(-1 * t3, e3);
|
||
}, m2.format = function(t3) {
|
||
var e3 = this, n3 = this.$locale();
|
||
if (!this.isValid())
|
||
return n3.invalidDate || l;
|
||
var r3 = t3 || "YYYY-MM-DDTHH:mm:ssZ", i2 = b.z(this), s3 = this.$H, u2 = this.$m, a2 = this.$M, o3 = n3.weekdays, c2 = n3.months, f3 = n3.meridiem, h2 = function(t4, n4, i3, s4) {
|
||
return t4 && (t4[n4] || t4(e3, r3)) || i3[n4].slice(0, s4);
|
||
}, d2 = function(t4) {
|
||
return b.s(s3 % 12 || 12, t4, "0");
|
||
}, $2 = f3 || function(t4, e4, n4) {
|
||
var r4 = t4 < 12 ? "AM" : "PM";
|
||
return n4 ? r4.toLowerCase() : r4;
|
||
};
|
||
return r3.replace(y, function(t4, r4) {
|
||
return r4 || function(t5) {
|
||
switch (t5) {
|
||
case "YY":
|
||
return String(e3.$y).slice(-2);
|
||
case "YYYY":
|
||
return b.s(e3.$y, 4, "0");
|
||
case "M":
|
||
return a2 + 1;
|
||
case "MM":
|
||
return b.s(a2 + 1, 2, "0");
|
||
case "MMM":
|
||
return h2(n3.monthsShort, a2, c2, 3);
|
||
case "MMMM":
|
||
return h2(c2, a2);
|
||
case "D":
|
||
return e3.$D;
|
||
case "DD":
|
||
return b.s(e3.$D, 2, "0");
|
||
case "d":
|
||
return String(e3.$W);
|
||
case "dd":
|
||
return h2(n3.weekdaysMin, e3.$W, o3, 2);
|
||
case "ddd":
|
||
return h2(n3.weekdaysShort, e3.$W, o3, 3);
|
||
case "dddd":
|
||
return o3[e3.$W];
|
||
case "H":
|
||
return String(s3);
|
||
case "HH":
|
||
return b.s(s3, 2, "0");
|
||
case "h":
|
||
return d2(1);
|
||
case "hh":
|
||
return d2(2);
|
||
case "a":
|
||
return $2(s3, u2, true);
|
||
case "A":
|
||
return $2(s3, u2, false);
|
||
case "m":
|
||
return String(u2);
|
||
case "mm":
|
||
return b.s(u2, 2, "0");
|
||
case "s":
|
||
return String(e3.$s);
|
||
case "ss":
|
||
return b.s(e3.$s, 2, "0");
|
||
case "SSS":
|
||
return b.s(e3.$ms, 3, "0");
|
||
case "Z":
|
||
return i2;
|
||
}
|
||
return null;
|
||
}(t4) || i2.replace(":", "");
|
||
});
|
||
}, m2.utcOffset = function() {
|
||
return 15 * -Math.round(this.$d.getTimezoneOffset() / 15);
|
||
}, m2.diff = function(r3, d2, l2) {
|
||
var $2, y2 = this, M3 = b.p(d2), m3 = O(r3), v2 = (m3.utcOffset() - this.utcOffset()) * e2, g2 = this - m3, D2 = function() {
|
||
return b.m(y2, m3);
|
||
};
|
||
switch (M3) {
|
||
case h:
|
||
$2 = D2() / 12;
|
||
break;
|
||
case c:
|
||
$2 = D2();
|
||
break;
|
||
case f2:
|
||
$2 = D2() / 3;
|
||
break;
|
||
case o2:
|
||
$2 = (g2 - v2) / 6048e5;
|
||
break;
|
||
case a:
|
||
$2 = (g2 - v2) / 864e5;
|
||
break;
|
||
case u:
|
||
$2 = g2 / n2;
|
||
break;
|
||
case s2:
|
||
$2 = g2 / e2;
|
||
break;
|
||
case i:
|
||
$2 = g2 / t2;
|
||
break;
|
||
default:
|
||
$2 = g2;
|
||
}
|
||
return l2 ? $2 : b.a($2);
|
||
}, m2.daysInMonth = function() {
|
||
return this.endOf(c).$D;
|
||
}, m2.$locale = function() {
|
||
return D[this.$L];
|
||
}, m2.locale = function(t3, e3) {
|
||
if (!t3)
|
||
return this.$L;
|
||
var n3 = this.clone(), r3 = w(t3, e3, true);
|
||
return r3 && (n3.$L = r3), n3;
|
||
}, m2.clone = function() {
|
||
return b.w(this.$d, this);
|
||
}, m2.toDate = function() {
|
||
return new Date(this.valueOf());
|
||
}, m2.toJSON = function() {
|
||
return this.isValid() ? this.toISOString() : null;
|
||
}, m2.toISOString = function() {
|
||
return this.$d.toISOString();
|
||
}, m2.toString = function() {
|
||
return this.$d.toUTCString();
|
||
}, M2;
|
||
}(), k = _.prototype;
|
||
return O.prototype = k, [["$ms", r2], ["$s", i], ["$m", s2], ["$H", u], ["$W", a], ["$M", c], ["$y", h], ["$D", d]].forEach(function(t3) {
|
||
k[t3[1]] = function(e3) {
|
||
return this.$g(e3, t3[0], t3[1]);
|
||
};
|
||
}), O.extend = function(t3, e3) {
|
||
return t3.$i || (t3(e3, _, O), t3.$i = true), O;
|
||
}, O.locale = w, O.isDayjs = S, O.unix = function(t3) {
|
||
return O(1e3 * t3);
|
||
}, O.en = D[g], O.Ls = D, O.p = {}, O;
|
||
});
|
||
})(dayjs_min);
|
||
var dayjs_minExports = dayjs_min.exports;
|
||
const dayjs = /* @__PURE__ */ getDefaultExportFromCjs(dayjs_minExports);
|
||
const props$A = defineMixin({
|
||
props: {
|
||
// 图片地址
|
||
src: {
|
||
type: String,
|
||
default: () => props$B.image.src
|
||
},
|
||
// 裁剪模式
|
||
mode: {
|
||
type: String,
|
||
default: () => props$B.image.mode
|
||
},
|
||
// 宽度,单位任意
|
||
width: {
|
||
type: [String, Number],
|
||
default: () => props$B.image.width
|
||
},
|
||
// 高度,单位任意
|
||
height: {
|
||
type: [String, Number],
|
||
default: () => props$B.image.height
|
||
},
|
||
// 图片形状,circle-圆形,square-方形
|
||
shape: {
|
||
type: String,
|
||
default: () => props$B.image.shape
|
||
},
|
||
// 圆角,单位任意
|
||
radius: {
|
||
type: [String, Number],
|
||
default: () => props$B.image.radius
|
||
},
|
||
// 是否懒加载,微信小程序、App、百度小程序、字节跳动小程序
|
||
lazyLoad: {
|
||
type: Boolean,
|
||
default: () => props$B.image.lazyLoad
|
||
},
|
||
// 开启长按图片显示识别微信小程序码菜单
|
||
showMenuByLongpress: {
|
||
type: Boolean,
|
||
default: () => props$B.image.showMenuByLongpress
|
||
},
|
||
// 加载中的图标,或者小图片
|
||
loadingIcon: {
|
||
type: String,
|
||
default: () => props$B.image.loadingIcon
|
||
},
|
||
// 加载失败的图标,或者小图片
|
||
errorIcon: {
|
||
type: String,
|
||
default: () => props$B.image.errorIcon
|
||
},
|
||
// 是否显示加载中的图标或者自定义的slot
|
||
showLoading: {
|
||
type: Boolean,
|
||
default: () => props$B.image.showLoading
|
||
},
|
||
// 是否显示加载错误的图标或者自定义的slot
|
||
showError: {
|
||
type: Boolean,
|
||
default: () => props$B.image.showError
|
||
},
|
||
// 是否需要淡入效果
|
||
fade: {
|
||
type: Boolean,
|
||
default: () => props$B.image.fade
|
||
},
|
||
// 只支持网络资源,只对微信小程序有效
|
||
webp: {
|
||
type: Boolean,
|
||
default: () => props$B.image.webp
|
||
},
|
||
// 过渡时间,单位ms
|
||
duration: {
|
||
type: [String, Number],
|
||
default: () => props$B.image.duration
|
||
},
|
||
// 背景颜色,用于深色页面加载图片时,为了和背景色融合
|
||
bgColor: {
|
||
type: String,
|
||
default: () => props$B.image.bgColor
|
||
}
|
||
}
|
||
});
|
||
const icons = {
|
||
"uicon-level": "",
|
||
"uicon-column-line": "",
|
||
"uicon-checkbox-mark": "",
|
||
"uicon-folder": "",
|
||
"uicon-movie": "",
|
||
"uicon-star-fill": "",
|
||
"uicon-star": "",
|
||
"uicon-phone-fill": "",
|
||
"uicon-phone": "",
|
||
"uicon-apple-fill": "",
|
||
"uicon-chrome-circle-fill": "",
|
||
"uicon-backspace": "",
|
||
"uicon-attach": "",
|
||
"uicon-cut": "",
|
||
"uicon-empty-car": "",
|
||
"uicon-empty-coupon": "",
|
||
"uicon-empty-address": "",
|
||
"uicon-empty-favor": "",
|
||
"uicon-empty-permission": "",
|
||
"uicon-empty-news": "",
|
||
"uicon-empty-search": "",
|
||
"uicon-github-circle-fill": "",
|
||
"uicon-rmb": "",
|
||
"uicon-person-delete-fill": "",
|
||
"uicon-reload": "",
|
||
"uicon-order": "",
|
||
"uicon-server-man": "",
|
||
"uicon-search": "",
|
||
"uicon-fingerprint": "",
|
||
"uicon-more-dot-fill": "",
|
||
"uicon-scan": "",
|
||
"uicon-share-square": "",
|
||
"uicon-map": "",
|
||
"uicon-map-fill": "",
|
||
"uicon-tags": "",
|
||
"uicon-tags-fill": "",
|
||
"uicon-bookmark-fill": "",
|
||
"uicon-bookmark": "",
|
||
"uicon-eye": "",
|
||
"uicon-eye-fill": "",
|
||
"uicon-mic": "",
|
||
"uicon-mic-off": "",
|
||
"uicon-calendar": "",
|
||
"uicon-calendar-fill": "",
|
||
"uicon-trash": "",
|
||
"uicon-trash-fill": "",
|
||
"uicon-play-left": "",
|
||
"uicon-play-right": "",
|
||
"uicon-minus": "",
|
||
"uicon-plus": "",
|
||
"uicon-info": "",
|
||
"uicon-info-circle": "",
|
||
"uicon-info-circle-fill": "",
|
||
"uicon-question": "",
|
||
"uicon-error": "",
|
||
"uicon-close": "",
|
||
"uicon-checkmark": "",
|
||
"uicon-android-circle-fill": "",
|
||
"uicon-android-fill": "",
|
||
"uicon-ie": "",
|
||
"uicon-IE-circle-fill": "",
|
||
"uicon-google": "",
|
||
"uicon-google-circle-fill": "",
|
||
"uicon-setting-fill": "",
|
||
"uicon-setting": "",
|
||
"uicon-minus-square-fill": "",
|
||
"uicon-plus-square-fill": "",
|
||
"uicon-heart": "",
|
||
"uicon-heart-fill": "",
|
||
"uicon-camera": "",
|
||
"uicon-camera-fill": "",
|
||
"uicon-more-circle": "",
|
||
"uicon-more-circle-fill": "",
|
||
"uicon-chat": "",
|
||
"uicon-chat-fill": "",
|
||
"uicon-bag-fill": "",
|
||
"uicon-bag": "",
|
||
"uicon-error-circle-fill": "",
|
||
"uicon-error-circle": "",
|
||
"uicon-close-circle": "",
|
||
"uicon-close-circle-fill": "",
|
||
"uicon-checkmark-circle": "",
|
||
"uicon-checkmark-circle-fill": "",
|
||
"uicon-question-circle-fill": "",
|
||
"uicon-question-circle": "",
|
||
"uicon-share": "",
|
||
"uicon-share-fill": "",
|
||
"uicon-shopping-cart": "",
|
||
"uicon-shopping-cart-fill": "",
|
||
"uicon-bell": "",
|
||
"uicon-bell-fill": "",
|
||
"uicon-list": "",
|
||
"uicon-list-dot": "",
|
||
"uicon-zhihu": "",
|
||
"uicon-zhihu-circle-fill": "",
|
||
"uicon-zhifubao": "",
|
||
"uicon-zhifubao-circle-fill": "",
|
||
"uicon-weixin-circle-fill": "",
|
||
"uicon-weixin-fill": "",
|
||
"uicon-twitter-circle-fill": "",
|
||
"uicon-twitter": "",
|
||
"uicon-taobao-circle-fill": "",
|
||
"uicon-taobao": "",
|
||
"uicon-weibo-circle-fill": "",
|
||
"uicon-weibo": "",
|
||
"uicon-qq-fill": "",
|
||
"uicon-qq-circle-fill": "",
|
||
"uicon-moments-circel-fill": "",
|
||
"uicon-moments": "",
|
||
"uicon-qzone": "",
|
||
"uicon-qzone-circle-fill": "",
|
||
"uicon-baidu-circle-fill": "",
|
||
"uicon-baidu": "",
|
||
"uicon-facebook-circle-fill": "",
|
||
"uicon-facebook": "",
|
||
"uicon-car": "",
|
||
"uicon-car-fill": "",
|
||
"uicon-warning-fill": "",
|
||
"uicon-warning": "",
|
||
"uicon-clock-fill": "",
|
||
"uicon-clock": "",
|
||
"uicon-edit-pen": "",
|
||
"uicon-edit-pen-fill": "",
|
||
"uicon-email": "",
|
||
"uicon-email-fill": "",
|
||
"uicon-minus-circle": "",
|
||
"uicon-minus-circle-fill": "",
|
||
"uicon-plus-circle": "",
|
||
"uicon-plus-circle-fill": "",
|
||
"uicon-file-text": "",
|
||
"uicon-file-text-fill": "",
|
||
"uicon-pushpin": "",
|
||
"uicon-pushpin-fill": "",
|
||
"uicon-grid": "",
|
||
"uicon-grid-fill": "",
|
||
"uicon-play-circle": "",
|
||
"uicon-play-circle-fill": "",
|
||
"uicon-pause-circle-fill": "",
|
||
"uicon-pause": "",
|
||
"uicon-pause-circle": "",
|
||
"uicon-eye-off": "",
|
||
"uicon-eye-off-outline": "",
|
||
"uicon-gift-fill": "",
|
||
"uicon-gift": "",
|
||
"uicon-rmb-circle-fill": "",
|
||
"uicon-rmb-circle": "",
|
||
"uicon-kefu-ermai": "",
|
||
"uicon-server-fill": "",
|
||
"uicon-coupon-fill": "",
|
||
"uicon-coupon": "",
|
||
"uicon-integral": "",
|
||
"uicon-integral-fill": "",
|
||
"uicon-home-fill": "",
|
||
"uicon-home": "",
|
||
"uicon-hourglass-half-fill": "",
|
||
"uicon-hourglass": "",
|
||
"uicon-account": "",
|
||
"uicon-plus-people-fill": "",
|
||
"uicon-minus-people-fill": "",
|
||
"uicon-account-fill": "",
|
||
"uicon-thumb-down-fill": "",
|
||
"uicon-thumb-down": "",
|
||
"uicon-thumb-up": "",
|
||
"uicon-thumb-up-fill": "",
|
||
"uicon-lock-fill": "",
|
||
"uicon-lock-open": "",
|
||
"uicon-lock-opened-fill": "",
|
||
"uicon-lock": "",
|
||
"uicon-red-packet-fill": "",
|
||
"uicon-photo-fill": "",
|
||
"uicon-photo": "",
|
||
"uicon-volume-off-fill": "",
|
||
"uicon-volume-off": "",
|
||
"uicon-volume-fill": "",
|
||
"uicon-volume": "",
|
||
"uicon-red-packet": "",
|
||
"uicon-download": "",
|
||
"uicon-arrow-up-fill": "",
|
||
"uicon-arrow-down-fill": "",
|
||
"uicon-play-left-fill": "",
|
||
"uicon-play-right-fill": "",
|
||
"uicon-rewind-left-fill": "",
|
||
"uicon-rewind-right-fill": "",
|
||
"uicon-arrow-downward": "",
|
||
"uicon-arrow-leftward": "",
|
||
"uicon-arrow-rightward": "",
|
||
"uicon-arrow-upward": "",
|
||
"uicon-arrow-down": "",
|
||
"uicon-arrow-right": "",
|
||
"uicon-arrow-left": "",
|
||
"uicon-arrow-up": "",
|
||
"uicon-skip-back-left": "",
|
||
"uicon-skip-forward-right": "",
|
||
"uicon-rewind-right": "",
|
||
"uicon-rewind-left": "",
|
||
"uicon-arrow-right-double": "",
|
||
"uicon-arrow-left-double": "",
|
||
"uicon-wifi-off": "",
|
||
"uicon-wifi": "",
|
||
"uicon-empty-data": "",
|
||
"uicon-empty-history": "",
|
||
"uicon-empty-list": "",
|
||
"uicon-empty-page": "",
|
||
"uicon-empty-order": "",
|
||
"uicon-man": "",
|
||
"uicon-woman": "",
|
||
"uicon-man-add": "",
|
||
"uicon-man-add-fill": "",
|
||
"uicon-man-delete": "",
|
||
"uicon-man-delete-fill": "",
|
||
"uicon-zh": "",
|
||
"uicon-en": ""
|
||
};
|
||
const props$z = defineMixin({
|
||
props: {
|
||
// 图标类名
|
||
name: {
|
||
type: String,
|
||
default: () => props$B.icon.name
|
||
},
|
||
// 图标颜色,可接受主题色
|
||
color: {
|
||
type: String,
|
||
default: () => props$B.icon.color
|
||
},
|
||
// 字体大小,单位px
|
||
size: {
|
||
type: [String, Number],
|
||
default: () => props$B.icon.size
|
||
},
|
||
// 是否显示粗体
|
||
bold: {
|
||
type: Boolean,
|
||
default: () => props$B.icon.bold
|
||
},
|
||
// 点击图标的时候传递事件出去的index(用于区分点击了哪一个)
|
||
index: {
|
||
type: [String, Number],
|
||
default: () => props$B.icon.index
|
||
},
|
||
// 触摸图标时的类名
|
||
hoverClass: {
|
||
type: String,
|
||
default: () => props$B.icon.hoverClass
|
||
},
|
||
// 自定义扩展前缀,方便用户扩展自己的图标库
|
||
customPrefix: {
|
||
type: String,
|
||
default: () => props$B.icon.customPrefix
|
||
},
|
||
// 图标右边或者下面的文字
|
||
label: {
|
||
type: [String, Number],
|
||
default: () => props$B.icon.label
|
||
},
|
||
// label的位置,只能右边或者下边
|
||
labelPos: {
|
||
type: String,
|
||
default: () => props$B.icon.labelPos
|
||
},
|
||
// label的大小
|
||
labelSize: {
|
||
type: [String, Number],
|
||
default: () => props$B.icon.labelSize
|
||
},
|
||
// label的颜色
|
||
labelColor: {
|
||
type: String,
|
||
default: () => props$B.icon.labelColor
|
||
},
|
||
// label与图标的距离
|
||
space: {
|
||
type: [String, Number],
|
||
default: () => props$B.icon.space
|
||
},
|
||
// 图片的mode
|
||
imgMode: {
|
||
type: String,
|
||
default: () => props$B.icon.imgMode
|
||
},
|
||
// 用于显示图片小图标时,图片的宽度
|
||
width: {
|
||
type: [String, Number],
|
||
default: () => props$B.icon.width
|
||
},
|
||
// 用于显示图片小图标时,图片的高度
|
||
height: {
|
||
type: [String, Number],
|
||
default: () => props$B.icon.height
|
||
},
|
||
// 用于解决某些情况下,让图标垂直居中的用途
|
||
top: {
|
||
type: [String, Number],
|
||
default: () => props$B.icon.top
|
||
},
|
||
// 是否阻止事件传播
|
||
stop: {
|
||
type: Boolean,
|
||
default: () => props$B.icon.stop
|
||
}
|
||
}
|
||
});
|
||
const props$y = defineMixin({
|
||
props: {
|
||
// 输入框的内容
|
||
value: {
|
||
type: [String, Number],
|
||
default: () => props$B.textarea.value
|
||
},
|
||
// 输入框的内容
|
||
modelValue: {
|
||
type: [String, Number],
|
||
default: () => props$B.textarea.value
|
||
},
|
||
// 输入框为空时占位符
|
||
placeholder: {
|
||
type: [String, Number],
|
||
default: () => props$B.textarea.placeholder
|
||
},
|
||
// 指定placeholder的样式类,注意页面或组件的style中写了scoped时,需要在类名前写/deep/
|
||
placeholderClass: {
|
||
type: String,
|
||
default: () => props$B.input.placeholderClass
|
||
},
|
||
// 指定placeholder的样式
|
||
placeholderStyle: {
|
||
type: [String, Object],
|
||
default: () => props$B.input.placeholderStyle
|
||
},
|
||
// 输入框高度
|
||
height: {
|
||
type: [String, Number],
|
||
default: () => props$B.textarea.height
|
||
},
|
||
// 设置键盘右下角按钮的文字,仅微信小程序,App-vue和H5有效
|
||
confirmType: {
|
||
type: String,
|
||
default: () => props$B.textarea.confirmType
|
||
},
|
||
// 是否禁用
|
||
disabled: {
|
||
type: Boolean,
|
||
default: () => props$B.textarea.disabled
|
||
},
|
||
// 是否显示统计字数
|
||
count: {
|
||
type: Boolean,
|
||
default: () => props$B.textarea.count
|
||
},
|
||
// 是否自动获取焦点,nvue不支持,H5取决于浏览器的实现
|
||
focus: {
|
||
type: Boolean,
|
||
default: () => props$B.textarea.focus
|
||
},
|
||
// 是否自动增加高度
|
||
autoHeight: {
|
||
type: Boolean,
|
||
default: () => props$B.textarea.autoHeight
|
||
},
|
||
// 如果textarea是在一个position:fixed的区域,需要显示指定属性fixed为true
|
||
fixed: {
|
||
type: Boolean,
|
||
default: () => props$B.textarea.fixed
|
||
},
|
||
// 指定光标与键盘的距离
|
||
cursorSpacing: {
|
||
type: Number,
|
||
default: () => props$B.textarea.cursorSpacing
|
||
},
|
||
// 指定focus时的光标位置
|
||
cursor: {
|
||
type: [String, Number],
|
||
default: () => props$B.textarea.cursor
|
||
},
|
||
// 是否显示键盘上方带有”完成“按钮那一栏,
|
||
showConfirmBar: {
|
||
type: Boolean,
|
||
default: () => props$B.textarea.showConfirmBar
|
||
},
|
||
// 光标起始位置,自动聚焦时有效,需与selection-end搭配使用
|
||
selectionStart: {
|
||
type: Number,
|
||
default: () => props$B.textarea.selectionStart
|
||
},
|
||
// 光标结束位置,自动聚焦时有效,需与selection-start搭配使用
|
||
selectionEnd: {
|
||
type: Number,
|
||
default: () => props$B.textarea.selectionEnd
|
||
},
|
||
// 键盘弹起时,是否自动上推页面
|
||
adjustPosition: {
|
||
type: Boolean,
|
||
default: () => props$B.textarea.adjustPosition
|
||
},
|
||
// 是否去掉 iOS 下的默认内边距,只微信小程序有效
|
||
disableDefaultPadding: {
|
||
type: Boolean,
|
||
default: () => props$B.textarea.disableDefaultPadding
|
||
},
|
||
// focus时,点击页面的时候不收起键盘,只微信小程序有效
|
||
holdKeyboard: {
|
||
type: Boolean,
|
||
default: () => props$B.textarea.holdKeyboard
|
||
},
|
||
// 最大输入长度,设置为 -1 的时候不限制最大长度
|
||
maxlength: {
|
||
type: [String, Number],
|
||
default: () => props$B.textarea.maxlength
|
||
},
|
||
// 边框类型,surround-四周边框,bottom-底部边框
|
||
border: {
|
||
type: String,
|
||
default: () => props$B.textarea.border
|
||
},
|
||
// 用于处理或者过滤输入框内容的方法
|
||
formatter: {
|
||
type: [Function, null],
|
||
default: () => props$B.textarea.formatter
|
||
},
|
||
// 是否忽略组件内对文本合成系统事件的处理
|
||
ignoreCompositionEvent: {
|
||
type: Boolean,
|
||
default: true
|
||
}
|
||
}
|
||
});
|
||
const props$x = defineMixin({
|
||
props: {
|
||
// 绑定的值
|
||
modelValue: {
|
||
type: [String, Number],
|
||
default: () => props$B.input.value
|
||
},
|
||
// number-数字输入键盘,app-vue下可以输入浮点数,app-nvue和小程序平台下只能输入整数
|
||
// idcard-身份证输入键盘,微信、支付宝、百度、QQ小程序
|
||
// digit-带小数点的数字键盘,App的nvue页面、微信、支付宝、百度、头条、QQ小程序
|
||
// text-文本输入键盘
|
||
type: {
|
||
type: String,
|
||
default: () => props$B.input.type
|
||
},
|
||
// 如果 textarea 是在一个 position:fixed 的区域,需要显示指定属性 fixed 为 true,
|
||
// 兼容性:微信小程序、百度小程序、字节跳动小程序、QQ小程序
|
||
fixed: {
|
||
type: Boolean,
|
||
default: () => props$B.input.fixed
|
||
},
|
||
// 是否禁用输入框
|
||
disabled: {
|
||
type: Boolean,
|
||
default: () => props$B.input.disabled
|
||
},
|
||
// 禁用状态时的背景色
|
||
disabledColor: {
|
||
type: String,
|
||
default: () => props$B.input.disabledColor
|
||
},
|
||
// 是否显示清除控件
|
||
clearable: {
|
||
type: Boolean,
|
||
default: () => props$B.input.clearable
|
||
},
|
||
// 是否密码类型
|
||
password: {
|
||
type: Boolean,
|
||
default: () => props$B.input.password
|
||
},
|
||
// 最大输入长度,设置为 -1 的时候不限制最大长度
|
||
maxlength: {
|
||
type: [String, Number],
|
||
default: () => props$B.input.maxlength
|
||
},
|
||
// 输入框为空时的占位符
|
||
placeholder: {
|
||
type: String,
|
||
default: () => props$B.input.placeholder
|
||
},
|
||
// 指定placeholder的样式类,注意页面或组件的style中写了scoped时,需要在类名前写/deep/
|
||
placeholderClass: {
|
||
type: String,
|
||
default: () => props$B.input.placeholderClass
|
||
},
|
||
// 指定placeholder的样式
|
||
placeholderStyle: {
|
||
type: [String, Object],
|
||
default: () => props$B.input.placeholderStyle
|
||
},
|
||
// 是否显示输入字数统计,只在 type ="text"或type ="textarea"时有效
|
||
showWordLimit: {
|
||
type: Boolean,
|
||
default: () => props$B.input.showWordLimit
|
||
},
|
||
// 设置右下角按钮的文字,有效值:send|search|next|go|done,兼容性详见uni-app文档
|
||
// https://uniapp.dcloud.io/component/input
|
||
// https://uniapp.dcloud.io/component/textarea
|
||
confirmType: {
|
||
type: String,
|
||
default: () => props$B.input.confirmType
|
||
},
|
||
// 点击键盘右下角按钮时是否保持键盘不收起,H5无效
|
||
confirmHold: {
|
||
type: Boolean,
|
||
default: () => props$B.input.confirmHold
|
||
},
|
||
// focus时,点击页面的时候不收起键盘,微信小程序有效
|
||
holdKeyboard: {
|
||
type: Boolean,
|
||
default: () => props$B.input.holdKeyboard
|
||
},
|
||
// 自动获取焦点
|
||
// 在 H5 平台能否聚焦以及软键盘是否跟随弹出,取决于当前浏览器本身的实现。nvue 页面不支持,需使用组件的 focus()、blur() 方法控制焦点
|
||
focus: {
|
||
type: Boolean,
|
||
default: () => props$B.input.focus
|
||
},
|
||
// 键盘收起时,是否自动失去焦点,目前仅App3.0.0+有效
|
||
autoBlur: {
|
||
type: Boolean,
|
||
default: () => props$B.input.autoBlur
|
||
},
|
||
// 是否去掉 iOS 下的默认内边距,仅微信小程序,且type=textarea时有效
|
||
disableDefaultPadding: {
|
||
type: Boolean,
|
||
default: () => props$B.input.disableDefaultPadding
|
||
},
|
||
// 指定focus时光标的位置
|
||
cursor: {
|
||
type: [String, Number],
|
||
default: () => props$B.input.cursor
|
||
},
|
||
// 输入框聚焦时底部与键盘的距离
|
||
cursorSpacing: {
|
||
type: [String, Number],
|
||
default: () => props$B.input.cursorSpacing
|
||
},
|
||
// 光标起始位置,自动聚集时有效,需与selection-end搭配使用
|
||
selectionStart: {
|
||
type: [String, Number],
|
||
default: () => props$B.input.selectionStart
|
||
},
|
||
// 光标结束位置,自动聚集时有效,需与selection-start搭配使用
|
||
selectionEnd: {
|
||
type: [String, Number],
|
||
default: () => props$B.input.selectionEnd
|
||
},
|
||
// 键盘弹起时,是否自动上推页面
|
||
adjustPosition: {
|
||
type: Boolean,
|
||
default: () => props$B.input.adjustPosition
|
||
},
|
||
// 输入框内容对齐方式,可选值为:left|center|right
|
||
inputAlign: {
|
||
type: String,
|
||
default: () => props$B.input.inputAlign
|
||
},
|
||
// 输入框字体的大小
|
||
fontSize: {
|
||
type: [String, Number],
|
||
default: () => props$B.input.fontSize
|
||
},
|
||
// 输入框字体颜色
|
||
color: {
|
||
type: String,
|
||
default: () => props$B.input.color
|
||
},
|
||
// 输入框前置图标
|
||
prefixIcon: {
|
||
type: String,
|
||
default: () => props$B.input.prefixIcon
|
||
},
|
||
// 前置图标样式,对象或字符串
|
||
prefixIconStyle: {
|
||
type: [String, Object],
|
||
default: () => props$B.input.prefixIconStyle
|
||
},
|
||
// 输入框后置图标
|
||
suffixIcon: {
|
||
type: String,
|
||
default: () => props$B.input.suffixIcon
|
||
},
|
||
// 后置图标样式,对象或字符串
|
||
suffixIconStyle: {
|
||
type: [String, Object],
|
||
default: () => props$B.input.suffixIconStyle
|
||
},
|
||
// 边框类型,surround-四周边框,bottom-底部边框,none-无边框
|
||
border: {
|
||
type: String,
|
||
default: () => props$B.input.border
|
||
},
|
||
// 是否只读,与disabled不同之处在于disabled会置灰组件,而readonly则不会
|
||
readonly: {
|
||
type: Boolean,
|
||
default: () => props$B.input.readonly
|
||
},
|
||
// 输入框形状,circle-圆形,square-方形
|
||
shape: {
|
||
type: String,
|
||
default: () => props$B.input.shape
|
||
},
|
||
// 用于处理或者过滤输入框内容的方法
|
||
formatter: {
|
||
type: [Function, null],
|
||
default: () => props$B.input.formatter
|
||
},
|
||
// 是否忽略组件内对文本合成系统事件的处理
|
||
ignoreCompositionEvent: {
|
||
type: Boolean,
|
||
default: true
|
||
}
|
||
}
|
||
});
|
||
const props$w = defineMixin({
|
||
props: {
|
||
// 是否展示弹窗
|
||
show: {
|
||
type: Boolean,
|
||
default: () => props$B.popup.show
|
||
},
|
||
// 是否显示遮罩
|
||
overlay: {
|
||
type: Boolean,
|
||
default: () => props$B.popup.overlay
|
||
},
|
||
// 弹出的方向,可选值为 top bottom right left center
|
||
mode: {
|
||
type: String,
|
||
default: () => props$B.popup.mode
|
||
},
|
||
// 动画时长,单位ms
|
||
duration: {
|
||
type: [String, Number],
|
||
default: () => props$B.popup.duration
|
||
},
|
||
// 是否显示关闭图标
|
||
closeable: {
|
||
type: Boolean,
|
||
default: () => props$B.popup.closeable
|
||
},
|
||
// 自定义遮罩的样式
|
||
overlayStyle: {
|
||
type: [Object, String],
|
||
default: () => props$B.popup.overlayStyle
|
||
},
|
||
// 点击遮罩是否关闭弹窗
|
||
closeOnClickOverlay: {
|
||
type: Boolean,
|
||
default: () => props$B.popup.closeOnClickOverlay
|
||
},
|
||
// 层级
|
||
zIndex: {
|
||
type: [String, Number],
|
||
default: () => props$B.popup.zIndex
|
||
},
|
||
// 是否为iPhoneX留出底部安全距离
|
||
safeAreaInsetBottom: {
|
||
type: Boolean,
|
||
default: () => props$B.popup.safeAreaInsetBottom
|
||
},
|
||
// 是否留出顶部安全距离(状态栏高度)
|
||
safeAreaInsetTop: {
|
||
type: Boolean,
|
||
default: () => props$B.popup.safeAreaInsetTop
|
||
},
|
||
// 自定义关闭图标位置,top-left为左上角,top-right为右上角,bottom-left为左下角,bottom-right为右下角
|
||
closeIconPos: {
|
||
type: String,
|
||
default: () => props$B.popup.closeIconPos
|
||
},
|
||
// 是否显示圆角
|
||
round: {
|
||
type: [Boolean, String, Number],
|
||
default: () => props$B.popup.round
|
||
},
|
||
// mode=center,也即中部弹出时,是否使用缩放模式
|
||
zoom: {
|
||
type: Boolean,
|
||
default: () => props$B.popup.zoom
|
||
},
|
||
// 弹窗背景色,设置为transparent可去除白色背景
|
||
bgColor: {
|
||
type: String,
|
||
default: () => props$B.popup.bgColor
|
||
},
|
||
// 遮罩的透明度,0-1之间
|
||
overlayOpacity: {
|
||
type: [Number, String],
|
||
default: () => props$B.popup.overlayOpacity
|
||
}
|
||
}
|
||
});
|
||
const props$v = defineMixin({
|
||
props: {
|
||
// 内置图标名称,或图片路径,建议绝对路径
|
||
icon: {
|
||
type: String,
|
||
default: () => props$B.empty.icon
|
||
},
|
||
// 提示文字
|
||
text: {
|
||
type: String,
|
||
default: () => props$B.empty.text
|
||
},
|
||
// 文字颜色
|
||
textColor: {
|
||
type: String,
|
||
default: () => props$B.empty.textColor
|
||
},
|
||
// 文字大小
|
||
textSize: {
|
||
type: [String, Number],
|
||
default: () => props$B.empty.textSize
|
||
},
|
||
// 图标的颜色
|
||
iconColor: {
|
||
type: String,
|
||
default: () => props$B.empty.iconColor
|
||
},
|
||
// 图标的大小
|
||
iconSize: {
|
||
type: [String, Number],
|
||
default: () => props$B.empty.iconSize
|
||
},
|
||
// 选择预置的图标类型
|
||
mode: {
|
||
type: String,
|
||
default: () => props$B.empty.mode
|
||
},
|
||
// 图标宽度,单位px
|
||
width: {
|
||
type: [String, Number],
|
||
default: () => props$B.empty.width
|
||
},
|
||
// 图标高度,单位px
|
||
height: {
|
||
type: [String, Number],
|
||
default: () => props$B.empty.height
|
||
},
|
||
// 是否显示组件
|
||
show: {
|
||
type: Boolean,
|
||
default: () => props$B.empty.show
|
||
},
|
||
// 组件距离上一个元素之间的距离,默认px单位
|
||
marginTop: {
|
||
type: [String, Number],
|
||
default: () => props$B.empty.marginTop
|
||
}
|
||
}
|
||
});
|
||
const props$u = defineMixin({
|
||
props: {
|
||
// 是否显示遮罩
|
||
show: {
|
||
type: Boolean,
|
||
default: () => props$B.overlay.show
|
||
},
|
||
// 层级z-index
|
||
zIndex: {
|
||
type: [String, Number],
|
||
default: () => props$B.overlay.zIndex
|
||
},
|
||
// 遮罩的过渡时间,单位为ms
|
||
duration: {
|
||
type: [String, Number],
|
||
default: () => props$B.overlay.duration
|
||
},
|
||
// 不透明度值,当做rgba的第四个参数
|
||
opacity: {
|
||
type: [String, Number],
|
||
default: () => props$B.overlay.opacity
|
||
}
|
||
}
|
||
});
|
||
const props$t = defineMixin({
|
||
props: {
|
||
// 标题
|
||
title: {
|
||
type: [String, Number],
|
||
default: () => props$B.stepsItem.title
|
||
},
|
||
// 描述文本
|
||
desc: {
|
||
type: [String, Number],
|
||
default: () => props$B.stepsItem.desc
|
||
},
|
||
// 图标大小
|
||
iconSize: {
|
||
type: [String, Number],
|
||
default: () => props$B.stepsItem.iconSize
|
||
},
|
||
// 当前步骤是否处于失败状态
|
||
error: {
|
||
type: Boolean,
|
||
default: () => props$B.stepsItem.error
|
||
},
|
||
// 自定义样式
|
||
itemStyle: {
|
||
type: [Object],
|
||
default: {}
|
||
}
|
||
}
|
||
});
|
||
const props$s = defineMixin({
|
||
props: {
|
||
// 排列方向
|
||
direction: {
|
||
type: String,
|
||
default: () => props$B.steps.direction
|
||
},
|
||
// 设置第几个步骤
|
||
current: {
|
||
type: [String, Number],
|
||
default: () => props$B.steps.current
|
||
},
|
||
// 激活状态颜色
|
||
activeColor: {
|
||
type: String,
|
||
default: () => props$B.steps.activeColor
|
||
},
|
||
// 未激活状态颜色
|
||
inactiveColor: {
|
||
type: String,
|
||
default: () => props$B.steps.inactiveColor
|
||
},
|
||
// 激活状态的图标
|
||
activeIcon: {
|
||
type: String,
|
||
default: () => props$B.steps.activeIcon
|
||
},
|
||
// 未激活状态图标
|
||
inactiveIcon: {
|
||
type: String,
|
||
default: () => props$B.steps.inactiveIcon
|
||
},
|
||
// 是否显示点类型
|
||
dot: {
|
||
type: Boolean,
|
||
default: () => props$B.steps.dot
|
||
}
|
||
}
|
||
});
|
||
const props$r = defineMixin({
|
||
props: {
|
||
// radio的名称
|
||
name: {
|
||
type: [String, Number, Boolean],
|
||
default: () => props$B.radio.name
|
||
},
|
||
// 形状,square为方形,circle为圆型
|
||
shape: {
|
||
type: String,
|
||
default: () => props$B.radio.shape
|
||
},
|
||
// 是否禁用
|
||
disabled: {
|
||
type: [String, Boolean],
|
||
default: () => props$B.radio.disabled
|
||
},
|
||
// 是否禁止点击提示语选中单选框
|
||
labelDisabled: {
|
||
type: [String, Boolean],
|
||
default: () => props$B.radio.labelDisabled
|
||
},
|
||
// 选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值
|
||
activeColor: {
|
||
type: String,
|
||
default: () => props$B.radio.activeColor
|
||
},
|
||
// 未选中的颜色
|
||
inactiveColor: {
|
||
type: String,
|
||
default: () => props$B.radio.inactiveColor
|
||
},
|
||
// 图标的大小,单位px
|
||
iconSize: {
|
||
type: [String, Number],
|
||
default: () => props$B.radio.iconSize
|
||
},
|
||
// label的字体大小,px单位
|
||
labelSize: {
|
||
type: [String, Number],
|
||
default: () => props$B.radio.labelSize
|
||
},
|
||
// label提示文字,因为nvue下,直接slot进来的文字,由于特殊的结构,无法修改样式
|
||
label: {
|
||
type: [String, Number],
|
||
default: () => props$B.radio.label
|
||
},
|
||
// 整体的大小
|
||
size: {
|
||
type: [String, Number],
|
||
default: () => props$B.radio.size
|
||
},
|
||
// 图标颜色
|
||
color: {
|
||
type: String,
|
||
default: () => props$B.radio.color
|
||
},
|
||
// label的颜色
|
||
labelColor: {
|
||
type: String,
|
||
default: () => props$B.radio.labelColor
|
||
},
|
||
// 图标颜色
|
||
iconColor: {
|
||
type: String,
|
||
default: () => props$B.radio.iconColor
|
||
}
|
||
}
|
||
});
|
||
const props$q = defineMixin({
|
||
props: {
|
||
// 绑定的值
|
||
modelValue: {
|
||
type: [String, Number, Boolean],
|
||
default: () => props$B.radioGroup.value
|
||
},
|
||
// 是否禁用全部radio
|
||
disabled: {
|
||
type: Boolean,
|
||
default: () => props$B.radioGroup.disabled
|
||
},
|
||
// 形状,circle-圆形,square-方形
|
||
shape: {
|
||
type: String,
|
||
default: () => props$B.radioGroup.shape
|
||
},
|
||
// 选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值
|
||
activeColor: {
|
||
type: String,
|
||
default: () => props$B.radioGroup.activeColor
|
||
},
|
||
// 未选中的颜色
|
||
inactiveColor: {
|
||
type: String,
|
||
default: () => props$B.radioGroup.inactiveColor
|
||
},
|
||
// 标识符
|
||
name: {
|
||
type: String,
|
||
default: () => props$B.radioGroup.name
|
||
},
|
||
// 整个组件的尺寸,默认px
|
||
size: {
|
||
type: [String, Number],
|
||
default: () => props$B.radioGroup.size
|
||
},
|
||
// 布局方式,row-横向,column-纵向
|
||
placement: {
|
||
type: String,
|
||
default: () => props$B.radioGroup.placement
|
||
},
|
||
// label的文本
|
||
label: {
|
||
type: [String],
|
||
default: () => props$B.radioGroup.label
|
||
},
|
||
// label的颜色 (默认 '#303133' )
|
||
labelColor: {
|
||
type: [String],
|
||
default: () => props$B.radioGroup.labelColor
|
||
},
|
||
// label的字体大小,px单位
|
||
labelSize: {
|
||
type: [String, Number],
|
||
default: () => props$B.radioGroup.labelSize
|
||
},
|
||
// 是否禁止点击文本操作checkbox(默认 false )
|
||
labelDisabled: {
|
||
type: Boolean,
|
||
default: () => props$B.radioGroup.labelDisabled
|
||
},
|
||
// 图标颜色
|
||
iconColor: {
|
||
type: String,
|
||
default: () => props$B.radioGroup.iconColor
|
||
},
|
||
// 图标的大小,单位px
|
||
iconSize: {
|
||
type: [String, Number],
|
||
default: () => props$B.radioGroup.iconSize
|
||
},
|
||
// 竖向配列时,是否显示下划线
|
||
borderBottom: {
|
||
type: Boolean,
|
||
default: () => props$B.radioGroup.borderBottom
|
||
},
|
||
// 图标与文字的对齐方式
|
||
iconPlacement: {
|
||
type: String,
|
||
default: () => props$B.radio.iconPlacement
|
||
},
|
||
// item 之间的间距
|
||
gap: {
|
||
type: [String, Number],
|
||
default: () => props$B.radioGroup.gap
|
||
}
|
||
}
|
||
});
|
||
const props$p = defineMixin({
|
||
props: {
|
||
// 当前选中项的value值
|
||
modelValue: {
|
||
type: [Number, String, Array],
|
||
default: ""
|
||
},
|
||
// 菜单项标题
|
||
title: {
|
||
type: [String, Number],
|
||
default: ""
|
||
},
|
||
// 选项数据,如果传入了默认slot,此参数无效
|
||
options: {
|
||
type: Array,
|
||
default() {
|
||
return [];
|
||
}
|
||
},
|
||
// 是否禁用此菜单项
|
||
disabled: {
|
||
type: Boolean,
|
||
default: false
|
||
},
|
||
// 下拉弹窗的高度
|
||
height: {
|
||
type: [Number, String],
|
||
default: "auto"
|
||
},
|
||
// 点击遮罩是否可以收起弹窗
|
||
closeOnClickOverlay: {
|
||
type: Boolean,
|
||
default: true
|
||
}
|
||
}
|
||
});
|
||
const props$o = defineMixin({
|
||
props: {
|
||
// 菜单标题和选项的激活态颜色
|
||
activeColor: {
|
||
type: String,
|
||
default: "#2979ff"
|
||
},
|
||
// 菜单标题和选项的未激活态颜色
|
||
inactiveColor: {
|
||
type: String,
|
||
default: "#606266"
|
||
},
|
||
// 点击遮罩是否关闭菜单
|
||
closeOnClickMask: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
// 点击当前激活项标题是否关闭菜单
|
||
closeOnClickSelf: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
// 过渡时间
|
||
duration: {
|
||
type: [Number, String],
|
||
default: 300
|
||
},
|
||
// 标题菜单的高度
|
||
height: {
|
||
type: [Number, String],
|
||
default: 40
|
||
},
|
||
// 是否显示下边框
|
||
borderBottom: {
|
||
type: Boolean,
|
||
default: false
|
||
},
|
||
// 标题的字体大小
|
||
titleSize: {
|
||
type: [Number, String],
|
||
default: 14
|
||
},
|
||
// 下拉出来的内容部分的圆角值
|
||
borderRadius: {
|
||
type: [Number, String],
|
||
default: 0
|
||
},
|
||
// 菜单右侧的icon图标
|
||
menuIcon: {
|
||
type: String,
|
||
default: "arrow-down"
|
||
},
|
||
// 菜单右侧图标的大小
|
||
menuIconSize: {
|
||
type: [Number, String],
|
||
default: 14
|
||
}
|
||
}
|
||
});
|
||
const props$n = defineMixin({
|
||
props: {
|
||
// input的label提示语
|
||
label: {
|
||
type: String,
|
||
default: () => props$B.formItem.label
|
||
},
|
||
// 绑定的值
|
||
prop: {
|
||
type: String,
|
||
default: () => props$B.formItem.prop
|
||
},
|
||
// 绑定的规则
|
||
rules: {
|
||
type: Array,
|
||
default: () => props$B.formItem.rules
|
||
},
|
||
// 是否显示表单域的下划线边框
|
||
borderBottom: {
|
||
type: [String, Boolean],
|
||
default: () => props$B.formItem.borderBottom
|
||
},
|
||
// label的位置,left-左边,top-上边
|
||
labelPosition: {
|
||
type: String,
|
||
default: () => props$B.formItem.labelPosition
|
||
},
|
||
// label的宽度,单位px
|
||
labelWidth: {
|
||
type: [String, Number],
|
||
default: () => props$B.formItem.labelWidth
|
||
},
|
||
// 右侧图标
|
||
rightIcon: {
|
||
type: String,
|
||
default: () => props$B.formItem.rightIcon
|
||
},
|
||
// 左侧图标
|
||
leftIcon: {
|
||
type: String,
|
||
default: () => props$B.formItem.leftIcon
|
||
},
|
||
// 是否显示左边的必填星号,只作显示用,具体校验必填的逻辑,请在rules中配置
|
||
required: {
|
||
type: Boolean,
|
||
default: () => props$B.formItem.required
|
||
},
|
||
leftIconStyle: {
|
||
type: [String, Object],
|
||
default: () => props$B.formItem.leftIconStyle
|
||
}
|
||
}
|
||
});
|
||
const props$m = defineMixin({
|
||
props: {
|
||
// 倒计时总秒数
|
||
seconds: {
|
||
type: [String, Number],
|
||
default: () => props$B.code.seconds
|
||
},
|
||
// 尚未开始时提示
|
||
startText: {
|
||
type: String,
|
||
default: () => props$B.code.startText
|
||
},
|
||
// 正在倒计时中的提示
|
||
changeText: {
|
||
type: String,
|
||
default: () => props$B.code.changeText
|
||
},
|
||
// 倒计时结束时的提示
|
||
endText: {
|
||
type: String,
|
||
default: () => props$B.code.endText
|
||
},
|
||
// 是否在H5刷新或各端返回再进入时继续倒计时
|
||
keepRunning: {
|
||
type: Boolean,
|
||
default: () => props$B.code.keepRunning
|
||
},
|
||
// 为了区分多个页面,或者一个页面多个倒计时组件本地存储的继续倒计时变了
|
||
uniqueKey: {
|
||
type: String,
|
||
default: () => props$B.code.uniqueKey
|
||
}
|
||
}
|
||
});
|
||
const buttonMixin = defineMixin({
|
||
props: {
|
||
lang: String,
|
||
sessionFrom: String,
|
||
sendMessageTitle: String,
|
||
sendMessagePath: String,
|
||
sendMessageImg: String,
|
||
showMessageCard: Boolean,
|
||
appParameter: String,
|
||
formType: String,
|
||
openType: String
|
||
}
|
||
});
|
||
const openType = defineMixin({
|
||
props: {
|
||
openType: String
|
||
},
|
||
methods: {
|
||
onGetUserInfo(event) {
|
||
this.$emit("getuserinfo", event.detail);
|
||
},
|
||
onContact(event) {
|
||
this.$emit("contact", event.detail);
|
||
},
|
||
onGetPhoneNumber(event) {
|
||
this.$emit("getphonenumber", event.detail);
|
||
},
|
||
onError(event) {
|
||
this.$emit("error", event.detail);
|
||
},
|
||
onLaunchApp(event) {
|
||
this.$emit("launchapp", event.detail);
|
||
},
|
||
onOpenSetting(event) {
|
||
this.$emit("opensetting", event.detail);
|
||
}
|
||
}
|
||
});
|
||
const props$l = defineMixin({
|
||
props: {
|
||
// 是否细边框
|
||
hairline: {
|
||
type: Boolean,
|
||
default: () => props$B.button.hairline
|
||
},
|
||
// 按钮的预置样式,info,primary,error,warning,success
|
||
type: {
|
||
type: String,
|
||
default: () => props$B.button.type
|
||
},
|
||
// 按钮尺寸,large,normal,small,mini
|
||
size: {
|
||
type: String,
|
||
default: () => props$B.button.size
|
||
},
|
||
// 按钮形状,circle(两边为半圆),square(带圆角)
|
||
shape: {
|
||
type: String,
|
||
default: () => props$B.button.shape
|
||
},
|
||
// 按钮是否镂空
|
||
plain: {
|
||
type: Boolean,
|
||
default: () => props$B.button.plain
|
||
},
|
||
// 是否禁止状态
|
||
disabled: {
|
||
type: Boolean,
|
||
default: () => props$B.button.disabled
|
||
},
|
||
// 是否加载中
|
||
loading: {
|
||
type: Boolean,
|
||
default: () => props$B.button.loading
|
||
},
|
||
// 加载中提示文字
|
||
loadingText: {
|
||
type: [String, Number],
|
||
default: () => props$B.button.loadingText
|
||
},
|
||
// 加载状态图标类型
|
||
loadingMode: {
|
||
type: String,
|
||
default: () => props$B.button.loadingMode
|
||
},
|
||
// 加载图标大小
|
||
loadingSize: {
|
||
type: [String, Number],
|
||
default: () => props$B.button.loadingSize
|
||
},
|
||
// 开放能力,具体请看uniapp稳定关于button组件部分说明
|
||
// https://uniapp.dcloud.io/component/button
|
||
openType: {
|
||
type: String,
|
||
default: () => props$B.button.openType
|
||
},
|
||
// 用于 <form> 组件,点击分别会触发 <form> 组件的 submit/reset 事件
|
||
// 取值为submit(提交表单),reset(重置表单)
|
||
formType: {
|
||
type: String,
|
||
default: () => props$B.button.formType
|
||
},
|
||
// 打开 APP 时,向 APP 传递的参数,open-type=launchApp时有效
|
||
// 只微信小程序、QQ小程序有效
|
||
appParameter: {
|
||
type: String,
|
||
default: () => props$B.button.appParameter
|
||
},
|
||
// 指定是否阻止本节点的祖先节点出现点击态,微信小程序有效
|
||
hoverStopPropagation: {
|
||
type: Boolean,
|
||
default: () => props$B.button.hoverStopPropagation
|
||
},
|
||
// 指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文。只微信小程序有效
|
||
lang: {
|
||
type: String,
|
||
default: () => props$B.button.lang
|
||
},
|
||
// 会话来源,open-type="contact"时有效。只微信小程序有效
|
||
sessionFrom: {
|
||
type: String,
|
||
default: () => props$B.button.sessionFrom
|
||
},
|
||
// 会话内消息卡片标题,open-type="contact"时有效
|
||
// 默认当前标题,只微信小程序有效
|
||
sendMessageTitle: {
|
||
type: String,
|
||
default: () => props$B.button.sendMessageTitle
|
||
},
|
||
// 会话内消息卡片点击跳转小程序路径,open-type="contact"时有效
|
||
// 默认当前分享路径,只微信小程序有效
|
||
sendMessagePath: {
|
||
type: String,
|
||
default: () => props$B.button.sendMessagePath
|
||
},
|
||
// 会话内消息卡片图片,open-type="contact"时有效
|
||
// 默认当前页面截图,只微信小程序有效
|
||
sendMessageImg: {
|
||
type: String,
|
||
default: () => props$B.button.sendMessageImg
|
||
},
|
||
// 是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示"可能要发送的小程序"提示,
|
||
// 用户点击后可以快速发送小程序消息,open-type="contact"时有效
|
||
showMessageCard: {
|
||
type: Boolean,
|
||
default: () => props$B.button.showMessageCard
|
||
},
|
||
// 额外传参参数,用于小程序的data-xxx属性,通过target.dataset.name获取
|
||
dataName: {
|
||
type: String,
|
||
default: () => props$B.button.dataName
|
||
},
|
||
// 节流,一定时间内只能触发一次
|
||
throttleTime: {
|
||
type: [String, Number],
|
||
default: () => props$B.button.throttleTime
|
||
},
|
||
// 按住后多久出现点击态,单位毫秒
|
||
hoverStartTime: {
|
||
type: [String, Number],
|
||
default: () => props$B.button.hoverStartTime
|
||
},
|
||
// 手指松开后点击态保留时间,单位毫秒
|
||
hoverStayTime: {
|
||
type: [String, Number],
|
||
default: () => props$B.button.hoverStayTime
|
||
},
|
||
// 按钮文字,之所以通过props传入,是因为slot传入的话
|
||
// nvue中无法控制文字的样式
|
||
text: {
|
||
type: [String, Number],
|
||
default: () => props$B.button.text
|
||
},
|
||
// 按钮图标
|
||
icon: {
|
||
type: String,
|
||
default: () => props$B.button.icon
|
||
},
|
||
// 按钮图标
|
||
iconColor: {
|
||
type: String,
|
||
default: () => props$B.button.icon
|
||
},
|
||
// 按钮颜色,支持传入linear-gradient渐变色
|
||
color: {
|
||
type: String,
|
||
default: () => props$B.button.color
|
||
},
|
||
// 停止冒泡
|
||
stop: {
|
||
type: Boolean,
|
||
default: () => props$B.button.stop
|
||
}
|
||
}
|
||
});
|
||
const props$k = defineMixin({
|
||
props: {
|
||
// 当前form的需要验证字段的集合
|
||
model: {
|
||
type: Object,
|
||
default: () => props$B.form.model
|
||
},
|
||
// 验证规则
|
||
rules: {
|
||
type: [Object, Function, Array],
|
||
default: () => props$B.form.rules
|
||
},
|
||
// 有错误时的提示方式,message-提示信息,toast-进行toast提示
|
||
// border-bottom-下边框呈现红色,none-无提示
|
||
errorType: {
|
||
type: String,
|
||
default: () => props$B.form.errorType
|
||
},
|
||
// 是否显示表单域的下划线边框
|
||
borderBottom: {
|
||
type: Boolean,
|
||
default: () => props$B.form.borderBottom
|
||
},
|
||
// label的位置,left-左边,top-上边
|
||
labelPosition: {
|
||
type: String,
|
||
default: () => props$B.form.labelPosition
|
||
},
|
||
// label的宽度,单位px
|
||
labelWidth: {
|
||
type: [String, Number],
|
||
default: () => props$B.form.labelWidth
|
||
},
|
||
// lable字体的对齐方式
|
||
labelAlign: {
|
||
type: String,
|
||
default: () => props$B.form.labelAlign
|
||
},
|
||
// lable的样式,对象形式
|
||
labelStyle: {
|
||
type: Object,
|
||
default: () => props$B.form.labelStyle
|
||
}
|
||
}
|
||
});
|
||
const formatRegExp = /%[sdj%]/g;
|
||
let warning = function warning2() {
|
||
};
|
||
if (typeof process !== "undefined" && process.env && true && typeof window !== "undefined" && typeof document !== "undefined") {
|
||
warning = function warning3(type2, errors) {
|
||
if (typeof console !== "undefined" && console.warn) {
|
||
if (errors.every((e2) => typeof e2 === "string")) {
|
||
index$1.__f__("warn", "at node_modules/uview-plus/libs/util/async-validator.js:28", type2, errors);
|
||
}
|
||
}
|
||
};
|
||
}
|
||
function convertFieldsError(errors) {
|
||
if (!errors || !errors.length)
|
||
return null;
|
||
const fields = {};
|
||
errors.forEach((error2) => {
|
||
const { field } = error2;
|
||
fields[field] = fields[field] || [];
|
||
fields[field].push(error2);
|
||
});
|
||
return fields;
|
||
}
|
||
function format() {
|
||
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
||
args[_key] = arguments[_key];
|
||
}
|
||
let i = 1;
|
||
const f2 = args[0];
|
||
const len = args.length;
|
||
if (typeof f2 === "function") {
|
||
return f2.apply(null, args.slice(1));
|
||
}
|
||
if (typeof f2 === "string") {
|
||
let str = String(f2).replace(formatRegExp, (x) => {
|
||
if (x === "%%") {
|
||
return "%";
|
||
}
|
||
if (i >= len) {
|
||
return x;
|
||
}
|
||
switch (x) {
|
||
case "%s":
|
||
return String(args[i++]);
|
||
case "%d":
|
||
return Number(args[i++]);
|
||
case "%j":
|
||
try {
|
||
return JSON.stringify(args[i++]);
|
||
} catch (_) {
|
||
return "[Circular]";
|
||
}
|
||
break;
|
||
default:
|
||
return x;
|
||
}
|
||
});
|
||
for (let arg = args[i]; i < len; arg = args[++i]) {
|
||
str += ` ${arg}`;
|
||
}
|
||
return str;
|
||
}
|
||
return f2;
|
||
}
|
||
function isNativeStringType(type2) {
|
||
return type2 === "string" || type2 === "url" || type2 === "hex" || type2 === "email" || type2 === "pattern";
|
||
}
|
||
function isEmptyValue(value2, type2) {
|
||
if (value2 === void 0 || value2 === null) {
|
||
return true;
|
||
}
|
||
if (type2 === "array" && Array.isArray(value2) && !value2.length) {
|
||
return true;
|
||
}
|
||
if (isNativeStringType(type2) && typeof value2 === "string" && !value2) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
function asyncParallelArray(arr, func2, callback) {
|
||
const results = [];
|
||
let total = 0;
|
||
const arrLength = arr.length;
|
||
function count(errors) {
|
||
results.push.apply(results, errors);
|
||
total++;
|
||
if (total === arrLength) {
|
||
callback(results);
|
||
}
|
||
}
|
||
arr.forEach((a) => {
|
||
func2(a, count);
|
||
});
|
||
}
|
||
function asyncSerialArray(arr, func2, callback) {
|
||
let index2 = 0;
|
||
const arrLength = arr.length;
|
||
function next(errors) {
|
||
if (errors && errors.length) {
|
||
callback(errors);
|
||
return;
|
||
}
|
||
const original = index2;
|
||
index2 += 1;
|
||
if (original < arrLength) {
|
||
func2(arr[original], next);
|
||
} else {
|
||
callback([]);
|
||
}
|
||
}
|
||
next([]);
|
||
}
|
||
function flattenObjArr(objArr) {
|
||
const ret = [];
|
||
Object.keys(objArr).forEach((k) => {
|
||
ret.push.apply(ret, objArr[k]);
|
||
});
|
||
return ret;
|
||
}
|
||
function asyncMap(objArr, option, func2, callback) {
|
||
if (option.first) {
|
||
const _pending = new Promise((resolve2, reject) => {
|
||
const next = function next2(errors) {
|
||
callback(errors);
|
||
return errors.length ? reject({
|
||
errors,
|
||
fields: convertFieldsError(errors)
|
||
}) : resolve2();
|
||
};
|
||
const flattenArr = flattenObjArr(objArr);
|
||
asyncSerialArray(flattenArr, func2, next);
|
||
});
|
||
_pending.catch((e2) => e2);
|
||
return _pending;
|
||
}
|
||
let firstFields = option.firstFields || [];
|
||
if (firstFields === true) {
|
||
firstFields = Object.keys(objArr);
|
||
}
|
||
const objArrKeys = Object.keys(objArr);
|
||
const objArrLength = objArrKeys.length;
|
||
let total = 0;
|
||
const results = [];
|
||
const pending = new Promise((resolve2, reject) => {
|
||
const next = function next2(errors) {
|
||
results.push.apply(results, errors);
|
||
total++;
|
||
if (total === objArrLength) {
|
||
callback(results);
|
||
return results.length ? reject({
|
||
errors: results,
|
||
fields: convertFieldsError(results)
|
||
}) : resolve2();
|
||
}
|
||
};
|
||
if (!objArrKeys.length) {
|
||
callback(results);
|
||
resolve2();
|
||
}
|
||
objArrKeys.forEach((key) => {
|
||
const arr = objArr[key];
|
||
if (firstFields.indexOf(key) !== -1) {
|
||
asyncSerialArray(arr, func2, next);
|
||
} else {
|
||
asyncParallelArray(arr, func2, next);
|
||
}
|
||
});
|
||
});
|
||
pending.catch((e2) => e2);
|
||
return pending;
|
||
}
|
||
function complementError(rule) {
|
||
return function(oe) {
|
||
if (oe && oe.message) {
|
||
oe.field = oe.field || rule.fullField;
|
||
return oe;
|
||
}
|
||
return {
|
||
message: typeof oe === "function" ? oe() : oe,
|
||
field: oe.field || rule.fullField
|
||
};
|
||
};
|
||
}
|
||
function deepMerge(target, source) {
|
||
if (source) {
|
||
for (const s2 in source) {
|
||
if (source.hasOwnProperty(s2)) {
|
||
const value2 = source[s2];
|
||
if (typeof value2 === "object" && typeof target[s2] === "object") {
|
||
target[s2] = { ...target[s2], ...value2 };
|
||
} else {
|
||
target[s2] = value2;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return target;
|
||
}
|
||
function required(rule, value2, source, errors, options, type2) {
|
||
if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value2, type2 || rule.type))) {
|
||
errors.push(format(options.messages.required, rule.fullField));
|
||
}
|
||
}
|
||
function whitespace(rule, value2, source, errors, options) {
|
||
if (/^\s+$/.test(value2) || value2 === "") {
|
||
errors.push(format(options.messages.whitespace, rule.fullField));
|
||
}
|
||
}
|
||
const pattern = {
|
||
// http://emailregex.com/
|
||
email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
|
||
url: new RegExp(
|
||
"^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$",
|
||
"i"
|
||
),
|
||
hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i
|
||
};
|
||
var types = {
|
||
integer: function integer(value2) {
|
||
return /^(-)?\d+$/.test(value2);
|
||
},
|
||
float: function float(value2) {
|
||
return /^(-)?\d+(\.\d+)?$/.test(value2);
|
||
},
|
||
array: function array2(value2) {
|
||
return Array.isArray(value2);
|
||
},
|
||
regexp: function regexp(value2) {
|
||
if (value2 instanceof RegExp) {
|
||
return true;
|
||
}
|
||
try {
|
||
return !!new RegExp(value2);
|
||
} catch (e2) {
|
||
return false;
|
||
}
|
||
},
|
||
date: function date2(value2) {
|
||
return typeof value2.getTime === "function" && typeof value2.getMonth === "function" && typeof value2.getYear === "function";
|
||
},
|
||
number: function number2(value2) {
|
||
if (isNaN(value2)) {
|
||
return false;
|
||
}
|
||
return typeof +value2 === "number";
|
||
},
|
||
object: function object2(value2) {
|
||
return typeof value2 === "object" && !types.array(value2);
|
||
},
|
||
method: function method(value2) {
|
||
return typeof value2 === "function";
|
||
},
|
||
email: function email2(value2) {
|
||
return typeof value2 === "string" && !!value2.match(pattern.email) && value2.length < 255;
|
||
},
|
||
url: function url2(value2) {
|
||
return typeof value2 === "string" && !!value2.match(pattern.url);
|
||
},
|
||
hex: function hex(value2) {
|
||
return typeof value2 === "string" && !!value2.match(pattern.hex);
|
||
}
|
||
};
|
||
function type(rule, value2, source, errors, options) {
|
||
if (rule.required && value2 === void 0) {
|
||
required(rule, value2, source, errors, options);
|
||
return;
|
||
}
|
||
const custom = ["integer", "float", "array", "regexp", "object", "method", "email", "number", "date", "url", "hex"];
|
||
const ruleType = rule.type;
|
||
if (custom.indexOf(ruleType) > -1) {
|
||
if (!types[ruleType](value2)) {
|
||
errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));
|
||
}
|
||
} else if (ruleType && typeof value2 !== rule.type) {
|
||
errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));
|
||
}
|
||
}
|
||
function range(rule, value2, source, errors, options) {
|
||
const len = typeof rule.len === "number";
|
||
const min = typeof rule.min === "number";
|
||
const max = typeof rule.max === "number";
|
||
const spRegexp = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
|
||
let val = value2;
|
||
let key = null;
|
||
const num = typeof value2 === "number";
|
||
const str = typeof value2 === "string";
|
||
const arr = Array.isArray(value2);
|
||
if (num) {
|
||
key = "number";
|
||
} else if (str) {
|
||
key = "string";
|
||
} else if (arr) {
|
||
key = "array";
|
||
}
|
||
if (!key) {
|
||
return false;
|
||
}
|
||
if (arr) {
|
||
val = value2.length;
|
||
}
|
||
if (str) {
|
||
val = value2.replace(spRegexp, "_").length;
|
||
}
|
||
if (len) {
|
||
if (val !== rule.len) {
|
||
errors.push(format(options.messages[key].len, rule.fullField, rule.len));
|
||
}
|
||
} else if (min && !max && val < rule.min) {
|
||
errors.push(format(options.messages[key].min, rule.fullField, rule.min));
|
||
} else if (max && !min && val > rule.max) {
|
||
errors.push(format(options.messages[key].max, rule.fullField, rule.max));
|
||
} else if (min && max && (val < rule.min || val > rule.max)) {
|
||
errors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max));
|
||
}
|
||
}
|
||
const ENUM = "enum";
|
||
function enumerable(rule, value2, source, errors, options) {
|
||
rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : [];
|
||
if (rule[ENUM].indexOf(value2) === -1) {
|
||
errors.push(format(options.messages[ENUM], rule.fullField, rule[ENUM].join(", ")));
|
||
}
|
||
}
|
||
function pattern$1(rule, value2, source, errors, options) {
|
||
if (rule.pattern) {
|
||
if (rule.pattern instanceof RegExp) {
|
||
rule.pattern.lastIndex = 0;
|
||
if (!rule.pattern.test(value2)) {
|
||
errors.push(format(options.messages.pattern.mismatch, rule.fullField, value2, rule.pattern));
|
||
}
|
||
} else if (typeof rule.pattern === "string") {
|
||
const _pattern = new RegExp(rule.pattern);
|
||
if (!_pattern.test(value2)) {
|
||
errors.push(format(options.messages.pattern.mismatch, rule.fullField, value2, rule.pattern));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
const rules = {
|
||
required,
|
||
whitespace,
|
||
type,
|
||
range,
|
||
enum: enumerable,
|
||
pattern: pattern$1
|
||
};
|
||
function string(rule, value2, callback, source, options) {
|
||
const errors = [];
|
||
const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate2) {
|
||
if (isEmptyValue(value2, "string") && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options, "string");
|
||
if (!isEmptyValue(value2, "string")) {
|
||
rules.type(rule, value2, source, errors, options);
|
||
rules.range(rule, value2, source, errors, options);
|
||
rules.pattern(rule, value2, source, errors, options);
|
||
if (rule.whitespace === true) {
|
||
rules.whitespace(rule, value2, source, errors, options);
|
||
}
|
||
}
|
||
}
|
||
callback(errors);
|
||
}
|
||
function method2(rule, value2, callback, source, options) {
|
||
const errors = [];
|
||
const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate2) {
|
||
if (isEmptyValue(value2) && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options);
|
||
if (value2 !== void 0) {
|
||
rules.type(rule, value2, source, errors, options);
|
||
}
|
||
}
|
||
callback(errors);
|
||
}
|
||
function number22(rule, value2, callback, source, options) {
|
||
const errors = [];
|
||
const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate2) {
|
||
if (value2 === "") {
|
||
value2 = void 0;
|
||
}
|
||
if (isEmptyValue(value2) && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options);
|
||
if (value2 !== void 0) {
|
||
rules.type(rule, value2, source, errors, options);
|
||
rules.range(rule, value2, source, errors, options);
|
||
}
|
||
}
|
||
callback(errors);
|
||
}
|
||
function _boolean(rule, value2, callback, source, options) {
|
||
const errors = [];
|
||
const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate2) {
|
||
if (isEmptyValue(value2) && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options);
|
||
if (value2 !== void 0) {
|
||
rules.type(rule, value2, source, errors, options);
|
||
}
|
||
}
|
||
callback(errors);
|
||
}
|
||
function regexp2(rule, value2, callback, source, options) {
|
||
const errors = [];
|
||
const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate2) {
|
||
if (isEmptyValue(value2) && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options);
|
||
if (!isEmptyValue(value2)) {
|
||
rules.type(rule, value2, source, errors, options);
|
||
}
|
||
}
|
||
callback(errors);
|
||
}
|
||
function integer2(rule, value2, callback, source, options) {
|
||
const errors = [];
|
||
const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate2) {
|
||
if (isEmptyValue(value2) && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options);
|
||
if (value2 !== void 0) {
|
||
rules.type(rule, value2, source, errors, options);
|
||
rules.range(rule, value2, source, errors, options);
|
||
}
|
||
}
|
||
callback(errors);
|
||
}
|
||
function floatFn(rule, value2, callback, source, options) {
|
||
const errors = [];
|
||
const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate2) {
|
||
if (isEmptyValue(value2) && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options);
|
||
if (value2 !== void 0) {
|
||
rules.type(rule, value2, source, errors, options);
|
||
rules.range(rule, value2, source, errors, options);
|
||
}
|
||
}
|
||
callback(errors);
|
||
}
|
||
function array22(rule, value2, callback, source, options) {
|
||
const errors = [];
|
||
const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate2) {
|
||
if (isEmptyValue(value2, "array") && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options, "array");
|
||
if (!isEmptyValue(value2, "array")) {
|
||
rules.type(rule, value2, source, errors, options);
|
||
rules.range(rule, value2, source, errors, options);
|
||
}
|
||
}
|
||
callback(errors);
|
||
}
|
||
function object22(rule, value2, callback, source, options) {
|
||
const errors = [];
|
||
const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate2) {
|
||
if (isEmptyValue(value2) && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options);
|
||
if (value2 !== void 0) {
|
||
rules.type(rule, value2, source, errors, options);
|
||
}
|
||
}
|
||
callback(errors);
|
||
}
|
||
const ENUM$1 = "enum";
|
||
function enumerable$1(rule, value2, callback, source, options) {
|
||
const errors = [];
|
||
const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate2) {
|
||
if (isEmptyValue(value2) && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options);
|
||
if (value2 !== void 0) {
|
||
rules[ENUM$1](rule, value2, source, errors, options);
|
||
}
|
||
}
|
||
callback(errors);
|
||
}
|
||
function pattern$2(rule, value2, callback, source, options) {
|
||
const errors = [];
|
||
const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate2) {
|
||
if (isEmptyValue(value2, "string") && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options);
|
||
if (!isEmptyValue(value2, "string")) {
|
||
rules.pattern(rule, value2, source, errors, options);
|
||
}
|
||
}
|
||
callback(errors);
|
||
}
|
||
function date22(rule, value2, callback, source, options) {
|
||
const errors = [];
|
||
const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate2) {
|
||
if (isEmptyValue(value2) && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options);
|
||
if (!isEmptyValue(value2)) {
|
||
let dateObject;
|
||
if (typeof value2 === "number") {
|
||
dateObject = new Date(value2);
|
||
} else {
|
||
dateObject = value2;
|
||
}
|
||
rules.type(rule, dateObject, source, errors, options);
|
||
if (dateObject) {
|
||
rules.range(rule, dateObject.getTime(), source, errors, options);
|
||
}
|
||
}
|
||
}
|
||
callback(errors);
|
||
}
|
||
function required$1(rule, value2, callback, source, options) {
|
||
const errors = [];
|
||
const type2 = Array.isArray(value2) ? "array" : typeof value2;
|
||
rules.required(rule, value2, source, errors, options, type2);
|
||
callback(errors);
|
||
}
|
||
function type$1(rule, value2, callback, source, options) {
|
||
const ruleType = rule.type;
|
||
const errors = [];
|
||
const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate2) {
|
||
if (isEmptyValue(value2, ruleType) && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options, ruleType);
|
||
if (!isEmptyValue(value2, ruleType)) {
|
||
rules.type(rule, value2, source, errors, options);
|
||
}
|
||
}
|
||
callback(errors);
|
||
}
|
||
function any(rule, value2, callback, source, options) {
|
||
const errors = [];
|
||
const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate2) {
|
||
if (isEmptyValue(value2) && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options);
|
||
}
|
||
callback(errors);
|
||
}
|
||
const validators = {
|
||
string,
|
||
method: method2,
|
||
number: number22,
|
||
boolean: _boolean,
|
||
regexp: regexp2,
|
||
integer: integer2,
|
||
float: floatFn,
|
||
array: array22,
|
||
object: object22,
|
||
enum: enumerable$1,
|
||
pattern: pattern$2,
|
||
date: date22,
|
||
url: type$1,
|
||
hex: type$1,
|
||
email: type$1,
|
||
required: required$1,
|
||
any
|
||
};
|
||
function newMessages() {
|
||
return {
|
||
default: "Validation error on field %s",
|
||
required: "%s is required",
|
||
enum: "%s must be one of %s",
|
||
whitespace: "%s cannot be empty",
|
||
date: {
|
||
format: "%s date %s is invalid for format %s",
|
||
parse: "%s date could not be parsed, %s is invalid ",
|
||
invalid: "%s date %s is invalid"
|
||
},
|
||
types: {
|
||
string: "%s is not a %s",
|
||
method: "%s is not a %s (function)",
|
||
array: "%s is not an %s",
|
||
object: "%s is not an %s",
|
||
number: "%s is not a %s",
|
||
date: "%s is not a %s",
|
||
boolean: "%s is not a %s",
|
||
integer: "%s is not an %s",
|
||
float: "%s is not a %s",
|
||
regexp: "%s is not a valid %s",
|
||
email: "%s is not a valid %s",
|
||
url: "%s is not a valid %s",
|
||
hex: "%s is not a valid %s"
|
||
},
|
||
string: {
|
||
len: "%s must be exactly %s characters",
|
||
min: "%s must be at least %s characters",
|
||
max: "%s cannot be longer than %s characters",
|
||
range: "%s must be between %s and %s characters"
|
||
},
|
||
number: {
|
||
len: "%s must equal %s",
|
||
min: "%s cannot be less than %s",
|
||
max: "%s cannot be greater than %s",
|
||
range: "%s must be between %s and %s"
|
||
},
|
||
array: {
|
||
len: "%s must be exactly %s in length",
|
||
min: "%s cannot be less than %s in length",
|
||
max: "%s cannot be greater than %s in length",
|
||
range: "%s must be between %s and %s in length"
|
||
},
|
||
pattern: {
|
||
mismatch: "%s value %s does not match pattern %s"
|
||
},
|
||
clone: function clone2() {
|
||
const cloned = JSON.parse(JSON.stringify(this));
|
||
cloned.clone = this.clone;
|
||
return cloned;
|
||
}
|
||
};
|
||
}
|
||
const messages = newMessages();
|
||
function Schema(descriptor) {
|
||
this.rules = null;
|
||
this._messages = messages;
|
||
this.define(descriptor);
|
||
}
|
||
Schema.prototype = {
|
||
messages: function messages2(_messages) {
|
||
if (_messages) {
|
||
this._messages = deepMerge(newMessages(), _messages);
|
||
}
|
||
return this._messages;
|
||
},
|
||
define: function define(rules2) {
|
||
if (!rules2) {
|
||
throw new Error("Cannot configure a schema with no rules");
|
||
}
|
||
if (typeof rules2 !== "object" || Array.isArray(rules2)) {
|
||
throw new Error("Rules must be an object");
|
||
}
|
||
this.rules = {};
|
||
let z;
|
||
let item;
|
||
for (z in rules2) {
|
||
if (rules2.hasOwnProperty(z)) {
|
||
item = rules2[z];
|
||
this.rules[z] = Array.isArray(item) ? item : [item];
|
||
}
|
||
}
|
||
},
|
||
validate: function validate(source_, o2, oc) {
|
||
const _this = this;
|
||
if (o2 === void 0) {
|
||
o2 = {};
|
||
}
|
||
if (oc === void 0) {
|
||
oc = function oc2() {
|
||
};
|
||
}
|
||
let source = source_;
|
||
let options = o2;
|
||
let callback = oc;
|
||
if (typeof options === "function") {
|
||
callback = options;
|
||
options = {};
|
||
}
|
||
if (!this.rules || Object.keys(this.rules).length === 0) {
|
||
if (callback) {
|
||
callback();
|
||
}
|
||
return Promise.resolve();
|
||
}
|
||
function complete(results) {
|
||
let i;
|
||
let errors = [];
|
||
let fields = {};
|
||
function add2(e2) {
|
||
if (Array.isArray(e2)) {
|
||
let _errors;
|
||
errors = (_errors = errors).concat.apply(_errors, e2);
|
||
} else {
|
||
errors.push(e2);
|
||
}
|
||
}
|
||
for (i = 0; i < results.length; i++) {
|
||
add2(results[i]);
|
||
}
|
||
if (!errors.length) {
|
||
errors = null;
|
||
fields = null;
|
||
} else {
|
||
fields = convertFieldsError(errors);
|
||
}
|
||
callback(errors, fields);
|
||
}
|
||
if (options.messages) {
|
||
let messages$1 = this.messages();
|
||
if (messages$1 === messages) {
|
||
messages$1 = newMessages();
|
||
}
|
||
deepMerge(messages$1, options.messages);
|
||
options.messages = messages$1;
|
||
} else {
|
||
options.messages = this.messages();
|
||
}
|
||
let arr;
|
||
let value2;
|
||
const series = {};
|
||
const keys = options.keys || Object.keys(this.rules);
|
||
keys.forEach((z) => {
|
||
arr = _this.rules[z];
|
||
value2 = source[z];
|
||
arr.forEach((r2) => {
|
||
let rule = r2;
|
||
if (typeof rule.transform === "function") {
|
||
if (source === source_) {
|
||
source = { ...source };
|
||
}
|
||
value2 = source[z] = rule.transform(value2);
|
||
}
|
||
if (typeof rule === "function") {
|
||
rule = {
|
||
validator: rule
|
||
};
|
||
} else {
|
||
rule = { ...rule };
|
||
}
|
||
rule.validator = _this.getValidationMethod(rule);
|
||
rule.field = z;
|
||
rule.fullField = rule.fullField || z;
|
||
rule.type = _this.getType(rule);
|
||
if (!rule.validator) {
|
||
return;
|
||
}
|
||
series[z] = series[z] || [];
|
||
series[z].push({
|
||
rule,
|
||
value: value2,
|
||
source,
|
||
field: z
|
||
});
|
||
});
|
||
});
|
||
const errorFields = {};
|
||
return asyncMap(series, options, (data, doIt) => {
|
||
const { rule } = data;
|
||
let deep = (rule.type === "object" || rule.type === "array") && (typeof rule.fields === "object" || typeof rule.defaultField === "object");
|
||
deep = deep && (rule.required || !rule.required && data.value);
|
||
rule.field = data.field;
|
||
function addFullfield(key, schema) {
|
||
return { ...schema, fullField: `${rule.fullField}.${key}` };
|
||
}
|
||
function cb(e2) {
|
||
if (e2 === void 0) {
|
||
e2 = [];
|
||
}
|
||
let errors = e2;
|
||
if (!Array.isArray(errors)) {
|
||
errors = [errors];
|
||
}
|
||
if (!options.suppressWarning && errors.length) {
|
||
Schema.warning("async-validator:", errors);
|
||
}
|
||
if (errors.length && rule.message) {
|
||
errors = [].concat(rule.message);
|
||
}
|
||
errors = errors.map(complementError(rule));
|
||
if (options.first && errors.length) {
|
||
errorFields[rule.field] = 1;
|
||
return doIt(errors);
|
||
}
|
||
if (!deep) {
|
||
doIt(errors);
|
||
} else {
|
||
if (rule.required && !data.value) {
|
||
if (rule.message) {
|
||
errors = [].concat(rule.message).map(complementError(rule));
|
||
} else if (options.error) {
|
||
errors = [options.error(rule, format(options.messages.required, rule.field))];
|
||
} else {
|
||
errors = [];
|
||
}
|
||
return doIt(errors);
|
||
}
|
||
let fieldsSchema = {};
|
||
if (rule.defaultField) {
|
||
for (const k in data.value) {
|
||
if (data.value.hasOwnProperty(k)) {
|
||
fieldsSchema[k] = rule.defaultField;
|
||
}
|
||
}
|
||
}
|
||
fieldsSchema = { ...fieldsSchema, ...data.rule.fields };
|
||
for (const f2 in fieldsSchema) {
|
||
if (fieldsSchema.hasOwnProperty(f2)) {
|
||
const fieldSchema = Array.isArray(fieldsSchema[f2]) ? fieldsSchema[f2] : [fieldsSchema[f2]];
|
||
fieldsSchema[f2] = fieldSchema.map(addFullfield.bind(null, f2));
|
||
}
|
||
}
|
||
const schema = new Schema(fieldsSchema);
|
||
schema.messages(options.messages);
|
||
if (data.rule.options) {
|
||
data.rule.options.messages = options.messages;
|
||
data.rule.options.error = options.error;
|
||
}
|
||
schema.validate(data.value, data.rule.options || options, (errs) => {
|
||
const finalErrors = [];
|
||
if (errors && errors.length) {
|
||
finalErrors.push.apply(finalErrors, errors);
|
||
}
|
||
if (errs && errs.length) {
|
||
finalErrors.push.apply(finalErrors, errs);
|
||
}
|
||
doIt(finalErrors.length ? finalErrors : null);
|
||
});
|
||
}
|
||
}
|
||
let res;
|
||
if (rule.asyncValidator) {
|
||
res = rule.asyncValidator(rule, data.value, cb, data.source, options);
|
||
} else if (rule.validator) {
|
||
res = rule.validator(rule, data.value, cb, data.source, options);
|
||
if (res === true) {
|
||
cb();
|
||
} else if (res === false) {
|
||
cb(rule.message || `${rule.field} fails`);
|
||
} else if (res instanceof Array) {
|
||
cb(res);
|
||
} else if (res instanceof Error) {
|
||
cb(res.message);
|
||
}
|
||
}
|
||
if (res && res.then) {
|
||
res.then(() => cb(), (e2) => cb(e2));
|
||
}
|
||
}, (results) => {
|
||
complete(results);
|
||
});
|
||
},
|
||
getType: function getType2(rule) {
|
||
if (rule.type === void 0 && rule.pattern instanceof RegExp) {
|
||
rule.type = "pattern";
|
||
}
|
||
if (typeof rule.validator !== "function" && rule.type && !validators.hasOwnProperty(rule.type)) {
|
||
throw new Error(format("Unknown rule type %s", rule.type));
|
||
}
|
||
return rule.type || "string";
|
||
},
|
||
getValidationMethod: function getValidationMethod(rule) {
|
||
if (typeof rule.validator === "function") {
|
||
return rule.validator;
|
||
}
|
||
const keys = Object.keys(rule);
|
||
const messageIndex = keys.indexOf("message");
|
||
if (messageIndex !== -1) {
|
||
keys.splice(messageIndex, 1);
|
||
}
|
||
if (keys.length === 1 && keys[0] === "required") {
|
||
return validators.required;
|
||
}
|
||
return validators[this.getType(rule)] || false;
|
||
}
|
||
};
|
||
Schema.register = function register(type2, validator) {
|
||
if (typeof validator !== "function") {
|
||
throw new Error("Cannot register a validator by type, validator is not a function");
|
||
}
|
||
validators[type2] = validator;
|
||
};
|
||
Schema.warning = warning;
|
||
Schema.messages = messages;
|
||
const props$j = defineMixin({
|
||
props: {
|
||
// 滑块的移动过渡时间,单位ms
|
||
duration: {
|
||
type: Number,
|
||
default: () => props$B.tabs.duration
|
||
},
|
||
// tabs标签数组
|
||
list: {
|
||
type: Array,
|
||
default: () => props$B.tabs.list
|
||
},
|
||
// 滑块颜色
|
||
lineColor: {
|
||
type: String,
|
||
default: () => props$B.tabs.lineColor
|
||
},
|
||
// 菜单选择中时的样式
|
||
activeStyle: {
|
||
type: [String, Object],
|
||
default: () => props$B.tabs.activeStyle
|
||
},
|
||
// 菜单非选中时的样式
|
||
inactiveStyle: {
|
||
type: [String, Object],
|
||
default: () => props$B.tabs.inactiveStyle
|
||
},
|
||
// 滑块长度
|
||
lineWidth: {
|
||
type: [String, Number],
|
||
default: () => props$B.tabs.lineWidth
|
||
},
|
||
// 滑块高度
|
||
lineHeight: {
|
||
type: [String, Number],
|
||
default: () => props$B.tabs.lineHeight
|
||
},
|
||
// 滑块背景显示大小,当滑块背景设置为图片时使用
|
||
lineBgSize: {
|
||
type: String,
|
||
default: () => props$B.tabs.lineBgSize
|
||
},
|
||
// 菜单item的样式
|
||
itemStyle: {
|
||
type: [String, Object],
|
||
default: () => props$B.tabs.itemStyle
|
||
},
|
||
// 菜单是否可滚动
|
||
scrollable: {
|
||
type: Boolean,
|
||
default: () => props$B.tabs.scrollable
|
||
},
|
||
// 当前选中标签的索引
|
||
current: {
|
||
type: [Number, String],
|
||
default: () => props$B.tabs.current
|
||
},
|
||
// 默认读取的键名
|
||
keyName: {
|
||
type: String,
|
||
default: () => props$B.tabs.keyName
|
||
},
|
||
// 左侧图标样式
|
||
iconStyle: {
|
||
type: [String, Object],
|
||
default: () => props$B.tabs.iconStyle
|
||
}
|
||
}
|
||
});
|
||
const config = {
|
||
// 信任的标签(保持标签名不变)
|
||
trustTags: makeMap("a,abbr,ad,audio,b,blockquote,br,code,col,colgroup,dd,del,dl,dt,div,em,fieldset,h1,h2,h3,h4,h5,h6,hr,i,img,ins,label,legend,li,ol,p,q,ruby,rt,source,span,strong,sub,sup,table,tbody,td,tfoot,th,thead,tr,title,ul,video"),
|
||
// 块级标签(转为 div,其他的非信任标签转为 span)
|
||
blockTags: makeMap("address,article,aside,body,caption,center,cite,footer,header,html,nav,pre,section"),
|
||
// 行内标签
|
||
inlineTags: makeMap("abbr,b,big,code,del,em,i,ins,label,q,small,span,strong,sub,sup"),
|
||
// 要移除的标签
|
||
ignoreTags: makeMap("area,base,canvas,embed,frame,head,iframe,input,link,map,meta,param,rp,script,source,style,textarea,title,track,wbr"),
|
||
// 自闭合的标签
|
||
voidTags: makeMap("area,base,br,col,circle,ellipse,embed,frame,hr,img,input,line,link,meta,param,path,polygon,rect,source,track,use,wbr"),
|
||
// html 实体
|
||
entities: {
|
||
lt: "<",
|
||
gt: ">",
|
||
quot: '"',
|
||
apos: "'",
|
||
ensp: " ",
|
||
emsp: " ",
|
||
nbsp: " ",
|
||
semi: ";",
|
||
ndash: "–",
|
||
mdash: "—",
|
||
middot: "·",
|
||
lsquo: "‘",
|
||
rsquo: "’",
|
||
ldquo: "“",
|
||
rdquo: "”",
|
||
bull: "•",
|
||
hellip: "…",
|
||
larr: "←",
|
||
uarr: "↑",
|
||
rarr: "→",
|
||
darr: "↓"
|
||
},
|
||
// 默认的标签样式
|
||
tagStyle: {
|
||
address: "font-style:italic",
|
||
big: "display:inline;font-size:1.2em",
|
||
caption: "display:table-caption;text-align:center",
|
||
center: "text-align:center",
|
||
cite: "font-style:italic",
|
||
dd: "margin-left:40px",
|
||
mark: "background-color:yellow",
|
||
pre: "font-family:monospace;white-space:pre",
|
||
s: "text-decoration:line-through",
|
||
small: "display:inline;font-size:0.8em",
|
||
strike: "text-decoration:line-through",
|
||
u: "text-decoration:underline"
|
||
},
|
||
// svg 大小写对照表
|
||
svgDict: {
|
||
animatetransform: "animateTransform",
|
||
lineargradient: "linearGradient",
|
||
viewbox: "viewBox",
|
||
attributename: "attributeName",
|
||
repeatcount: "repeatCount",
|
||
repeatdur: "repeatDur"
|
||
}
|
||
};
|
||
const tagSelector = {};
|
||
const { windowWidth } = index$1.getWindowInfo();
|
||
const { system } = index$1.getDeviceInfo();
|
||
const blankChar = makeMap(" ,\r,\n, ,\f");
|
||
let idIndex = 0;
|
||
function makeMap(str) {
|
||
const map = /* @__PURE__ */ Object.create(null);
|
||
const list = str.split(",");
|
||
for (let i = list.length; i--; ) {
|
||
map[list[i]] = true;
|
||
}
|
||
return map;
|
||
}
|
||
function decodeEntity(str, amp) {
|
||
let i = str.indexOf("&");
|
||
while (i !== -1) {
|
||
const j = str.indexOf(";", i + 3);
|
||
let code2;
|
||
if (j === -1)
|
||
break;
|
||
if (str[i + 1] === "#") {
|
||
code2 = parseInt((str[i + 2] === "x" ? "0" : "") + str.substring(i + 2, j));
|
||
if (!isNaN(code2)) {
|
||
str = str.substr(0, i) + String.fromCharCode(code2) + str.substr(j + 1);
|
||
}
|
||
} else {
|
||
code2 = str.substring(i + 1, j);
|
||
if (config.entities[code2] || code2 === "amp" && amp) {
|
||
str = str.substr(0, i) + (config.entities[code2] || "&") + str.substr(j + 1);
|
||
}
|
||
}
|
||
i = str.indexOf("&", i + 1);
|
||
}
|
||
return str;
|
||
}
|
||
function mergeNodes(nodes) {
|
||
let i = nodes.length - 1;
|
||
for (let j = i; j >= -1; j--) {
|
||
if (j === -1 || nodes[j].c || !nodes[j].name || nodes[j].name !== "div" && nodes[j].name !== "p" && nodes[j].name[0] !== "h" || (nodes[j].attrs.style || "").includes("inline")) {
|
||
if (i - j >= 5) {
|
||
nodes.splice(j + 1, i - j, {
|
||
name: "div",
|
||
attrs: {},
|
||
children: nodes.slice(j + 1, i + 1)
|
||
});
|
||
}
|
||
i = j - 1;
|
||
}
|
||
}
|
||
}
|
||
function Parser(vm) {
|
||
this.options = vm || {};
|
||
this.tagStyle = Object.assign({}, config.tagStyle, this.options.tagStyle);
|
||
this.imgList = vm.imgList || [];
|
||
this.imgList._unloadimgs = 0;
|
||
this.plugins = vm.plugins || [];
|
||
this.attrs = /* @__PURE__ */ Object.create(null);
|
||
this.stack = [];
|
||
this.nodes = [];
|
||
this.pre = (this.options.containerStyle || "").includes("white-space") && this.options.containerStyle.includes("pre") ? 2 : 0;
|
||
}
|
||
Parser.prototype.parse = function(content) {
|
||
for (let i = this.plugins.length; i--; ) {
|
||
if (this.plugins[i].onUpdate) {
|
||
content = this.plugins[i].onUpdate(content, config) || content;
|
||
}
|
||
}
|
||
new Lexer(this).parse(content);
|
||
while (this.stack.length) {
|
||
this.popNode();
|
||
}
|
||
if (this.nodes.length > 50) {
|
||
mergeNodes(this.nodes);
|
||
}
|
||
return this.nodes;
|
||
};
|
||
Parser.prototype.expose = function() {
|
||
for (let i = this.stack.length; i--; ) {
|
||
const item = this.stack[i];
|
||
if (item.c || item.name === "a" || item.name === "video" || item.name === "audio")
|
||
return;
|
||
item.c = 1;
|
||
}
|
||
};
|
||
Parser.prototype.hook = function(node) {
|
||
for (let i = this.plugins.length; i--; ) {
|
||
if (this.plugins[i].onParse && this.plugins[i].onParse(node, this) === false) {
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
};
|
||
Parser.prototype.getUrl = function(url3) {
|
||
const domain = this.options.domain;
|
||
if (url3[0] === "/") {
|
||
if (url3[1] === "/") {
|
||
url3 = (domain ? domain.split("://")[0] : "http") + ":" + url3;
|
||
} else if (domain) {
|
||
url3 = domain + url3;
|
||
}
|
||
} else if (!url3.includes("data:") && !url3.includes("://")) {
|
||
if (domain) {
|
||
url3 = domain + "/" + url3;
|
||
}
|
||
}
|
||
return url3;
|
||
};
|
||
Parser.prototype.parseStyle = function(node) {
|
||
const attrs = node.attrs;
|
||
const list = (this.tagStyle[node.name] || "").split(";").concat((attrs.style || "").split(";"));
|
||
const styleObj = {};
|
||
let tmp = "";
|
||
if (attrs.id && !this.xml) {
|
||
if (this.options.useAnchor) {
|
||
this.expose();
|
||
} else if (node.name !== "img" && node.name !== "a" && node.name !== "video" && node.name !== "audio") {
|
||
attrs.id = void 0;
|
||
}
|
||
}
|
||
if (attrs.width) {
|
||
styleObj.width = parseFloat(attrs.width) + (attrs.width.includes("%") ? "%" : "px");
|
||
attrs.width = void 0;
|
||
}
|
||
if (attrs.height) {
|
||
styleObj.height = parseFloat(attrs.height) + (attrs.height.includes("%") ? "%" : "px");
|
||
attrs.height = void 0;
|
||
}
|
||
for (let i = 0, len = list.length; i < len; i++) {
|
||
const info = list[i].split(":");
|
||
if (info.length < 2)
|
||
continue;
|
||
const key = info.shift().trim().toLowerCase();
|
||
let value2 = info.join(":").trim();
|
||
if (value2[0] === "-" && value2.lastIndexOf("-") > 0 || value2.includes("safe")) {
|
||
tmp += `;${key}:${value2}`;
|
||
} else if (!styleObj[key] || value2.includes("import") || !styleObj[key].includes("import")) {
|
||
if (value2.includes("url")) {
|
||
let j = value2.indexOf("(") + 1;
|
||
if (j) {
|
||
while (value2[j] === '"' || value2[j] === "'" || blankChar[value2[j]]) {
|
||
j++;
|
||
}
|
||
value2 = value2.substr(0, j) + this.getUrl(value2.substr(j));
|
||
}
|
||
} else if (value2.includes("rpx")) {
|
||
value2 = value2.replace(/[0-9.]+\s*rpx/g, ($) => parseFloat($) * windowWidth / 750 + "px");
|
||
}
|
||
styleObj[key] = value2;
|
||
}
|
||
}
|
||
node.attrs.style = tmp;
|
||
return styleObj;
|
||
};
|
||
Parser.prototype.onTagName = function(name) {
|
||
this.tagName = this.xml ? name : name.toLowerCase();
|
||
if (this.tagName === "svg") {
|
||
this.xml = (this.xml || 0) + 1;
|
||
}
|
||
};
|
||
Parser.prototype.onAttrName = function(name) {
|
||
name = this.xml ? name : name.toLowerCase();
|
||
if (name.substr(0, 5) === "data-") {
|
||
if (name === "data-src" && !this.attrs.src) {
|
||
this.attrName = "src";
|
||
} else if (this.tagName === "img" || this.tagName === "a") {
|
||
this.attrName = name;
|
||
} else {
|
||
this.attrName = void 0;
|
||
}
|
||
} else {
|
||
this.attrName = name;
|
||
this.attrs[name] = "T";
|
||
}
|
||
};
|
||
Parser.prototype.onAttrVal = function(val) {
|
||
const name = this.attrName || "";
|
||
if (name === "style" || name === "href") {
|
||
this.attrs[name] = decodeEntity(val, true);
|
||
} else if (name.includes("src")) {
|
||
this.attrs[name] = this.getUrl(decodeEntity(val, true));
|
||
} else if (name) {
|
||
this.attrs[name] = val;
|
||
}
|
||
};
|
||
Parser.prototype.onOpenTag = function(selfClose) {
|
||
const node = /* @__PURE__ */ Object.create(null);
|
||
node.name = this.tagName;
|
||
node.attrs = this.attrs;
|
||
if (this.options.nodes.length) {
|
||
node.type = "node";
|
||
}
|
||
this.attrs = /* @__PURE__ */ Object.create(null);
|
||
const attrs = node.attrs;
|
||
const parent = this.stack[this.stack.length - 1];
|
||
const siblings = parent ? parent.children : this.nodes;
|
||
const close = this.xml ? selfClose : config.voidTags[node.name];
|
||
if (tagSelector[node.name]) {
|
||
attrs.class = tagSelector[node.name] + (attrs.class ? " " + attrs.class : "");
|
||
}
|
||
if (node.name === "embed") {
|
||
const src = attrs.src || "";
|
||
if (src.includes(".mp4") || src.includes(".3gp") || src.includes(".m3u8") || (attrs.type || "").includes("video")) {
|
||
node.name = "video";
|
||
} else if (src.includes(".mp3") || src.includes(".wav") || src.includes(".aac") || src.includes(".m4a") || (attrs.type || "").includes("audio")) {
|
||
node.name = "audio";
|
||
}
|
||
if (attrs.autostart) {
|
||
attrs.autoplay = "T";
|
||
}
|
||
attrs.controls = "T";
|
||
}
|
||
if (node.name === "video" || node.name === "audio") {
|
||
if (node.name === "video" && !attrs.id) {
|
||
attrs.id = "v" + idIndex++;
|
||
}
|
||
if (!attrs.controls && !attrs.autoplay) {
|
||
attrs.controls = "T";
|
||
}
|
||
node.src = [];
|
||
if (attrs.src) {
|
||
node.src.push(attrs.src);
|
||
attrs.src = void 0;
|
||
}
|
||
this.expose();
|
||
}
|
||
if (close) {
|
||
if (!this.hook(node) || config.ignoreTags[node.name]) {
|
||
if (node.name === "base" && !this.options.domain) {
|
||
this.options.domain = attrs.href;
|
||
} else if (node.name === "source" && parent && (parent.name === "video" || parent.name === "audio") && attrs.src) {
|
||
parent.src.push(attrs.src);
|
||
}
|
||
return;
|
||
}
|
||
const styleObj = this.parseStyle(node);
|
||
if (node.name === "img") {
|
||
if (attrs.src) {
|
||
if (attrs.src.includes("webp")) {
|
||
node.webp = "T";
|
||
}
|
||
if (attrs.src.includes("data:") && !attrs["original-src"]) {
|
||
attrs.ignore = "T";
|
||
}
|
||
if (!attrs.ignore || node.webp || attrs.src.includes("cloud://")) {
|
||
for (let i = this.stack.length; i--; ) {
|
||
const item = this.stack[i];
|
||
if (item.name === "a") {
|
||
node.a = item.attrs;
|
||
}
|
||
if (item.name === "table" && !node.webp && !attrs.src.includes("cloud://")) {
|
||
if (!styleObj.display || styleObj.display.includes("inline")) {
|
||
node.t = "inline-block";
|
||
} else {
|
||
node.t = styleObj.display;
|
||
}
|
||
styleObj.display = void 0;
|
||
}
|
||
const style = item.attrs.style || "";
|
||
if (style.includes("flex:") && !style.includes("flex:0") && !style.includes("flex: 0") && (!styleObj.width || parseInt(styleObj.width) > 100)) {
|
||
styleObj.width = "100% !important";
|
||
styleObj.height = "";
|
||
for (let j = i + 1; j < this.stack.length; j++) {
|
||
this.stack[j].attrs.style = (this.stack[j].attrs.style || "").replace("inline-", "");
|
||
}
|
||
} else if (style.includes("flex") && styleObj.width === "100%") {
|
||
for (let j = i + 1; j < this.stack.length; j++) {
|
||
const style2 = this.stack[j].attrs.style || "";
|
||
if (!style2.includes(";width") && !style2.includes(" width") && style2.indexOf("width") !== 0) {
|
||
styleObj.width = "";
|
||
break;
|
||
}
|
||
}
|
||
} else if (style.includes("inline-block")) {
|
||
if (styleObj.width && styleObj.width[styleObj.width.length - 1] === "%") {
|
||
item.attrs.style += ";max-width:" + styleObj.width;
|
||
styleObj.width = "";
|
||
} else {
|
||
item.attrs.style += ";max-width:100%";
|
||
}
|
||
}
|
||
item.c = 1;
|
||
}
|
||
attrs.i = this.imgList.length.toString();
|
||
let src = attrs["original-src"] || attrs.src;
|
||
if (this.imgList.includes(src)) {
|
||
let i = src.indexOf("://");
|
||
if (i !== -1) {
|
||
i += 3;
|
||
let newSrc = src.substr(0, i);
|
||
for (; i < src.length; i++) {
|
||
if (src[i] === "/")
|
||
break;
|
||
newSrc += Math.random() > 0.5 ? src[i].toUpperCase() : src[i];
|
||
}
|
||
newSrc += src.substr(i);
|
||
src = newSrc;
|
||
}
|
||
}
|
||
this.imgList.push(src);
|
||
if (!node.t) {
|
||
this.imgList._unloadimgs += 1;
|
||
}
|
||
}
|
||
}
|
||
if (styleObj.display === "inline") {
|
||
styleObj.display = "";
|
||
}
|
||
if (attrs.ignore) {
|
||
styleObj["max-width"] = styleObj["max-width"] || "100%";
|
||
attrs.style += ";-webkit-touch-callout:none";
|
||
}
|
||
if (parseInt(styleObj.width) > windowWidth) {
|
||
styleObj.height = void 0;
|
||
}
|
||
if (!isNaN(parseInt(styleObj.width))) {
|
||
node.w = "T";
|
||
}
|
||
if (!isNaN(parseInt(styleObj.height)) && (!styleObj.height.includes("%") || parent && (parent.attrs.style || "").includes("height"))) {
|
||
node.h = "T";
|
||
}
|
||
} else if (node.name === "svg") {
|
||
siblings.push(node);
|
||
this.stack.push(node);
|
||
this.popNode();
|
||
return;
|
||
}
|
||
for (const key in styleObj) {
|
||
if (styleObj[key]) {
|
||
attrs.style += `;${key}:${styleObj[key].replace(" !important", "")}`;
|
||
}
|
||
}
|
||
attrs.style = attrs.style.substr(1) || void 0;
|
||
if (!attrs.style) {
|
||
delete attrs.style;
|
||
}
|
||
} else {
|
||
if ((node.name === "pre" || (attrs.style || "").includes("white-space") && attrs.style.includes("pre")) && this.pre !== 2) {
|
||
this.pre = node.pre = 1;
|
||
}
|
||
node.children = [];
|
||
this.stack.push(node);
|
||
}
|
||
siblings.push(node);
|
||
};
|
||
Parser.prototype.onCloseTag = function(name) {
|
||
name = this.xml ? name : name.toLowerCase();
|
||
let i;
|
||
for (i = this.stack.length; i--; ) {
|
||
if (this.stack[i].name === name)
|
||
break;
|
||
}
|
||
if (i !== -1) {
|
||
while (this.stack.length > i) {
|
||
this.popNode();
|
||
}
|
||
} else if (name === "p" || name === "br") {
|
||
const siblings = this.stack.length ? this.stack[this.stack.length - 1].children : this.nodes;
|
||
siblings.push({
|
||
name,
|
||
attrs: {
|
||
class: tagSelector[name] || "",
|
||
style: this.tagStyle[name] || ""
|
||
}
|
||
});
|
||
}
|
||
};
|
||
Parser.prototype.popNode = function() {
|
||
const node = this.stack.pop();
|
||
let attrs = node.attrs;
|
||
const children = node.children;
|
||
const parent = this.stack[this.stack.length - 1];
|
||
const siblings = parent ? parent.children : this.nodes;
|
||
if (!this.hook(node) || config.ignoreTags[node.name]) {
|
||
if (node.name === "title" && children.length && children[0].type === "text" && this.options.setTitle) {
|
||
index$1.setNavigationBarTitle({
|
||
title: children[0].text
|
||
});
|
||
}
|
||
siblings.pop();
|
||
return;
|
||
}
|
||
if (node.pre && this.pre !== 2) {
|
||
this.pre = node.pre = void 0;
|
||
for (let i = this.stack.length; i--; ) {
|
||
if (this.stack[i].pre) {
|
||
this.pre = 1;
|
||
}
|
||
}
|
||
}
|
||
const styleObj = {};
|
||
if (node.name === "svg") {
|
||
if (this.xml > 1) {
|
||
this.xml--;
|
||
return;
|
||
}
|
||
let src = "";
|
||
const style = attrs.style;
|
||
attrs.style = "";
|
||
attrs.xmlns = "http://www.w3.org/2000/svg";
|
||
(function traversal(node2) {
|
||
if (node2.type === "text") {
|
||
src += node2.text;
|
||
return;
|
||
}
|
||
const name = config.svgDict[node2.name] || node2.name;
|
||
src += "<" + name;
|
||
for (const item in node2.attrs) {
|
||
const val = node2.attrs[item];
|
||
if (val) {
|
||
src += ` ${config.svgDict[item] || item}="${val}"`;
|
||
}
|
||
}
|
||
if (!node2.children) {
|
||
src += "/>";
|
||
} else {
|
||
src += ">";
|
||
for (let i = 0; i < node2.children.length; i++) {
|
||
traversal(node2.children[i]);
|
||
}
|
||
src += "</" + name + ">";
|
||
}
|
||
})(node);
|
||
node.name = "img";
|
||
node.attrs = {
|
||
src: "data:image/svg+xml;utf8," + src.replace(/#/g, "%23"),
|
||
style,
|
||
ignore: "T"
|
||
};
|
||
node.children = void 0;
|
||
this.xml = false;
|
||
return;
|
||
}
|
||
if (attrs.align) {
|
||
if (node.name === "table") {
|
||
if (attrs.align === "center") {
|
||
styleObj["margin-inline-start"] = styleObj["margin-inline-end"] = "auto";
|
||
} else {
|
||
styleObj.float = attrs.align;
|
||
}
|
||
} else {
|
||
styleObj["text-align"] = attrs.align;
|
||
}
|
||
attrs.align = void 0;
|
||
}
|
||
if (attrs.dir) {
|
||
styleObj.direction = attrs.dir;
|
||
attrs.dir = void 0;
|
||
}
|
||
if (node.name === "font") {
|
||
if (attrs.color) {
|
||
styleObj.color = attrs.color;
|
||
attrs.color = void 0;
|
||
}
|
||
if (attrs.face) {
|
||
styleObj["font-family"] = attrs.face;
|
||
attrs.face = void 0;
|
||
}
|
||
if (attrs.size) {
|
||
let size2 = parseInt(attrs.size);
|
||
if (!isNaN(size2)) {
|
||
if (size2 < 1) {
|
||
size2 = 1;
|
||
} else if (size2 > 7) {
|
||
size2 = 7;
|
||
}
|
||
styleObj["font-size"] = ["x-small", "small", "medium", "large", "x-large", "xx-large", "xxx-large"][size2 - 1];
|
||
}
|
||
attrs.size = void 0;
|
||
}
|
||
}
|
||
if ((attrs.class || "").includes("align-center")) {
|
||
styleObj["text-align"] = "center";
|
||
}
|
||
Object.assign(styleObj, this.parseStyle(node));
|
||
if (node.name !== "table" && parseInt(styleObj.width) > windowWidth) {
|
||
styleObj["max-width"] = "100%";
|
||
styleObj["box-sizing"] = "border-box";
|
||
}
|
||
if (config.blockTags[node.name]) {
|
||
node.name = "div";
|
||
} else if (!config.trustTags[node.name] && !this.xml) {
|
||
node.name = "span";
|
||
}
|
||
if (node.name === "a" || node.name === "ad") {
|
||
this.expose();
|
||
} else if (node.name === "video") {
|
||
if ((styleObj.height || "").includes("auto")) {
|
||
styleObj.height = void 0;
|
||
}
|
||
} else if ((node.name === "ul" || node.name === "ol") && node.c) {
|
||
const types2 = {
|
||
a: "lower-alpha",
|
||
A: "upper-alpha",
|
||
i: "lower-roman",
|
||
I: "upper-roman"
|
||
};
|
||
if (types2[attrs.type]) {
|
||
attrs.style += ";list-style-type:" + types2[attrs.type];
|
||
attrs.type = void 0;
|
||
}
|
||
for (let i = children.length; i--; ) {
|
||
if (children[i].name === "li") {
|
||
children[i].c = 1;
|
||
}
|
||
}
|
||
} else if (node.name === "table") {
|
||
let padding = parseFloat(attrs.cellpadding);
|
||
let spacing = parseFloat(attrs.cellspacing);
|
||
const border = parseFloat(attrs.border);
|
||
const bordercolor = styleObj["border-color"];
|
||
const borderstyle = styleObj["border-style"];
|
||
if (node.c) {
|
||
if (isNaN(padding)) {
|
||
padding = 2;
|
||
}
|
||
if (isNaN(spacing)) {
|
||
spacing = 2;
|
||
}
|
||
}
|
||
if (border) {
|
||
attrs.style += `;border:${border}px ${borderstyle || "solid"} ${bordercolor || "gray"}`;
|
||
}
|
||
if (node.flag && node.c) {
|
||
styleObj.display = "grid";
|
||
if (spacing) {
|
||
styleObj["grid-gap"] = spacing + "px";
|
||
styleObj.padding = spacing + "px";
|
||
} else if (border) {
|
||
attrs.style += ";border-left:0;border-top:0";
|
||
}
|
||
const width = [];
|
||
const trList = [];
|
||
const cells = [];
|
||
const map = {};
|
||
(function traversal(nodes) {
|
||
for (let i = 0; i < nodes.length; i++) {
|
||
if (nodes[i].name === "tr") {
|
||
trList.push(nodes[i]);
|
||
} else {
|
||
traversal(nodes[i].children || []);
|
||
}
|
||
}
|
||
})(children);
|
||
for (let row = 1; row <= trList.length; row++) {
|
||
let col = 1;
|
||
for (let j = 0; j < trList[row - 1].children.length; j++) {
|
||
const td = trList[row - 1].children[j];
|
||
if (td.name === "td" || td.name === "th") {
|
||
while (map[row + "." + col]) {
|
||
col++;
|
||
}
|
||
let style = td.attrs.style || "";
|
||
let start = style.indexOf("width") ? style.indexOf(";width") : 0;
|
||
if (start !== -1) {
|
||
let end = style.indexOf(";", start + 6);
|
||
if (end === -1) {
|
||
end = style.length;
|
||
}
|
||
if (!td.attrs.colspan) {
|
||
width[col] = style.substring(start ? start + 7 : 6, end);
|
||
}
|
||
style = style.substr(0, start) + style.substr(end);
|
||
}
|
||
style += ";display:flex";
|
||
start = style.indexOf("vertical-align");
|
||
if (start !== -1) {
|
||
const val = style.substr(start + 15, 10);
|
||
if (val.includes("middle")) {
|
||
style += ";align-items:center";
|
||
} else if (val.includes("bottom")) {
|
||
style += ";align-items:flex-end";
|
||
}
|
||
} else {
|
||
style += ";align-items:center";
|
||
}
|
||
start = style.indexOf("text-align");
|
||
if (start !== -1) {
|
||
const val = style.substr(start + 11, 10);
|
||
if (val.includes("center")) {
|
||
style += ";justify-content: center";
|
||
} else if (val.includes("right")) {
|
||
style += ";justify-content: right";
|
||
}
|
||
}
|
||
style = (border ? `;border:${border}px ${borderstyle || "solid"} ${bordercolor || "gray"}` + (spacing ? "" : ";border-right:0;border-bottom:0") : "") + (padding ? `;padding:${padding}px` : "") + ";" + style;
|
||
if (td.attrs.colspan) {
|
||
style += `;grid-column-start:${col};grid-column-end:${col + parseInt(td.attrs.colspan)}`;
|
||
if (!td.attrs.rowspan) {
|
||
style += `;grid-row-start:${row};grid-row-end:${row + 1}`;
|
||
}
|
||
col += parseInt(td.attrs.colspan) - 1;
|
||
}
|
||
if (td.attrs.rowspan) {
|
||
style += `;grid-row-start:${row};grid-row-end:${row + parseInt(td.attrs.rowspan)}`;
|
||
if (!td.attrs.colspan) {
|
||
style += `;grid-column-start:${col};grid-column-end:${col + 1}`;
|
||
}
|
||
for (let rowspan = 1; rowspan < td.attrs.rowspan; rowspan++) {
|
||
for (let colspan = 0; colspan < (td.attrs.colspan || 1); colspan++) {
|
||
map[row + rowspan + "." + (col - colspan)] = 1;
|
||
}
|
||
}
|
||
}
|
||
if (style) {
|
||
td.attrs.style = style;
|
||
}
|
||
cells.push(td);
|
||
col++;
|
||
}
|
||
}
|
||
if (row === 1) {
|
||
let temp = "";
|
||
for (let i = 1; i < col; i++) {
|
||
temp += (width[i] ? width[i] : "auto") + " ";
|
||
}
|
||
styleObj["grid-template-columns"] = temp;
|
||
}
|
||
}
|
||
node.children = cells;
|
||
} else {
|
||
if (node.c) {
|
||
styleObj.display = "table";
|
||
}
|
||
if (!isNaN(spacing)) {
|
||
styleObj["border-spacing"] = spacing + "px";
|
||
}
|
||
if (border || padding) {
|
||
(function traversal(nodes) {
|
||
for (let i = 0; i < nodes.length; i++) {
|
||
const td = nodes[i];
|
||
if (td.name === "th" || td.name === "td") {
|
||
if (border) {
|
||
td.attrs.style = `border:${border}px ${borderstyle || "solid"} ${bordercolor || "gray"};${td.attrs.style || ""}`;
|
||
}
|
||
if (padding) {
|
||
td.attrs.style = `padding:${padding}px;${td.attrs.style || ""}`;
|
||
}
|
||
} else if (td.children) {
|
||
traversal(td.children);
|
||
}
|
||
}
|
||
})(children);
|
||
}
|
||
}
|
||
if (this.options.scrollTable && !(attrs.style || "").includes("inline")) {
|
||
const table = Object.assign({}, node);
|
||
node.name = "div";
|
||
node.attrs = {
|
||
style: "overflow:auto"
|
||
};
|
||
node.children = [table];
|
||
attrs = table.attrs;
|
||
}
|
||
} else if ((node.name === "td" || node.name === "th") && (attrs.colspan || attrs.rowspan)) {
|
||
for (let i = this.stack.length; i--; ) {
|
||
if (this.stack[i].name === "table") {
|
||
this.stack[i].flag = 1;
|
||
break;
|
||
}
|
||
}
|
||
} else if (node.name === "ruby") {
|
||
node.name = "span";
|
||
for (let i = 0; i < children.length - 1; i++) {
|
||
if (children[i].type === "text" && children[i + 1].name === "rt") {
|
||
children[i] = {
|
||
name: "div",
|
||
attrs: {
|
||
style: "display:inline-block;text-align:center"
|
||
},
|
||
children: [{
|
||
name: "div",
|
||
attrs: {
|
||
style: "font-size:50%;" + (children[i + 1].attrs.style || "")
|
||
},
|
||
children: children[i + 1].children
|
||
}, children[i]]
|
||
};
|
||
children.splice(i + 1, 1);
|
||
}
|
||
}
|
||
} else if (node.c) {
|
||
(function traversal(node2) {
|
||
node2.c = 2;
|
||
for (let i = node2.children.length; i--; ) {
|
||
const child = node2.children[i];
|
||
if (child.name && (config.inlineTags[child.name] || (child.attrs.style || "").includes("inline") && child.children) && !child.c) {
|
||
traversal(child);
|
||
}
|
||
if (!child.c || child.name === "table") {
|
||
node2.c = 1;
|
||
}
|
||
}
|
||
})(node);
|
||
}
|
||
if ((styleObj.display || "").includes("flex") && !node.c) {
|
||
for (let i = children.length; i--; ) {
|
||
const item = children[i];
|
||
if (item.f) {
|
||
item.attrs.style = (item.attrs.style || "") + item.f;
|
||
item.f = void 0;
|
||
}
|
||
}
|
||
}
|
||
const flex = parent && ((parent.attrs.style || "").includes("flex") || (parent.attrs.style || "").includes("grid")) && !(node.c && wx$1.getNFCAdapter);
|
||
if (flex) {
|
||
node.f = ";max-width:100%";
|
||
}
|
||
if (children.length >= 50 && node.c && !(styleObj.display || "").includes("flex")) {
|
||
mergeNodes(children);
|
||
}
|
||
for (const key in styleObj) {
|
||
if (styleObj[key]) {
|
||
const val = `;${key}:${styleObj[key].replace(" !important", "")}`;
|
||
if (flex && (key.includes("flex") && key !== "flex-direction" || key === "align-self" || key.includes("grid") || styleObj[key][0] === "-" || key.includes("width") && val.includes("%"))) {
|
||
node.f += val;
|
||
if (key === "width") {
|
||
attrs.style += ";width:100%";
|
||
}
|
||
} else {
|
||
attrs.style += val;
|
||
}
|
||
}
|
||
}
|
||
attrs.style = attrs.style.substr(1) || void 0;
|
||
for (const key in attrs) {
|
||
if (!attrs[key]) {
|
||
delete attrs[key];
|
||
}
|
||
}
|
||
};
|
||
Parser.prototype.onText = function(text) {
|
||
if (!this.pre) {
|
||
let trim2 = "";
|
||
let flag2;
|
||
for (let i = 0, len = text.length; i < len; i++) {
|
||
if (!blankChar[text[i]]) {
|
||
trim2 += text[i];
|
||
} else {
|
||
if (trim2[trim2.length - 1] !== " ") {
|
||
trim2 += " ";
|
||
}
|
||
if (text[i] === "\n" && !flag2) {
|
||
flag2 = true;
|
||
}
|
||
}
|
||
}
|
||
if (trim2 === " ") {
|
||
if (flag2)
|
||
return;
|
||
else {
|
||
const parent = this.stack[this.stack.length - 1];
|
||
if (parent && parent.name[0] === "t")
|
||
return;
|
||
}
|
||
}
|
||
text = trim2;
|
||
}
|
||
const node = /* @__PURE__ */ Object.create(null);
|
||
node.type = "text";
|
||
node.text = decodeEntity(text);
|
||
if (this.hook(node)) {
|
||
if (this.options.selectable === "force" && system.includes("iOS") && !index$1.canIUse("rich-text.user-select")) {
|
||
this.expose();
|
||
}
|
||
const siblings = this.stack.length ? this.stack[this.stack.length - 1].children : this.nodes;
|
||
siblings.push(node);
|
||
}
|
||
};
|
||
function Lexer(handler) {
|
||
this.handler = handler;
|
||
}
|
||
Lexer.prototype.parse = function(content) {
|
||
this.content = content || "";
|
||
this.i = 0;
|
||
this.start = 0;
|
||
this.state = this.text;
|
||
for (let len = this.content.length; this.i !== -1 && this.i < len; ) {
|
||
this.state();
|
||
}
|
||
};
|
||
Lexer.prototype.checkClose = function(method3) {
|
||
const selfClose = this.content[this.i] === "/";
|
||
if (this.content[this.i] === ">" || selfClose && this.content[this.i + 1] === ">") {
|
||
if (method3) {
|
||
this.handler[method3](this.content.substring(this.start, this.i));
|
||
}
|
||
this.i += selfClose ? 2 : 1;
|
||
this.start = this.i;
|
||
this.handler.onOpenTag(selfClose);
|
||
if (this.handler.tagName === "script") {
|
||
this.i = this.content.indexOf("</", this.i);
|
||
if (this.i !== -1) {
|
||
this.i += 2;
|
||
this.start = this.i;
|
||
}
|
||
this.state = this.endTag;
|
||
} else {
|
||
this.state = this.text;
|
||
}
|
||
return true;
|
||
}
|
||
return false;
|
||
};
|
||
Lexer.prototype.text = function() {
|
||
this.i = this.content.indexOf("<", this.i);
|
||
if (this.i === -1) {
|
||
if (this.start < this.content.length) {
|
||
this.handler.onText(this.content.substring(this.start, this.content.length));
|
||
}
|
||
return;
|
||
}
|
||
const c = this.content[this.i + 1];
|
||
if (c >= "a" && c <= "z" || c >= "A" && c <= "Z") {
|
||
if (this.start !== this.i) {
|
||
this.handler.onText(this.content.substring(this.start, this.i));
|
||
}
|
||
this.start = ++this.i;
|
||
this.state = this.tagName;
|
||
} else if (c === "/" || c === "!" || c === "?") {
|
||
if (this.start !== this.i) {
|
||
this.handler.onText(this.content.substring(this.start, this.i));
|
||
}
|
||
const next = this.content[this.i + 2];
|
||
if (c === "/" && (next >= "a" && next <= "z" || next >= "A" && next <= "Z")) {
|
||
this.i += 2;
|
||
this.start = this.i;
|
||
this.state = this.endTag;
|
||
return;
|
||
}
|
||
let end = "-->";
|
||
if (c !== "!" || this.content[this.i + 2] !== "-" || this.content[this.i + 3] !== "-") {
|
||
end = ">";
|
||
}
|
||
this.i = this.content.indexOf(end, this.i);
|
||
if (this.i !== -1) {
|
||
this.i += end.length;
|
||
this.start = this.i;
|
||
}
|
||
} else {
|
||
this.i++;
|
||
}
|
||
};
|
||
Lexer.prototype.tagName = function() {
|
||
if (blankChar[this.content[this.i]]) {
|
||
this.handler.onTagName(this.content.substring(this.start, this.i));
|
||
while (blankChar[this.content[++this.i]])
|
||
;
|
||
if (this.i < this.content.length && !this.checkClose()) {
|
||
this.start = this.i;
|
||
this.state = this.attrName;
|
||
}
|
||
} else if (!this.checkClose("onTagName")) {
|
||
this.i++;
|
||
}
|
||
};
|
||
Lexer.prototype.attrName = function() {
|
||
let c = this.content[this.i];
|
||
if (blankChar[c] || c === "=") {
|
||
this.handler.onAttrName(this.content.substring(this.start, this.i));
|
||
let needVal = c === "=";
|
||
const len = this.content.length;
|
||
while (++this.i < len) {
|
||
c = this.content[this.i];
|
||
if (!blankChar[c]) {
|
||
if (this.checkClose())
|
||
return;
|
||
if (needVal) {
|
||
this.start = this.i;
|
||
this.state = this.attrVal;
|
||
return;
|
||
}
|
||
if (this.content[this.i] === "=") {
|
||
needVal = true;
|
||
} else {
|
||
this.start = this.i;
|
||
this.state = this.attrName;
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
} else if (!this.checkClose("onAttrName")) {
|
||
this.i++;
|
||
}
|
||
};
|
||
Lexer.prototype.attrVal = function() {
|
||
const c = this.content[this.i];
|
||
const len = this.content.length;
|
||
if (c === '"' || c === "'") {
|
||
this.start = ++this.i;
|
||
this.i = this.content.indexOf(c, this.i);
|
||
if (this.i === -1)
|
||
return;
|
||
this.handler.onAttrVal(this.content.substring(this.start, this.i));
|
||
} else {
|
||
for (; this.i < len; this.i++) {
|
||
if (blankChar[this.content[this.i]]) {
|
||
this.handler.onAttrVal(this.content.substring(this.start, this.i));
|
||
break;
|
||
} else if (this.checkClose("onAttrVal"))
|
||
return;
|
||
}
|
||
}
|
||
while (blankChar[this.content[++this.i]])
|
||
;
|
||
if (this.i < len && !this.checkClose()) {
|
||
this.start = this.i;
|
||
this.state = this.attrName;
|
||
}
|
||
};
|
||
Lexer.prototype.endTag = function() {
|
||
const c = this.content[this.i];
|
||
if (blankChar[c] || c === ">" || c === "/") {
|
||
this.handler.onCloseTag(this.content.substring(this.start, this.i));
|
||
if (c !== ">") {
|
||
this.i = this.content.indexOf(">", this.i);
|
||
if (this.i === -1)
|
||
return;
|
||
}
|
||
this.start = ++this.i;
|
||
this.state = this.text;
|
||
} else {
|
||
this.i++;
|
||
}
|
||
};
|
||
function pickExclude(obj, keys) {
|
||
if (!["[object Object]", "[object File]"].includes(Object.prototype.toString.call(obj))) {
|
||
return {};
|
||
}
|
||
return Object.keys(obj).reduce((prev, key) => {
|
||
if (!keys.includes(key)) {
|
||
prev[key] = obj[key];
|
||
}
|
||
return prev;
|
||
}, {});
|
||
}
|
||
function formatImage(res) {
|
||
return res.tempFiles.map((item) => ({
|
||
...pickExclude(item, ["path"]),
|
||
type: "image",
|
||
url: item.path,
|
||
thumb: item.path,
|
||
size: item.size
|
||
}));
|
||
}
|
||
function formatVideo(res) {
|
||
return [
|
||
{
|
||
...pickExclude(res, ["tempFilePath", "thumbTempFilePath", "errMsg"]),
|
||
type: "video",
|
||
url: res.tempFilePath,
|
||
thumb: res.thumbTempFilePath,
|
||
size: res.size
|
||
}
|
||
];
|
||
}
|
||
function formatMedia(res) {
|
||
return res.tempFiles.map((item) => ({
|
||
...pickExclude(item, ["fileType", "thumbTempFilePath", "tempFilePath"]),
|
||
type: res.type,
|
||
url: item.tempFilePath,
|
||
thumb: res.type === "video" ? item.thumbTempFilePath : item.tempFilePath,
|
||
size: item.size
|
||
}));
|
||
}
|
||
function formatFile(res) {
|
||
return res.tempFiles.map((item) => ({
|
||
...pickExclude(item, ["path"]),
|
||
url: item.path,
|
||
size: item.size
|
||
}));
|
||
}
|
||
function chooseFile({
|
||
accept,
|
||
multiple,
|
||
capture,
|
||
compressed,
|
||
maxDuration,
|
||
sizeType,
|
||
camera,
|
||
maxCount,
|
||
extension
|
||
}) {
|
||
return new Promise((resolve2, reject) => {
|
||
switch (accept) {
|
||
case "image":
|
||
index$1.chooseImage({
|
||
count: multiple ? Math.min(maxCount, 9) : 1,
|
||
sourceType: capture,
|
||
sizeType,
|
||
success: (res) => resolve2(formatImage(res)),
|
||
fail: reject
|
||
});
|
||
break;
|
||
case "media":
|
||
wx$1.chooseMedia({
|
||
count: multiple ? Math.min(maxCount, 9) : 1,
|
||
sourceType: capture,
|
||
maxDuration,
|
||
sizeType,
|
||
camera,
|
||
success: (res) => resolve2(formatMedia(res)),
|
||
fail: reject
|
||
});
|
||
break;
|
||
case "video":
|
||
index$1.chooseVideo({
|
||
sourceType: capture,
|
||
compressed,
|
||
maxDuration,
|
||
camera,
|
||
success: (res) => resolve2(formatVideo(res)),
|
||
fail: reject
|
||
});
|
||
break;
|
||
case "file":
|
||
wx$1.chooseMessageFile({
|
||
count: multiple ? maxCount : 1,
|
||
type: accept,
|
||
success: (res) => resolve2(formatFile(res)),
|
||
fail: reject
|
||
});
|
||
break;
|
||
default:
|
||
wx$1.chooseMessageFile({
|
||
count: multiple ? maxCount : 1,
|
||
type: "all",
|
||
success: (res) => resolve2(formatFile(res)),
|
||
fail: reject
|
||
});
|
||
}
|
||
});
|
||
}
|
||
const mixinUpload = {
|
||
watch: {
|
||
// 监听accept的变化,判断是否符合个平台要求
|
||
// 只有微信小程序才支持选择媒体,文件类型,所以这里做一个判断提示
|
||
accept: {
|
||
immediate: true,
|
||
handler(val) {
|
||
}
|
||
}
|
||
}
|
||
};
|
||
const props$i = defineMixin({
|
||
props: {
|
||
// 接受的文件类型, 可选值为all media image file video
|
||
accept: {
|
||
type: String,
|
||
default: () => props$B.upload.accept
|
||
},
|
||
extension: {
|
||
type: Array,
|
||
default: () => props$B.upload.extension
|
||
},
|
||
// 图片或视频拾取模式,当accept为image类型时设置capture可选额外camera可以直接调起摄像头
|
||
capture: {
|
||
type: [String, Array],
|
||
default: () => props$B.upload.capture
|
||
},
|
||
// 当accept为video时生效,是否压缩视频,默认为true
|
||
compressed: {
|
||
type: Boolean,
|
||
default: () => props$B.upload.compressed
|
||
},
|
||
// 当accept为video时生效,可选值为back或front
|
||
camera: {
|
||
type: String,
|
||
default: () => props$B.upload.camera
|
||
},
|
||
// 当accept为video时生效,拍摄视频最长拍摄时间,单位秒
|
||
maxDuration: {
|
||
type: Number,
|
||
default: () => props$B.upload.maxDuration
|
||
},
|
||
// 上传区域的图标,只能内置图标
|
||
uploadIcon: {
|
||
type: String,
|
||
default: () => props$B.upload.uploadIcon
|
||
},
|
||
// 上传区域的图标的颜色,默认
|
||
uploadIconColor: {
|
||
type: String,
|
||
default: () => props$B.upload.uploadIconColor
|
||
},
|
||
// 是否开启文件读取前事件
|
||
useBeforeRead: {
|
||
type: Boolean,
|
||
default: () => props$B.upload.useBeforeRead
|
||
},
|
||
// 读取后的处理函数
|
||
afterRead: {
|
||
type: Function,
|
||
default: null
|
||
},
|
||
// 读取前的处理函数
|
||
beforeRead: {
|
||
type: Function,
|
||
default: null
|
||
},
|
||
// 是否显示组件自带的图片预览功能
|
||
previewFullImage: {
|
||
type: Boolean,
|
||
default: () => props$B.upload.previewFullImage
|
||
},
|
||
// 最大上传数量
|
||
maxCount: {
|
||
type: [String, Number],
|
||
default: () => props$B.upload.maxCount
|
||
},
|
||
// 是否启用
|
||
disabled: {
|
||
type: Boolean,
|
||
default: () => props$B.upload.disabled
|
||
},
|
||
// 预览上传的图片时的裁剪模式,和image组件mode属性一致
|
||
imageMode: {
|
||
type: String,
|
||
default: () => props$B.upload.imageMode
|
||
},
|
||
// 标识符,可以在回调函数的第二项参数中获取
|
||
name: {
|
||
type: String,
|
||
default: () => props$B.upload.name
|
||
},
|
||
// 所选的图片的尺寸, 可选值为original compressed
|
||
sizeType: {
|
||
type: Array,
|
||
default: () => props$B.upload.sizeType
|
||
},
|
||
// 是否开启图片多选,部分安卓机型不支持
|
||
multiple: {
|
||
type: Boolean,
|
||
default: () => props$B.upload.multiple
|
||
},
|
||
// 是否展示删除按钮
|
||
deletable: {
|
||
type: Boolean,
|
||
default: () => props$B.upload.deletable
|
||
},
|
||
// 文件大小限制,单位为byte
|
||
maxSize: {
|
||
type: [String, Number],
|
||
default: () => props$B.upload.maxSize
|
||
},
|
||
// 显示已上传的文件列表
|
||
fileList: {
|
||
type: Array,
|
||
default: () => props$B.upload.fileList
|
||
},
|
||
// 上传区域的提示文字
|
||
uploadText: {
|
||
type: String,
|
||
default: () => props$B.upload.uploadText
|
||
},
|
||
// 内部预览图片区域和选择图片按钮的区域宽度
|
||
width: {
|
||
type: [String, Number],
|
||
default: () => props$B.upload.width
|
||
},
|
||
// 内部预览图片区域和选择图片按钮的区域高度
|
||
height: {
|
||
type: [String, Number],
|
||
default: () => props$B.upload.height
|
||
},
|
||
// 是否在上传完成后展示预览图
|
||
previewImage: {
|
||
type: Boolean,
|
||
default: () => props$B.upload.previewImage
|
||
}
|
||
}
|
||
});
|
||
const props$h = defineMixin({
|
||
props: {
|
||
modelValue: {
|
||
type: Array,
|
||
default: () => []
|
||
},
|
||
//是否禁用
|
||
disabled: {
|
||
type: Boolean,
|
||
default: false
|
||
},
|
||
disabledColor: {
|
||
type: String,
|
||
default: () => props$B.input.disabledColor
|
||
},
|
||
hasInput: {
|
||
type: Boolean,
|
||
default: false
|
||
},
|
||
placeholder: {
|
||
type: String,
|
||
default: () => "请选择"
|
||
},
|
||
// 是否展示picker弹窗
|
||
show: {
|
||
type: Boolean,
|
||
default: () => props$B.picker.show
|
||
},
|
||
// 弹出的方向,可选值为 top bottom right left center
|
||
popupMode: {
|
||
type: String,
|
||
default: () => props$B.picker.popupMode
|
||
},
|
||
// 是否展示顶部的操作栏
|
||
showToolbar: {
|
||
type: Boolean,
|
||
default: () => props$B.picker.showToolbar
|
||
},
|
||
// 顶部标题
|
||
title: {
|
||
type: String,
|
||
default: () => props$B.picker.title
|
||
},
|
||
// 对象数组,设置每一列的数据
|
||
columns: {
|
||
type: Array,
|
||
default: () => props$B.picker.columns
|
||
},
|
||
// 是否显示加载中状态
|
||
loading: {
|
||
type: Boolean,
|
||
default: () => props$B.picker.loading
|
||
},
|
||
// 各列中,单个选项的高度
|
||
itemHeight: {
|
||
type: [String, Number],
|
||
default: () => props$B.picker.itemHeight
|
||
},
|
||
// 取消按钮的文字
|
||
cancelText: {
|
||
type: String,
|
||
default: () => props$B.picker.cancelText
|
||
},
|
||
// 确认按钮的文字
|
||
confirmText: {
|
||
type: String,
|
||
default: () => props$B.picker.confirmText
|
||
},
|
||
// 取消按钮的颜色
|
||
cancelColor: {
|
||
type: String,
|
||
default: () => props$B.picker.cancelColor
|
||
},
|
||
// 确认按钮的颜色
|
||
confirmColor: {
|
||
type: String,
|
||
default: () => props$B.picker.confirmColor
|
||
},
|
||
// 每列中可见选项的数量
|
||
visibleItemCount: {
|
||
type: [String, Number],
|
||
default: () => props$B.picker.visibleItemCount
|
||
},
|
||
// 选项对象中,需要展示的属性键名
|
||
keyName: {
|
||
type: String,
|
||
default: () => props$B.picker.keyName
|
||
},
|
||
// 是否允许点击遮罩关闭选择器
|
||
closeOnClickOverlay: {
|
||
type: Boolean,
|
||
default: () => props$B.picker.closeOnClickOverlay
|
||
},
|
||
// 各列的默认索引
|
||
defaultIndex: {
|
||
type: Array,
|
||
default: () => props$B.picker.defaultIndex
|
||
},
|
||
// 是否在手指松开时立即触发 change 事件。若不开启则会在滚动动画结束后触发 change 事件,只在微信2.21.1及以上有效
|
||
immediateChange: {
|
||
type: Boolean,
|
||
default: () => props$B.picker.immediateChange
|
||
},
|
||
// 工具栏右侧插槽是否开启
|
||
toolbarRightSlot: {
|
||
type: Boolean,
|
||
default: false
|
||
},
|
||
// 层级
|
||
zIndex: {
|
||
type: [String, Number],
|
||
default: () => props$B.picker.zIndex
|
||
}
|
||
}
|
||
});
|
||
const props$g = defineMixin({
|
||
props: {
|
||
// 头像图片路径(不能为相对路径)
|
||
src: {
|
||
type: String,
|
||
default: () => props$B.avatar.src
|
||
},
|
||
// 头像形状,circle-圆形,square-方形
|
||
shape: {
|
||
type: String,
|
||
default: () => props$B.avatar.shape
|
||
},
|
||
// 头像尺寸
|
||
size: {
|
||
type: [String, Number],
|
||
default: () => props$B.avatar.size
|
||
},
|
||
// 裁剪模式
|
||
mode: {
|
||
type: String,
|
||
default: () => props$B.avatar.mode
|
||
},
|
||
// 显示的文字
|
||
text: {
|
||
type: String,
|
||
default: () => props$B.avatar.text
|
||
},
|
||
// 背景色
|
||
bgColor: {
|
||
type: String,
|
||
default: () => props$B.avatar.bgColor
|
||
},
|
||
// 文字颜色
|
||
color: {
|
||
type: String,
|
||
default: () => props$B.avatar.color
|
||
},
|
||
// 文字大小
|
||
fontSize: {
|
||
type: [String, Number],
|
||
default: () => props$B.avatar.fontSize
|
||
},
|
||
// 显示的图标
|
||
icon: {
|
||
type: String,
|
||
default: () => props$B.avatar.icon
|
||
},
|
||
// 显示小程序头像,只对百度,微信,QQ小程序有效
|
||
mpAvatar: {
|
||
type: Boolean,
|
||
default: () => props$B.avatar.mpAvatar
|
||
},
|
||
// 是否使用随机背景色
|
||
randomBgColor: {
|
||
type: Boolean,
|
||
default: () => props$B.avatar.randomBgColor
|
||
},
|
||
// 加载失败的默认头像(组件有内置默认图片)
|
||
defaultUrl: {
|
||
type: String,
|
||
default: () => props$B.avatar.defaultUrl
|
||
},
|
||
// 如果配置了randomBgColor为true,且配置了此值,则从默认的背景色数组中取出对应索引的颜色值,取值0-19之间
|
||
colorIndex: {
|
||
type: [String, Number],
|
||
// 校验参数规则,索引在0-19之间
|
||
validator(n2) {
|
||
return test.range(n2, [0, 19]) || n2 === "";
|
||
},
|
||
default: () => props$B.avatar.colorIndex
|
||
},
|
||
// 组件标识符
|
||
name: {
|
||
type: String,
|
||
default: () => props$B.avatar.name
|
||
}
|
||
}
|
||
});
|
||
const props$f = defineMixin({
|
||
props: {
|
||
// 标题
|
||
title: {
|
||
type: [String, Number],
|
||
default: () => props$B.cell.title
|
||
},
|
||
// 标题下方的描述信息
|
||
label: {
|
||
type: [String, Number],
|
||
default: () => props$B.cell.label
|
||
},
|
||
// 右侧的内容
|
||
value: {
|
||
type: [String, Number],
|
||
default: () => props$B.cell.value
|
||
},
|
||
// 左侧图标名称,或者图片链接(本地文件建议使用绝对地址)
|
||
icon: {
|
||
type: String,
|
||
default: () => props$B.cell.icon
|
||
},
|
||
// 是否禁用cell
|
||
disabled: {
|
||
type: Boolean,
|
||
default: () => props$B.cell.disabled
|
||
},
|
||
// 是否显示下边框
|
||
border: {
|
||
type: Boolean,
|
||
default: () => props$B.cell.border
|
||
},
|
||
// 内容是否垂直居中(主要是针对右侧的value部分)
|
||
center: {
|
||
type: Boolean,
|
||
default: () => props$B.cell.center
|
||
},
|
||
// 点击后跳转的URL地址
|
||
url: {
|
||
type: String,
|
||
default: () => props$B.cell.url
|
||
},
|
||
// 链接跳转的方式,内部使用的是uView封装的route方法,可能会进行拦截操作
|
||
linkType: {
|
||
type: String,
|
||
default: () => props$B.cell.linkType
|
||
},
|
||
// 是否开启点击反馈(表现为点击时加上灰色背景)
|
||
clickable: {
|
||
type: Boolean,
|
||
default: () => props$B.cell.clickable
|
||
},
|
||
// 是否展示右侧箭头并开启点击反馈
|
||
isLink: {
|
||
type: Boolean,
|
||
default: () => props$B.cell.isLink
|
||
},
|
||
// 是否显示表单状态下的必填星号(此组件可能会内嵌入input组件)
|
||
required: {
|
||
type: Boolean,
|
||
default: () => props$B.cell.required
|
||
},
|
||
// 右侧的图标箭头
|
||
rightIcon: {
|
||
type: String,
|
||
default: () => props$B.cell.rightIcon
|
||
},
|
||
// 右侧箭头的方向,可选值为:left,up,down
|
||
arrowDirection: {
|
||
type: String,
|
||
default: () => props$B.cell.arrowDirection
|
||
},
|
||
// 左侧图标样式
|
||
iconStyle: {
|
||
type: [Object, String],
|
||
default: () => {
|
||
return props$B.cell.iconStyle;
|
||
}
|
||
},
|
||
// 右侧箭头图标的样式
|
||
rightIconStyle: {
|
||
type: [Object, String],
|
||
default: () => {
|
||
return props$B.cell.rightIconStyle;
|
||
}
|
||
},
|
||
// 标题的样式
|
||
titleStyle: {
|
||
type: [Object, String],
|
||
default: () => {
|
||
return props$B.cell.titleStyle;
|
||
}
|
||
},
|
||
// 单位元的大小,可选值为large
|
||
size: {
|
||
type: String,
|
||
default: () => props$B.cell.size
|
||
},
|
||
// 点击cell是否阻止事件传播
|
||
stop: {
|
||
type: Boolean,
|
||
default: () => props$B.cell.stop
|
||
},
|
||
// 标识符,cell被点击时返回
|
||
name: {
|
||
type: [Number, String],
|
||
default: () => props$B.cell.name
|
||
}
|
||
}
|
||
});
|
||
const props$e = defineMixin({
|
||
props: {
|
||
// 用于滚动到指定item
|
||
anchor: {
|
||
type: [String, Number],
|
||
default: () => props$B.listItem.anchor
|
||
}
|
||
}
|
||
});
|
||
const props$d = defineMixin({
|
||
props: {
|
||
// 控制是否出现滚动条,仅nvue有效
|
||
showScrollbar: {
|
||
type: Boolean,
|
||
default: () => props$B.list.showScrollbar
|
||
},
|
||
// 距底部多少时触发scrolltolower事件
|
||
lowerThreshold: {
|
||
type: [String, Number],
|
||
default: () => props$B.list.lowerThreshold
|
||
},
|
||
// 距顶部多少时触发scrolltoupper事件,非nvue有效
|
||
upperThreshold: {
|
||
type: [String, Number],
|
||
default: () => props$B.list.upperThreshold
|
||
},
|
||
// 设置竖向滚动条位置
|
||
scrollTop: {
|
||
type: [String, Number],
|
||
default: () => props$B.list.scrollTop
|
||
},
|
||
// 控制 onscroll 事件触发的频率,仅nvue有效
|
||
offsetAccuracy: {
|
||
type: [String, Number],
|
||
default: () => props$B.list.offsetAccuracy
|
||
},
|
||
// 启用 flexbox 布局。开启后,当前节点声明了display: flex就会成为flex container,并作用于其孩子节点,仅微信小程序有效
|
||
enableFlex: {
|
||
type: Boolean,
|
||
default: () => props$B.list.enableFlex
|
||
},
|
||
// 是否按分页模式显示List,默认值false
|
||
pagingEnabled: {
|
||
type: Boolean,
|
||
default: () => props$B.list.pagingEnabled
|
||
},
|
||
// 是否允许List滚动
|
||
scrollable: {
|
||
type: Boolean,
|
||
default: () => props$B.list.scrollable
|
||
},
|
||
// 值应为某子元素id(id不能以数字开头)
|
||
scrollIntoView: {
|
||
type: String,
|
||
default: () => props$B.list.scrollIntoView
|
||
},
|
||
// 在设置滚动条位置时使用动画过渡
|
||
scrollWithAnimation: {
|
||
type: Boolean,
|
||
default: () => props$B.list.scrollWithAnimation
|
||
},
|
||
// iOS点击顶部状态栏、安卓双击标题栏时,滚动条返回顶部,只对微信小程序有效
|
||
enableBackToTop: {
|
||
type: Boolean,
|
||
default: () => props$B.list.enableBackToTop
|
||
},
|
||
// 列表的高度
|
||
height: {
|
||
type: [String, Number],
|
||
default: () => props$B.list.height
|
||
},
|
||
// 列表宽度
|
||
width: {
|
||
type: [String, Number],
|
||
default: () => props$B.list.width
|
||
},
|
||
// 列表前后预渲染的屏数,1代表一个屏幕的高度,1.5代表1个半屏幕高度
|
||
preLoadScreen: {
|
||
type: [String, Number],
|
||
default: () => props$B.list.preLoadScreen
|
||
},
|
||
// 开启自定义下拉刷新
|
||
refresherEnabled: {
|
||
type: Boolean,
|
||
default: () => false
|
||
},
|
||
// 设置自定义下拉刷新阈值
|
||
refresherThreshold: {
|
||
type: Number,
|
||
default: () => 45
|
||
},
|
||
// 设置自定义下拉刷新默认样式,支持设置 black,white,none,none 表示不使用默认样式
|
||
refresherDefaultStyle: {
|
||
type: String,
|
||
default: () => "black"
|
||
},
|
||
// 设置自定义下拉刷新区域背景颜色
|
||
refresherBackground: {
|
||
type: String,
|
||
default: () => "#FFF"
|
||
},
|
||
// 设置当前下拉刷新状态,true 表示下拉刷新已经被触发,false 表示下拉刷新未被触发
|
||
refresherTriggered: {
|
||
type: Boolean,
|
||
default: () => false
|
||
}
|
||
}
|
||
});
|
||
const props$c = defineMixin({
|
||
props: {
|
||
// item标签的名称,作为与u-tabbar的value参数匹配的标识符
|
||
name: {
|
||
type: [String, Number, null],
|
||
default: () => props$B.tabbarItem.name
|
||
},
|
||
activeIcon: {
|
||
type: String,
|
||
default: () => props$B.tabbarItem.activeIcon
|
||
},
|
||
inactiveIcon: {
|
||
type: String,
|
||
default: () => props$B.tabbarItem.inactiveIcon
|
||
},
|
||
// uView内置图标或者绝对路径的图片
|
||
icon: {
|
||
icon: String,
|
||
default: () => props$B.tabbarItem.icon
|
||
},
|
||
// 右上角的角标提示信息
|
||
badge: {
|
||
type: [String, Number, null],
|
||
default: () => props$B.tabbarItem.badge
|
||
},
|
||
// 是否显示圆点,将会覆盖badge参数
|
||
dot: {
|
||
type: Boolean,
|
||
default: () => props$B.tabbarItem.dot
|
||
},
|
||
// 描述文本
|
||
text: {
|
||
type: String,
|
||
default: () => props$B.tabbarItem.text
|
||
},
|
||
// 控制徽标的位置,对象或者字符串形式,可以设置top和right属性
|
||
badgeStyle: {
|
||
type: [Object, String],
|
||
default: () => props$B.tabbarItem.badgeStyle
|
||
}
|
||
}
|
||
});
|
||
const props$b = defineMixin({
|
||
props: {
|
||
// 当前匹配项的name
|
||
value: {
|
||
type: [String, Number, null],
|
||
default: () => props$B.tabbar.value
|
||
},
|
||
// 是否为iPhoneX留出底部安全距离
|
||
safeAreaInsetBottom: {
|
||
type: Boolean,
|
||
default: () => props$B.tabbar.safeAreaInsetBottom
|
||
},
|
||
// 是否显示上方边框
|
||
border: {
|
||
type: Boolean,
|
||
default: () => props$B.tabbar.border
|
||
},
|
||
// 元素层级z-index
|
||
zIndex: {
|
||
type: [String, Number],
|
||
default: () => props$B.tabbar.zIndex
|
||
},
|
||
// 选中标签的颜色
|
||
activeColor: {
|
||
type: String,
|
||
default: () => props$B.tabbar.activeColor
|
||
},
|
||
// 未选中标签的颜色
|
||
inactiveColor: {
|
||
type: String,
|
||
default: () => props$B.tabbar.inactiveColor
|
||
},
|
||
// 是否固定在底部
|
||
fixed: {
|
||
type: Boolean,
|
||
default: () => props$B.tabbar.fixed
|
||
},
|
||
// fixed定位固定在底部时,是否生成一个等高元素防止塌陷
|
||
placeholder: {
|
||
type: Boolean,
|
||
default: () => props$B.tabbar.placeholder
|
||
}
|
||
}
|
||
});
|
||
const props$a = defineMixin({
|
||
props: {
|
||
// 是否显示组件
|
||
show: {
|
||
type: Boolean,
|
||
default: () => props$B.loadingIcon.show
|
||
},
|
||
// 颜色
|
||
color: {
|
||
type: String,
|
||
default: () => props$B.loadingIcon.color
|
||
},
|
||
// 提示文字颜色
|
||
textColor: {
|
||
type: String,
|
||
default: () => props$B.loadingIcon.textColor
|
||
},
|
||
// 文字和图标是否垂直排列
|
||
vertical: {
|
||
type: Boolean,
|
||
default: () => props$B.loadingIcon.vertical
|
||
},
|
||
// 模式选择,circle-圆形,spinner-花朵形,semicircle-半圆形
|
||
mode: {
|
||
type: String,
|
||
default: () => props$B.loadingIcon.mode
|
||
},
|
||
// 图标大小,单位默认px
|
||
size: {
|
||
type: [String, Number],
|
||
default: () => props$B.loadingIcon.size
|
||
},
|
||
// 文字大小
|
||
textSize: {
|
||
type: [String, Number],
|
||
default: () => props$B.loadingIcon.textSize
|
||
},
|
||
// 文字内容
|
||
text: {
|
||
type: [String, Number],
|
||
default: () => props$B.loadingIcon.text
|
||
},
|
||
// 动画模式
|
||
timingFunction: {
|
||
type: String,
|
||
default: () => props$B.loadingIcon.timingFunction
|
||
},
|
||
// 动画执行周期时间
|
||
duration: {
|
||
type: [String, Number],
|
||
default: () => props$B.loadingIcon.duration
|
||
},
|
||
// mode=circle时的暗边颜色
|
||
inactiveColor: {
|
||
type: String,
|
||
default: () => props$B.loadingIcon.inactiveColor
|
||
}
|
||
}
|
||
});
|
||
const props$9 = defineMixin({
|
||
props: {
|
||
// 背景颜色(默认transparent)
|
||
bgColor: {
|
||
type: String,
|
||
default: () => props$B.gap.bgColor
|
||
},
|
||
// 分割槽高度,单位px(默认30)
|
||
height: {
|
||
type: [String, Number],
|
||
default: () => props$B.gap.height
|
||
},
|
||
// 与上一个组件的距离
|
||
marginTop: {
|
||
type: [String, Number],
|
||
default: () => props$B.gap.marginTop
|
||
},
|
||
// 与下一个组件的距离
|
||
marginBottom: {
|
||
type: [String, Number],
|
||
default: () => props$B.gap.marginBottom
|
||
}
|
||
}
|
||
});
|
||
const props$8 = defineMixin({
|
||
props: {
|
||
bgColor: {
|
||
type: String,
|
||
default: () => props$B.statusBar.bgColor
|
||
}
|
||
}
|
||
});
|
||
const props$7 = defineMixin({
|
||
props: {}
|
||
});
|
||
const props$6 = defineMixin({
|
||
props: {
|
||
// 是否展示组件
|
||
show: {
|
||
type: Boolean,
|
||
default: () => props$B.transition.show
|
||
},
|
||
// 使用的动画模式
|
||
mode: {
|
||
type: String,
|
||
default: () => props$B.transition.mode
|
||
},
|
||
// 动画的执行时间,单位ms
|
||
duration: {
|
||
type: [String, Number],
|
||
default: () => props$B.transition.duration
|
||
},
|
||
// 使用的动画过渡函数
|
||
timingFunction: {
|
||
type: String,
|
||
default: () => props$B.transition.timingFunction
|
||
}
|
||
}
|
||
});
|
||
const getClassNames = (name) => ({
|
||
enter: `u-${name}-enter u-${name}-enter-active`,
|
||
"enter-to": `u-${name}-enter-to u-${name}-enter-active`,
|
||
leave: `u-${name}-leave u-${name}-leave-active`,
|
||
"leave-to": `u-${name}-leave-to u-${name}-leave-active`
|
||
});
|
||
const transitionMixin = {
|
||
methods: {
|
||
// 组件被点击发出事件
|
||
clickHandler() {
|
||
this.$emit("click");
|
||
},
|
||
// vue版本的组件进场处理
|
||
async vueEnter() {
|
||
const classNames = getClassNames(this.mode);
|
||
this.status = "enter";
|
||
this.$emit("beforeEnter");
|
||
this.inited = true;
|
||
this.display = true;
|
||
this.classes = classNames.enter;
|
||
await nextTick$1();
|
||
{
|
||
await sleep(20);
|
||
this.$emit("enter");
|
||
this.transitionEnded = false;
|
||
this.$emit("afterEnter");
|
||
this.classes = classNames["enter-to"];
|
||
}
|
||
},
|
||
// 动画离场处理
|
||
async vueLeave() {
|
||
if (!this.display)
|
||
return;
|
||
const classNames = getClassNames(this.mode);
|
||
this.status = "leave";
|
||
this.$emit("beforeLeave");
|
||
this.classes = classNames.leave;
|
||
await nextTick$1();
|
||
{
|
||
this.transitionEnded = false;
|
||
this.$emit("leave");
|
||
setTimeout(this.onTransitionEnd, this.duration);
|
||
this.classes = classNames["leave-to"];
|
||
}
|
||
},
|
||
// 完成过渡后触发
|
||
onTransitionEnd() {
|
||
if (this.transitionEnded)
|
||
return;
|
||
this.transitionEnded = true;
|
||
this.$emit(this.status === "leave" ? "afterLeave" : "afterEnter");
|
||
if (!this.show && this.display) {
|
||
this.display = false;
|
||
this.inited = false;
|
||
}
|
||
}
|
||
}
|
||
};
|
||
const props$5 = defineMixin({
|
||
props: {
|
||
// 主题颜色
|
||
type: {
|
||
type: String,
|
||
default: () => props$B.text.type
|
||
},
|
||
// 是否显示
|
||
show: {
|
||
type: Boolean,
|
||
default: () => props$B.text.show
|
||
},
|
||
// 显示的值
|
||
text: {
|
||
type: [String, Number],
|
||
default: () => props$B.text.text
|
||
},
|
||
// 前置图标
|
||
prefixIcon: {
|
||
type: String,
|
||
default: () => props$B.text.prefixIcon
|
||
},
|
||
// 后置图标
|
||
suffixIcon: {
|
||
type: String,
|
||
default: () => props$B.text.suffixIcon
|
||
},
|
||
// 文本处理的匹配模式
|
||
// text-普通文本,price-价格,phone-手机号,name-姓名,date-日期,link-超链接
|
||
mode: {
|
||
type: String,
|
||
default: () => props$B.text.mode
|
||
},
|
||
// mode=link下,配置的链接
|
||
href: {
|
||
type: String,
|
||
default: () => props$B.text.href
|
||
},
|
||
// 格式化规则
|
||
format: {
|
||
type: [String, Function],
|
||
default: () => props$B.text.format
|
||
},
|
||
// mode=phone时,点击文本是否拨打电话
|
||
call: {
|
||
type: Boolean,
|
||
default: () => props$B.text.call
|
||
},
|
||
// 小程序的打开方式
|
||
openType: {
|
||
type: String,
|
||
default: () => props$B.text.openType
|
||
},
|
||
// 是否粗体,默认normal
|
||
bold: {
|
||
type: Boolean,
|
||
default: () => props$B.text.bold
|
||
},
|
||
// 是否块状
|
||
block: {
|
||
type: Boolean,
|
||
default: () => props$B.text.block
|
||
},
|
||
// 文本显示的行数,如果设置,超出此行数,将会显示省略号
|
||
lines: {
|
||
type: [String, Number],
|
||
default: () => props$B.text.lines
|
||
},
|
||
// 文本颜色
|
||
color: {
|
||
type: String,
|
||
default: () => props$B.text.color
|
||
},
|
||
// 字体大小
|
||
size: {
|
||
type: [String, Number],
|
||
default: () => props$B.text.size
|
||
},
|
||
// 图标的样式
|
||
iconStyle: {
|
||
type: [Object, String],
|
||
default: () => props$B.text.iconStyle
|
||
},
|
||
// 文字装饰,下划线,中划线等,可选值 none|underline|line-through
|
||
decoration: {
|
||
tepe: String,
|
||
default: () => props$B.text.decoration
|
||
},
|
||
// 外边距,对象、字符串,数值形式均可
|
||
margin: {
|
||
type: [Object, String, Number],
|
||
default: () => props$B.text.margin
|
||
},
|
||
// 文本行高
|
||
lineHeight: {
|
||
type: [String, Number],
|
||
default: () => props$B.text.lineHeight
|
||
},
|
||
// 文本对齐方式,可选值left|center|right
|
||
align: {
|
||
type: String,
|
||
default: () => props$B.text.align
|
||
},
|
||
// 文字换行,可选值break-word|normal|anywhere
|
||
wordWrap: {
|
||
type: String,
|
||
default: () => props$B.text.wordWrap
|
||
},
|
||
// 占满剩余空间
|
||
flex1: {
|
||
type: Boolean,
|
||
default: () => props$B.text.flex1
|
||
}
|
||
}
|
||
});
|
||
const value = {
|
||
computed: {
|
||
// 经处理后需要显示的值
|
||
value() {
|
||
const {
|
||
text,
|
||
mode,
|
||
format: format2,
|
||
href
|
||
} = this;
|
||
if (mode === "price") {
|
||
if (!/^\d+(\.\d+)?$/.test(text)) {
|
||
error("金额模式下,text参数需要为金额格式");
|
||
}
|
||
if (test.func(format2)) {
|
||
return format2(text);
|
||
}
|
||
return priceFormat(text, 2);
|
||
}
|
||
if (mode === "date") {
|
||
!test.date(text) && error("日期模式下,text参数需要为日期或时间戳格式");
|
||
if (test.func(format2)) {
|
||
return format2(text);
|
||
}
|
||
if (format2) {
|
||
return timeFormat(text, format2);
|
||
}
|
||
return timeFormat(text, "yyyy-mm-dd");
|
||
}
|
||
if (mode === "phone") {
|
||
if (test.func(format2)) {
|
||
return format2(text);
|
||
}
|
||
if (format2 === "encrypt") {
|
||
return `${text.substr(0, 3)}****${text.substr(7)}`;
|
||
}
|
||
return text;
|
||
}
|
||
if (mode === "name") {
|
||
!(typeof text === "string") && error("姓名模式下,text参数需要为字符串格式");
|
||
if (test.func(format2)) {
|
||
return format2(text);
|
||
}
|
||
if (format2 === "encrypt") {
|
||
return this.formatName(text);
|
||
}
|
||
return text;
|
||
}
|
||
if (mode === "link") {
|
||
!test.url(href) && error("超链接模式下,href参数需要为URL格式");
|
||
return text;
|
||
}
|
||
return text;
|
||
}
|
||
},
|
||
methods: {
|
||
// 默认的姓名脱敏规则
|
||
formatName(name) {
|
||
let value2 = "";
|
||
if (name.length === 2) {
|
||
value2 = name.substr(0, 1) + "*";
|
||
} else if (name.length > 2) {
|
||
let char = "";
|
||
for (let i = 0, len = name.length - 2; i < len; i++) {
|
||
char += "*";
|
||
}
|
||
value2 = name.substr(0, 1) + char + name.substr(-1, 1);
|
||
} else {
|
||
value2 = name;
|
||
}
|
||
return value2;
|
||
}
|
||
}
|
||
};
|
||
const props$4 = defineMixin({
|
||
props: {
|
||
// 分组标题
|
||
title: {
|
||
type: String,
|
||
default: () => props$B.cellGroup.title
|
||
},
|
||
// 是否显示外边框
|
||
border: {
|
||
type: Boolean,
|
||
default: () => props$B.cellGroup.border
|
||
}
|
||
}
|
||
});
|
||
const props$3 = defineMixin({
|
||
props: {
|
||
color: {
|
||
type: String,
|
||
default: () => props$B.line.color
|
||
},
|
||
// 长度,竖向时表现为高度,横向时表现为长度,可以为百分比,带px单位的值等
|
||
length: {
|
||
type: [String, Number],
|
||
default: () => props$B.line.length
|
||
},
|
||
// 线条方向,col-竖向,row-横向
|
||
direction: {
|
||
type: String,
|
||
default: () => props$B.line.direction
|
||
},
|
||
// 是否显示细边框
|
||
hairline: {
|
||
type: Boolean,
|
||
default: () => props$B.line.hairline
|
||
},
|
||
// 线条与上下左右元素的间距,字符串形式,如"30px"、"20px 30px"
|
||
margin: {
|
||
type: [String, Number],
|
||
default: () => props$B.line.margin
|
||
},
|
||
// 是否虚线,true-虚线,false-实线
|
||
dashed: {
|
||
type: Boolean,
|
||
default: () => props$B.line.dashed
|
||
}
|
||
}
|
||
});
|
||
const props$2 = defineMixin({
|
||
props: {
|
||
// 是否显示圆点
|
||
isDot: {
|
||
type: Boolean,
|
||
default: () => props$B.badge.isDot
|
||
},
|
||
// 显示的内容
|
||
value: {
|
||
type: [Number, String],
|
||
default: () => props$B.badge.value
|
||
},
|
||
// 显示的内容
|
||
modelValue: {
|
||
type: [Number, String],
|
||
default: () => props$B.badge.modelValue
|
||
},
|
||
// 是否显示
|
||
show: {
|
||
type: Boolean,
|
||
default: () => props$B.badge.show
|
||
},
|
||
// 最大值,超过最大值会显示 '{max}+'
|
||
max: {
|
||
type: [Number, String],
|
||
default: () => props$B.badge.max
|
||
},
|
||
// 主题类型,error|warning|success|primary
|
||
type: {
|
||
type: String,
|
||
default: () => props$B.badge.type
|
||
},
|
||
// 当数值为 0 时,是否展示 Badge
|
||
showZero: {
|
||
type: Boolean,
|
||
default: () => props$B.badge.showZero
|
||
},
|
||
// 背景颜色,优先级比type高,如设置,type参数会失效
|
||
bgColor: {
|
||
type: [String, null],
|
||
default: () => props$B.badge.bgColor
|
||
},
|
||
// 字体颜色
|
||
color: {
|
||
type: [String, null],
|
||
default: () => props$B.badge.color
|
||
},
|
||
// 徽标形状,circle-四角均为圆角,horn-左下角为直角
|
||
shape: {
|
||
type: String,
|
||
default: () => props$B.badge.shape
|
||
},
|
||
// 设置数字的显示方式,overflow|ellipsis|limit
|
||
// overflow会根据max字段判断,超出显示`${max}+`
|
||
// ellipsis会根据max判断,超出显示`${max}...`
|
||
// limit会依据1000作为判断条件,超出1000,显示`${value/1000}K`,比如2.2k、3.34w,最多保留2位小数
|
||
numberType: {
|
||
type: String,
|
||
default: () => props$B.badge.numberType
|
||
},
|
||
// 设置badge的位置偏移,格式为 [x, y],也即设置的为top和right的值,absolute为true时有效
|
||
offset: {
|
||
type: Array,
|
||
default: () => props$B.badge.offset
|
||
},
|
||
// 是否反转背景和字体颜色
|
||
inverted: {
|
||
type: Boolean,
|
||
default: () => props$B.badge.inverted
|
||
},
|
||
// 是否绝对定位
|
||
absolute: {
|
||
type: Boolean,
|
||
default: () => props$B.badge.absolute
|
||
}
|
||
}
|
||
});
|
||
const props$1 = defineMixin({
|
||
props: {
|
||
// 是否展示工具条
|
||
show: {
|
||
type: Boolean,
|
||
default: () => props$B.toolbar.show
|
||
},
|
||
// 取消按钮的文字
|
||
cancelText: {
|
||
type: String,
|
||
default: () => props$B.toolbar.cancelText
|
||
},
|
||
// 确认按钮的文字
|
||
confirmText: {
|
||
type: String,
|
||
default: () => props$B.toolbar.confirmText
|
||
},
|
||
// 取消按钮的颜色
|
||
cancelColor: {
|
||
type: String,
|
||
default: () => props$B.toolbar.cancelColor
|
||
},
|
||
// 确认按钮的颜色
|
||
confirmColor: {
|
||
type: String,
|
||
default: () => props$B.toolbar.confirmColor
|
||
},
|
||
// 标题文字
|
||
title: {
|
||
type: String,
|
||
default: () => props$B.toolbar.title
|
||
},
|
||
// 开启右侧插槽
|
||
rightSlot: {
|
||
type: Boolean,
|
||
default: false
|
||
}
|
||
}
|
||
});
|
||
const props = defineMixin({
|
||
props: {
|
||
// 文字颜色
|
||
color: {
|
||
type: String,
|
||
default: () => props$B.link.color
|
||
},
|
||
// 字体大小,单位px
|
||
fontSize: {
|
||
type: [String, Number],
|
||
default: () => props$B.link.fontSize
|
||
},
|
||
// 是否显示下划线
|
||
underLine: {
|
||
type: Boolean,
|
||
default: () => props$B.link.underLine
|
||
},
|
||
// 要跳转的链接
|
||
href: {
|
||
type: String,
|
||
default: () => props$B.link.href
|
||
},
|
||
// 小程序中复制到粘贴板的提示语
|
||
mpTips: {
|
||
type: String,
|
||
default: () => props$B.link.mpTips
|
||
},
|
||
// 下划线颜色
|
||
lineColor: {
|
||
type: String,
|
||
default: () => props$B.link.lineColor
|
||
},
|
||
// 超链接的问题,不使用slot形式传入,是因为nvue下无法修改颜色
|
||
text: {
|
||
type: String,
|
||
default: () => props$B.link.text
|
||
}
|
||
}
|
||
});
|
||
exports.$parent = $parent;
|
||
exports.Parser = Parser;
|
||
exports.Schema = Schema;
|
||
exports._export_sfc = _export_sfc;
|
||
exports.addStyle = addStyle;
|
||
exports.addUnit = addUnit;
|
||
exports.buttonMixin = buttonMixin;
|
||
exports.chooseFile = chooseFile;
|
||
exports.color = color$3;
|
||
exports.colorGradient = colorGradient;
|
||
exports.config = config$1;
|
||
exports.createSSRApp = createSSRApp;
|
||
exports.dayjs = dayjs;
|
||
exports.deepClone = deepClone;
|
||
exports.deepMerge = deepMerge$2;
|
||
exports.e = e;
|
||
exports.error = error;
|
||
exports.f = f;
|
||
exports.formValidate = formValidate;
|
||
exports.getCurrentInstance = getCurrentInstance;
|
||
exports.getProperty = getProperty;
|
||
exports.getPx = getPx;
|
||
exports.getWindowInfo = getWindowInfo;
|
||
exports.hexToRgb = hexToRgb;
|
||
exports.icons = icons;
|
||
exports.index = index$1;
|
||
exports.initVueI18n = initVueI18n;
|
||
exports.mixin = mixin;
|
||
exports.mixinUpload = mixinUpload;
|
||
exports.mpMixin = mpMixin;
|
||
exports.n = n;
|
||
exports.nextTick$1 = nextTick$1;
|
||
exports.o = o;
|
||
exports.onHide = onHide;
|
||
exports.onLaunch = onLaunch;
|
||
exports.onLoad = onLoad;
|
||
exports.onMounted = onMounted;
|
||
exports.onReady = onReady;
|
||
exports.onShow = onShow;
|
||
exports.openType = openType;
|
||
exports.os = os;
|
||
exports.p = p;
|
||
exports.props = props$A;
|
||
exports.props$1 = props$z;
|
||
exports.props$10 = props$q;
|
||
exports.props$11 = props$p;
|
||
exports.props$12 = props$o;
|
||
exports.props$13 = props$n;
|
||
exports.props$14 = props$B;
|
||
exports.props$15 = props$m;
|
||
exports.props$16 = props$l;
|
||
exports.props$17 = props$k;
|
||
exports.props$18 = props$j;
|
||
exports.props$19 = props$i;
|
||
exports.props$2 = props$y;
|
||
exports.props$20 = props$h;
|
||
exports.props$21 = props$g;
|
||
exports.props$22 = props$f;
|
||
exports.props$23 = props$e;
|
||
exports.props$24 = props$d;
|
||
exports.props$25 = props$c;
|
||
exports.props$26 = props$b;
|
||
exports.props$27 = props$a;
|
||
exports.props$28 = props$9;
|
||
exports.props$29 = props$8;
|
||
exports.props$3 = props$x;
|
||
exports.props$30 = props$7;
|
||
exports.props$31 = props$6;
|
||
exports.props$32 = props$5;
|
||
exports.props$33 = props$4;
|
||
exports.props$34 = props$3;
|
||
exports.props$35 = props$2;
|
||
exports.props$36 = props$1;
|
||
exports.props$37 = props;
|
||
exports.props$4 = props$w;
|
||
exports.props$5 = props$v;
|
||
exports.props$6 = props$u;
|
||
exports.props$7 = props$t;
|
||
exports.props$8 = props$s;
|
||
exports.props$9 = props$r;
|
||
exports.r = r;
|
||
exports.random = random;
|
||
exports.reactive = reactive;
|
||
exports.ref = ref;
|
||
exports.resolveComponent = resolveComponent;
|
||
exports.s = s;
|
||
exports.setProperty = setProperty;
|
||
exports.sleep = sleep;
|
||
exports.sr = sr;
|
||
exports.t = t;
|
||
exports.test = test;
|
||
exports.throttle = throttle;
|
||
exports.toast = toast;
|
||
exports.transitionMixin = transitionMixin;
|
||
exports.type2icon = type2icon;
|
||
exports.unref = unref;
|
||
exports.uviewPlus = uviewPlus;
|
||
exports.value = value;
|
||
exports.watch = watch;
|
||
exports.wx$1 = wx$1;
|
||
//# sourceMappingURL=../../.sourcemap/mp-weixin/common/vendor.js.map
|