v3hooks
Version:
针对 Vue3 的实用Hooks集合
1,689 lines (1,561 loc) • 137 kB
JavaScript
import { shallowRef, ref, watch, readonly, isRef, reactive, onMounted, onUnmounted, markRaw, toRefs, onScopeDispose } from 'vue';
function _typeof(obj) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
return typeof obj;
} : function (obj) {
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
}, _typeof(obj);
}
var _assign = function __assign() {
_assign = Object.assign || function __assign(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) {
if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
}
}
return t;
};
return _assign.apply(this, arguments);
};
function __rest(s, e) {
var t = {};
for (var p in s) {
if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
}
if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
}
return t;
}
function __awaiter(thisArg, _arguments, P, generator) {
function adopt(value) {
return value instanceof P ? value : new P(function (resolve) {
resolve(value);
});
}
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
}
function rejected(value) {
try {
step(generator["throw"](value));
} catch (e) {
reject(e);
}
}
function step(result) {
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
}
function __generator(thisArg, body) {
var _ = {
label: 0,
sent: function sent() {
if (t[0] & 1) throw t[1];
return t[1];
},
trys: [],
ops: []
},
f,
y,
t,
g;
return g = {
next: verb(0),
"throw": verb(1),
"return": verb(2)
}, typeof Symbol === "function" && (g[Symbol.iterator] = function () {
return this;
}), g;
function verb(n) {
return function (v) {
return step([n, v]);
};
}
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) {
try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0:
case 1:
t = op;
break;
case 4:
_.label++;
return {
value: op[1],
done: false
};
case 5:
_.label++;
y = op[1];
op = [0];
continue;
case 7:
op = _.ops.pop();
_.trys.pop();
continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
_ = 0;
continue;
}
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
_.label = op[1];
break;
}
if (op[0] === 6 && _.label < t[1]) {
_.label = t[1];
t = op;
break;
}
if (t && _.label < t[2]) {
_.label = t[2];
_.ops.push(op);
break;
}
if (t[2]) _.ops.pop();
_.trys.pop();
continue;
}
op = body.call(thisArg, _);
} catch (e) {
op = [6, e];
y = 0;
} finally {
f = t = 0;
}
}
if (op[0] & 5) throw op[1];
return {
value: op[0] ? op[1] : void 0,
done: true
};
}
}
function __read(o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o),
r,
ar = [],
e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
ar.push(r.value);
}
} catch (error) {
e = {
error: error
};
} finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
} finally {
if (e) throw e.error;
}
}
return ar;
}
function __spreadArray(to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || from);
}
/**
* 防抖
* @param fn
* @param delay
* @returns
*/
var debounce = function (fn, delay) {
var timer = null;
return function () {
var _this = this;
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
if (timer)
clearTimeout(timer);
timer = setTimeout(function () {
// @ts-ignore
fn.call.apply(fn, __spreadArray([_this], __read(args)));
}, delay);
};
};
/**
* 节流
* @param fn
* @param delay
* @returns
*/
var throttle = function (fn, delay) {
var oldNow = Date.now();
return function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var currNow = Date.now();
if (currNow - oldNow < delay)
return;
oldNow = currNow;
// @ts-ignore
fn.call.apply(fn, __spreadArray([this], __read(args)));
};
};
/**
* 防抖+节流
* @param fn
* @param DBdelay
* @param TRdelay
* @returns
*/
var throttleAndDeBounce = function (fn, DBdelay, TRdelay) {
var oldNow = Date.now();
var timer = null;
return function () {
var _this = this;
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var currNow = Date.now();
if (currNow - oldNow < TRdelay) {
if (timer)
clearTimeout(timer);
timer = setTimeout(function () {
oldNow = currNow;
// @ts-ignore
fn.call.apply(fn, __spreadArray([_this], __read(args)));
}, DBdelay);
return;
}
oldNow = currNow;
// @ts-ignore
fn.call.apply(fn, __spreadArray([this], __read(args)));
};
};
/**
* 按照类型格式数据的常量Map
*/
var TypeSerializers = {
boolean: {
read: function (v) { return v != null ? v === 'true' : null; },
write: function (v) { return String(v); },
},
object: {
read: function (v) { return v ? JSON.parse(v) : null; },
write: function (v) { return JSON.stringify(v); },
},
number: {
read: function (v) { return v != null ? Number.parseFloat(v) : null; },
write: function (v) { return String(v); },
},
any: {
read: function (v) { return (v != null && v !== 'null') ? v : null; },
write: function (v) { return String(v); },
},
string: {
read: function (v) { return v != null ? v : null; },
write: function (v) { return String(v); },
},
};
/**
* 获取数据类型
* @param defaultValue
* @returns
*/
var getValueType = function (defaultValue) {
return defaultValue == null
? 'any'
: typeof defaultValue === 'boolean'
? 'boolean'
: typeof defaultValue === 'string'
? 'string'
: typeof defaultValue === 'object'
? 'object'
: Array.isArray(defaultValue)
? 'object'
: !Number.isNaN(defaultValue)
? 'number'
: 'any';
};
/**
* loading的延迟计算
* @param startTime
* @param loadingDelay
* @param args
* @returns
*/
var loadingDelayTimer = null;
var loadingDelayAsync = function (loadingDelay) {
clearLoadingDelayTimer();
return new Promise(function (resolve) {
loadingDelayTimer = setTimeout(function () { return resolve(loadingDelayTimer); }, Math.max(loadingDelay, 0));
});
};
/**
* 取消loading延迟计算Timer
*/
var clearLoadingDelayTimer = function () {
if (loadingDelayTimer) {
clearTimeout(loadingDelayTimer);
}
};
var defaultParams = {
method: 'POST',
mode: 'cors',
cache: 'no-cache',
credentials: 'same-origin',
headers: {
'Content-Type': 'application/json'
},
redirect: 'follow',
referrerPolicy: 'no-referrer', // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url
};
/**
* 使用fetch发起请求
* @param Params
* @returns FetchData
*/
function fetchData(p) {
var params = _assign(_assign({}, defaultParams), p);
return fetch(params.url, params);
}
var argsSymbolKey = 'argsKey';
var serveiceProxy = function (service, args, reqParamsCache) { return __awaiter(void 0, void 0, void 0, function () {
var response, error_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 5, , 6]);
if (args.length > 0) {
reqParamsCache.put(argsSymbolKey, args);
}
if (!(Object.prototype.toString.call(service) === "[object Function]")) return [3 /*break*/, 2];
return [4 /*yield*/, service.apply(void 0, __spreadArray([], __read(args)))];
case 1: return [2 /*return*/, _a.sent()];
case 2:
if (!(Object.prototype.toString.call(service) === "[object Object]")) return [3 /*break*/, 4];
return [4 /*yield*/, fetchData(service)];
case 3:
response = _a.sent();
return [2 /*return*/, response.json()];
case 4: return [3 /*break*/, 6];
case 5:
error_1 = _a.sent();
return [2 /*return*/, Promise.reject(error_1)];
case 6: return [2 /*return*/];
}
});
}); };
/**
* 执行轮询
*/
var Polling = /** @class */ (function () {
function Polling() {
this.isActive = false;
this.pollingInterval = 0;
this.pollingWhenHidden = true;
}
Polling.prototype.run = function (run, pollingInterval, pollingWhenHidden) {
this.isActive = true;
this.pollingInterval = pollingInterval;
this.pollingWhenHidden = pollingWhenHidden;
this.task(run);
};
Polling.prototype.cancel = function () {
this.isActive = false;
};
Polling.prototype.task = function (run) {
var _this = this;
setTimeout(function () {
if (!_this.isActive)
return;
if (_this.pollingWhenHidden) {
run();
}
else {
if (!document.hidden) {
run();
}
}
_this.task(run);
}, this.pollingInterval);
};
return Polling;
}());
var Polling$1 = new Polling();
/**
* 监听屏幕是否聚焦
* @param run
* @param focusTimespan
*/
var visibility = function (run, focusTimespan) {
var handler = function () {
if (!document.hidden) {
run();
}
};
if (focusTimespan !== undefined && typeof (focusTimespan) === 'number') {
handler = throttle(handler, focusTimespan);
}
document.addEventListener('visibilitychange', handler);
};
var handleResCache = function (data, resCache, cacheKey, cacheTime) {
if (cacheKey) {
if (resCache.has(cacheKey)) {
resCache.put(cacheKey, data);
return;
}
resCache.put(cacheKey, data, cacheTime);
}
};
var MemoryCache = /** @class */ (function () {
function MemoryCache(options) {
this.memoryCache = new Map();
this.timer = {};
this.maxCache = (options === null || options === void 0 ? void 0 : options.maxCache) || 1000;
}
/**
* 增加缓存
* @param key
* @param value
* @param time
* @param timeoutCallback
*/
MemoryCache.prototype.put = function (key, value, time, timeoutCallback) {
var _this = this;
if (!key || !value) {
throw new Error('key & value is required');
}
if (this.size() >= this.maxCache) {
this.del(__spreadArray([], __read(this.memoryCache))[0][0]);
}
this.memoryCache.set(key, value);
if (time
&& typeof time === 'number'
&& time > 0) {
this.timer[key] = setTimeout(function () {
_this.del(key);
delete _this.timer[key];
timeoutCallback && timeoutCallback();
}, time);
}
};
/**
* 获取缓存
* @param key
* @returns
*/
MemoryCache.prototype.get = function (key) {
if (!this.has(key))
return null;
return this.memoryCache.get(key);
};
/**
* 判断是否有缓存
* @param key
* @returns
*/
MemoryCache.prototype.has = function (key) {
return this.memoryCache.has(key);
};
/**
* 删除缓存
* @param key
* @returns
*/
MemoryCache.prototype.del = function (key) {
if (!this.has(key))
return;
if (this.timer[key]) {
clearTimeout(this.timer[key]);
delete this.timer[key];
}
this.memoryCache.delete(key);
};
/**
* 清除缓存
* @returns
*/
MemoryCache.prototype.clear = function () {
if (this.size() <= 0)
return;
this.memoryCache.clear();
for (var i in this.timer) {
clearTimeout(this.timer[i]);
delete this.timer[i];
}
};
/**
* 获取缓存条数
* @returns
*/
MemoryCache.prototype.size = function () {
return this.memoryCache.size;
};
return MemoryCache;
}());
// service请求参数缓存
var reqCache = new MemoryCache();
// 请求参数缓存
var resCache = new MemoryCache();
// 默认参数
var defaultOptions$7 = {
manual: false,
initialData: undefined,
onSuccess: function () { },
onError: function () { },
formatResult: function (data) { return data; },
defaultParams: [],
pollingInterval: 0,
pollingWhenHidden: true,
ready: undefined,
debounceInterval: undefined,
throttleInterval: undefined,
refreshOnWindowFocus: false,
focusTimespan: undefined,
loadingDelay: 0,
refreshDeps: [],
cacheTime: 300000,
staleTime: 0,
};
var useRequest = function (service, options) {
var _a = _assign(_assign({}, defaultOptions$7), options), manual = _a.manual, initialData = _a.initialData, onSuccess = _a.onSuccess, onError = _a.onError, formatResult = _a.formatResult, defaultParams = _a.defaultParams, pollingInterval = _a.pollingInterval, pollingWhenHidden = _a.pollingWhenHidden, ready = _a.ready, debounceInterval = _a.debounceInterval, throttleInterval = _a.throttleInterval, refreshOnWindowFocus = _a.refreshOnWindowFocus, focusTimespan = _a.focusTimespan, loadingDelay = _a.loadingDelay, refreshDeps = _a.refreshDeps, cacheKey = _a.cacheKey, cacheTime = _a.cacheTime, staleTime = _a.staleTime;
var data = shallowRef(initialData);
var error = ref(undefined);
var loading = ref(false);
var latestTime = ref(0);
// 取消轮询
var cancel = function () { return Polling$1.cancel(); };
// 执行轮询
var pollingRun = function () {
if (pollingInterval < 4 || Polling$1.isActive) {
return;
}
Polling$1.run(run, pollingInterval, pollingWhenHidden);
};
// 执行网络请求
var run = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
// 请求开始时间
var reqTime = +new Date();
// 判断开启缓存 && 有缓存,先返回缓存
// 缓存修改并不会阻止顺序执行,service请求会继续发出
// 也就是所谓SWR能力
if (cacheKey && resCache.has(cacheKey)) {
data.value = resCache.get(cacheKey);
if (latestTime.value + staleTime > reqTime) {
return;
}
}
else if (loadingDelay > 0) {
loadingDelayAsync(loadingDelay).then(function () { return loading.value = true; });
}
else {
loading.value = true;
}
// 更新最新一次请求开始时间
latestTime.value = reqTime;
serveiceProxy(service, args, reqCache).then(function (responseData) {
clearLoadingDelayTimer();
responseData = formatResult(responseData);
data.value = responseData;
loading.value = false;
onSuccess(responseData, args);
// 处理缓存
handleResCache(responseData, resCache, cacheKey, cacheTime);
}).catch(function (e) {
loading.value = false;
error.value = e;
onError(error.value, args);
});
// 非激活状态执行轮询
pollingRun();
};
var refresh = function () {
var args = reqCache.get(argsSymbolKey) || [];
run.apply(void 0, __spreadArray([], __read(args)));
};
// 是否自动执行
if (!manual && ready === undefined) {
// 是否携带默认参数
defaultParams.length > 0 ? run.apply(void 0, __spreadArray([], __read(defaultParams))) : run();
// 是否执行轮询
pollingRun();
}
//监听依赖请求是否执行
watch(function () { return ready; }, function (curr) {
if ((curr === null || curr === void 0 ? void 0 : curr.value) === true) {
refresh();
}
}, { deep: true });
//多个监听依赖请求是否执行
watch(refreshDeps, function () { return refresh(); }, { deep: true });
// 防抖+节流
if (debounceInterval !== undefined
&& throttleInterval !== undefined
&& typeof (debounceInterval) === 'number'
&& typeof (throttleInterval) === 'number') {
run = throttleAndDeBounce(run, debounceInterval, throttleInterval);
}
else {
// 防抖
if (debounceInterval !== undefined
&& typeof (debounceInterval) === 'number') {
run = debounce(run, debounceInterval);
}
// 节流
if (throttleInterval !== undefined
&& typeof (throttleInterval) === 'number') {
run = throttle(run, throttleInterval);
}
}
// 屏幕聚焦重新请求
if (refreshOnWindowFocus === true) {
visibility(refresh, focusTimespan);
}
// 突变改变data值
var mutate = function (state) {
data.value = state;
};
// 返回值
var res = {
data: data,
error: error,
run: run,
refresh: refresh,
loading: loading,
cancel: cancel,
mutate: mutate
};
return res;
};
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
var dayjs_min = {exports: {}};
(function (module, exports) {
!function (t, e) {
module.exports = e() ;
}(commonjsGlobal, function () {
var t = 1e3,
e = 6e4,
n = 36e5,
r = "millisecond",
i = "second",
s = "minute",
u = "hour",
a = "day",
o = "week",
f = "month",
h = "quarter",
c = "year",
d = "date",
$ = "Invalid Date",
l = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,
y = /\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,
M = {
name: "en",
weekdays: "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),
months: "January_February_March_April_May_June_July_August_September_October_November_December".split("_")
},
m = function m(t, e, n) {
var r = String(t);
return !r || r.length >= e ? t : "" + Array(e + 1 - r.length).join(n) + t;
},
g = {
s: m,
z: function z(t) {
var e = -t.utcOffset(),
n = Math.abs(e),
r = Math.floor(n / 60),
i = n % 60;
return (e <= 0 ? "+" : "-") + m(r, 2, "0") + ":" + m(i, 2, "0");
},
m: function t(e, n) {
if (e.date() < n.date()) return -t(n, e);
var r = 12 * (n.year() - e.year()) + (n.month() - e.month()),
i = e.clone().add(r, f),
s = n - i < 0,
u = e.clone().add(r + (s ? -1 : 1), f);
return +(-(r + (n - i) / (s ? i - u : u - i)) || 0);
},
a: function a(t) {
return t < 0 ? Math.ceil(t) || 0 : Math.floor(t);
},
p: function p(t) {
return {
M: f,
y: c,
w: o,
d: a,
D: d,
h: u,
m: s,
s: i,
ms: r,
Q: h
}[t] || String(t || "").toLowerCase().replace(/s$/, "");
},
u: function u(t) {
return void 0 === t;
}
},
D = "en",
v = {};
v[D] = M;
var p = function p(t) {
return t instanceof _;
},
S = function S(t, e, n) {
var r;
if (!t) return D;
if ("string" == typeof t) v[t] && (r = t), e && (v[t] = e, r = t);else {
var i = t.name;
v[i] = t, r = i;
}
return !n && r && (D = r), r || !n && D;
},
w = function w(t, e) {
if (p(t)) return t.clone();
var n = "object" == _typeof(e) ? e : {};
return n.date = t, n.args = arguments, new _(n);
},
O = g;
O.l = S, O.i = p, O.w = function (t, e) {
return w(t, {
locale: e.$L,
utc: e.$u,
x: e.$x,
$offset: e.$offset
});
};
var _ = function () {
function M(t) {
this.$L = S(t.locale, null, !0), this.parse(t);
}
var m = M.prototype;
return m.parse = function (t) {
this.$d = function (t) {
var e = t.date,
n = t.utc;
if (null === e) return new Date(NaN);
if (O.u(e)) return new Date();
if (e instanceof Date) return new Date(e);
if ("string" == typeof e && !/Z$/i.test(e)) {
var r = e.match(l);
if (r) {
var i = r[2] - 1 || 0,
s = (r[7] || "0").substring(0, 3);
return n ? new Date(Date.UTC(r[1], i, r[3] || 1, r[4] || 0, r[5] || 0, r[6] || 0, s)) : new Date(r[1], i, r[3] || 1, r[4] || 0, r[5] || 0, r[6] || 0, s);
}
}
return new Date(e);
}(t), this.$x = t.x || {}, this.init();
}, m.init = function () {
var t = this.$d;
this.$y = t.getFullYear(), this.$M = t.getMonth(), this.$D = t.getDate(), this.$W = t.getDay(), this.$H = t.getHours(), this.$m = t.getMinutes(), this.$s = t.getSeconds(), this.$ms = t.getMilliseconds();
}, m.$utils = function () {
return O;
}, m.isValid = function () {
return !(this.$d.toString() === $);
}, m.isSame = function (t, e) {
var n = w(t);
return this.startOf(e) <= n && n <= this.endOf(e);
}, m.isAfter = function (t, e) {
return w(t) < this.startOf(e);
}, m.isBefore = function (t, e) {
return this.endOf(e) < w(t);
}, m.$g = function (t, e, n) {
return O.u(t) ? this[e] : this.set(n, t);
}, m.unix = function () {
return Math.floor(this.valueOf() / 1e3);
}, m.valueOf = function () {
return this.$d.getTime();
}, m.startOf = function (t, e) {
var n = this,
r = !!O.u(e) || e,
h = O.p(t),
$ = function $(t, e) {
var i = O.w(n.$u ? Date.UTC(n.$y, e, t) : new Date(n.$y, e, t), n);
return r ? i : i.endOf(a);
},
l = function l(t, e) {
return O.w(n.toDate()[t].apply(n.toDate("s"), (r ? [0, 0, 0, 0] : [23, 59, 59, 999]).slice(e)), n);
},
y = this.$W,
M = this.$M,
m = this.$D,
g = "set" + (this.$u ? "UTC" : "");
switch (h) {
case c:
return r ? $(1, 0) : $(31, 11);
case f:
return r ? $(1, M) : $(0, M + 1);
case o:
var D = this.$locale().weekStart || 0,
v = (y < D ? y + 7 : y) - D;
return $(r ? m - v : m + (6 - v), M);
case a:
case d:
return l(g + "Hours", 0);
case u:
return l(g + "Minutes", 1);
case s:
return l(g + "Seconds", 2);
case i:
return l(g + "Milliseconds", 3);
default:
return this.clone();
}
}, m.endOf = function (t) {
return this.startOf(t, !1);
}, m.$set = function (t, e) {
var n,
o = O.p(t),
h = "set" + (this.$u ? "UTC" : ""),
$ = (n = {}, n[a] = h + "Date", n[d] = h + "Date", n[f] = h + "Month", n[c] = h + "FullYear", n[u] = h + "Hours", n[s] = h + "Minutes", n[i] = h + "Seconds", n[r] = h + "Milliseconds", n)[o],
l = o === a ? this.$D + (e - this.$W) : e;
if (o === f || o === c) {
var y = this.clone().set(d, 1);
y.$d[$](l), y.init(), this.$d = y.set(d, Math.min(this.$D, y.daysInMonth())).$d;
} else $ && this.$d[$](l);
return this.init(), this;
}, m.set = function (t, e) {
return this.clone().$set(t, e);
}, m.get = function (t) {
return this[O.p(t)]();
}, m.add = function (r, h) {
var d,
$ = this;
r = Number(r);
var l = O.p(h),
y = function y(t) {
var e = w($);
return O.w(e.date(e.date() + Math.round(t * r)), $);
};
if (l === f) return this.set(f, this.$M + r);
if (l === c) return this.set(c, this.$y + r);
if (l === a) return y(1);
if (l === o) return y(7);
var M = (d = {}, d[s] = e, d[u] = n, d[i] = t, d)[l] || 1,
m = this.$d.getTime() + r * M;
return O.w(m, this);
}, m.subtract = function (t, e) {
return this.add(-1 * t, e);
}, m.format = function (t) {
var e = this,
n = this.$locale();
if (!this.isValid()) return n.invalidDate || $;
var r = t || "YYYY-MM-DDTHH:mm:ssZ",
i = O.z(this),
s = this.$H,
u = this.$m,
a = this.$M,
o = n.weekdays,
f = n.months,
h = function h(t, n, i, s) {
return t && (t[n] || t(e, r)) || i[n].substr(0, s);
},
c = function c(t) {
return O.s(s % 12 || 12, t, "0");
},
d = n.meridiem || function (t, e, n) {
var r = t < 12 ? "AM" : "PM";
return n ? r.toLowerCase() : r;
},
l = {
YY: String(this.$y).slice(-2),
YYYY: this.$y,
M: a + 1,
MM: O.s(a + 1, 2, "0"),
MMM: h(n.monthsShort, a, f, 3),
MMMM: h(f, a),
D: this.$D,
DD: O.s(this.$D, 2, "0"),
d: String(this.$W),
dd: h(n.weekdaysMin, this.$W, o, 2),
ddd: h(n.weekdaysShort, this.$W, o, 3),
dddd: o[this.$W],
H: String(s),
HH: O.s(s, 2, "0"),
h: c(1),
hh: c(2),
a: d(s, u, !0),
A: d(s, u, !1),
m: String(u),
mm: O.s(u, 2, "0"),
s: String(this.$s),
ss: O.s(this.$s, 2, "0"),
SSS: O.s(this.$ms, 3, "0"),
Z: i
};
return r.replace(y, function (t, e) {
return e || l[t] || i.replace(":", "");
});
}, m.utcOffset = function () {
return 15 * -Math.round(this.$d.getTimezoneOffset() / 15);
}, m.diff = function (r, d, $) {
var l,
y = O.p(d),
M = w(r),
m = (M.utcOffset() - this.utcOffset()) * e,
g = this - M,
D = O.m(this, M);
return D = (l = {}, l[c] = D / 12, l[f] = D, l[h] = D / 3, l[o] = (g - m) / 6048e5, l[a] = (g - m) / 864e5, l[u] = g / n, l[s] = g / e, l[i] = g / t, l)[y] || g, $ ? D : O.a(D);
}, m.daysInMonth = function () {
return this.endOf(f).$D;
}, m.$locale = function () {
return v[this.$L];
}, m.locale = function (t, e) {
if (!t) return this.$L;
var n = this.clone(),
r = S(t, e, !0);
return r && (n.$L = r), n;
}, m.clone = function () {
return O.w(this.$d, this);
}, m.toDate = function () {
return new Date(this.valueOf());
}, m.toJSON = function () {
return this.isValid() ? this.toISOString() : null;
}, m.toISOString = function () {
return this.$d.toISOString();
}, m.toString = function () {
return this.$d.toUTCString();
}, M;
}(),
b = _.prototype;
return w.prototype = b, [["$ms", r], ["$s", i], ["$m", s], ["$H", u], ["$W", a], ["$M", f], ["$y", c], ["$D", d]].forEach(function (t) {
b[t[1]] = function (e) {
return this.$g(e, t[0], t[1]);
};
}), w.extend = function (t, e) {
return t.$i || (t(e, _, w), t.$i = !0), w;
}, w.locale = S, w.isDayjs = p, w.unix = function (t) {
return w(1e3 * t);
}, w.en = v[D], w.Ls = v, w.p = {}, w;
});
})(dayjs_min);
var dayjs = dayjs_min.exports;
var defaultOptions$6 = {
format: 'YYYY-MM-DD HH:mm:ss',
method: 'format'
};
function useDate(initialValue, options) {
var state = ref();
var value = initialValue || +new Date();
var _a = _assign(_assign({}, defaultOptions$6), options), format = _a.format, method = _a.method, methodParam = _a.methodParam;
var refresh = function (refreshValue) {
console.log(refreshValue);
value = refreshValue || +new Date();
switch (method) {
case 'format':
state.value = dayjs(value).format(format);
break;
case undefined:
break;
default:
var data_1 = dayjs(value);
if (methodParam) {
data_1 = data_1[method](methodParam);
if (options && options.format) {
data_1 = data_1.format(format);
}
}
state.value = data_1;
}
};
refresh();
var data = readonly(state);
return {
data: data,
refresh: refresh
};
}
var defaultDelay$3 = 1000;
/**
* 处理防抖函数
* @param fn
* @param delay
* @returns
*/
var useDebounceFn = function (fn, delay) {
var run = debounce(fn, typeof (delay) === 'number' ? delay : defaultDelay$3);
return { run: run };
};
// import { debounce } from '../utils'
// 默认值
var defaultDelay$2 = 1000;
/**
* 处理防抖值
* @param value
* @param delay
* @returns
*/
var useDebounce = function (value, delay) {
delay = delay || defaultDelay$2;
var res = ref(value.value);
// 利用useDebounceFn来简化处理值
var run = useDebounceFn(function () { return res.value = value.value; }, delay).run;
watch(value, function () { return run(); }, { deep: true });
return res;
};
var defaultDelay$1 = 1000;
/**
* 处理节流函数
* @param fn
* @param delay
* @returns
*/
var useThrottleFn = function (fn, delay) {
var run = throttle(fn, typeof (delay) === 'number' ? delay : defaultDelay$1);
return { run: run };
};
// import { debounce } from '../utils'
// 默认值
var defaultDelay = 1000;
/**
* 处理防抖值
* @param value
* @param delay
* @returns
*/
var useThrottle = function (value, delay) {
delay = delay || defaultDelay;
var res = ref(value.value);
// 利用useDebounceFn来简化处理值
var run = useThrottleFn(function () { return res.value = value.value; }, delay).run;
watch(value, function () { return run(); }, { deep: true });
return res;
};
/**
* 用于在N个状态值间切换。
* @param args
* @returns
*/
function useToggle() {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var argsStateArr = args.map(function (variable) { return isRef(variable) ? variable : ref(variable); });
var initialValue = argsStateArr[0].value;
var state = ref(initialValue);
var activeState = argsStateArr[0];
// 1: 监听当前被激活的state异步
// 2: 如果当前的异步发生改变则修改state
watch([activeState], function () {
state.value = activeState.value;
}, {
deep: true
});
var currIndex = 0;
var len = args.length;
var toggle = function (param) {
// 判定是否在参数里
if (param !== undefined && args.includes(param)) {
state.value = isRef(param) ? param.value : param;
activeState = isRef(param) ? param : ref(param);
return;
}
// 顺序变化
currIndex = currIndex + 1 > len - 1 ? 0 : currIndex + 1;
state.value = argsStateArr[currIndex].value;
activeState = argsStateArr[currIndex];
};
var createHandle = function () {
return argsStateArr.map(function (active, index) {
return function () {
state.value = active.value;
activeState = active;
currIndex = index;
};
});
};
var actions = __spreadArray([toggle], __read(createHandle()));
return [state, actions];
}
// 默认值
var defaultValue = false;
/**
*
* @param defaultValue
* @returns
*/
function useBoolean(value) {
value = value || defaultValue;
var _a = __read(useToggle(value, !value), 2), state = _a[0], _b = __read(_a[1], 1), toggle = _b[0];
var setTrue = function () { return toggle(true); };
var setFalse = function () { return toggle(false); };
var actions = { toggle: toggle, setTrue: setTrue, setFalse: setFalse };
return [state, actions];
}
var useVirtualList = function (state, options) {
var start = 0;
var end = 10;
var list = ref(state.slice(start, end));
var itemHeight = options.itemHeight, _a = options.overscan, overscan = _a === void 0 ? 5 : _a;
var containerRef = ref();
var totalHeight = (function () {
if (typeof itemHeight === 'number') {
return state.length * itemHeight;
}
return state.reduce(function (sum, _, index) { return sum + itemHeight(index); }, 0);
})();
// 计算当前视图展示数量
var getViewCapacity = function (containerHeight) {
if (typeof itemHeight === 'number') {
return Math.ceil(containerHeight / itemHeight);
}
var sum = 0;
var capacity = 0;
for (var i = start; i < state.length; i++) {
var height = itemHeight(i);
sum += height;
if (sum >= containerHeight) {
capacity = i;
break;
}
}
return capacity - start;
};
// 获取当前索引
var getOffset = function (scrollTop) {
if (typeof itemHeight === 'number') {
return Math.floor(scrollTop / itemHeight) + 1;
}
var sum = 0;
var offset = 0;
for (var i = 0; i < state.length; i++) {
var height = itemHeight(i);
sum += height;
if (sum >= scrollTop) {
offset = i;
break;
}
}
return offset + 1;
};
// 获取当前索引向上高度
var getDistanceTop = function (index) {
if (typeof itemHeight === 'number') {
var height_1 = index * itemHeight;
return height_1;
}
var height = state.slice(0, index).reduce(function (sum, _, i) { return sum + itemHeight(i); }, 0);
return height;
};
var offsetTop = getDistanceTop(start);
// 计算展示指定位置
var calculateRange = function () {
var element = containerRef.value;
if (element) {
var offset = getOffset(element.scrollTop);
var viewCapacity = getViewCapacity(element.clientHeight);
var from = offset - overscan;
var to = offset + viewCapacity + overscan;
start = from < 0 ? 0 : from;
end = to > state.length ? state.length : to;
list.value = state.slice(start, end);
// 实时计算
offsetTop = getDistanceTop(start);
wrapperStyle.marginTop = offsetTop + 'px';
wrapperStyle.height = totalHeight - offsetTop + 'px';
}
};
// 滚动容器的外层监听
var containerProps = reactive({
ref: function (ele) {
containerRef.value = ele;
},
onScroll: function (e) {
e.preventDefault();
calculateRange();
},
style: { overflowY: 'auto' },
});
// children 外层包裹器 style
var wrapperStyle = reactive({
width: '100%',
height: totalHeight - offsetTop + 'px',
marginTop: offsetTop + 'px'
});
// 快速滚动到指定 index
var scrollTo = function (index) {
if (containerRef.value) {
containerRef.value.scrollTop = getDistanceTop(index);
calculateRange();
}
};
return {
list: list,
wrapperStyle: wrapperStyle,
containerProps: containerProps,
scrollTo: scrollTo
};
};
var useDynamicList = function (initialValue) {
var uuid = (0);
var uuidKeys = ref([]);
var setUUID = function (index) {
index = index === undefined ? uuidKeys.value.length : index;
uuidKeys.value.splice(index, 0, uuid++);
};
(function () {
initialValue.value.forEach(function () { return setUUID(); });
})();
var resetList = function (resetList) {
uuidKeys.value = [];
if (isRef(resetList)) {
resetList.value.forEach(function () { return setUUID(); });
initialValue = resetList;
return;
}
resetList.forEach(function () { return setUUID(); });
initialValue.value = resetList;
};
var insert = function (index, obj) {
initialValue.value.splice(index, 0, obj);
setUUID(index);
};
var merge = function (index, obj) {
var _a;
obj.forEach(function (active, i) { return setUUID(index + i); });
(_a = initialValue.value).splice.apply(_a, __spreadArray([index, 0], __read(obj)));
};
var replace = function (index, obj) {
initialValue.value.splice(index, 1, obj);
};
var remove = function (index) {
uuidKeys.value.splice(index, 1);
initialValue.value.splice(index, 1);
};
var move = function (oldIndex, newIndex) {
var _a, _b;
if (oldIndex === newIndex)
return;
_a = __read([initialValue.value[newIndex], initialValue.value[oldIndex]], 2), initialValue.value[oldIndex] = _a[0], initialValue.value[newIndex] = _a[1];
_b = __read([uuidKeys.value[newIndex], uuidKeys.value[oldIndex]], 2), uuidKeys.value[oldIndex] = _b[0], uuidKeys.value[newIndex] = _b[1];
};
var getKey = function (index) { return uuidKeys.value[index]; };
var getIndex = function (key) { return uuidKeys.value.indexOf(key); };
var push = function (obj) {
initialValue.value.push(obj);
setUUID();
};
var pop = function () {
initialValue.value.pop();
uuidKeys.value.pop();
};
var unshift = function (obj) {
initialValue.value.unshift(obj);
setUUID(0);
};
var shift = function () {
initialValue.value.shift();
uuidKeys.value.shift();
};
return {
list: initialValue,
resetList: resetList,
insert: insert,
merge: merge,
replace: replace,
remove: remove,
move: move,
getKey: getKey,
getIndex: getIndex,
push: push,
pop: pop,
unshift: unshift,
shift: shift
};
};
var storage$1 = localStorage;
var defaultOptions$5 = {
watch: true
};
var useLocalStorage = function (key, initialValue, options) {
var watch$1 = _assign(_assign({}, defaultOptions$5), options).watch;
var data = ref();
try {
if (initialValue !== undefined) {
data.value = isRef(initialValue) ? initialValue.value : initialValue;
}
else {
data.value = JSON.parse(storage$1.getItem(key) || '{}');
}
}
catch (error) {
console.log(error, 'useLocalStorage初始化失败');
}
var type = getValueType(data.value);
// 判断类型取格式化方法
var serializer = TypeSerializers[type];
var setStorage = function () { return storage$1.setItem(key, serializer.write(data.value)); };
// 状态监听
if (watch$1) {
watch(data, function (newValue) {
if (newValue === undefined || newValue === null) {
storage$1.removeItem(key);
return;
}
setStorage();
}, {
deep: true
});
}
setStorage();
return data;
};
var storage = sessionStorage;
var defaultOptions$4 = {
watch: true
};
var useSessionStorage = function (key, initialValue, options) {
var watch$1 = _assign(_assign({}, defaultOptions$4), options).watch;
var data = ref();
try {
if (initialValue !== undefined) {
data.value = isRef(initialValue) ? initialValue.value : initialValue;
}
else {
data.value = JSON.parse(storage.getItem(key) || '{}');
}
}
catch (error) {
console.log(error, 'useLocalStorage初始化失败');
}
var type = getValueType(data.value);
// 判断类型取格式化方法
var serializer = TypeSerializers[type];
var setStorage = function () { return storage.setItem(key, serializer.write(data.value)); };
// 状态监听
if (watch$1) {
watch(data, function (newValue) {
if (newValue === undefined || newValue === null) {
storage.removeItem(key);
return;
}
setStorage();
}, {
deep: true
});
}
setStorage();
return data;
};
var getConnection = function () {
var nav = navigator;
if (typeof nav !== 'object')
return null;
return nav.connection || nav.mozConnection || nav.webkitConnection;
};
var handlerSetConnection = function () {
var connection = getConnection();
return {
rtt: connection.rtt,
type: connection.type,
saveData: connection.saveData,
downlink: connection.downlink,
downlinkMax: connection.downlinkMax,
effectiveType: connection.effectiveType,
};
};
var useNetwork = function () {
var state = reactive(_assign({ online: navigator.onLine, since: +new Date() }, handlerSetConnection()));
var onOnline = function () {
state.online = true;
state.since = +new Date();
};
var onOffline = function () {
state.online = false;
state.since = +new Date();
};
var onConnectionChange = function () {
var connectionData = handlerSetConnection();
Object.keys(connectionData).forEach(function (key) {
var propertyKey = key;
state[propertyKey] = connectionData[propertyKey];
});
};
onMounted(function () {
var _a;
window.addEventListener('online', onOnline);
window.addEventListener('offline', onOffline);
(_a = getConnection()) === null || _a === void 0 ? void 0 : _a.addEventListener('change', onConnectionChange);
});
onUnmounted(function () {
var _a;
window.removeEventListener('online', onOnline);
window.removeEventListener('offline', onOffline);
(_a = getConnection()) === null || _a === void 0 ? void 0 : _a.removeEventListener('change', onConnectionChange);
});
return state;
};
var js_cookie = {exports: {}};
/*!
* JavaScript Cookie v2.2.1
* https://github.com/js-cookie/js-cookie
*
* Copyright 2006, 2015 Klaus Hartl & Fagner Brack
* Released under the MIT license
*/
(function (module, exports) {
(function (factory) {
var registeredInModuleLoader;
{
module.exports = factory();
registeredInModuleLoader = true;
}
if (!registeredInModuleLoader) {
var OldCookies = window.Cookies;
var api = window.Cookies = factory();
api.noConflict = function () {
window.Cookies = OldCookies;
return api;
};
}
})(function () {
function extend() {
var i = 0;
var result = {};
for (; i < arguments.length; i++) {
var attributes = arguments[i];
for (var key in attributes) {
result[key] = attributes[key];
}
}
return result;
}
function decode(s) {
return s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);
}
function init(converter) {
function api() {}
function set(key, value, attributes) {
if (typeof document === 'undefined') {
return;
}
attributes = extend({
path: '/'
}, api.defaults, attributes);
if (typeof attributes.expires === 'number') {
attributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);
} // We're using "expires" because "max-age" is not supported by IE
attributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';
try {
var result = JSON.stringify(value);
if (/^[\{\[]/.test(result)) {
value = result;
}
} catch (e) {}
value = converter.write ? converter.write(value, key) : encodeURIComponent(String(value)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);
key = encodeURIComponent(String(key)).replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent).replace(/[\(\)]/g, escape);
var stringifiedAttributes = '';
for (var attributeName in attributes) {
if (!attributes[attributeName]) {
continue;
}
stringifiedAttributes += '; ' + attributeName;
if (attributes[attributeName] === true) {
continue;
} // Considers RFC 6265 section 5.2:
// ...
// 3. If the remaining unparsed-attributes contains a %x3B (";")
// character:
// Consume the characters of the unparsed-attributes up to,
// not including, the first %x3B (";") character.
// ...
stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];
}
return document.cookie = key + '=' + value + stringifiedAttributes;
}
function get(key, json) {
if (typeof document === 'undefined') {
return;
}
var jar = {}; // To prevent the for loop in the first place assign an empty array
// in case there are no cookies at all.
var cookies = document.cookie ? document.cookie.split('; ') : [];
var i = 0;
for (; i < cookies.length; i++) {
var parts = cookies[i].split('=');
var cookie = parts.slice(1).join('=');
if (!json && cookie.charAt(0) === '"') {
cookie = cookie.slice(1, -1);
}
try {
var name = decode(parts[0]);
cookie = (converter.read || converter)(cookie, name) || decode(cookie);
if (json) {
try {
cookie = JSON.parse(cookie);
} catch (e) {}
}
jar[name] = cookie;
if (key === name) {
break;
}
} catch (e) {}
}
return key ? jar[key] : jar;
}
api.set = set;
api.get = function (key) {
return get(key, false
/* read as raw */
);
};
api.getJSON = function (key) {
return get(key, true
/* read as json */
);
};
api.remove = function (key, attributes) {
set(key, '', extend(attributes, {
expires: -1
}));
};
api.defaults = {};
api.withConverter = init;
return api;
}
return init(function () {});
});
})(js_cookie);
var Cookies = js_cookie.exports;
var defaultOptions$3 = {
watch: false,
defaultValue: undefined
};
var useCookie = function (key, options) {
var _a = _assign(_assign({}, defaultOptions$3), options), watch$1 = _a.watch, defaultValue = _a.defaultValue;
var state = ref(Cookies.get(key) || defaultValue);
var setCookie = function (value) {
Cookies.set(key, value, _assign({}, options));
state.value = value;
};
if (watch$1) {