2025-06-17 13:40:11 +08:00

5209 lines
177 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

if (typeof Promise !== "undefined" && !Promise.prototype.finally) {
Promise.prototype.finally = function(callback) {
const promise = this.constructor;
return this.then(
(value) => promise.resolve(callback()).then(() => value),
(reason) => promise.resolve(callback()).then(() => {
throw reason;
})
);
};
}
;
if (typeof uni !== "undefined" && uni && uni.requireGlobal) {
const global = uni.requireGlobal();
ArrayBuffer = global.ArrayBuffer;
Int8Array = global.Int8Array;
Uint8Array = global.Uint8Array;
Uint8ClampedArray = global.Uint8ClampedArray;
Int16Array = global.Int16Array;
Uint16Array = global.Uint16Array;
Int32Array = global.Int32Array;
Uint32Array = global.Uint32Array;
Float32Array = global.Float32Array;
Float64Array = global.Float64Array;
BigInt64Array = global.BigInt64Array;
BigUint64Array = global.BigUint64Array;
}
;
if (uni.restoreGlobal) {
uni.restoreGlobal(Vue, weex, plus, setTimeout, clearTimeout, setInterval, clearInterval);
}
(function(vue) {
"use strict";
const ON_SHOW = "onShow";
const ON_HIDE = "onHide";
const ON_LAUNCH = "onLaunch";
const ON_LOAD = "onLoad";
function formatAppLog(type, filename, ...args) {
if (uni.__log__) {
uni.__log__(type, filename, ...args);
} else {
console[type].apply(console, [...args, filename]);
}
}
function resolveEasycom(component, easycom) {
return typeof component === "string" ? easycom : component;
}
const createHook = (lifecycle) => (hook, target = vue.getCurrentInstance()) => {
!vue.isInSSRComponentSetup && vue.injectHook(lifecycle, hook, target);
};
const onShow = /* @__PURE__ */ createHook(ON_SHOW);
const onHide = /* @__PURE__ */ createHook(ON_HIDE);
const onLaunch = /* @__PURE__ */ createHook(ON_LAUNCH);
const onLoad = /* @__PURE__ */ createHook(ON_LOAD);
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 defineMixin = (options) => {
return options;
};
const version = "3";
{
formatAppLog("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 = {
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
}
};
const zIndex = {
toast: 10090,
noNetwork: 10080,
// popup包含popupactionsheetkeyboardpicker的值
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(url2, params) {
if (!params) {
return url2;
}
let serializedParams;
if (isURLSearchParams(params)) {
serializedParams = params.toString();
} else {
const parts = [];
forEach(params, (val, key) => {
if (val === null || typeof val === "undefined") {
return;
}
if (isArray(val)) {
key = `${key}[]`;
} else {
val = [val];
}
forEach(val, (v) => {
if (isDate(v)) {
v = v.toISOString();
} else if (isObject(v)) {
v = JSON.stringify(v);
}
parts.push(`${encode(key)}=${encode(v)}`);
});
});
serializedParams = parts.join("&");
}
if (serializedParams) {
const hashmarkIndex = url2.indexOf("#");
if (hashmarkIndex !== -1) {
url2 = url2.slice(0, hashmarkIndex);
}
url2 += (url2.indexOf("?") === -1 ? "?" : "&") + serializedParams;
}
return url2;
}
function isAbsoluteURL(url2) {
return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url2);
}
function combineURLs(baseURL, relativeURL) {
return relativeURL ? `${baseURL.replace(/\/+$/, "")}/${relativeURL.replace(/^\/+/, "")}` : baseURL;
}
function buildFullPath(baseURL, requestedURL) {
if (baseURL && !isAbsoluteURL(requestedURL)) {
return combineURLs(baseURL, requestedURL);
}
return requestedURL;
}
function settle(resolve, reject, response) {
const { validateStatus } = response.config;
const status = response.statusCode;
if (status && (!validateStatus || validateStatus(status))) {
resolve(response);
} else {
reject(response);
}
}
const mergeKeys$1 = (keys, config2) => {
const config3 = {};
keys.forEach((prop) => {
if (!isUndefined(config2[prop])) {
config3[prop] = config2[prop];
}
});
return config3;
};
const adapter = (config2) => new Promise((resolve, reject) => {
const fullPath = buildURL(buildFullPath(config2.baseURL, config2.url), config2.params);
const _config = {
url: fullPath,
header: config2.header,
complete: (response) => {
config2.fullPath = fullPath;
response.config = config2;
try {
if (typeof response.data === "string") {
response.data = JSON.parse(response.data);
}
} catch (e) {
}
settle(resolve, reject, response);
}
};
let requestTask;
if (config2.method === "UPLOAD") {
delete _config.header["content-type"];
delete _config.header["Content-Type"];
const otherConfig = {
filePath: config2.filePath,
name: config2.name
};
const optionalKeys = [
"files",
"timeout",
"formData"
];
requestTask = uni.uploadFile({ ..._config, ...otherConfig, ...mergeKeys$1(optionalKeys, config2) });
} else if (config2.method === "DOWNLOAD") {
if (!isUndefined(config2.timeout)) {
_config.timeout = config2.timeout;
}
requestTask = uni.downloadFile(_config);
} else {
const optionalKeys = [
"data",
"method",
"timeout",
"dataType",
"responseType",
"sslVerify",
"firstIpv4"
];
requestTask = uni.request({ ..._config, ...mergeKeys$1(optionalKeys, config2) });
}
if (config2.getTask) {
config2.getTask(requestTask, config2);
}
});
const dispatchRequest = (config2) => adapter(config2);
function InterceptorManager() {
this.handlers = [];
}
InterceptorManager.prototype.use = function use(fulfilled, rejected) {
this.handlers.push({
fulfilled,
rejected
});
return this.handlers.length - 1;
};
InterceptorManager.prototype.eject = function eject(id) {
if (this.handlers[id]) {
this.handlers[id] = null;
}
};
InterceptorManager.prototype.forEach = function forEach2(fn) {
this.handlers.forEach((h) => {
if (h !== null) {
fn(h);
}
});
};
const mergeKeys = (keys, globalsConfig, config2) => {
const config3 = {};
keys.forEach((prop) => {
if (!isUndefined(config2[prop])) {
config3[prop] = config2[prop];
} else if (!isUndefined(globalsConfig[prop])) {
config3[prop] = globalsConfig[prop];
}
});
return config3;
};
const mergeConfig = (globalsConfig, config2 = {}) => {
const method = config2.method || globalsConfig.method || "GET";
let config3 = {
baseURL: globalsConfig.baseURL || "",
method,
url: config2.url || "",
params: config2.params || {},
custom: { ...globalsConfig.custom || {}, ...config2.custom || {} },
header: deepMerge$1(globalsConfig.header || {}, config2.header || {})
};
const defaultToConfig2Keys = ["getTask", "validateStatus"];
config3 = { ...config3, ...mergeKeys(defaultToConfig2Keys, globalsConfig, config2) };
if (method === "DOWNLOAD") {
if (!isUndefined(config2.timeout)) {
config3.timeout = config2.timeout;
} else if (!isUndefined(globalsConfig.timeout)) {
config3.timeout = globalsConfig.timeout;
}
} else if (method === "UPLOAD") {
delete config3.header["content-type"];
delete config3.header["Content-Type"];
const uploadKeys = [
"files",
"filePath",
"name",
"timeout",
"formData"
];
uploadKeys.forEach((prop) => {
if (!isUndefined(config2[prop])) {
config3[prop] = config2[prop];
}
});
if (isUndefined(config3.timeout) && !isUndefined(globalsConfig.timeout)) {
config3.timeout = globalsConfig.timeout;
}
} else {
const defaultsKeys = [
"data",
"timeout",
"dataType",
"responseType",
"sslVerify",
"firstIpv4"
];
config3 = { ...config3, ...mergeKeys(defaultsKeys, globalsConfig, config2) };
}
return config3;
};
const defaults = {
baseURL: "",
header: {},
method: "GET",
dataType: "json",
responseType: "text",
custom: {},
timeout: 6e4,
sslVerify: true,
firstIpv4: false,
validateStatus: function validateStatus(status) {
return status >= 200 && status < 300;
}
};
var clone = function() {
function _instanceof(obj, type) {
return type != null && obj instanceof type;
}
var nativeMap;
try {
nativeMap = Map;
} catch (_) {
nativeMap = function() {
};
}
var nativeSet;
try {
nativeSet = Set;
} catch (_) {
nativeSet = function() {
};
}
var nativePromise;
try {
nativePromise = Promise;
} catch (_) {
nativePromise = function() {
};
}
function clone2(parent, circular, depth, prototype, includeNonEnumerable) {
if (typeof circular === "object") {
depth = circular.depth;
prototype = circular.prototype;
includeNonEnumerable = circular.includeNonEnumerable;
circular = circular.circular;
}
var allParents = [];
var allChildren = [];
var useBuffer = typeof Buffer != "undefined";
if (typeof circular == "undefined")
circular = true;
if (typeof depth == "undefined")
depth = Infinity;
function _clone(parent2, depth2) {
if (parent2 === null)
return null;
if (depth2 === 0)
return parent2;
var child;
var proto;
if (typeof parent2 != "object") {
return parent2;
}
if (_instanceof(parent2, nativeMap)) {
child = new nativeMap();
} else if (_instanceof(parent2, nativeSet)) {
child = new nativeSet();
} else if (_instanceof(parent2, nativePromise)) {
child = new nativePromise(function(resolve, reject) {
parent2.then(function(value2) {
resolve(_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 (e) {
if (e instanceof TypeError) {
continue;
} else if (e instanceof ReferenceError) {
continue;
}
}
}
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(parent2);
for (var i = 0; i < symbols.length; i++) {
var symbol = symbols[i];
var descriptor = Object.getOwnPropertyDescriptor(parent2, symbol);
if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {
continue;
}
child[symbol] = _clone(parent2[symbol], depth2 - 1);
Object.defineProperty(child, symbol, descriptor);
}
}
if (includeNonEnumerable) {
var allPropertyNames = Object.getOwnPropertyNames(parent2);
for (var i = 0; i < allPropertyNames.length; i++) {
var propertyName = allPropertyNames[i];
var descriptor = Object.getOwnPropertyDescriptor(parent2, propertyName);
if (descriptor && descriptor.enumerable) {
continue;
}
child[propertyName] = _clone(parent2[propertyName], depth2 - 1);
Object.defineProperty(child, propertyName, descriptor);
}
}
return child;
}
return _clone(parent, depth);
}
clone2.clonePrototype = function clonePrototype(parent) {
if (parent === null)
return null;
var c = function() {
};
c.prototype = parent;
return new c();
};
function __objToStr(o) {
return Object.prototype.toString.call(o);
}
clone2.__objToStr = __objToStr;
function __isDate(o) {
return typeof o === "object" && __objToStr(o) === "[object Date]";
}
clone2.__isDate = __isDate;
function __isArray(o) {
return typeof o === "object" && __objToStr(o) === "[object Array]";
}
clone2.__isArray = __isArray;
function __isRegExp(o) {
return typeof o === "object" && __objToStr(o) === "[object RegExp]";
}
clone2.__isRegExp = __isRegExp;
function __getRegExpFlags(re) {
var flags = "";
if (re.global)
flags += "g";
if (re.ignoreCase)
flags += "i";
if (re.multiline)
flags += "m";
return flags;
}
clone2.__getRegExpFlags = __getRegExpFlags;
return clone2;
}();
class Request {
/**
* @param {Object} arg - 全局配置
* @param {String} arg.baseURL - 全局根路径
* @param {Object} arg.header - 全局header
* @param {String} arg.method = [GET|POST|PUT|DELETE|CONNECT|HEAD|OPTIONS|TRACE] - 全局默认请求方式
* @param {String} arg.dataType = [json] - 全局默认的dataType
* @param {String} arg.responseType = [text|arraybuffer] - 全局默认的responseType。支付宝小程序不支持
* @param {Object} arg.custom - 全局默认的自定义参数
* @param {Number} arg.timeout - 全局默认的超时时间,单位 ms。默认60000。H5(HBuilderX 2.9.9+)、APP(HBuilderX 2.9.9+)、微信小程序2.10.0)、支付宝小程序
* @param {Boolean} arg.sslVerify - 全局默认的是否验证 ssl 证书。默认true.仅App安卓端支持HBuilderX 2.3.3+
* @param {Boolean} arg.withCredentials - 全局默认的跨域请求时是否携带凭证cookies。默认false。仅H5支持HBuilderX 2.6.15+
* @param {Boolean} arg.firstIpv4 - 全DNS解析时优先使用ipv4。默认false。仅 App-Android 支持 (HBuilderX 2.8.0+)
* @param {Function(statusCode):Boolean} arg.validateStatus - 全局默认的自定义验证器。默认statusCode >= 200 && statusCode < 300
*/
constructor(arg = {}) {
if (!isPlainObject(arg)) {
arg = {};
formatAppLog("warn", "at 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(f) {
this.config = f(this.config);
}
middleware(config2) {
config2 = mergeConfig(this.config, config2);
const chain = [dispatchRequest, void 0];
let promise2 = Promise.resolve(config2);
this.interceptors.request.forEach((interceptor) => {
chain.unshift(interceptor.fulfilled, interceptor.rejected);
});
this.interceptors.response.forEach((interceptor) => {
chain.push(interceptor.fulfilled, interceptor.rejected);
});
while (chain.length) {
promise2 = promise2.then(chain.shift(), chain.shift());
}
return promise2;
}
/**
* @Function
* @param {Object} config - 请求配置项
* @prop {String} options.url - 请求路径
* @prop {Object} options.data - 请求参数
* @prop {Object} [options.responseType = config.responseType] [text|arraybuffer] - 响应的数据类型
* @prop {Object} [options.dataType = config.dataType] - 如果设为 json会尝试对返回的数据做一次 JSON.parse
* @prop {Object} [options.header = config.header] - 请求header
* @prop {Object} [options.method = config.method] - 请求方法
* @returns {Promise<unknown>}
*/
request(config2 = {}) {
return this.middleware(config2);
}
get(url2, options = {}) {
return this.middleware({
url: url2,
method: "GET",
...options
});
}
post(url2, data, options = {}) {
return this.middleware({
url: url2,
data,
method: "POST",
...options
});
}
put(url2, data, options = {}) {
return this.middleware({
url: url2,
data,
method: "PUT",
...options
});
}
delete(url2, data, options = {}) {
return this.middleware({
url: url2,
data,
method: "DELETE",
...options
});
}
options(url2, data, options = {}) {
return this.middleware({
url: url2,
data,
method: "OPTIONS",
...options
});
}
upload(url2, config2 = {}) {
config2.url = url2;
config2.method = "UPLOAD";
return this.middleware(config2);
}
download(url2, config2 = {}) {
config2.url = url2;
config2.method = "DOWNLOAD";
return this.middleware(config2);
}
}
const http = new Request();
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(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$1(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 (e) {
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(o) {
return o && Object.prototype.toString.call(o) === "[object RegExp]";
}
const test = {
email,
mobile,
url,
date,
dateISO,
number,
digits,
idCard,
carNo,
amount,
chinese,
letter,
enOrNum,
contains,
range: range$1,
rangeLength,
empty,
isEmpty: empty,
jsonString,
landline,
object,
array,
code,
func,
promise,
video,
image,
regExp,
string
};
function strip(num, precision = 15) {
return +parseFloat(Number(num).toPrecision(precision));
}
function digitLength(num) {
const eSplit = num.toString().split(/[eE]/);
const len = (eSplit[0].split(".")[1] || "").length - +(eSplit[1] || 0);
return len > 0 ? len : 0;
}
function float2Fixed(num) {
if (num.toString().indexOf("e") === -1) {
return Number(num.toString().replace(".", ""));
}
const dLen = digitLength(num);
return dLen > 0 ? strip(Number(num) * Math.pow(10, dLen)) : Number(num);
}
function checkBoundary(num) {
{
if (num > Number.MAX_SAFE_INTEGER || num < Number.MIN_SAFE_INTEGER) {
formatAppLog("warn", "at 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;
}
function range(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 ? `${uni.upx2px(parseInt(value2))}px` : Number(uni.upx2px(parseInt(value2)));
}
return unit ? `${parseInt(value2)}px` : parseInt(value2);
}
function sleep(value2 = 30) {
return new Promise((resolve) => {
setTimeout(() => {
resolve();
}, value2);
});
}
function os() {
return uni.getDeviceInfo().platform.toLowerCase();
}
function sys() {
return uni.getSystemInfoSync();
}
function getWindowInfo() {
let ret = {};
ret = uni.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 r;
uuid[8] = uuid[13] = uuid[18] = uuid[23] = "-";
uuid[14] = "4";
for (let i = 0; i < 36; i++) {
if (!uuid[i]) {
r = 0 | Math.random() * 16;
uuid[i] = chars[i == 19 ? r & 3 | 8 : r];
}
}
}
if (firstU) {
uuid.shift();
return `u${uuid.join("")}`;
}
return uuid.join("");
}
function $parent(name = void 0) {
let parent = this.$parent;
while (parent) {
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.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 o = array(obj) ? [] : {};
for (const i in obj) {
if (obj.hasOwnProperty(i)) {
o[i] = typeof obj[i] === "object" ? deepClone(obj[i]) : obj[i];
}
}
return o;
}
function deepMerge(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(target[prop], source[prop]);
}
} else {
target[prop] = source[prop];
}
}
return target;
}
function shallowMerge(target, source = {}) {
if (typeof target !== "object" || typeof source !== "object")
return false;
for (const prop in source) {
if (!source.hasOwnProperty(prop))
continue;
if (prop in target) {
if (source[prop] == null) {
target[prop] = source[prop];
} else if (typeof target[prop] !== "object") {
target[prop] = source[prop];
} else if (typeof source[prop] !== "object") {
target[prop] = source[prop];
} else if (target[prop].concat && source[prop].concat) {
target[prop] = target[prop].concat(source[prop]);
} else {
target[prop] = shallowMerge(target[prop], source[prop]);
}
} else {
target[prop] = source[prop];
}
}
return target;
}
function error(err) {
{
formatAppLog("error", "at node_modules/uview-plus/libs/function/index.js:304", `uView提示${err}`);
}
}
function randomArray(array2 = []) {
return array2.sort(() => Math.random() - 0.5);
}
if (!String.prototype.padStart) {
String.prototype.padStart = function(maxLength, fillString = " ") {
if (Object.prototype.toString.call(fillString) !== "[object String]") {
throw new TypeError(
"fillString must be String"
);
}
const str = this;
if (str.length >= maxLength)
return String(str);
const fillLength = maxLength - str.length;
let times2 = Math.ceil(fillLength / fillString.length);
while (times2 >>= 1) {
fillString += fillString;
if (times2 === 1) {
fillString += fillString;
}
}
return fillString.slice(0, fillLength) + str;
};
}
function timeFormat(dateTime = null, formatStr = "yyyy-mm-dd") {
let date2;
if (!dateTime) {
date2 = /* @__PURE__ */ new Date();
} else if (/^\d{10}$/.test(dateTime.toString().trim())) {
date2 = new Date(dateTime * 1e3);
} else if (typeof dateTime === "string" && /^\d+$/.test(dateTime.trim())) {
date2 = new Date(Number(dateTime));
} else {
date2 = new Date(
typeof dateTime === "string" ? dateTime.replace(/-/g, "/") : dateTime
);
}
const timeSource = {
"y": date2.getFullYear().toString(),
// 年
"m": (date2.getMonth() + 1).toString().padStart(2, "0"),
// 月
"d": date2.getDate().toString().padStart(2, "0"),
// 日
"h": date2.getHours().toString().padStart(2, "0"),
// 时
"M": date2.getMinutes().toString().padStart(2, "0"),
// 分
"s": date2.getSeconds().toString().padStart(2, "0")
// 秒
// 有其他格式化字符需求可以继续添加,必须转化成字符串
};
for (const key in timeSource) {
const [ret] = new RegExp(`${key}+`).exec(formatStr) || [];
if (ret) {
const beginIndex = key === "y" && ret.length === 2 ? 2 : 0;
formatStr = formatStr.replace(ret, timeSource[key].slice(beginIndex));
}
}
return formatStr;
}
function timeFrom(timestamp = null, format = "yyyy-mm-dd") {
if (timestamp == null)
timestamp = Number(/* @__PURE__ */ new Date());
timestamp = parseInt(timestamp);
if (timestamp.toString().length == 10)
timestamp *= 1e3;
let timer = (/* @__PURE__ */ new Date()).getTime() - timestamp;
timer = parseInt(timer / 1e3);
let tips = "";
switch (true) {
case timer < 300:
tips = "刚刚";
break;
case (timer >= 300 && timer < 3600):
tips = `${parseInt(timer / 60)}分钟前`;
break;
case (timer >= 3600 && timer < 86400):
tips = `${parseInt(timer / 3600)}小时前`;
break;
case (timer >= 86400 && timer < 2592e3):
tips = `${parseInt(timer / 86400)}天前`;
break;
default:
if (format === false) {
if (timer >= 2592e3 && timer < 365 * 86400) {
tips = `${parseInt(timer / (86400 * 30))}个月前`;
} else {
tips = `${parseInt(timer / (86400 * 365))}年前`;
}
} else {
tips = timeFormat(timestamp, format);
}
}
return tips;
}
function trim(str, pos = "both") {
str = String(str);
if (pos == "both") {
return str.replace(/^\s+|\s+$/g, "");
}
if (pos == "left") {
return str.replace(/^\s*/, "");
}
if (pos == "right") {
return str.replace(/(\s*$)/g, "");
}
if (pos == "all") {
return str.replace(/\s+/g, "");
}
return str;
}
function queryParams(data = {}, isPrefix = true, arrayFormat = "brackets") {
const prefix = isPrefix ? "?" : "";
const _result = [];
if (["indices", "brackets", "repeat", "comma"].indexOf(arrayFormat) == -1)
arrayFormat = "brackets";
for (const key in data) {
const 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) {
uni.showToast({
title: String(title),
icon: "none",
duration
});
}
function type2icon(type = "success", fill = false) {
if (["primary", "info", "error", "warning", "success"].indexOf(type) == -1)
type = "success";
let iconName = "";
switch (type) {
case "primary":
iconName = "info-circle";
break;
case "info":
iconName = "info-circle";
break;
case "error":
iconName = "close-circle";
break;
case "warning":
iconName = "error-circle";
break;
case "success":
iconName = "checkmark-circle";
break;
default:
iconName = "checkmark-circle";
}
if (fill)
iconName += "-fill";
return iconName;
}
function priceFormat(number2, decimals = 0, decimalPoint = ".", thousandsSeparator = ",") {
number2 = `${number2}`.replace(/[^0-9+-Ee.]/g, "");
const n = !isFinite(+number2) ? 0 : +number2;
const prec = !isFinite(+decimals) ? 0 : Math.abs(decimals);
const sep = typeof thousandsSeparator === "undefined" ? "," : thousandsSeparator;
const dec = typeof decimalPoint === "undefined" ? "." : decimalPoint;
let s = "";
s = (prec ? round(n, prec) + "" : `${Math.round(n)}`).split(".");
const re = /(-?\d+)(\d{3})/;
while (re.test(s[0])) {
s[0] = s[0].replace(re, `$1${sep}$2`);
}
if ((s[1] || "").length < prec) {
s[1] = s[1] || "";
s[1] += new Array(prec - s[1].length + 1).join("0");
}
return s.join(dec);
}
function getDuration(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,
getPx,
sleep,
os,
sys,
getWindowInfo,
random,
guid,
$parent,
addStyle,
addUnit,
deepClone,
deepMerge,
shallowMerge,
error,
randomArray,
timeFormat,
timeFrom,
trim,
queryParams,
toast,
type2icon,
priceFormat,
getDuration,
padZero,
formValidate,
getProperty,
setProperty,
page,
pages,
getValueByPath
// setConfig
};
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;
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;
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;
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,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"
}
};
const NoticeBar = {
// noticeBar
noticeBar: {
text: [],
direction: "row",
step: false,
icon: "volume",
mode: "",
color: "#f9ae3d",
bgColor: "#fdf6ec",
speed: 80,
fontSize: 14,
duration: 2e3,
disableTouch: true,
url: "",
linkType: "navigateTo",
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,
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$8 = {
...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, configs.config || {});
shallowMerge(props$8, configs.props || {});
shallowMerge(color$3, configs.color || {});
shallowMerge(zIndex, configs.zIndex || {});
}
if (uni && uni.upuiParams) {
formatAppLog("log", "at node_modules/uview-plus/libs/config/props.js:204", "setting uview-plus");
let temp = uni.upuiParams();
if (temp.httpIns) {
temp.httpIns(http);
}
if (temp.options) {
setConfig$1(temp.options);
}
}
const props$7 = defineMixin({
props: {
// 图标类名
name: {
type: String,
default: () => props$8.icon.name
},
// 图标颜色,可接受主题色
color: {
type: String,
default: () => props$8.icon.color
},
// 字体大小单位px
size: {
type: [String, Number],
default: () => props$8.icon.size
},
// 是否显示粗体
bold: {
type: Boolean,
default: () => props$8.icon.bold
},
// 点击图标的时候传递事件出去的index用于区分点击了哪一个
index: {
type: [String, Number],
default: () => props$8.icon.index
},
// 触摸图标时的类名
hoverClass: {
type: String,
default: () => props$8.icon.hoverClass
},
// 自定义扩展前缀,方便用户扩展自己的图标库
customPrefix: {
type: String,
default: () => props$8.icon.customPrefix
},
// 图标右边或者下面的文字
label: {
type: [String, Number],
default: () => props$8.icon.label
},
// label的位置只能右边或者下边
labelPos: {
type: String,
default: () => props$8.icon.labelPos
},
// label的大小
labelSize: {
type: [String, Number],
default: () => props$8.icon.labelSize
},
// label的颜色
labelColor: {
type: String,
default: () => props$8.icon.labelColor
},
// label与图标的距离
space: {
type: [String, Number],
default: () => props$8.icon.space
},
// 图片的mode
imgMode: {
type: String,
default: () => props$8.icon.imgMode
},
// 用于显示图片小图标时,图片的宽度
width: {
type: [String, Number],
default: () => props$8.icon.width
},
// 用于显示图片小图标时,图片的高度
height: {
type: [String, Number],
default: () => props$8.icon.height
},
// 用于解决某些情况下,让图标垂直居中的用途
top: {
type: [String, Number],
default: () => props$8.icon.top
},
// 是否阻止事件传播
stop: {
type: Boolean,
default: () => props$8.icon.stop
}
}
});
const mpMixin = defineMixin({});
class Router {
constructor() {
this.config = {
type: "navigateTo",
url: "",
delta: 1,
// navigateBack页面后退时,回退的层数
params: {},
// 传递的参数
animationType: "pop-in",
// 窗口动画,只在APP有效
animationDuration: 300,
// 窗口动画持续时间,单位毫秒,只在APP有效
intercept: false
// 是否需要拦截
};
this.route = this.route.bind(this);
}
// 判断url前面是否有"/",如果没有则加上,否则无法跳转
addRootPath(url2) {
return url2[0] === "/" ? url2 : `/${url2}`;
}
// 整合路由参数
mixinParam(url2, params) {
url2 = url2 && this.addRootPath(url2);
let query = "";
if (/.*\/.*\?.*=.*/.test(url2)) {
query = queryParams(params, false);
return url2 += `&${query}`;
}
query = queryParams(params);
return url2 += query;
}
// 对外的方法名称
async route(options = {}, params = {}) {
let mergeConfig2 = {};
if (typeof options === "string") {
mergeConfig2.url = this.mixinParam(options, params);
mergeConfig2.type = "navigateTo";
} else {
mergeConfig2 = deepMerge(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(this.config, mergeConfig2);
if (typeof uni.$u.routeIntercept === "function") {
const isNext = await new Promise((resolve, reject) => {
uni.$u.routeIntercept(mergeConfig2, resolve);
});
isNext && this.openPage(mergeConfig2);
} else {
this.openPage(mergeConfig2);
}
}
// 执行路由跳转
openPage(config2) {
const {
url: url2,
type,
delta,
animationType,
animationDuration
} = config2;
if (config2.type == "navigateTo" || config2.type == "to") {
uni.navigateTo({
url: url2,
animationType,
animationDuration
});
}
if (config2.type == "redirectTo" || config2.type == "redirect") {
uni.redirectTo({
url: url2
});
}
if (config2.type == "switchTab" || config2.type == "tab") {
uni.switchTab({
url: url2
});
}
if (config2.type == "reLaunch" || config2.type == "launch") {
uni.reLaunch({
url: url2
});
}
if (config2.type == "navigateBack" || config2.type == "back") {
uni.navigateBack({
delta
});
}
}
}
const route = new Router().route;
const mixin = defineMixin({
// 定义每个组件都可能需要用到的外部样式以及类名
props: {
// 每个组件都有的父组件传递的样式,可以为字符串或者对象形式
customStyle: {
type: [Object, String],
default: () => ({})
},
customClass: {
type: String,
default: ""
},
// 跳转的页面路径
url: {
type: String,
default: ""
},
// 页面跳转的类型
linkType: {
type: String,
default: "navigateTo"
}
},
data() {
return {};
},
onLoad() {
this.$u.getRect = this.$uGetRect;
},
created() {
this.$u.getRect = this.$uGetRect;
},
computed: {
// 在2.x版本中将会把$u挂载到uni对象下导致在模板中无法使用uni.$u.xxx形式
// 所以这里通过computed计算属性将其附加到this.$u上就可以在模板或者js中使用uni.$u.xxx
// 只在nvue环境通过此方式引入完整的$u其他平台会出现性能问题非nvue则按需引入主要原因是props过大
$u() {
return deepMerge(uni.$u, {
props: void 0,
http: void 0,
mixin: void 0
});
},
/**
* 生成bem规则类名
* 由于微信小程序H5nvue之间绑定class的差异无法通过:class="[bem()]"的形式进行同用
* 故采用如下折中做法,最后返回的是数组(一般平台)或字符串(支付宝和字节跳动平台),类似['a', 'b', 'c']或'a b c'的形式
* @param {String} name 组件名称
* @param {Array} fixed 一直会存在的类名
* @param {Array} change 会根据变量值为true或者false而出现或者隐藏的类名
* @returns {Array|string}
*/
bem() {
return function(name, fixed, change) {
const prefix = `u-${name}--`;
const classes = {};
if (fixed) {
fixed.map((item) => {
classes[prefix + this[item]] = true;
});
}
if (change) {
change.map((item) => {
this[item] ? classes[prefix + item] = this[item] : delete classes[prefix + item];
});
}
return Object.keys(classes);
};
}
},
methods: {
// 跳转某一个页面
openPage(urlKey = "url") {
const url2 = this[urlKey];
if (url2) {
route({ type: this.linkType, url: url2 });
}
},
navTo(url2 = "", linkType = "navigateTo") {
route({ type: this.linkType, url: url2 });
},
// 查询节点信息
// 目前此方法在支付宝小程序中无法获取组件跟接点的尺寸为支付宝的bug(2020-07-21)
// 解决办法为在组件根部再套一个没有任何作用的view元素
$uGetRect(selector, all) {
return new Promise((resolve) => {
uni.createSelectorQuery().in(this)[all ? "selectAll" : "select"](selector).boundingClientRect((rect) => {
if (all && Array.isArray(rect) && rect.length) {
resolve(rect);
}
if (!all && rect) {
resolve(rect);
}
}).exec();
});
},
getParentData(parentName = "") {
if (!this.parent)
this.parent = {};
this.parent = $parent.call(this, parentName);
if (this.parent.children) {
this.parent.children.indexOf(this) === -1 && this.parent.children.push(this);
}
if (this.parent && this.parentData) {
Object.keys(this.parentData).map((key) => {
this.parentData[key] = this.parent[key];
});
}
},
// 阻止事件冒泡
preventEvent(e) {
e && typeof e.stopPropagation === "function" && e.stopPropagation();
},
// 空操作
noop(e) {
this.preventEvent(e);
}
},
onReachBottom() {
uni.$emit("uOnReachBottom");
},
beforeUnmount() {
if (this.parent && test.array(this.parent.children)) {
const childrenList = this.parent.children;
childrenList.map((child, index2) => {
if (child === this) {
childrenList.splice(index2, 1);
}
});
}
}
});
const _export_sfc = (sfc, props2) => {
const target = sfc.__vccOpts || sfc;
for (const [key, val] of props2) {
target[key] = val;
}
return target;
};
const _sfc_main$9 = {
name: "u-icon",
beforeCreate() {
},
data() {
return {};
},
emits: ["click"],
mixins: [mpMixin, mixin, props$7],
computed: {
uClasses() {
let classes = [];
classes.push(this.customPrefix + "-" + this.name);
if (this.customPrefix == "uicon") {
classes.push("u-iconfont");
} else {
classes.push(this.customPrefix);
}
if (this.color && config.type.includes(this.color))
classes.push("u-icon__icon--" + this.color);
return classes;
},
iconStyle() {
let style = {};
style = {
fontSize: addUnit(this.size),
lineHeight: addUnit(this.size),
fontWeight: this.bold ? "bold" : "normal",
// 某些特殊情况需要设置一个到顶部的距离,才能更好的垂直居中
top: addUnit(this.top)
};
if (this.color && !config.type.includes(this.color))
style.color = this.color;
return style;
},
// 判断传入的name属性是否图片路径只要带有"/"均认为是图片形式
isImg() {
return this.name.indexOf("/") !== -1;
},
imgStyle() {
let style = {};
style.width = this.width ? addUnit(this.width) : addUnit(this.size);
style.height = this.height ? addUnit(this.height) : addUnit(this.size);
return style;
},
// 通过图标名,查找对应的图标
icon() {
if (this.customPrefix !== "uicon") {
return this.customIcons[this.customPrefix + "-" + this.name] || this.name;
}
return icons["uicon-" + this.name] || this.name;
}
},
methods: {
addStyle,
addUnit,
clickHandler(e) {
this.$emit("click", this.index, e);
this.stop && this.preventEvent(e);
}
}
};
function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock(
"view",
{
class: vue.normalizeClass(["u-icon", ["u-icon--" + _ctx.labelPos]]),
onClick: _cache[0] || (_cache[0] = (...args) => $options.clickHandler && $options.clickHandler(...args))
},
[
$options.isImg ? (vue.openBlock(), vue.createElementBlock("image", {
key: 0,
class: "u-icon__img",
src: _ctx.name,
mode: _ctx.imgMode,
style: vue.normalizeStyle([$options.imgStyle, $options.addStyle(_ctx.customStyle)])
}, null, 12, ["src", "mode"])) : (vue.openBlock(), vue.createElementBlock("text", {
key: 1,
class: vue.normalizeClass(["u-icon__icon", $options.uClasses]),
style: vue.normalizeStyle([$options.iconStyle, $options.addStyle(_ctx.customStyle)]),
"hover-class": _ctx.hoverClass
}, vue.toDisplayString($options.icon), 15, ["hover-class"])),
vue.createCommentVNode(' 这里进行空字符串判断如果仅仅是v-if="label"可能会出现传递0的时候结果也无法显示 '),
_ctx.label !== "" ? (vue.openBlock(), vue.createElementBlock(
"text",
{
key: 2,
class: "u-icon__label",
style: vue.normalizeStyle({
color: _ctx.labelColor,
fontSize: $options.addUnit(_ctx.labelSize),
marginLeft: _ctx.labelPos == "right" ? $options.addUnit(_ctx.space) : 0,
marginTop: _ctx.labelPos == "bottom" ? $options.addUnit(_ctx.space) : 0,
marginRight: _ctx.labelPos == "left" ? $options.addUnit(_ctx.space) : 0,
marginBottom: _ctx.labelPos == "top" ? $options.addUnit(_ctx.space) : 0
})
},
vue.toDisplayString(_ctx.label),
5
/* TEXT, STYLE */
)) : vue.createCommentVNode("v-if", true)
],
2
/* CLASS */
);
}
const __easycom_0$1 = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["render", _sfc_render$7], ["__scopeId", "data-v-1c933a9a"], ["__file", "D:/GitWorkPlace/caseDataBase/node_modules/uview-plus/components/u-icon/u-icon.vue"]]);
const props$6 = defineMixin({
props: {
// 文字颜色
color: {
type: String,
default: () => props$8.link.color
},
// 字体大小单位px
fontSize: {
type: [String, Number],
default: () => props$8.link.fontSize
},
// 是否显示下划线
underLine: {
type: Boolean,
default: () => props$8.link.underLine
},
// 要跳转的链接
href: {
type: String,
default: () => props$8.link.href
},
// 小程序中复制到粘贴板的提示语
mpTips: {
type: String,
default: () => props$8.link.mpTips
},
// 下划线颜色
lineColor: {
type: String,
default: () => props$8.link.lineColor
},
// 超链接的问题不使用slot形式传入是因为nvue下无法修改颜色
text: {
type: String,
default: () => props$8.link.text
}
}
});
const _sfc_main$8 = {
name: "u-link",
mixins: [mpMixin, mixin, props$6],
computed: {
linkStyle() {
const style = {
color: this.color,
fontSize: addUnit(this.fontSize),
// line-height设置为比字体大小多2px
lineHeight: addUnit(getPx(this.fontSize) + 2),
textDecoration: this.underLine ? "underline" : "none"
};
return style;
}
},
emits: ["click"],
methods: {
addStyle,
openLink() {
plus.runtime.openURL(this.href);
this.$emit("click");
}
}
};
function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock(
"text",
{
class: "u-link",
onClick: _cache[0] || (_cache[0] = vue.withModifiers((...args) => $options.openLink && $options.openLink(...args), ["stop"])),
style: vue.normalizeStyle([$options.linkStyle, $options.addStyle(_ctx.customStyle)])
},
vue.toDisplayString(_ctx.text),
5
/* TEXT, STYLE */
);
}
const __easycom_1$3 = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["render", _sfc_render$6], ["__scopeId", "data-v-dedad317"], ["__file", "D:/GitWorkPlace/caseDataBase/node_modules/uview-plus/components/u-link/u-link.vue"]]);
const props$5 = defineMixin({
props: {
// 主题颜色
type: {
type: String,
default: () => props$8.text.type
},
// 是否显示
show: {
type: Boolean,
default: () => props$8.text.show
},
// 显示的值
text: {
type: [String, Number],
default: () => props$8.text.text
},
// 前置图标
prefixIcon: {
type: String,
default: () => props$8.text.prefixIcon
},
// 后置图标
suffixIcon: {
type: String,
default: () => props$8.text.suffixIcon
},
// 文本处理的匹配模式
// text-普通文本price-价格phone-手机号name-姓名date-日期link-超链接
mode: {
type: String,
default: () => props$8.text.mode
},
// mode=link下配置的链接
href: {
type: String,
default: () => props$8.text.href
},
// 格式化规则
format: {
type: [String, Function],
default: () => props$8.text.format
},
// mode=phone时点击文本是否拨打电话
call: {
type: Boolean,
default: () => props$8.text.call
},
// 小程序的打开方式
openType: {
type: String,
default: () => props$8.text.openType
},
// 是否粗体默认normal
bold: {
type: Boolean,
default: () => props$8.text.bold
},
// 是否块状
block: {
type: Boolean,
default: () => props$8.text.block
},
// 文本显示的行数,如果设置,超出此行数,将会显示省略号
lines: {
type: [String, Number],
default: () => props$8.text.lines
},
// 文本颜色
color: {
type: String,
default: () => props$8.text.color
},
// 字体大小
size: {
type: [String, Number],
default: () => props$8.text.size
},
// 图标的样式
iconStyle: {
type: [Object, String],
default: () => props$8.text.iconStyle
},
// 文字装饰,下划线,中划线等,可选值 none|underline|line-through
decoration: {
tepe: String,
default: () => props$8.text.decoration
},
// 外边距,对象、字符串,数值形式均可
margin: {
type: [Object, String, Number],
default: () => props$8.text.margin
},
// 文本行高
lineHeight: {
type: [String, Number],
default: () => props$8.text.lineHeight
},
// 文本对齐方式可选值left|center|right
align: {
type: String,
default: () => props$8.text.align
},
// 文字换行可选值break-word|normal|anywhere
wordWrap: {
type: String,
default: () => props$8.text.wordWrap
},
// 占满剩余空间
flex1: {
type: Boolean,
default: () => props$8.text.flex1
}
}
});
const value = {
computed: {
// 经处理后需要显示的值
value() {
const {
text,
mode,
format,
href
} = this;
if (mode === "price") {
if (!/^\d+(\.\d+)?$/.test(text)) {
error("金额模式下text参数需要为金额格式");
}
if (test.func(format)) {
return format(text);
}
return priceFormat(text, 2);
}
if (mode === "date") {
!test.date(text) && error("日期模式下text参数需要为日期或时间戳格式");
if (test.func(format)) {
return format(text);
}
if (format) {
return timeFormat(text, format);
}
return timeFormat(text, "yyyy-mm-dd");
}
if (mode === "phone") {
if (test.func(format)) {
return format(text);
}
if (format === "encrypt") {
return `${text.substr(0, 3)}****${text.substr(7)}`;
}
return text;
}
if (mode === "name") {
!(typeof text === "string") && error("姓名模式下text参数需要为字符串格式");
if (test.func(format)) {
return format(text);
}
if (format === "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 _sfc_main$7 = {
name: "up-text",
mixins: [mpMixin, mixin, value, props$5],
emits: ["click"],
computed: {
wrapStyle() {
let style = {
margin: this.margin,
justifyContent: this.align === "left" ? "flex-start" : this.align === "center" ? "center" : "flex-end"
};
if (this.flex1) {
style.flex = 1;
style.width = "100%";
}
return style;
},
valueStyle() {
const style = {
textDecoration: this.decoration,
fontWeight: this.bold ? "bold" : "normal",
wordWrap: this.wordWrap,
fontSize: addUnit(this.size)
};
!this.type && (style.color = this.color);
this.isNvue && this.lines && (style.lines = this.lines);
this.lineHeight && (style.lineHeight = addUnit(this.lineHeight));
!this.isNvue && this.block && (style.display = "block");
return deepMerge(style, addStyle(this.customStyle));
},
isNvue() {
let nvue = false;
return nvue;
},
isMp() {
let mp = false;
return mp;
}
},
data() {
return {};
},
methods: {
addStyle,
clickHandler(e) {
if (this.call && this.mode === "phone") {
uni.makePhoneCall({
phoneNumber: this.text
});
}
this.$emit("click", e);
}
}
};
function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$1);
const _component_u_link = resolveEasycom(vue.resolveDynamicComponent("u-link"), __easycom_1$3);
return _ctx.show ? (vue.openBlock(), vue.createElementBlock(
"view",
{
key: 0,
class: vue.normalizeClass(["u-text", [_ctx.customClass]]),
style: vue.normalizeStyle($options.wrapStyle),
onClick: _cache[6] || (_cache[6] = (...args) => $options.clickHandler && $options.clickHandler(...args))
},
[
_ctx.mode === "price" ? (vue.openBlock(), vue.createElementBlock(
"text",
{
key: 0,
class: vue.normalizeClass(["u-text__price", _ctx.type && `u-text__value--${_ctx.type}`]),
style: vue.normalizeStyle([$options.valueStyle])
},
"¥",
6
/* CLASS, STYLE */
)) : vue.createCommentVNode("v-if", true),
_ctx.prefixIcon ? (vue.openBlock(), vue.createElementBlock("view", {
key: 1,
class: "u-text__prefix-icon"
}, [
vue.createVNode(_component_u_icon, {
name: _ctx.prefixIcon,
customStyle: $options.addStyle(_ctx.iconStyle)
}, null, 8, ["name", "customStyle"])
])) : vue.createCommentVNode("v-if", true),
_ctx.mode === "link" ? (vue.openBlock(), vue.createBlock(_component_u_link, {
key: 2,
class: vue.normalizeClass(["u-text__value", [_ctx.type && `u-text__value--${_ctx.type}`, _ctx.lines && `u-line-${_ctx.lines}`]]),
style: vue.normalizeStyle({ fontWeight: $options.valueStyle.fontWeight, wordWrap: $options.valueStyle.wordWrap, fontSize: $options.valueStyle.fontSize }),
text: _ctx.value,
href: _ctx.href,
underLine: ""
}, null, 8, ["style", "class", "text", "href"])) : _ctx.openType && $options.isMp ? (vue.openBlock(), vue.createElementBlock("button", {
key: 3,
class: "u-reset-button u-text__value",
style: vue.normalizeStyle([$options.valueStyle]),
"data-index": _ctx.index,
openType: _ctx.openType,
onGetuserinfo: _cache[0] || (_cache[0] = (...args) => _ctx.onGetUserInfo && _ctx.onGetUserInfo(...args)),
onContact: _cache[1] || (_cache[1] = (...args) => _ctx.onContact && _ctx.onContact(...args)),
onGetphonenumber: _cache[2] || (_cache[2] = (...args) => _ctx.onGetPhoneNumber && _ctx.onGetPhoneNumber(...args)),
onError: _cache[3] || (_cache[3] = (...args) => _ctx.onError && _ctx.onError(...args)),
onLaunchapp: _cache[4] || (_cache[4] = (...args) => _ctx.onLaunchApp && _ctx.onLaunchApp(...args)),
onOpensetting: _cache[5] || (_cache[5] = (...args) => _ctx.onOpenSetting && _ctx.onOpenSetting(...args)),
lang: _ctx.lang,
"session-from": _ctx.sessionFrom,
"send-message-title": _ctx.sendMessageTitle,
"send-message-path": _ctx.sendMessagePath,
"send-message-img": _ctx.sendMessageImg,
"show-message-card": _ctx.showMessageCard,
"app-parameter": _ctx.appParameter
}, vue.toDisplayString(_ctx.value), 45, ["data-index", "openType", "lang", "session-from", "send-message-title", "send-message-path", "send-message-img", "show-message-card", "app-parameter"])) : (vue.openBlock(), vue.createElementBlock(
"text",
{
key: 4,
class: vue.normalizeClass(["u-text__value", [
_ctx.type && `u-text__value--${_ctx.type}`,
_ctx.lines && `u-line-${_ctx.lines}`
]]),
style: vue.normalizeStyle([$options.valueStyle])
},
vue.toDisplayString(_ctx.value),
7
/* TEXT, CLASS, STYLE */
)),
_ctx.suffixIcon ? (vue.openBlock(), vue.createElementBlock("view", {
key: 5,
class: "u-text__suffix-icon"
}, [
vue.createVNode(_component_u_icon, {
name: _ctx.suffixIcon,
customStyle: $options.addStyle(_ctx.iconStyle)
}, null, 8, ["name", "customStyle"])
])) : vue.createCommentVNode("v-if", true)
],
6
/* CLASS, STYLE */
)) : vue.createCommentVNode("v-if", true);
}
const __easycom_1$2 = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["render", _sfc_render$5], ["__scopeId", "data-v-5fec1d8b"], ["__file", "D:/GitWorkPlace/caseDataBase/node_modules/uview-plus/components/u-text/u-text.vue"]]);
const props$4 = defineMixin({
props: {
// 头像图片路径(不能为相对路径)
src: {
type: String,
default: () => props$8.avatar.src
},
// 头像形状circle-圆形square-方形
shape: {
type: String,
default: () => props$8.avatar.shape
},
// 头像尺寸
size: {
type: [String, Number],
default: () => props$8.avatar.size
},
// 裁剪模式
mode: {
type: String,
default: () => props$8.avatar.mode
},
// 显示的文字
text: {
type: String,
default: () => props$8.avatar.text
},
// 背景色
bgColor: {
type: String,
default: () => props$8.avatar.bgColor
},
// 文字颜色
color: {
type: String,
default: () => props$8.avatar.color
},
// 文字大小
fontSize: {
type: [String, Number],
default: () => props$8.avatar.fontSize
},
// 显示的图标
icon: {
type: String,
default: () => props$8.avatar.icon
},
// 显示小程序头像只对百度微信QQ小程序有效
mpAvatar: {
type: Boolean,
default: () => props$8.avatar.mpAvatar
},
// 是否使用随机背景色
randomBgColor: {
type: Boolean,
default: () => props$8.avatar.randomBgColor
},
// 加载失败的默认头像(组件有内置默认图片)
defaultUrl: {
type: String,
default: () => props$8.avatar.defaultUrl
},
// 如果配置了randomBgColor为true且配置了此值则从默认的背景色数组中取出对应索引的颜色值取值0-19之间
colorIndex: {
type: [String, Number],
// 校验参数规则索引在0-19之间
validator(n) {
return test.range(n, [0, 19]) || n === "";
},
default: () => props$8.avatar.colorIndex
},
// 组件标识符
name: {
type: String,
default: () => props$8.avatar.name
}
}
});
const base64Avatar = "data:image/jpg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA8AAD/4QMraHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjREMEQwRkY0RjgwNDExRUE5OTY2RDgxODY3NkJFODMxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjREMEQwRkY1RjgwNDExRUE5OTY2RDgxODY3NkJFODMxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NEQwRDBGRjJGODA0MTFFQTk5NjZEODE4Njc2QkU4MzEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NEQwRDBGRjNGODA0MTFFQTk5NjZEODE4Njc2QkU4MzEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAGBAQEBQQGBQUGCQYFBgkLCAYG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";
const _sfc_main$6 = {
name: "u-avatar",
mixins: [mpMixin, mixin, props$4],
data() {
return {
// 如果配置randomBgColor参数为true在图标或者文字的模式下会随机从中取出一个颜色值当做背景色
colors: [
"#ffb34b",
"#f2bba9",
"#f7a196",
"#f18080",
"#88a867",
"#bfbf39",
"#89c152",
"#94d554",
"#f19ec2",
"#afaae4",
"#e1b0df",
"#c38cc1",
"#72dcdc",
"#9acdcb",
"#77b1cc",
"#448aca",
"#86cefa",
"#98d1ee",
"#73d1f1",
"#80a7dc"
],
avatarUrl: this.src,
allowMp: false
};
},
watch: {
// 监听头像src的变化赋值给内部的avatarUrl变量因为图片加载失败时需要修改图片的src为默认值
// 而组件内部不能直接修改props的值所以需要一个中间变量
src: {
immediate: true,
handler(newVal) {
this.avatarUrl = newVal;
if (!newVal) {
this.errorHandler();
}
}
}
},
computed: {
imageStyle() {
const style = {};
return style;
}
},
created() {
this.init();
},
emits: ["click"],
methods: {
addStyle,
addUnit,
random,
init() {
},
// 判断传入的name属性是否图片路径只要带有"/"均认为是图片形式
isImg() {
return this.src.indexOf("/") !== -1;
},
// 图片加载时失败时触发
errorHandler() {
this.avatarUrl = this.defaultUrl || base64Avatar;
},
clickHandler(e) {
this.$emit("click", this.name, e);
}
}
};
function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$1);
const _component_up_text = resolveEasycom(vue.resolveDynamicComponent("up-text"), __easycom_1$2);
return vue.openBlock(), vue.createElementBlock(
"view",
{
class: vue.normalizeClass(["u-avatar", [`u-avatar--${_ctx.shape}`]]),
style: vue.normalizeStyle([{
backgroundColor: _ctx.text || _ctx.icon ? _ctx.randomBgColor ? $data.colors[_ctx.colorIndex !== "" ? _ctx.colorIndex : $options.random(0, 19)] : _ctx.bgColor : "transparent",
width: $options.addUnit(_ctx.size),
height: $options.addUnit(_ctx.size)
}, $options.addStyle(_ctx.customStyle)]),
onClick: _cache[1] || (_cache[1] = (...args) => $options.clickHandler && $options.clickHandler(...args))
},
[
vue.renderSlot(_ctx.$slots, "default", {}, () => [
_ctx.mpAvatar && $data.allowMp ? (vue.openBlock(), vue.createElementBlock(
vue.Fragment,
{ key: 0 },
[],
64
/* STABLE_FRAGMENT */
)) : _ctx.icon ? (vue.openBlock(), vue.createBlock(_component_u_icon, {
key: 1,
name: _ctx.icon,
size: _ctx.fontSize,
color: _ctx.color
}, null, 8, ["name", "size", "color"])) : _ctx.text ? (vue.openBlock(), vue.createBlock(_component_up_text, {
key: 2,
text: _ctx.text,
size: _ctx.fontSize,
color: _ctx.color,
align: "center",
customStyle: "justify-content: center"
}, null, 8, ["text", "size", "color"])) : (vue.openBlock(), vue.createElementBlock("image", {
key: 3,
class: vue.normalizeClass(["u-avatar__image", [`u-avatar__image--${_ctx.shape}`]]),
src: $data.avatarUrl || _ctx.defaultUrl,
mode: _ctx.mode,
onError: _cache[0] || (_cache[0] = (...args) => $options.errorHandler && $options.errorHandler(...args)),
style: vue.normalizeStyle([{
width: $options.addUnit(_ctx.size),
height: $options.addUnit(_ctx.size)
}])
}, null, 46, ["src", "mode"]))
], true)
],
6
/* CLASS, STYLE */
);
}
const __easycom_0 = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["render", _sfc_render$4], ["__scopeId", "data-v-14a988f2"], ["__file", "D:/GitWorkPlace/caseDataBase/node_modules/uview-plus/components/u-avatar/u-avatar.vue"]]);
const props$3 = defineMixin({
props: {
color: {
type: String,
default: () => props$8.line.color
},
// 长度竖向时表现为高度横向时表现为长度可以为百分比带px单位的值等
length: {
type: [String, Number],
default: () => props$8.line.length
},
// 线条方向col-竖向row-横向
direction: {
type: String,
default: () => props$8.line.direction
},
// 是否显示细边框
hairline: {
type: Boolean,
default: () => props$8.line.hairline
},
// 线条与上下左右元素的间距,字符串形式,如"30px"、"20px 30px"
margin: {
type: [String, Number],
default: () => props$8.line.margin
},
// 是否虚线true-虚线false-实线
dashed: {
type: Boolean,
default: () => props$8.line.dashed
}
}
});
const _sfc_main$5 = {
name: "u-line",
mixins: [mpMixin, mixin, props$3],
computed: {
lineStyle() {
const style = {};
style.margin = this.margin;
if (this.direction === "row") {
style.borderBottomWidth = "1px";
style.borderBottomStyle = this.dashed ? "dashed" : "solid";
style.width = addUnit(this.length);
if (this.hairline)
style.transform = "scaleY(0.5)";
} else {
style.borderLeftWidth = "1px";
style.borderLeftStyle = this.dashed ? "dashed" : "solid";
style.height = addUnit(this.length);
if (this.hairline)
style.transform = "scaleX(0.5)";
}
style.borderColor = this.color;
return deepMerge(style, addStyle(this.customStyle));
}
}
};
function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock(
"view",
{
class: "u-line",
style: vue.normalizeStyle([$options.lineStyle])
},
null,
4
/* STYLE */
);
}
const __easycom_1$1 = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["render", _sfc_render$3], ["__scopeId", "data-v-bbd9963c"], ["__file", "D:/GitWorkPlace/caseDataBase/node_modules/uview-plus/components/u-line/u-line.vue"]]);
const props$2 = defineMixin({
props: {
// 标题
title: {
type: [String, Number],
default: () => props$8.cell.title
},
// 标题下方的描述信息
label: {
type: [String, Number],
default: () => props$8.cell.label
},
// 右侧的内容
value: {
type: [String, Number],
default: () => props$8.cell.value
},
// 左侧图标名称,或者图片链接(本地文件建议使用绝对地址)
icon: {
type: String,
default: () => props$8.cell.icon
},
// 是否禁用cell
disabled: {
type: Boolean,
default: () => props$8.cell.disabled
},
// 是否显示下边框
border: {
type: Boolean,
default: () => props$8.cell.border
},
// 内容是否垂直居中(主要是针对右侧的value部分)
center: {
type: Boolean,
default: () => props$8.cell.center
},
// 点击后跳转的URL地址
url: {
type: String,
default: () => props$8.cell.url
},
// 链接跳转的方式内部使用的是uView封装的route方法可能会进行拦截操作
linkType: {
type: String,
default: () => props$8.cell.linkType
},
// 是否开启点击反馈(表现为点击时加上灰色背景)
clickable: {
type: Boolean,
default: () => props$8.cell.clickable
},
// 是否展示右侧箭头并开启点击反馈
isLink: {
type: Boolean,
default: () => props$8.cell.isLink
},
// 是否显示表单状态下的必填星号(此组件可能会内嵌入input组件)
required: {
type: Boolean,
default: () => props$8.cell.required
},
// 右侧的图标箭头
rightIcon: {
type: String,
default: () => props$8.cell.rightIcon
},
// 右侧箭头的方向可选值为leftupdown
arrowDirection: {
type: String,
default: () => props$8.cell.arrowDirection
},
// 左侧图标样式
iconStyle: {
type: [Object, String],
default: () => {
return props$8.cell.iconStyle;
}
},
// 右侧箭头图标的样式
rightIconStyle: {
type: [Object, String],
default: () => {
return props$8.cell.rightIconStyle;
}
},
// 标题的样式
titleStyle: {
type: [Object, String],
default: () => {
return props$8.cell.titleStyle;
}
},
// 单位元的大小可选值为large
size: {
type: String,
default: () => props$8.cell.size
},
// 点击cell是否阻止事件传播
stop: {
type: Boolean,
default: () => props$8.cell.stop
},
// 标识符cell被点击时返回
name: {
type: [Number, String],
default: () => props$8.cell.name
}
}
});
const _sfc_main$4 = {
name: "u-cell",
data() {
return {};
},
mixins: [mpMixin, mixin, props$2],
computed: {
titleTextStyle() {
return addStyle(this.titleStyle);
}
},
emits: ["click"],
methods: {
addStyle,
testEmpty: test.empty,
// 点击cell
clickHandler(e) {
if (this.disabled)
return;
this.$emit("click", {
name: this.name
});
this.openPage();
this.stop && this.preventEvent(e);
}
}
};
function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$1);
const _component_u_line = resolveEasycom(vue.resolveDynamicComponent("u-line"), __easycom_1$1);
return vue.openBlock(), vue.createElementBlock("view", {
class: vue.normalizeClass(["u-cell", [_ctx.customClass]]),
style: vue.normalizeStyle([$options.addStyle(_ctx.customStyle)]),
"hover-class": !_ctx.disabled && (_ctx.clickable || _ctx.isLink) ? "u-cell--clickable" : "",
"hover-stay-time": 250,
onClick: _cache[0] || (_cache[0] = (...args) => $options.clickHandler && $options.clickHandler(...args))
}, [
vue.createElementVNode(
"view",
{
class: vue.normalizeClass(["u-cell__body", [_ctx.center && "u-cell--center", _ctx.size === "large" && "u-cell__body--large"]])
},
[
vue.createElementVNode("view", { class: "u-cell__body__content" }, [
_ctx.$slots.icon || _ctx.icon ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "u-cell__left-icon-wrap"
}, [
_ctx.$slots.icon ? vue.renderSlot(_ctx.$slots, "icon", { key: 0 }, void 0, true) : (vue.openBlock(), vue.createBlock(_component_u_icon, {
key: 1,
name: _ctx.icon,
"custom-style": _ctx.iconStyle,
size: _ctx.size === "large" ? 22 : 18
}, null, 8, ["name", "custom-style", "size"]))
])) : vue.createCommentVNode("v-if", true),
vue.createElementVNode("view", { class: "u-cell__title" }, [
vue.createCommentVNode(" 将slot与默认内容用if/else分开主要是因为微信小程序不支持slot嵌套传递这样才能解决collapse组件的slot不失效问题label暂时未用到。 "),
_ctx.$slots.title || !_ctx.title ? vue.renderSlot(_ctx.$slots, "title", { key: 0 }, void 0, true) : (vue.openBlock(), vue.createElementBlock(
"text",
{
key: 1,
class: vue.normalizeClass(["u-cell__title-text", [_ctx.required && "u-cell--required", _ctx.disabled && "u-cell--disabled", _ctx.size === "large" && "u-cell__title-text--large"]]),
style: vue.normalizeStyle([$options.titleTextStyle])
},
vue.toDisplayString(_ctx.title),
7
/* TEXT, CLASS, STYLE */
)),
vue.renderSlot(_ctx.$slots, "label", {}, () => [
_ctx.label ? (vue.openBlock(), vue.createElementBlock(
"text",
{
key: 0,
class: vue.normalizeClass(["u-cell__label", [_ctx.disabled && "u-cell--disabled", _ctx.size === "large" && "u-cell__label--large"]])
},
vue.toDisplayString(_ctx.label),
3
/* TEXT, CLASS */
)) : vue.createCommentVNode("v-if", true)
], true)
])
]),
vue.renderSlot(_ctx.$slots, "value", {}, () => [
!$options.testEmpty(_ctx.value) ? (vue.openBlock(), vue.createElementBlock(
"text",
{
key: 0,
class: vue.normalizeClass(["u-cell__value", [_ctx.disabled && "u-cell--disabled", _ctx.size === "large" && "u-cell__value--large"]])
},
vue.toDisplayString(_ctx.value),
3
/* TEXT, CLASS */
)) : vue.createCommentVNode("v-if", true)
], true),
_ctx.$slots["right-icon"] || _ctx.isLink ? (vue.openBlock(), vue.createElementBlock(
"view",
{
key: 0,
class: vue.normalizeClass(["u-cell__right-icon-wrap", [`u-cell__right-icon-wrap--${_ctx.arrowDirection}`]])
},
[
_ctx.rightIcon && !_ctx.$slots["right-icon"] ? (vue.openBlock(), vue.createBlock(_component_u_icon, {
key: 0,
name: _ctx.rightIcon,
"custom-style": _ctx.rightIconStyle,
color: _ctx.disabled ? "#c8c9cc" : "info",
size: _ctx.size === "large" ? 18 : 16
}, null, 8, ["name", "custom-style", "color", "size"])) : vue.renderSlot(_ctx.$slots, "right-icon", { key: 1 }, void 0, true)
],
2
/* CLASS */
)) : vue.createCommentVNode("v-if", true),
_ctx.$slots["righticon"] ? (vue.openBlock(), vue.createElementBlock(
"view",
{
key: 1,
class: vue.normalizeClass(["u-cell__right-icon-wrap", [`u-cell__right-icon-wrap--${_ctx.arrowDirection}`]])
},
[
vue.renderSlot(_ctx.$slots, "righticon", {}, void 0, true)
],
2
/* CLASS */
)) : vue.createCommentVNode("v-if", true)
],
2
/* CLASS */
),
_ctx.border ? (vue.openBlock(), vue.createBlock(_component_u_line, { key: 0 })) : vue.createCommentVNode("v-if", true)
], 14, ["hover-class"]);
}
const __easycom_1 = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["render", _sfc_render$2], ["__scopeId", "data-v-b4243719"], ["__file", "D:/GitWorkPlace/caseDataBase/node_modules/uview-plus/components/u-cell/u-cell.vue"]]);
const props$1 = defineMixin({
props: {
// 用于滚动到指定item
anchor: {
type: [String, Number],
default: () => props$8.listItem.anchor
}
}
});
const _sfc_main$3 = {
name: "u-list-item",
mixins: [mpMixin, mixin, props$1],
data() {
return {
// 节点信息
rect: {},
index: 0,
show: true,
sys: getWindowInfo()
};
},
computed: {},
inject: ["uList"],
watch: {
"uList.innerScrollTop"(n) {
const preLoadScreen = this.uList.preLoadScreen;
const windowHeight = this.sys.windowHeight;
if (n <= windowHeight * preLoadScreen) {
this.parent.updateOffsetFromChild(0);
} else if (this.rect.top <= n - windowHeight * preLoadScreen) {
this.parent.updateOffsetFromChild(this.rect.top);
}
}
},
created() {
this.parent = {};
},
mounted() {
this.init();
},
methods: {
init() {
this.updateParentData();
this.index = this.parent.children.indexOf(this);
this.resize();
},
updateParentData() {
this.getParentData("u-list");
},
resize() {
this.queryRect(`u-list-item-${this.anchor}`).then((size) => {
const lastChild = this.parent.children[this.index - 1];
this.rect = size;
const preLoadScreen = this.uList.preLoadScreen;
const windowHeight = this.sys.windowHeight;
if (lastChild) {
this.rect.top = lastChild.rect.top + lastChild.rect.height;
}
if (size.top >= this.uList.innerScrollTop + (1 + preLoadScreen) * windowHeight)
this.show = false;
});
},
// 查询元素尺寸
queryRect(el) {
return new Promise((resolve) => {
this.$uGetRect(`.${el}`).then((size) => {
resolve(size);
});
});
}
}
};
function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock("view", {
class: vue.normalizeClass(["u-list-item", [`u-list-item-${_ctx.anchor}`]]),
ref: `u-list-item-${_ctx.anchor}`,
anchor: `u-list-item-${_ctx.anchor}`
}, [
vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
], 10, ["anchor"]);
}
const __easycom_2 = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["render", _sfc_render$1], ["__scopeId", "data-v-32197ac9"], ["__file", "D:/GitWorkPlace/caseDataBase/node_modules/uview-plus/components/u-list-item/u-list-item.vue"]]);
const props = defineMixin({
props: {
// 控制是否出现滚动条仅nvue有效
showScrollbar: {
type: Boolean,
default: () => props$8.list.showScrollbar
},
// 距底部多少时触发scrolltolower事件
lowerThreshold: {
type: [String, Number],
default: () => props$8.list.lowerThreshold
},
// 距顶部多少时触发scrolltoupper事件非nvue有效
upperThreshold: {
type: [String, Number],
default: () => props$8.list.upperThreshold
},
// 设置竖向滚动条位置
scrollTop: {
type: [String, Number],
default: () => props$8.list.scrollTop
},
// 控制 onscroll 事件触发的频率仅nvue有效
offsetAccuracy: {
type: [String, Number],
default: () => props$8.list.offsetAccuracy
},
// 启用 flexbox 布局。开启后当前节点声明了display: flex就会成为flex container并作用于其孩子节点仅微信小程序有效
enableFlex: {
type: Boolean,
default: () => props$8.list.enableFlex
},
// 是否按分页模式显示List默认值false
pagingEnabled: {
type: Boolean,
default: () => props$8.list.pagingEnabled
},
// 是否允许List滚动
scrollable: {
type: Boolean,
default: () => props$8.list.scrollable
},
// 值应为某子元素idid不能以数字开头
scrollIntoView: {
type: String,
default: () => props$8.list.scrollIntoView
},
// 在设置滚动条位置时使用动画过渡
scrollWithAnimation: {
type: Boolean,
default: () => props$8.list.scrollWithAnimation
},
// iOS点击顶部状态栏、安卓双击标题栏时滚动条返回顶部只对微信小程序有效
enableBackToTop: {
type: Boolean,
default: () => props$8.list.enableBackToTop
},
// 列表的高度
height: {
type: [String, Number],
default: () => props$8.list.height
},
// 列表宽度
width: {
type: [String, Number],
default: () => props$8.list.width
},
// 列表前后预渲染的屏数1代表一个屏幕的高度1.5代表1个半屏幕高度
preLoadScreen: {
type: [String, Number],
default: () => props$8.list.preLoadScreen
},
// 开启自定义下拉刷新
refresherEnabled: {
type: Boolean,
default: () => false
},
// 设置自定义下拉刷新阈值
refresherThreshold: {
type: Number,
default: () => 45
},
// 设置自定义下拉刷新默认样式,支持设置 blackwhitenonenone 表示不使用默认样式
refresherDefaultStyle: {
type: String,
default: () => "black"
},
// 设置自定义下拉刷新区域背景颜色
refresherBackground: {
type: String,
default: () => "#FFF"
},
// 设置当前下拉刷新状态true 表示下拉刷新已经被触发false 表示下拉刷新未被触发
refresherTriggered: {
type: Boolean,
default: () => false
}
}
});
const _sfc_main$2 = {
name: "u-list",
mixins: [mpMixin, mixin, props],
watch: {
scrollIntoView(n) {
this.scrollIntoViewById(n);
}
},
data() {
return {
// 记录内部滚动的距离
innerScrollTop: 0,
// vue下scroll-view在上拉加载时的偏移值
offset: 0,
sys: getWindowInfo()
};
},
computed: {
listStyle() {
const style = {};
if (this.width != 0)
style.width = addUnit(this.width);
if (this.height != 0)
style.height = addUnit(this.height);
if (!style.height)
style.height = addUnit(this.sys.windowHeight, "px");
return deepMerge(style, addStyle(this.customStyle));
}
},
provide() {
return {
uList: this
};
},
created() {
this.refs = [];
this.children = [];
this.anchors = [];
},
mounted() {
},
emits: [
"scroll",
"scrolltolower",
"scrolltoupper",
"refresherpulling",
"refresherrefresh",
"refresherrestore",
"refresherabort"
],
methods: {
updateOffsetFromChild(top) {
this.offset = top;
},
onScroll(e) {
let scrollTop = 0;
scrollTop = e.detail.scrollTop;
this.innerScrollTop = scrollTop;
this.$emit("scroll", scrollTop);
},
scrollIntoViewById(id) {
},
// 滚动到底部触发事件
scrolltolower(e) {
sleep(30).then(() => {
this.$emit("scrolltolower");
});
},
// 滚动到底部时触发非nvue有效
scrolltoupper(e) {
sleep(30).then(() => {
this.$emit("scrolltoupper");
this.offset = 0;
});
},
refresherpulling(e) {
this.$emit("refresherpulling", e);
},
refresherrefresh(e) {
this.$emit("refresherrefresh", e);
},
refresherrestore(e) {
this.$emit("refresherrestore", e);
},
refresherabort(e) {
this.$emit("refresherabort", e);
}
}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock("scroll-view", {
class: "u-list",
"scroll-into-view": _ctx.scrollIntoView,
style: vue.normalizeStyle([$options.listStyle]),
"scroll-y": _ctx.scrollable,
"scroll-top": Number(_ctx.scrollTop),
"lower-threshold": Number(_ctx.lowerThreshold),
"upper-threshold": Number(_ctx.upperThreshold),
"show-scrollbar": _ctx.showScrollbar,
"enable-back-to-top": _ctx.enableBackToTop,
"scroll-with-animation": _ctx.scrollWithAnimation,
onScroll: _cache[0] || (_cache[0] = (...args) => $options.onScroll && $options.onScroll(...args)),
onScrolltolower: _cache[1] || (_cache[1] = (...args) => $options.scrolltolower && $options.scrolltolower(...args)),
onScrolltoupper: _cache[2] || (_cache[2] = (...args) => $options.scrolltoupper && $options.scrolltoupper(...args)),
"refresher-enabled": _ctx.refresherEnabled,
"refresher-threshold": _ctx.refresherThreshold,
"refresher-default-style": _ctx.refresherDefaultStyle,
"refresher-background": _ctx.refresherBackground,
"refresher-triggered": _ctx.refresherTriggered,
onRefresherpulling: _cache[3] || (_cache[3] = (...args) => $options.refresherpulling && $options.refresherpulling(...args)),
onRefresherrefresh: _cache[4] || (_cache[4] = (...args) => $options.refresherrefresh && $options.refresherrefresh(...args)),
onRefresherrestore: _cache[5] || (_cache[5] = (...args) => $options.refresherrestore && $options.refresherrestore(...args)),
onRefresherabort: _cache[6] || (_cache[6] = (...args) => $options.refresherabort && $options.refresherabort(...args)),
"scroll-anchoring": true
}, [
vue.createElementVNode("view", null, [
vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
])
], 44, ["scroll-into-view", "scroll-y", "scroll-top", "lower-threshold", "upper-threshold", "show-scrollbar", "enable-back-to-top", "scroll-with-animation", "refresher-enabled", "refresher-threshold", "refresher-default-style", "refresher-background", "refresher-triggered"]);
}
const __easycom_3 = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render], ["__scopeId", "data-v-9ad03670"], ["__file", "D:/GitWorkPlace/caseDataBase/node_modules/uview-plus/components/u-list/u-list.vue"]]);
const _sfc_main$1 = {
__name: "index",
setup(__props) {
const indexList = vue.ref([]);
const urls = [
"https://uview-plus.jiangruyi.com/album/1.jpg",
"https://uview-plus.jiangruyi.com/album/2.jpg",
"https://uview-plus.jiangruyi.com/album/3.jpg",
"https://uview-plus.jiangruyi.com/album/4.jpg",
"https://uview-plus.jiangruyi.com/album/5.jpg",
"https://uview-plus.jiangruyi.com/album/6.jpg",
"https://uview-plus.jiangruyi.com/album/7.jpg",
"https://uview-plus.jiangruyi.com/album/8.jpg",
"https://uview-plus.jiangruyi.com/album/9.jpg",
"https://uview-plus.jiangruyi.com/album/10.jpg"
];
onLoad(() => {
loadmore();
});
const scrolltolower = () => {
loadmore();
};
const loadmore = () => {
for (let i = 0; i < 30; i++) {
indexList.value.push({
url: urls[uni.$u.random(0, urls.length - 1)]
});
}
};
return (_ctx, _cache) => {
const _component_up_avatar = resolveEasycom(vue.resolveDynamicComponent("up-avatar"), __easycom_0);
const _component_up_cell = resolveEasycom(vue.resolveDynamicComponent("up-cell"), __easycom_1);
const _component_up_list_item = resolveEasycom(vue.resolveDynamicComponent("up-list-item"), __easycom_2);
const _component_up_list = resolveEasycom(vue.resolveDynamicComponent("up-list"), __easycom_3);
return vue.openBlock(), vue.createElementBlock("view", { class: "u-page" }, [
vue.createVNode(_component_up_list, { onScrolltolower: scrolltolower }, {
default: vue.withCtx(() => [
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList(indexList.value, (item, index2) => {
return vue.openBlock(), vue.createBlock(
_component_up_list_item,
{ key: index2 },
{
default: vue.withCtx(() => [
vue.createVNode(_component_up_cell, {
title: `列表长度-${index2 + 1}`
}, {
icon: vue.withCtx(() => [
vue.createVNode(_component_up_avatar, {
shape: "square",
size: "35",
src: item.url,
customStyle: "margin: -3px 5px -3px 0"
}, null, 8, ["src"])
]),
_: 2
/* DYNAMIC */
}, 1032, ["title"])
]),
_: 2
/* DYNAMIC */
},
1024
/* DYNAMIC_SLOTS */
);
}),
128
/* KEYED_FRAGMENT */
))
]),
_: 1
/* STABLE */
})
]);
};
}
};
const PagesIndexIndex = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__file", "D:/GitWorkPlace/caseDataBase/pages/index/index.vue"]]);
__definePage("pages/index/index", PagesIndexIndex);
const _sfc_main = {
__name: "App",
setup(__props) {
onLaunch(() => {
formatAppLog("log", "at App.vue:4", "App Launch");
});
onShow(() => {
formatAppLog("log", "at App.vue:7", "App Show");
});
onHide(() => {
formatAppLog("log", "at App.vue:10", "App Hide");
});
return () => {
};
}
};
const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "D:/GitWorkPlace/caseDataBase/App.vue"]]);
function colorGradient(startColor = "rgb(0, 0, 0)", endColor = "rgb(255, 255, 255)", step = 10) {
const startRGB = hexToRgb(startColor, false);
const startR = startRGB[0];
const startG = startRGB[1];
const startB = startRGB[2];
const endRGB = hexToRgb(endColor, false);
const endR = endRGB[0];
const endG = endRGB[1];
const endB = endRGB[2];
const sR = (endR - startR) / step;
const sG = (endG - startG) / step;
const sB = (endB - startB) / step;
const colorArr = [];
for (let i = 0; i < step; i++) {
let hex = rgbToHex(`rgb(${Math.round(sR * i + startR)},${Math.round(sG * i + startG)},${Math.round(sB * i + startB)})`);
if (i === 0)
hex = rgbToHex(startColor);
if (i === step - 1)
hex = rgbToHex(endColor);
colorArr.push(hex);
}
return colorArr;
}
function hexToRgb(sColor, str = true) {
const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
sColor = String(sColor).toLowerCase();
if (sColor && reg.test(sColor)) {
if (sColor.length === 4) {
let sColorNew = "#";
for (let i = 1; i < 4; i += 1) {
sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
}
sColor = sColorNew;
}
const sColorChange = [];
for (let i = 1; i < 7; i += 2) {
sColorChange.push(parseInt(`0x${sColor.slice(i, i + 2)}`));
}
if (!str) {
return sColorChange;
}
return `rgb(${sColorChange[0]},${sColorChange[1]},${sColorChange[2]})`;
}
if (/^(rgb|RGB)/.test(sColor)) {
const arr = sColor.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",");
return arr.map((val) => Number(val));
}
return sColor;
}
function rgbToHex(rgb) {
const _this = rgb;
const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
if (/^(rgb|RGB)/.test(_this)) {
const aColor = _this.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",");
let strHex = "#";
for (let i = 0; i < aColor.length; i++) {
let hex = Number(aColor[i]).toString(16);
hex = String(hex).length == 1 ? `${0}${hex}` : hex;
if (hex === "0") {
hex += hex;
}
strHex += hex;
}
if (strHex.length !== 7) {
strHex = _this;
}
return strHex;
}
if (reg.test(_this)) {
const aNum = _this.replace(/#/, "").split("");
if (aNum.length === 6) {
return _this;
}
if (aNum.length === 3) {
let numHex = "#";
for (let i = 0; i < aNum.length; i += 1) {
numHex += aNum[i] + aNum[i];
}
return numHex;
}
} else {
return _this;
}
}
function colorToRgba(color2, alpha) {
color2 = rgbToHex(color2);
const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
let sColor = String(color2).toLowerCase();
if (sColor && reg.test(sColor)) {
if (sColor.length === 4) {
let sColorNew = "#";
for (let i = 1; i < 4; i += 1) {
sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
}
sColor = sColorNew;
}
const sColorChange = [];
for (let i = 1; i < 7; i += 2) {
sColorChange.push(parseInt(`0x${sColor.slice(i, i + 2)}`));
}
return `rgba(${sColorChange.join(",")},${alpha})`;
}
return sColor;
}
const colorGradient$1 = {
colorGradient,
hexToRgb,
rgbToHex,
colorToRgba
};
let timeout = null;
function debounce(func2, wait = 500, immediate = false) {
if (timeout !== null)
clearTimeout(timeout);
if (immediate) {
const callNow = !timeout;
timeout = setTimeout(() => {
timeout = null;
}, wait);
if (callNow)
typeof func2 === "function" && func2();
} else {
timeout = setTimeout(() => {
typeof func2 === "function" && func2();
}, wait);
}
}
let flag;
function throttle(func2, wait = 500, immediate = true) {
if (immediate) {
if (!flag) {
flag = true;
typeof func2 === "function" && func2();
setTimeout(() => {
flag = false;
}, wait);
}
} else if (!flag) {
flag = true;
setTimeout(() => {
flag = false;
typeof func2 === "function" && func2();
}, wait);
}
}
let platform = "none";
platform = "vue3";
platform = "plus";
const platform$1 = platform;
let themeType = ["primary", "success", "error", "warning", "info"];
function setConfig(configs) {
index.shallowMerge(config, configs.config || {});
index.shallowMerge(props$8, 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,
// uview-plus配置信息相关比如版本号
zIndex,
debounce,
throttle,
mixin,
mpMixin,
props: props$8,
...index,
color: color$3,
platform: platform$1
};
const install = (Vue2, upuiParams = "") => {
if (upuiParams) {
uni.upuiParams = upuiParams;
let temp = upuiParams();
if (temp.httpIns) {
temp.httpIns(http);
}
if (temp.options) {
setConfig(temp.options);
}
}
uni.$u = $u;
Vue2.config.globalProperties.$u = $u;
Vue2.mixin(mixin);
};
const uviewPlus = {
install
};
function createApp() {
const app = vue.createVueApp(App);
app.use(uviewPlus, () => {
return {
options: {
// 修改$u.config对象的属性
config: {
// 修改默认单位为rpx相当于执行 uni.$u.config.unit = 'rpx'
unit: "rpx"
}
}
};
});
formatAppLog("log", "at main.js:30", uni.$u.config.v);
return {
app
};
}
const { app: __app__, Vuex: __Vuex__, Pinia: __Pinia__ } = createApp();
uni.Vuex = __Vuex__;
uni.Pinia = __Pinia__;
__app__.provide("__globalStyles", __uniConfig.styles);
__app__._component.mpType = "app";
__app__._component.render = () => {
};
__app__.mount("#app");
})(Vue);