@dazhicheng/utils 1.3.13 → 1.3.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/package.json +2 -2
- package/src/openapi.ts +54 -26
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/string.ts","../src/file.ts","../src/axios/status.ts","../src/axios/error.ts","../src/axios/loadinSvg.ts","../src/axios/loading.ts","../src/axios/index.ts","../src/install.ts","../src/is.ts","../src/testid-helper.ts","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/setupDefaults.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/arrayEach.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticObjectToString.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperCreateInInObjectString.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isArray.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/hasOwnProp.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/objectEach.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/each.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperCreateInTypeof.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isFunction.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperCreateGetObjects.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/keys.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/clone.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/assign.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/ctor.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/lastArrayEach.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/lastObjectEach.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isNull.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/property.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isPlainObject.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperCheckCopyKey.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/merge.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/map.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperCreateIterateHandle.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/some.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/every.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/includes.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/includeArrays.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/uniq.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/toArray.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticStrUndefined.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isUndefined.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/eqNull.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticHGKeyRE.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperGetHGSKeys.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/get.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/orderBy.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/sortBy.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/random.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/values.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/shuffle.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperCreateToNumber.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/toNumber.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/slice.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/findKey.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/find.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/pluck.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperCreateMinMax.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/max.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/unzip.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/flatten.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperLog.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperDeleteProperty.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/lastEach.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isObject.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/clear.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/remove.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/toTreeArray.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperCreateTreeFunc.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/findTree.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/eachTree.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/mapTree.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/searchTree.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/arrayIndexOf.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/arrayLastIndexOf.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isNumber.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isString.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isDate.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticParseInt.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperGetUTCDateTime.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperGetDateTime.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/toStringDate.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperNewDate.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isLeapYear.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperCreateIndexOf.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/indexOf.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/lastIndexOf.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getSize.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isInteger.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isBoolean.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isRegExp.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isError.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isEmpty.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isSymbol.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isArguments.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticDocument.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticWindow.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isFormData.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isMap.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isWeakMap.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isSet.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isWeakSet.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperCreateiterateIndexOf.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/findIndexOf.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperEqualCompare.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperDefaultCompare.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isEqual.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/findLastIndexOf.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/entries.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperCreatePickOmit.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/pick.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/omit.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/set.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/groupBy.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/range.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/min.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperNumberDecimal.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperStringRepeat.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperNumberOffsetPoint.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/toNumberString.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperMultiply.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperCreateMathNumber.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/round.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/ceil.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/floor.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/toValueString.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/toFixed.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/toInteger.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/multiply.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperNumberAdd.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperNumberDivide.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/sum.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticStrFirst.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticStrLast.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperGetDateFullYear.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticDayTime.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperGetDateMonth.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isValidDate.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getWhatMonth.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getWhatYear.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticWeekTime.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getWhatWeek.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getWhatDay.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperStringUpperCase.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperCreateGetDateWeek.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getYearWeek.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperGetYMDTime.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperGetYMD.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getYearDay.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/padStart.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/toDateString.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/now.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getMonthWeek.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getDateDiff.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/trimRight.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/trimLeft.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/trim.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticEscapeMap.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperFormatEscaper.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/escape.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/unescape.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperStringSubstring.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperStringLowerCase.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/camelCase.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/kebabCase.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/template.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticDecodeURIComponent.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/unserialize.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticEncodeURIComponent.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/serialize.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticLocation.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperGetLocatOrigin.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/parseUrl.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/cookie.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/browse.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/index.esm.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/objectMap.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/union.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/sample.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/filter.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/findLast.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/reduce.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/copyWithin.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/chunk.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/zip.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/zipObject.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/invoke.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/toArrayTree.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/filterTree.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isNaN.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isFinite.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isFloat.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isTypeError.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isElement.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isDocument.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isWindow.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isMatch.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isEqualWith.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getType.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/uniqueId.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/toStringJSON.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/toJSONString.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/first.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/last.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/forOf.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/lastForOf.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/has.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/countBy.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/destructuring.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/commafy.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/add.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/subtract.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/divide.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/mean.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/timestamp.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isDateSame.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getWhatQuarter.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getWhatHours.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getWhatMinutes.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getWhatSeconds.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getDayOfYear.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getDayOfMonth.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/repeat.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/padEnd.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/startsWith.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/endsWith.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/toFormatString.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/noop.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/bind.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/once.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/after.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/before.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/throttle.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/debounce.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/delay.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getBaseURL.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/locat.js","../src/tool.ts","../src/merge.ts","../src/calc.ts","../src/stateHandler.ts","../src/stroge.ts","../src/check.ts"],"sourcesContent":["export function capitalize(str: string): string {\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n}\r\n\r\nexport function trim(str: string): string {\r\n return str.trim();\r\n}\r\n\r\nexport function kebabToCamelCase(str: string): string {\r\n return str.replace(/-(\\w)/g, (_, c) => (c ? c.toUpperCase() : ''))\r\n}\r\n","/**\r\n * @param res 响应 { data: Blob, ... }\r\n * @param type 类型\r\n */\r\n\r\ninterface HttpResponse<T> {\r\n data: T;\r\n headers: Record<string, string>;\r\n status: number;\r\n statusText: string;\r\n}\r\nexport const downloadFile = (res: HttpResponse<Blob>, type: string) => {\r\n try {\r\n // 创建blob对象,解析流数据\r\n const blob = new Blob([res.data], {\r\n type\r\n });\r\n const a = document.createElement(\"a\");\r\n const URL = window.URL || window.webkitURL;\r\n const herf = URL.createObjectURL(blob);\r\n a.href = herf;\r\n const contentDisposition: string[] = (res.headers[\"content-disposition\"] || \"\").split(\"=\") || [];\r\n let fileName = contentDisposition.at(-1) || \"\";\r\n fileName = fileName ? decodeURI(fileName.replace(/\"/g, \"\")) : \"\";\r\n const decodedParts = fileName?.split(\"''\");\r\n fileName = decodedParts.at(-1) || \"\";\r\n a.download = fileName;\r\n a.style.display = \"none\";\r\n document.body.appendChild(a);\r\n a.click();\r\n document.body.removeChild(a);\r\n window.URL.revokeObjectURL(herf);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n","/**\r\n * 接口状态码\r\n */\r\nexport enum ApiStatus {\r\n success = 200, // 成功\r\n success1 = 0, // 成功\r\n error = 400, // 错误\r\n unauthorized = 401, // 未授权\r\n forbidden = 403, // 禁止访问\r\n notFound = 404, // 未找到\r\n methodNotAllowed = 405, // 方法不允许\r\n requestTimeout = 408, // 请求超时\r\n internalServerError = 500, // 服务器错误\r\n notImplemented = 501, // 未实现\r\n badGateway = 502, // 网关错误\r\n serviceUnavailable = 503, // 服务不可用\r\n gatewayTimeout = 504, // 网关超时\r\n httpVersionNotSupported = 505, // HTTP版本不支持\r\n NEED_REFRESH_TOKEN = 1001, // 需要刷新令牌\r\n API_NO_AUTH = 1002, // 接口未授权\r\n INVALID_TOKEN = 1005 // 无效的token\r\n}\r\n\r\n// 错误提示\r\nexport enum HttpMsg {\r\n badGateway = \"网关错误,请稍后重试\",\r\n forbidden = \"禁止访问该资源\",\r\n gatewayTimeout = \"网关超时,请稍后重试\",\r\n internalServerError = \"服务器内部错误,请稍后重试\",\r\n methodNotAllowed = \"请求方法不允许\",\r\n networkError = \"网络连接异常,请检查网络连接\",\r\n notFound = \"请求的资源不存在\",\r\n requestCancelled = \"请求已取消\",\r\n requestConfigError = \"请求配置错误\",\r\n requestFailed = \"请求失败\",\r\n requestTimeout = \"请求超时,请稍后重试\",\r\n serviceUnavailable = \"服务暂时不可用,请稍后重试\",\r\n unauthorized = \"未授权访问,请重新登录\"\r\n}\r\n","/**\r\n * HTTP 错误处理模块\r\n *\r\n * 提供统一的 HTTP 请求错误处理机制\r\n *\r\n * ## 主要功能\r\n *\r\n * - 自定义 HttpError 错误类,封装错误信息、状态码、时间戳等\r\n * - 错误拦截和转换,将 Axios 错误转换为标准的 HttpError\r\n * - 错误消息国际化处理,根据状态码返回对应的多语言错误提示\r\n * - 错误日志记录,便于问题追踪和调试\r\n * - 错误和成功消息的统一展示\r\n * - 类型守卫函数,用于判断错误类型\r\n *\r\n * ## 使用场景\r\n *\r\n * - HTTP 请求拦截器中统一处理错误\r\n * - 业务代码中捕获和处理特定错误\r\n * - 错误日志收集和上报\r\n *\r\n * @module utils/http/error\r\n * @author Art Design Pro Team\r\n */\r\nimport { AxiosError } from \"axios\";\r\nimport { ApiStatus, HttpMsg } from \"./status\";\r\nimport { ElMessage } from \"element-plus\";\r\n\r\n// 错误响应接口\r\nexport interface ErrorResponse {\r\n /** 错误状态码 */\r\n code: number;\r\n /** 错误消息 */\r\n msg: string;\r\n /** 错误附加数据 */\r\n data?: unknown;\r\n}\r\n\r\n// 错误日志数据接口\r\nexport interface ErrorLogData {\r\n /** 错误状态码 */\r\n code: number;\r\n /** 错误消息 */\r\n message: string;\r\n /** 错误附加数据 */\r\n data?: unknown;\r\n /** 错误发生时间戳 */\r\n timestamp: string;\r\n /** 请求 URL */\r\n url?: string;\r\n /** 请求方法 */\r\n method?: string;\r\n /** 错误堆栈信息 */\r\n stack?: string;\r\n}\r\n\r\n// 自定义 HttpError 类\r\nexport class HttpError extends Error {\r\n public readonly code: number;\r\n public readonly data?: unknown;\r\n public readonly timestamp: string;\r\n public readonly url?: string;\r\n public readonly method?: string;\r\n\r\n constructor(\r\n message: string,\r\n code: number,\r\n options?: {\r\n data?: unknown;\r\n url?: string;\r\n method?: string;\r\n }\r\n ) {\r\n super(message);\r\n this.name = \"HttpError\";\r\n this.code = code;\r\n this.data = options?.data;\r\n this.timestamp = new Date().toISOString();\r\n this.url = options?.url || \"\";\r\n this.method = options?.method || \"\";\r\n }\r\n\r\n public toLogData(): ErrorLogData {\r\n return {\r\n code: this.code,\r\n message: this.message,\r\n data: this.data,\r\n timestamp: this.timestamp,\r\n url: this.url || \"\",\r\n method: this.method || \"\",\r\n stack: this.stack || \"\"\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * 获取错误消息\r\n * @param status 错误状态码\r\n * @returns 错误消息\r\n */\r\nconst getErrorMessage = (status: number): string => {\r\n const errorMap: Record<number, string> = {\r\n [ApiStatus.unauthorized]: HttpMsg.unauthorized,\r\n [ApiStatus.forbidden]: HttpMsg.forbidden,\r\n [ApiStatus.notFound]: HttpMsg.notFound,\r\n [ApiStatus.methodNotAllowed]: HttpMsg.methodNotAllowed,\r\n [ApiStatus.requestTimeout]: HttpMsg.requestTimeout,\r\n [ApiStatus.internalServerError]: HttpMsg.internalServerError,\r\n [ApiStatus.badGateway]: HttpMsg.badGateway,\r\n [ApiStatus.serviceUnavailable]: HttpMsg.serviceUnavailable,\r\n [ApiStatus.gatewayTimeout]: HttpMsg.gatewayTimeout\r\n };\r\n\r\n return errorMap[status] || HttpMsg.internalServerError;\r\n};\r\n\r\n/**\r\n * 处理错误\r\n * @param error 错误对象\r\n * @returns 错误对象\r\n */\r\nexport function handleError(error: AxiosError<ErrorResponse>): never {\r\n // 处理取消的请求\r\n if (error.code === \"ERR_CANCELED\") {\r\n console.warn(\"Request cancelled:\", error.message);\r\n throw new HttpError(HttpMsg.requestCancelled, ApiStatus.error);\r\n }\r\n\r\n const statusCode = error.response?.status;\r\n const errorMessage = error.response?.data?.msg || error.message;\r\n const requestConfig = error.config;\r\n\r\n // 处理网络错误\r\n if (!error.response) {\r\n throw new HttpError(HttpMsg.networkError, ApiStatus.error, {\r\n url: requestConfig?.url || \"\",\r\n method: requestConfig?.method?.toUpperCase() || \"\"\r\n });\r\n }\r\n\r\n // 处理 HTTP 状态码错误\r\n const message = statusCode ? getErrorMessage(statusCode) : errorMessage || HttpMsg.requestFailed;\r\n throw new HttpError(message, statusCode || ApiStatus.error, {\r\n data: error.response.data,\r\n url: requestConfig?.url || \"\",\r\n method: requestConfig?.method?.toUpperCase() || \"\"\r\n });\r\n}\r\n\r\n/**\r\n * 显示错误消息\r\n * @param error 错误对象\r\n * @param showMessage 是否显示错误消息\r\n */\r\nexport function showError(error: HttpError, showMessage: boolean = true): void {\r\n if (showMessage) {\r\n ElMessage.error(error.message);\r\n }\r\n // 记录错误日志\r\n console.error(\"[HTTP Error]\", error.toLogData());\r\n}\r\n\r\n/**\r\n * 显示成功消息\r\n * @param message 成功消息\r\n * @param showMessage 是否显示消息\r\n */\r\nexport function showSuccess(message: string, showMessage: boolean = true): void {\r\n if (showMessage) {\r\n ElMessage.success(message);\r\n }\r\n}\r\n\r\n/**\r\n * 判断是否为 HttpError 类型\r\n * @param error 错误对象\r\n * @returns 是否为 HttpError 类型\r\n */\r\nexport const isHttpError = (error: unknown): error is HttpError => {\r\n return error instanceof HttpError;\r\n};\r\n","// 自定义四点旋转SVG\r\nexport const fourDotsSpinnerSvg = `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\">\r\n <style>\r\n .spinner {\r\n transform-origin: 20px 20px;\r\n animation: rotate 1.6s linear infinite;\r\n }\r\n .dot {\r\n fill: var(--theme-color);\r\n animation: fade 1.6s infinite;\r\n }\r\n .dot:nth-child(1) { animation-delay: 0s; }\r\n .dot:nth-child(2) { animation-delay: 0.5s; }\r\n .dot:nth-child(3) { animation-delay: 1s; }\r\n .dot:nth-child(4) { animation-delay: 1.5s; }\r\n @keyframes rotate {\r\n 100% { transform: rotate(360deg); }\r\n }\r\n @keyframes fade {\r\n 0%, 100% { opacity: 1; }\r\n 50% { opacity: 0.5; }\r\n }\r\n </style>\r\n <g class=\"spinner\">\r\n <circle class=\"dot\" cx=\"20\" cy=\"8\" r=\"4\"/>\r\n <circle class=\"dot\" cx=\"32\" cy=\"20\" r=\"4\"/>\r\n <circle class=\"dot\" cx=\"20\" cy=\"32\" r=\"4\"/>\r\n <circle class=\"dot\" cx=\"8\" cy=\"20\" r=\"4\"/>\r\n </g>\r\n </svg>\r\n`;\r\n","/**\r\n * 全局 Loading 加载管理模块\r\n *\r\n * 提供统一的全屏加载动画管理\r\n *\r\n * ## 主要功能\r\n *\r\n * - 全屏 Loading 显示和隐藏\r\n * - 自动适配明暗主题背景色\r\n * - 自定义 SVG 加载动画\r\n * - 单例模式防止重复创建\r\n * - 锁定页面交互\r\n *\r\n * ## 使用场景\r\n *\r\n * - 页面初始化加载\r\n * - 大量数据请求\r\n * - 路由切换过渡\r\n * - 异步操作等待\r\n *\r\n * ## 特性\r\n *\r\n * - 自动检测当前主题并应用对应背景色\r\n * - 使用自定义 SVG 动画(四点旋转)\r\n * - 单例模式确保同时只有一个 Loading\r\n * - 提供便捷的显示/隐藏方法\r\n *\r\n * @module utils/ui/loading\r\n * @author Art Design Pro Team\r\n */\r\nimport { fourDotsSpinnerSvg } from \"./loadinSvg\";\r\nimport { ElLoading } from \"element-plus\";\r\n/**\r\n * 获取当前主题对应的loading背景色\r\n * @returns 背景色字符串\r\n */\r\nconst getLoadingBackground = (): string => {\r\n const isDark = document.documentElement.classList.contains(\"dark\");\r\n return isDark ? \"rgba(7, 7, 7, 0.85)\" : \"rgba(255, 255, 255, 0.5)\";\r\n};\r\n\r\nconst DEFAULT_LOADING_CONFIG = {\r\n lock: true,\r\n get background() {\r\n return getLoadingBackground();\r\n },\r\n svg: fourDotsSpinnerSvg,\r\n svgViewBox: \"0 0 40 40\",\r\n customClass: \"art-loading-fix\"\r\n} as const;\r\n\r\ninterface LoadingInstance {\r\n close: () => void;\r\n}\r\n\r\nlet loadingInstance: LoadingInstance | null = null;\r\n\r\nexport const loadingService = {\r\n /**\r\n * 显示 loading\r\n * @returns 关闭 loading 的函数\r\n */\r\n showLoading(): () => void {\r\n if (!loadingInstance) {\r\n // 每次显示时获取最新的配置,确保背景色与当前主题同步\r\n const config = {\r\n ...DEFAULT_LOADING_CONFIG,\r\n background: getLoadingBackground()\r\n };\r\n loadingInstance = ElLoading.service(config);\r\n }\r\n return () => this.hideLoading();\r\n },\r\n\r\n /**\r\n * 隐藏 loading\r\n */\r\n hideLoading(): void {\r\n if (loadingInstance) {\r\n loadingInstance.close();\r\n loadingInstance = null;\r\n }\r\n }\r\n};\r\n","import axios, { AxiosRequestConfig, AxiosResponse, InternalAxiosRequestConfig } from \"axios\";\r\nimport { HttpError, handleError, showError, showSuccess } from \"./error\";\r\nimport { ApiStatus, HttpMsg } from \"./status\";\r\nimport { BaseResponse, TtHttpReturnType } from \"./type\";\r\nimport { downloadFile } from \"../file\";\r\nimport { nextTick } from \"vue\";\r\nimport { loadingService } from \"./loading\";\r\n\r\n// 需要传入\r\n// router useUserStore closeLoading startLoading VITE_API_URL VITE_WITH_CREDENTIALS\r\n/** 退出登录函数 */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function TtHttp(config: any): TtHttpReturnType {\r\n const { router, useUserStore, VITE_API_URL, VITE_WITH_CREDENTIALS } = config;\r\n\r\n // 跟踪是否需要关闭 loading\r\n let pendingLoading = false;\r\n function closeLoading(): void {\r\n if (pendingLoading) {\r\n nextTick(() => {\r\n loadingService.hideLoading();\r\n pendingLoading = false;\r\n });\r\n }\r\n }\r\n /** 开始 loading 效果 */\r\n function startLoading(): void {\r\n pendingLoading = true;\r\n loadingService.showLoading();\r\n }\r\n // 文件类型\r\n const FILE_TYPES = [\r\n \"image/jpeg\",\r\n \"image/png\",\r\n \"image/gif\",\r\n \"image/webp\",\r\n \"image/svg+xml\",\r\n \"application/pdf\",\r\n \"application/msword\",\r\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\r\n \"application/vnd.ms-excel\",\r\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8\",\r\n ];\r\n\r\n /** 请求配置常量 */\r\n const REQUEST_TIMEOUT = 1000 * 60;\r\n const LOGOUT_DELAY = 500;\r\n const MAX_RETRIES = 0;\r\n const RETRY_DELAY = 1000;\r\n const UNAUTHORIZED_DEBOUNCE_TIME = 3000;\r\n\r\n let activeRequests = 0;\r\n function debuncesLoading() {\r\n setTimeout(() => {\r\n activeRequests--;\r\n if (activeRequests === 0) {\r\n closeLoading();\r\n }\r\n }, 0);\r\n }\r\n\r\n /** 401防抖状态 */\r\n let isUnauthorizedErrorShown = false;\r\n let unauthorizedTimer: NodeJS.Timeout | null = null;\r\n\r\n /** 扩展 AxiosRequestConfig */\r\n interface ExtendedAxiosRequestConfig extends AxiosRequestConfig {\r\n showErrorMessage?: boolean;\r\n showSuccessMessage?: boolean;\r\n hideLoading?: boolean;\r\n }\r\n\r\n /** Axios实例 */\r\n const axiosInstance = axios.create({\r\n timeout: REQUEST_TIMEOUT,\r\n baseURL: \"/\" + VITE_API_URL,\r\n withCredentials: VITE_WITH_CREDENTIALS === \"true\",\r\n validateStatus: status => status >= 200 && status < 300,\r\n transformResponse: [\r\n (data, headers) => {\r\n const contentType = headers[\"content-type\"];\r\n if (contentType?.includes(\"application/json\")) {\r\n try {\r\n return JSON.parse(data);\r\n } catch {\r\n return data;\r\n }\r\n }\r\n return data;\r\n },\r\n ],\r\n });\r\n\r\n /** 请求拦截器 */\r\n axiosInstance.interceptors.request.use(\r\n (request: InternalAxiosRequestConfig) => {\r\n const { accessToken, info } = useUserStore();\r\n if (accessToken) {\r\n request.headers.set(\"Authorization\", accessToken);\r\n request.headers.set(\"token\", accessToken);\r\n request.headers.set(\"x-userid-header\", info.userId);\r\n request.headers.set(\"x-permission-code-header\", router.currentRoute.value.meta.permissionOnlyCode as string);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n if (!(request as any).hideLoading && activeRequests === 0) {\r\n startLoading();\r\n }\r\n activeRequests++;\r\n\r\n if (request.data && !(request.data instanceof FormData) && !request.headers[\"Content-Type\"]) {\r\n request.headers.set(\"Content-Type\", \"application/json\");\r\n request.data = JSON.stringify(request.data);\r\n }\r\n\r\n return request;\r\n },\r\n error => {\r\n showError(createHttpError(HttpMsg.requestConfigError, ApiStatus.error));\r\n return Promise.reject(error);\r\n },\r\n );\r\n\r\n /** 响应拦截器 */\r\n axiosInstance.interceptors.response.use(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (response: AxiosResponse<BaseResponse> | any) => {\r\n debuncesLoading();\r\n const contentType = response.headers[\"content-type\"];\r\n if (contentType?.includes(\"application/json\")) {\r\n const { code, msg } = response.data;\r\n if ([ApiStatus.success, ApiStatus.success1].includes(code)) return response;\r\n if ([ApiStatus.unauthorized, ApiStatus.INVALID_TOKEN].includes(code)) handleUnauthorizedError(msg);\r\n throw createHttpError(msg || HttpMsg.requestFailed, code);\r\n } else if (FILE_TYPES.includes(contentType)) {\r\n // 文件类型 下载\r\n downloadFile(response, contentType);\r\n return response;\r\n }\r\n },\r\n error => {\r\n debuncesLoading();\r\n if (error.response?.status === ApiStatus.unauthorized) handleUnauthorizedError();\r\n return Promise.reject(handleError(error));\r\n },\r\n );\r\n\r\n /** 统一创建HttpError */\r\n function createHttpError(message: string, code: number) {\r\n return new HttpError(message, code);\r\n }\r\n\r\n /** 处理401错误(带防抖) */\r\n function handleUnauthorizedError(message?: string): never {\r\n const error = createHttpError(message || HttpMsg.unauthorized, ApiStatus.unauthorized);\r\n\r\n if (!isUnauthorizedErrorShown) {\r\n isUnauthorizedErrorShown = true;\r\n logOut();\r\n\r\n unauthorizedTimer = setTimeout(resetUnauthorizedError, UNAUTHORIZED_DEBOUNCE_TIME);\r\n\r\n showError(error, true);\r\n throw error;\r\n }\r\n\r\n throw error;\r\n }\r\n\r\n /** 重置401防抖状态 */\r\n function resetUnauthorizedError() {\r\n isUnauthorizedErrorShown = false;\r\n if (unauthorizedTimer) clearTimeout(unauthorizedTimer);\r\n unauthorizedTimer = null;\r\n }\r\n\r\n const logOut = () => {\r\n setTimeout(() => {\r\n useUserStore().logOut();\r\n }, LOGOUT_DELAY);\r\n };\r\n /** 是否需要重试 */\r\n function shouldRetry(statusCode: number) {\r\n return [\r\n ApiStatus.requestTimeout,\r\n ApiStatus.internalServerError,\r\n ApiStatus.badGateway,\r\n ApiStatus.serviceUnavailable,\r\n ApiStatus.gatewayTimeout,\r\n ].includes(statusCode);\r\n }\r\n\r\n /** 请求重试逻辑 */\r\n async function retryRequest<T>(config: ExtendedAxiosRequestConfig, retries: number = MAX_RETRIES): Promise<T> {\r\n try {\r\n return await request<T>(config);\r\n } catch (error) {\r\n if (error instanceof HttpError && [ApiStatus.NEED_REFRESH_TOKEN].includes(error.code)) {\r\n if (!config.url?.includes(\"/iam/user/refreshToken\")) {\r\n // 刷新token\r\n await useUserStore().refreshTokenFunc();\r\n await delay(RETRY_DELAY);\r\n return retryRequest<T>(config, retries - 1);\r\n }\r\n }\r\n if (retries > 0 && error instanceof HttpError && shouldRetry(error.code)) {\r\n await delay(RETRY_DELAY);\r\n return retryRequest<T>(config, retries - 1);\r\n }\r\n throw error;\r\n }\r\n }\r\n\r\n /** 延迟函数 */\r\n function delay(ms: number) {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n /** 请求函数 */\r\n async function request<T>(config: ExtendedAxiosRequestConfig): Promise<T> {\r\n // POST | PUT 参数自动填充\r\n if ([\"POST\", \"PUT\"].includes(config.method?.toUpperCase() || \"\") && config.params && !config.data) {\r\n config.data = config.params;\r\n config.params = undefined;\r\n }\r\n\r\n try {\r\n const res = await axiosInstance.request<BaseResponse<T>>(config);\r\n\r\n // 显示成功消息\r\n if (config.showSuccessMessage && res.data.msg) {\r\n showSuccess(res.data.msg);\r\n }\r\n\r\n return res.data.data as T;\r\n } catch (error) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const excludeError = [ApiStatus.unauthorized, ApiStatus.NEED_REFRESH_TOKEN].includes((error as any).code);\r\n if (error instanceof HttpError && !excludeError) {\r\n const showMsg = config.showErrorMessage !== false;\r\n showError(error, showMsg);\r\n }\r\n return Promise.reject(error);\r\n }\r\n }\r\n\r\n /**\r\n * 设置baseUrl\r\n */\r\n const setBaseUrl = (url: string) => {\r\n axiosInstance.defaults.baseURL = url;\r\n };\r\n\r\n /** API方法集合 */\r\n const api = {\r\n get<T>(config: ExtendedAxiosRequestConfig) {\r\n return retryRequest<T>({ ...config, method: \"GET\" });\r\n },\r\n post<T>(config: ExtendedAxiosRequestConfig) {\r\n return retryRequest<T>({ ...config, method: \"POST\" });\r\n },\r\n put<T>(config: ExtendedAxiosRequestConfig) {\r\n return retryRequest<T>({ ...config, method: \"PUT\" });\r\n },\r\n del<T>(config: ExtendedAxiosRequestConfig) {\r\n return retryRequest<T>({ ...config, method: \"DELETE\" });\r\n },\r\n request<T>(config: ExtendedAxiosRequestConfig) {\r\n return retryRequest<T>(config);\r\n },\r\n };\r\n\r\n return {\r\n ...api,\r\n logOut,\r\n setBaseUrl,\r\n };\r\n}\r\n","import type { App, Plugin } from 'vue'\r\n\r\nexport type SFCWithInstall<T> = T & Plugin\r\n\r\nexport function withInstall<T, E extends Record<string, any>>(main: T, extra?: E) {\r\n ;(main as SFCWithInstall<T>).install = (app: App) => {\r\n for (const comp of [main, ...Object.values(extra ?? {})]) {\r\n const name = (comp as any).name\r\n if (name) {\r\n app.component(name, comp)\r\n }\r\n }\r\n }\r\n if (extra) {\r\n for (const [key, comp] of Object.entries(extra)) {\r\n ;(main as any)[key] = comp\r\n }\r\n }\r\n return main as SFCWithInstall<T> & E\r\n}\r\n","import dayjs from \"dayjs\";\r\n\r\nconst toString = Object.prototype.toString;\r\n\r\n/**\r\n * 判断值的类型\r\n *\r\n * @param val 未知类型的值\r\n * @param type 需要判断的目标类型\r\n * @returns 如果val的类型与目标类型相符,则返回true;否则返回false\r\n *\r\n * 说明:\r\n * - 该函数通过Object.prototype.toString.call(val)方法获取val的内部[[Class]]属性值,然后与目标类型进行比较\r\n * - 这种方法可以准确地判断值的类型,包括数组、函数、日期等特殊对象\r\n */\r\nexport function is(val: unknown, type: string): boolean {\r\n return toString.call(val) === `[object ${type}]`;\r\n}\r\n\r\n/**\r\n * 判断一个值是否已定义\r\n *\r\n * 此函数用于检查传入的值是否为 undefined,以确定该值是否已定义\r\n * 在 TypeScript 中,通过这种方式可以对类型进行精确的判断,而不仅仅是依赖于值\r\n *\r\n * @param val 可能为任意类型的值,可能为 undefined\r\n * @returns 如果值不为 undefined,则返回 true;否则返回 false\r\n */\r\nexport function isDef<T = unknown>(val?: T): val is T {\r\n return typeof val !== \"undefined\";\r\n}\r\n\r\n/**\r\n * 判断值是否未定义\r\n *\r\n * 此函数用于检查传入的值是否为 undefined 或者 null\r\n * 它提供了一种类型安全的方式来忽略未知的类型,并确保我们在处理可能不存在的值时能够安全地进行\r\n *\r\n * @param val 可能为 undefined 或具体类型的值\r\n * @returns 如果值为 undefined 则返回 true;否则返回 false\r\n */\r\nexport function isUndefined(val?: any): val is undefined {\r\n return !isDef(val);\r\n}\r\n\r\n/**\r\n * 判断给定的值是否为 null\r\n *\r\n * @param val 任何类型的值,用于检查是否为 null\r\n * @returns 返回 true 如果 val 是 null,否则返回 false\r\n */\r\nexport function isNull(val: unknown): val is null {\r\n return val === null;\r\n}\r\n\r\n/**\r\n * 检查值是否为 null 或 undefined\r\n *\r\n * @param val 未知类型值,从 unknown 类型进行参数输入,可以接受任何类型的值\r\n * @returns 返回一个布尔值,如果 val 是 undefined 或 null,则返回 true,否则返回 false\r\n */\r\nexport function isNullOrUnDef(val: unknown): val is null | undefined {\r\n return isUndefined(val) || isNull(val);\r\n}\r\n\r\n/**\r\n * 检查给定的值是否为对象\r\n *\r\n * @param val 任意值,待检查其类型\r\n * @returns 如果值是对象,则返回true;否则返回false\r\n *\r\n * 此函数的存在是为了提供一个精确的类型检查机制,以确定传入的参数是否符合Record类型,\r\n * 这在处理复杂的数据结构时尤其有用,例如JSON数据解析或复杂的对象操作。通过这种方式,\r\n * 开发者可以确保数据的结构符合预期,从而避免潜在的运行时错误。\r\n * @example 如需从联合类型中获取对象类型,可以使用以下方式\r\n * isObject<TipConfig>\r\n */\r\nexport function isObject<T>(val: unknown | Record<string, T>): val is Record<string, T> {\r\n if (isNullOrUnDef(val)) return false;\r\n // 判断是否为 Promise 实例\r\n if (val instanceof Promise) {\r\n return true;\r\n }\r\n // 判断是否为普通对象\r\n return is(val, \"Object\");\r\n}\r\n\r\n/**\r\n * 检查给定的值是否为空\r\n * 此函数旨在统一处理多种数据类型,包括字符串、数组、Map、Set和对象\r\n * undefined 和 null 值也被视为\"空\"\r\n * 以判断它们是否为空。对于每种数据类型,采用不同的方法来检查空值\r\n *\r\n * @param val 任意类型的值,其空状态将被检查\r\n * @returns 如果值被认为是空的,则返回 true,否则返回 false\r\n */\r\nexport function isEmpty<T>(val: T): boolean {\r\n if (isNullOrUnDef(val)) return true;\r\n\r\n if (isArray(val) || isString(val)) return val.length === 0;\r\n\r\n if (val instanceof Map || val instanceof Set) return val.size === 0;\r\n\r\n if (isObject(val)) return Object.keys(val).length === 0;\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * 检查给定的值是否为空(包括0值)\r\n * 将以下值判定为空:0、'0'、'undefined'、'null'\r\n *\r\n * @param val 任意类型的值\r\n * @returns 如果值为 0、'0'、'undefined'、'null',则返回 true,否则返回 false\r\n */\r\nexport function isEmptyZero(val: unknown): boolean {\r\n if (isEmpty(val)) return true;\r\n\r\n // 检查数字 0\r\n if (val === 0) return true;\r\n\r\n // 检查字符串类型\r\n if (isString(val)) {\r\n return val === \"0\" || val === \"undefined\" || val === \"null\";\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * 判断给定的值是否为Date类型\r\n *\r\n * @param val 未知类型值,由用户传入\r\n * @returns 如果val是Date类型,返回true;否则返回false\r\n */\r\nexport function isDate(val: unknown): val is Date {\r\n return is(val, \"Date\");\r\n}\r\n\r\n/**\r\n * 判断给定的值是否为Number类型 排除NaN\r\n * 一个数字与自身相比较,除了 NaN 之外都应该相等\r\n * @param val 未知类型值,由用户传入\r\n * @returns 如果val是Number类型,返回true;否则返回false\r\n */\r\nexport function isNumber(val: unknown): val is number {\r\n // eslint-disable-next-line no-self-compare\r\n return is(val, \"Number\") && val === val;\r\n}\r\n\r\n/**\r\n * 判断给定的值是否为Promise类型\r\n *\r\n * @param val 未知类型值,由用户传入\r\n * @returns 如果val是Promise类型,返回true;否则返回false\r\n */\r\nexport function isPromise<T = any>(val: unknown): val is Promise<T> {\r\n return is(val, \"Promise\") && isObject(val) && isFunction(val.then) && isFunction(val.catch);\r\n}\r\n\r\n/**\r\n * 判断给定的值是否为String类型\r\n *\r\n * @param val 未知类型值,由用户传入\r\n * @returns 如果val是String类型,返回true;否则返回false\r\n */\r\nexport function isString(val: unknown): val is string {\r\n return is(val, \"String\");\r\n}\r\n\r\n/**\r\n * 判断给定的值是否为Function类型\r\n *\r\n * @param val 未知类型值,由用户传入\r\n * @returns 如果val是Function类型,返回true;否则返回false\r\n */\r\nexport function isFunction(val: unknown): val is (...args: any[]) => any {\r\n return typeof val === \"function\";\r\n}\r\n\r\n/**\r\n * 判断给定的值是否为Boolean类型\r\n *\r\n * @param val 未知类型值,由用户传入\r\n * @returns 如果val是Boolean类型,返回true;否则返回false\r\n */\r\nexport function isBoolean(val: unknown): val is boolean {\r\n return is(val, \"Boolean\");\r\n}\r\n\r\n/**\r\n * 判断给定的值是否为RegExp类型\r\n *\r\n * @param val 未知类型值,由用户传入\r\n * @returns 如果val是RegExp类型,返回true;否则返回false\r\n */\r\nexport function isRegExp(val: unknown): val is RegExp {\r\n return is(val, \"RegExp\");\r\n}\r\n\r\n/**\r\n * 判断给定的值是否为Array类型\r\n *\r\n * @param val 未知类型值,由用户传入\r\n * @returns 如果val是Array类型,返回true;否则返回false\r\n */\r\nexport function isArray(val: any): val is Array<any> {\r\n return val && Array.isArray(val);\r\n}\r\n\r\n/**\r\n * 判断给定的值是否为Window类型\r\n *\r\n * @param val 未知类型值,由用户传入\r\n * @returns 如果val是Window类型,返回true;否则返回false\r\n */\r\nexport function isWindow(val: any): val is Window {\r\n return typeof window !== \"undefined\" && is(val, \"Window\");\r\n}\r\n\r\n/**\r\n * 判断给定的值是否是一个 DOM 元素。\r\n *\r\n * @param e 任意类型的值,其类型由调用者决定。\r\n * @returns 如果 `e` 是一个 DOM 元素实例,则返回 `true`,否则返回 `false`。\r\n */\r\nexport function isElement(e: unknown): e is Element {\r\n if (typeof Element === \"undefined\") return false;\r\n return e instanceof Element;\r\n}\r\n\r\n/**\r\n * 检查给定的值是否为Map类型\r\n *\r\n * @param val 未知类型的值\r\n * @returns 如果给定的值是Map类型,则返回true;否则返回false\r\n */\r\nexport function isMap(val: unknown): val is Map<any, any> {\r\n return is(val, \"Map\");\r\n}\r\n\r\nexport const isServer: boolean = typeof window === \"undefined\";\r\n\r\nexport const isClient: boolean = !isServer;\r\n\r\n/**\r\n * 检查给定的值是否为正确的Url地址\r\n *\r\n * @param path 字符串类型的值\r\n * @returns 如果给定的值是Url地址,则返回true;否则返回false\r\n */\r\nexport function isUrl(path: string): boolean {\r\n const reg =\r\n /(?:^https?:(?:\\/\\/)?(?:[-;:&=+$,\\w]+@)?[A-Za-z0-9.-]+(?::\\d+)?|(?:www.|[-;:&=+$,\\w]+@)[A-Za-z0-9.-]+)(?:\\/[+~%/.\\w-]*)?\\??[-+=&;%@.\\w]*(?:#\\w*)?$/;\r\n return reg.test(path);\r\n}\r\n\r\n/**\r\n * 判断一个字符串是否可以转换为数字\r\n *\r\n * @param val 待检查的字符串\r\n * @returns 如果字符串可以转换为数字,则返回true;否则返回false\r\n */\r\nexport function isStringNumber(val: string): boolean {\r\n if (!isString(val)) return false;\r\n\r\n return !Number.isNaN(Number(val));\r\n}\r\n\r\n/**\r\n * 检查给定的值是否为原始类型\r\n *\r\n * 原始类型包括:数字、字符串、布尔值、符号、大整数、未定义、空值\r\n *\r\n * @param {*} value 要检查的值\r\n * @returns {boolean} 检查结果\r\n */\r\nexport function isPrimitive(value: any): boolean {\r\n return value === undefined || value === null || (typeof value !== \"object\" && typeof value !== \"function\");\r\n}\r\n\r\n/**\r\n * 是否为错误对象\r\n * @param val 入参\r\n */\r\nexport function isError(val: any): boolean {\r\n return Object.prototype.toString.call(val).slice(8, -1) === \"Error\";\r\n}\r\n\r\n/**\r\n * 是否为Symbol函数\r\n * @param val 入参\r\n */\r\nexport function isSymbol(val: any): boolean {\r\n return Object.prototype.toString.call(val).slice(8, -1) === \"Symbol\";\r\n}\r\n\r\n/**\r\n * 是否为Set对象\r\n * @param val 入参\r\n */\r\nexport function isSet(val: any): boolean {\r\n return Object.prototype.toString.call(val).slice(8, -1) === \"Set\";\r\n}\r\n\r\n/**\r\n * 是否为非真\r\n * @param val 入参\r\n */\r\nexport function isFalse(val: any): boolean {\r\n if (!val || val === isNull(val) || val === isUndefined(val) || val === false || val === Number.isNaN(val)) {\r\n return true;\r\n }\r\n if (isArray(val) && val.length === 0) return true;\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * 是否为真\r\n * @param val 入参\r\n */\r\nexport function isTrue(val: any): boolean {\r\n return !isFalse(val);\r\n}\r\n\r\n/**\r\n * 获取设备类型\r\n */\r\nexport function getDeviceType(): string {\r\n const u = navigator.userAgent;\r\n if (u.includes(\"Android\") || u.includes(\"Linux\")) {\r\n // 安卓\r\n return \"Android\";\r\n } else if (u.includes(\"iPhone\")) {\r\n // 苹果\r\n return \"iPhone\";\r\n } else if (u.includes(\"iPad\")) {\r\n // iPad\r\n return \"iPad\";\r\n } else if (u.includes(\"Windows Phone\")) {\r\n // winphone手机\r\n return \"Windows Phone\";\r\n } else {\r\n return u;\r\n }\r\n}\r\n\r\n/**\r\n * 获取浏览器类型\r\n */\r\nexport function getBrowserType(): string {\r\n const userAgent = navigator.userAgent; // 取得浏览器的userAgent字符串\r\n\r\n if (isIE(userAgent)) {\r\n return getIEVersion(userAgent);\r\n }\r\n if (isIE11(userAgent)) return \"IE11\";\r\n if (isEdge(userAgent)) return \"Edge\";\r\n if (isFF(userAgent)) return \"FF\";\r\n if (isOpera(userAgent)) return \"Opera\";\r\n if (isSafari(userAgent)) return \"Safari\";\r\n if (isChrome(userAgent)) return \"Chrome\";\r\n return \"\";\r\n}\r\n\r\nfunction isIE(userAgent: string): boolean {\r\n const isOpera = userAgent.includes(\"Opera\"); // 判断是否Opera浏览器\r\n return userAgent.includes(\"compatible\") && userAgent.includes(\"MSIE\") && !isOpera;\r\n}\r\n\r\nfunction isIE11(userAgent: string): boolean {\r\n return userAgent.includes(\"Trident\") && userAgent.includes(\"rv:11.0\");\r\n}\r\n\r\nfunction isEdge(userAgent: string): boolean {\r\n const isIE = userAgent.includes(\"compatible\") && userAgent.includes(\"MSIE\");\r\n return userAgent.includes(\"Edge\") && !isIE;\r\n}\r\n\r\nfunction isFF(userAgent: string): boolean {\r\n return userAgent.includes(\"Firefox\");\r\n}\r\n\r\nfunction isOpera(userAgent: string): boolean {\r\n return userAgent.includes(\"Opera\");\r\n}\r\n\r\nfunction isSafari(userAgent: string): boolean {\r\n return userAgent.includes(\"Safari\") && !userAgent.includes(\"Chrome\");\r\n}\r\n\r\nfunction isChrome(userAgent: string): boolean {\r\n return userAgent.includes(\"Chrome\") && userAgent.includes(\"Safari\");\r\n}\r\n\r\nfunction getIEVersion(userAgent: string): string {\r\n const reIE = /MSIE (\\d+\\.\\d+);/;\r\n const match = userAgent.match(reIE);\r\n const fIEVersion = match ? Number.parseFloat(match[1] || \"0\") : 0;\r\n if (fIEVersion === 7) return \"IE7\";\r\n else if (fIEVersion === 8) return \"IE8\";\r\n else if (fIEVersion === 9) return \"IE9\";\r\n else if (fIEVersion === 10) return \"IE10\";\r\n else return \"IE7以下\";\r\n}\r\n\r\n/**\r\n * 是否为ios\r\n * @returns {boolean} 是-否\r\n */\r\nexport function isIos(): boolean {\r\n const tag = getDeviceType();\r\n if (tag === \"iPhone\") return true;\r\n else return false;\r\n}\r\n\r\n/**\r\n * 是否为Android\r\n */\r\nexport function isAndroid(): boolean {\r\n const tag = getDeviceType();\r\n if (tag === \"Android\") return true;\r\n else return false;\r\n}\r\n\r\n/**\r\n * 是否为PC端\r\n */\r\nexport function isPC(): boolean {\r\n const userAgentInfo = navigator.userAgent;\r\n const Agents = [\"Android\", \"iPhone\", \"SymbianOS\", \"Windows Phone\", \"iPad\", \"iPod\"];\r\n let flag = true;\r\n for (let v = 0; v < Agents.length; v++) {\r\n const agent = Agents[v];\r\n if (agent && userAgentInfo.indexOf(agent) > 0) {\r\n flag = false;\r\n break;\r\n }\r\n }\r\n return flag;\r\n}\r\n\r\n/**\r\n * @description 判读是否为外链\r\n * @param path\r\n */\r\nexport function isExternal(path: string): boolean {\r\n return /^(?:https?:|mailto:|tel:|\\/\\/)/.test(path);\r\n}\r\n\r\n/**\r\n * @description 判断是否为json\r\n * @param value\r\n */\r\nexport function isJson(value: string | null): boolean {\r\n if (typeof value === \"string\") {\r\n try {\r\n const obj = JSON.parse(value);\r\n return !!(typeof obj === \"object\" && obj);\r\n } catch (e) {\r\n console.error(`error:${e}`);\r\n return false;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport function isDayjsObject(value: any): value is dayjs.Dayjs {\r\n return dayjs.isDayjs(value);\r\n}\r\n","/**\r\n * TestID 生成工具函数\r\n * 用于为组件自动生成唯一、层级化的 testid\r\n *\r\n * @module testid-helper\r\n * @see e2e-testing-solution/TESTID-SPECIFICATION.md\r\n */\r\n\r\n/**\r\n * 从组件传入的 API 配置提取资源名称\r\n *\r\n * - 当 `api` 是字符串时,直接返回字符串(推荐传入类似 `client.queryUserList` 的唯一名称)\r\n * - 当 `api` 是函数引用时,返回函数名\r\n * - 其它情况返回空字符串,由调用方自行兜底\r\n *\r\n * @param api - API 字符串或函数\r\n * @returns 资源名称(原样或函数名)\r\n *\r\n * @example\r\n * ```ts\r\n * extractResourceFromApi('adminClientImpl.FindTriggerProjects')\r\n * // → 'adminClientImpl.FindTriggerProjects'\r\n *\r\n * extractResourceFromApi(CountryGetPageGET)\r\n * // → 'CountryGetPageGET'\r\n * ```\r\n */\r\nexport function extractResourceFromApi(api: string | Function): string {\r\n if (typeof api === 'string') \r\nreturn api.trim()\r\n\r\n if (typeof api === 'function') {\r\n const name = api.name || ''\r\n // 移除绑定函数的 'bound ' 前缀\r\n return name.replace(/^bound\\s+/i, '')\r\n }\r\n\r\n return ''\r\n}\r\n\r\n/**\r\n * 生成 testid\r\n *\r\n * 将多个部分拼接成完整的 testid,自动过滤 null、undefined 和空字符串\r\n *\r\n * @param parts - testid 的各个部分\r\n * @returns 拼接后的 testid\r\n *\r\n * @example\r\n * ```ts\r\n * generateTestId('user', 'form', 'field', 'username')\r\n * // → 'user-form-field-username'\r\n *\r\n * generateTestId('user', null, 'table', undefined, 'row', '123')\r\n * // → 'user-table-row-123'\r\n *\r\n * generateTestId('modal', 'user-edit')\r\n * // → 'modal-user-edit'\r\n * ```\r\n */\r\nexport function generateTestId(...parts: (string | undefined | null)[]): string {\r\n return parts\r\n .filter((part): part is string => {\r\n return part !== null && part !== undefined && part !== ''\r\n })\r\n .join('-')\r\n}\r\n\r\n/**\r\n * 转换为 kebab-case\r\n *\r\n * 支持以下转换:\r\n * - 空格分隔: \"Add User\" → \"add-user\"\r\n * - PascalCase: \"AddUser\" → \"add-user\"\r\n * - camelCase: \"addUser\" → \"add-user\"\r\n * - 下划线: \"add_user\" → \"add-user\"\r\n * - 中文: \"用户管理\" → \"yong-hu-guan-li\"(需要拼音库,可选功能)\r\n *\r\n * @param str - 要转换的字符串\r\n * @returns kebab-case 字符串\r\n *\r\n * @example\r\n * ```ts\r\n * toKebabCase('Add User')\r\n * // → 'add-user'\r\n *\r\n * toKebabCase('AddUser')\r\n * // → 'add-user'\r\n *\r\n * toKebabCase('addUser')\r\n * // → 'add-user'\r\n *\r\n * toKebabCase('add_user')\r\n * // → 'add-user'\r\n *\r\n * toKebabCase('Add-User')\r\n * // → 'add-user'\r\n * ```\r\n */\r\nexport function toKebabCase(str: string): string {\r\n if (!str) \r\nreturn ''\r\n\r\n return (\r\n str\r\n // 处理 PascalCase 和 camelCase: \"AddUser\" → \"Add-User\"\r\n .replace(/([a-z])([A-Z])/g, '$1-$2')\r\n // 处理连续大写字母: \"XMLParser\" → \"XML-Parser\"\r\n .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')\r\n // 将空格、下划线等替换为连字符\r\n .replace(/[\\s_]+/g, '-')\r\n // 移除特殊字符\r\n .replace(/[^\\w\\u4E00-\\u9FA5-]+/g, '-')\r\n // 转小写\r\n .toLowerCase()\r\n // 移除首尾连字符\r\n .replace(/^-+|-+$/g, '')\r\n // 合并多个连续的连字符\r\n .replace(/-+/g, '-')\r\n )\r\n}\r\n\r\n/**\r\n * 从 fieldNames 生成表单名称\r\n *\r\n * 取 schema 中前 N 个 fieldName 拼接,用于自动生成表单名称\r\n *\r\n * @param fieldNames - 字段名称数组\r\n * @param maxLength - 最多取几个字段名(默认 3)\r\n * @returns 拼接后的表单名称\r\n *\r\n * @example\r\n * ```ts\r\n * generateFormName(['username', 'email', 'phone', 'address'])\r\n * // → 'username-email-phone'\r\n *\r\n * generateFormName(['username', 'email'], 3)\r\n * // → 'username-email'\r\n *\r\n * generateFormName(['username'], 3)\r\n * // → 'username'\r\n *\r\n * generateFormName([])\r\n * // → 'form'\r\n * ```\r\n */\r\nexport function generateFormName(fieldNames: string[], maxLength = 3): string {\r\n if (!fieldNames || fieldNames.length === 0) {\r\n return 'form'\r\n }\r\n\r\n const validFieldNames = fieldNames\r\n .filter((name): name is string => {\r\n return name !== null && name !== undefined && name !== ''\r\n })\r\n .slice(0, maxLength)\r\n\r\n if (validFieldNames.length === 0) {\r\n return 'form'\r\n }\r\n\r\n return validFieldNames.join('-')\r\n}\r\n\r\n/**\r\n * 从标题提取 ID\r\n *\r\n * 用于从 Modal/Drawer 的 title 生成 ID\r\n *\r\n * @param title - 标题字符串\r\n * @returns kebab-case ID\r\n *\r\n * @example\r\n * ```ts\r\n * extractIdFromTitle('Add User')\r\n * // → 'add-user'\r\n *\r\n * extractIdFromTitle('编辑用户信息')\r\n * // → 'bian-ji-yong-hu-xin-xi'\r\n * ```\r\n */\r\nexport function extractIdFromTitle(title: string): string {\r\n if (!title) \r\nreturn ''\r\n return toKebabCase(title)\r\n}\r\n\r\n/**\r\n * 验证 testid 是否有效\r\n *\r\n * 检查 testid 是否符合命名规范:\r\n * - 非空\r\n * - 只包含小写字母、数字、连字符\r\n * - 不以连字符开头或结尾\r\n *\r\n * @param testid - 要验证的 testid\r\n * @returns 是否有效\r\n *\r\n * @example\r\n * ```ts\r\n * isValidTestId('user-form-field-username')\r\n * // → true\r\n *\r\n * isValidTestId('User-Form')\r\n * // → false (包含大写字母)\r\n *\r\n * isValidTestId('-user-form')\r\n * // → false (以连字符开头)\r\n *\r\n * isValidTestId('')\r\n * // → false (空字符串)\r\n * ```\r\n */\r\nexport function isValidTestId(testid: string): boolean {\r\n if (!testid) \r\nreturn false\r\n\r\n // 只允许小写字母、数字、连字符\r\n const validPattern = /^[a-z0-9]+(-[a-z0-9]+)*$/\r\n return validPattern.test(testid)\r\n}\r\n","var setupDefaults = {\r\n keyId: 1,\r\n cookies: {\r\n path: '/'\r\n },\r\n treeOptions: {\r\n parentKey: 'parentId',\r\n key: 'id',\r\n children: 'children'\r\n },\r\n parseDateFormat: 'yyyy-MM-dd HH:mm:ss',\r\n firstDayOfWeek: 1\r\n}\r\n\r\nexport default setupDefaults\r\n","function arrayEach (list, iterate, context) {\r\n if (list) {\r\n if (list.forEach) {\r\n list.forEach(iterate, context)\r\n } else {\r\n for (var index = 0, len = list.length; index < len; index++) {\r\n iterate.call(context, list[index], index, list)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default arrayEach\r\n","var objectToString = Object.prototype.toString\r\n\r\nexport default objectToString\r\n","import objectToString from './staticObjectToString'\r\n\r\nfunction helperCreateInInObjectString (type) {\r\n return function (obj) {\r\n return '[object ' + type + ']' === objectToString.call(obj)\r\n }\r\n}\r\n\r\nexport default helperCreateInInObjectString\r\n","import helperCreateInInObjectString from './helperCreateInInObjectString'\r\n\r\n/**\r\n * 判断是否数组\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar isArray = Array.isArray || helperCreateInInObjectString('Array')\r\n\r\nexport default isArray\r\n","/**\r\n * 判断对象自身属性中是否具有指定的属性\r\n *\r\n * @param {Object} obj 对象\r\n * @param {String/Number} key 键值\r\n * @return {Boolean}\r\n */\r\nfunction hasOwnProp (obj, key) {\r\n return obj && obj.hasOwnProperty ? obj.hasOwnProperty(key) : false\r\n}\r\n\r\nexport default hasOwnProp\r\n","import hasOwnProp from './hasOwnProp'\r\n\r\nfunction objectEach (obj, iterate, context) {\r\n if (obj) {\r\n for (var key in obj) {\r\n if (hasOwnProp(obj, key)) {\r\n iterate.call(context, obj[key], key, obj)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default objectEach\r\n","import isArray from './isArray'\r\nimport arrayEach from './arrayEach'\r\nimport objectEach from './objectEach'\r\n\r\n/**\r\n * 迭代器\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @param {Object} context 上下文\r\n * @return {Object}\r\n */\r\nfunction each (obj, iterate, context) {\r\n if (obj) {\r\n return (isArray(obj) ? arrayEach : objectEach)(obj, iterate, context)\r\n }\r\n return obj\r\n}\r\n\r\nexport default each\r\n","/* eslint-disable valid-typeof */\r\nfunction helperCreateInTypeof (type) {\r\n return function (obj) {\r\n return typeof obj === type\r\n }\r\n}\r\n\r\nexport default helperCreateInTypeof\r\n","import helperCreateInTypeof from './helperCreateInTypeof'\r\n\r\n/**\r\n * 判断是否方法\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar isFunction = helperCreateInTypeof('function')\r\n\r\nexport default isFunction\r\n","import each from './each'\r\n\r\nfunction helperCreateGetObjects (name, getIndex) {\r\n var proMethod = Object[name]\r\n return function (obj) {\r\n var result = []\r\n if (obj) {\r\n if (proMethod) {\r\n return proMethod(obj)\r\n }\r\n each(obj, getIndex > 1 ? function (key) {\r\n result.push(['' + key, obj[key]])\r\n } : function () {\r\n result.push(arguments[getIndex])\r\n })\r\n }\r\n return result\r\n }\r\n}\r\n\r\nexport default helperCreateGetObjects\r\n","import helperCreateGetObjects from './helperCreateGetObjects'\r\n\r\n/**\r\n * 获取对象所有属性\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @return {Array}\r\n */\r\nvar keys = helperCreateGetObjects('keys', 1)\r\n\r\nexport default keys\r\n","import objectToString from './staticObjectToString'\r\n\r\nimport objectEach from './objectEach'\r\nimport arrayEach from './arrayEach'\r\n\r\nfunction getCativeCtor (val, args) {\r\n var Ctor = val.__proto__.constructor\r\n return args ? new Ctor(args) : new Ctor()\r\n}\r\n\r\nfunction handleValueClone (item, isDeep) {\r\n return isDeep ? copyValue(item, isDeep) : item\r\n}\r\n\r\nfunction copyValue (val, isDeep) {\r\n if (val) {\r\n switch(objectToString.call(val)) {\r\n case \"[object Object]\": {\r\n var restObj = Object.create(Object.getPrototypeOf(val))\r\n objectEach(val, function (item, key) {\r\n restObj[key] = handleValueClone(item, isDeep)\r\n })\r\n return restObj\r\n }\r\n case \"[object Date]\":\r\n case \"[object RegExp]\": {\r\n return getCativeCtor(val, val.valueOf())\r\n }\r\n case \"[object Array]\":\r\n case \"[object Arguments]\": {\r\n var restArr = []\r\n arrayEach(val, function (item) {\r\n restArr.push(handleValueClone(item, isDeep))\r\n })\r\n return restArr\r\n }\r\n case \"[object Set]\": {\r\n var restSet = getCativeCtor(val)\r\n restSet.forEach(function (item) {\r\n restSet.add(handleValueClone(item, isDeep))\r\n })\r\n return restSet\r\n }\r\n case \"[object Map]\": {\r\n var restMap = getCativeCtor(val)\r\n restMap.forEach(function (item, key) {\r\n restMap.set(key, handleValueClone(item, isDeep))\r\n })\r\n return restMap\r\n }\r\n }\r\n }\r\n return val\r\n}\r\n\r\n/**\r\n * 浅拷贝/深拷贝\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Boolean} deep 是否深拷贝\r\n * @return {Object}\r\n */\r\nfunction clone (obj, deep) {\r\n if (obj) {\r\n return copyValue(obj, deep)\r\n }\r\n return obj\r\n}\r\n\r\nexport default clone\r\n","import arrayEach from './arrayEach'\r\nimport keys from './keys'\r\nimport isArray from './isArray'\r\nimport clone from './clone'\r\n\r\nvar objectAssignFns = Object.assign\r\n\r\nfunction handleAssign (destination, args, isClone) {\r\n var len = args.length\r\n for (var source, index = 1; index < len; index++) {\r\n source = args[index]\r\n arrayEach(keys(args[index]), isClone ? function (key) {\r\n destination[key] = clone(source[key], isClone)\r\n } : function (key) {\r\n destination[key] = source[key]\r\n })\r\n }\r\n return destination\r\n}\r\n\r\n/**\r\n * 将一个或多个源对象复制到目标对象中\r\n *\r\n * @param {Object} target 目标对象\r\n * @param {...Object}\r\n * @return {Boolean}\r\n */\r\nvar assign = function (target) {\r\n if (target) {\r\n var args = arguments\r\n if (target === true) {\r\n if (args.length > 1) {\r\n target = isArray(target[1]) ? [] : {}\r\n return handleAssign(target, args, true)\r\n }\r\n } else {\r\n return objectAssignFns ? objectAssignFns.apply(Object, args) : handleAssign(target, args)\r\n }\r\n }\r\n return target\r\n}\r\n\r\nexport default assign\r\n","import setupDefaults from './setupDefaults'\r\n\r\nimport arrayEach from './arrayEach'\r\nimport each from './each'\r\nimport isFunction from './isFunction'\r\n\r\nimport assign from './assign'\r\n\r\nvar XEUtils = function () {}\r\n\r\nfunction mixin () {\r\n arrayEach(arguments, function (methods) {\r\n each(methods, function (fn, name) {\r\n XEUtils[name] = isFunction(fn) ? function () {\r\n var result = fn.apply(XEUtils.$context, arguments)\r\n XEUtils.$context = null\r\n return result\r\n } : fn\r\n })\r\n })\r\n}\r\n\r\nfunction setConfig (options) {\r\n return assign(setupDefaults, options)\r\n}\r\n\r\nfunction getConfig () {\r\n return setupDefaults\r\n}\r\n\r\nvar version = '4.0.0'\r\n\r\nXEUtils.VERSION = version\r\nXEUtils.version = version\r\nXEUtils.mixin = mixin\r\nXEUtils.setup = setConfig\r\nXEUtils.setConfig = setConfig\r\nXEUtils.getConfig = getConfig\r\n\r\nexport default XEUtils\r\n","function lastArrayEach (obj, iterate, context) {\r\n for (var len = obj.length - 1; len >= 0; len--) {\r\n iterate.call(context, obj[len], len, obj)\r\n }\r\n}\r\n\r\nexport default lastArrayEach\r\n","import lastArrayEach from './lastArrayEach'\r\nimport keys from './keys'\r\n\r\nfunction lastObjectEach (obj, iterate, context) {\r\n lastArrayEach(keys(obj), function (key) {\r\n iterate.call(context, obj[key], key, obj)\r\n })\r\n}\r\n\r\nexport default lastObjectEach\r\n","/**\r\n * 判断是否为Null\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nfunction isNull (obj) {\r\n return obj === null\r\n}\r\n\r\nexport default isNull\r\n","import isNull from './isNull'\r\n\r\n/**\r\n * 返回一个获取对象属性的函数\r\n *\r\n * @param {String} name 属性名\r\n * @param {Object} defs 空值\r\n */\r\nfunction property (name, defs) {\r\n return function (obj) {\r\n return isNull(obj) ? defs : obj[name]\r\n }\r\n}\r\n\r\nexport default property\r\n","/**\r\n * 判断是否对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nfunction isPlainObject (obj) {\r\n return obj ? obj.constructor === Object : false\r\n}\r\n\r\nexport default isPlainObject\r\n","function helperCheckCopyKey (key) {\r\n return key !== '__proto__' && key !== 'constructor'\r\n}\r\n\r\nexport default helperCheckCopyKey\r\n","import isArray from './isArray'\r\nimport isPlainObject from './isPlainObject'\r\nimport isFunction from './isFunction'\r\nimport each from './each'\r\n\r\nimport helperCheckCopyKey from './helperCheckCopyKey'\r\n\r\nfunction handleMerge (target, source) {\r\n if ((isPlainObject(target) && isPlainObject(source)) || (isArray(target) && isArray(source))) {\r\n each(source, function (val, key) {\r\n if (helperCheckCopyKey(key)) {\r\n target[key] = isFunction(source) ? val : handleMerge(target[key], val)\r\n }\r\n })\r\n return target\r\n }\r\n return source\r\n}\r\n\r\n/**\r\n * 将一个或多个源对象合并到目标对象中\r\n *\r\n * @param {Object} target 目标对象\r\n * @param {...Object}\r\n * @return {Boolean}\r\n */\r\nvar merge = function (target) {\r\n if (!target) {\r\n target = {}\r\n }\r\n var args = arguments\r\n var len = args.length\r\n for (var source, index = 1; index < len; index++) {\r\n source = args[index]\r\n if (source) {\r\n handleMerge(target, source)\r\n }\r\n }\r\n return target\r\n}\r\n\r\nexport default merge\r\n","import each from './each'\r\n\r\n/**\r\n * 指定方法后的返回值组成的新数组\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @param {Object} context 上下文\r\n * @return {Array}\r\n */\r\nfunction map (obj, iterate, context) {\r\n var result = []\r\n if (obj && arguments.length > 1) {\r\n if (obj.map) {\r\n return obj.map(iterate, context)\r\n } else {\r\n each(obj, function () {\r\n result.push(iterate.apply(context, arguments))\r\n })\r\n }\r\n }\r\n return result\r\n}\r\n\r\nexport default map\r\n","import hasOwnProp from './hasOwnProp'\r\nimport isArray from './isArray'\r\n\r\nfunction helperCreateIterateHandle (prop, useArray, restIndex, matchValue, defaultValue) {\r\n return function (obj, iterate, context) {\r\n if (obj && iterate) {\r\n if (prop && obj[prop]) {\r\n return obj[prop](iterate, context)\r\n } else {\r\n if (useArray && isArray(obj)) {\r\n for (var index = 0, len = obj.length; index < len; index++) {\r\n if (!!iterate.call(context, obj[index], index, obj) === matchValue) {\r\n return [true, false, index, obj[index]][restIndex]\r\n }\r\n }\r\n } else {\r\n for (var key in obj) {\r\n if (hasOwnProp(obj, key)) {\r\n if (!!iterate.call(context, obj[key], key, obj) === matchValue) {\r\n return [true, false, key, obj[key]][restIndex]\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return defaultValue\r\n }\r\n}\r\n\r\nexport default helperCreateIterateHandle\r\n","import helperCreateIterateHandle from './helperCreateIterateHandle'\r\n\r\n/**\r\n * 对象中的值中的每一项运行给定函数,如果函数对任一项返回true,则返回true,否则返回false\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @param {Object} context 上下文\r\n * @return {Boolean}\r\n */\r\nvar some = helperCreateIterateHandle('some', 1, 0, true, false)\r\n\r\nexport default some\r\n","import helperCreateIterateHandle from './helperCreateIterateHandle'\r\n\r\n/**\r\n * 对象中的值中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true,否则返回false\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @param {Object} context 上下文\r\n * @return {Boolean}\r\n */\r\nvar every = helperCreateIterateHandle('every', 1, 1, false, true)\r\n\r\nexport default every\r\n","import hasOwnProp from './hasOwnProp'\r\n\r\n/**\r\n * 判断对象是否包含该值,成功返回true否则false\r\n *\r\n * @param {Object} obj 对象\r\n * @param {Object} val 值\r\n * @return {Boolean}\r\n */\r\nfunction includes (obj, val) {\r\n if (obj) {\r\n if (obj.includes) {\r\n return obj.includes(val)\r\n }\r\n for (var key in obj) {\r\n if (hasOwnProp(obj, key)) {\r\n if (val === obj[key]) {\r\n return true\r\n }\r\n }\r\n }\r\n }\r\n return false\r\n}\r\n\r\nexport default includes\r\n","import isArray from './isArray'\r\nimport includes from './includes'\r\n\r\n/**\r\n * 判断数组是否包含另一数组\r\n *\r\n * @param {Array} array1 数组\r\n * @param {Array} array2 被包含数组\r\n * @return {Boolean}\r\n */\r\nfunction includeArrays (array1, array2) {\r\n var len\r\n var index = 0\r\n if (isArray(array1) && isArray(array2)) {\r\n for (len = array2.length; index < len; index++) {\r\n if (!includes(array1, array2[index])) {\r\n return false\r\n }\r\n }\r\n return true\r\n }\r\n return includes(array1, array2)\r\n}\r\n\r\nexport default includeArrays\r\n","import each from './each'\r\nimport includes from './includes'\r\nimport isFunction from './isFunction'\r\nimport property from './property'\r\n\r\n/**\r\n * 数组去重\r\n * \r\n * @param {*} array 数组\r\n * @param {*} iterate 字段或回调\r\n * @param {*} context \r\n * @returns \r\n */\r\nfunction uniq (array, iterate, context) {\r\n var result = []\r\n if (iterate) {\r\n if (!isFunction(iterate)) {\r\n iterate = property(iterate)\r\n }\r\n var val, valMap = {}\r\n each(array, function (item, key) {\r\n val = iterate.call(context, item, key, array)\r\n if (!valMap[val]) {\r\n valMap[val] = 1\r\n result.push(item)\r\n }\r\n })\r\n } else {\r\n each(array, function (value) {\r\n if (!includes(result, value)) {\r\n result.push(value)\r\n }\r\n })\r\n }\r\n return result\r\n}\r\n\r\nexport default uniq\r\n","import map from './map'\r\n\r\n/**\r\n * 将对象或者伪数组转为新数组\r\n *\r\n * @param {Array} list 数组\r\n * @return {Array}\r\n */\r\nfunction toArray (list) {\r\n return map(list, function (item) {\r\n return item\r\n })\r\n}\r\n\r\nexport default toArray\r\n","var staticStrUndefined = 'undefined'\r\n\r\nexport default staticStrUndefined\r\n","import staticStrUndefined from './staticStrUndefined'\r\n\r\nimport helperCreateInTypeof from './helperCreateInTypeof'\r\n\r\n/**\r\n * 判断是否Undefined\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar isUndefined = helperCreateInTypeof(staticStrUndefined)\r\n\r\nexport default isUndefined\r\n","import isNull from './isNull'\r\nimport isUndefined from './isUndefined'\r\n\r\n/**\r\n * 判断是否 undefined 和 null\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nfunction eqNull (obj) {\r\n return isNull(obj) || isUndefined(obj)\r\n}\r\n\r\nexport default eqNull\r\n","var staticHGKeyRE = /(.+)?\\[(\\d+)\\]$/\r\n\r\nexport default staticHGKeyRE\r\n","function helperGetHGSKeys (property) {\r\n // 以最快的方式判断数组,可忽略准确性\r\n return property ? (property.splice && property.join ? property : ('' + property).replace(/(\\[\\d+\\])\\.?/g,'$1.').replace(/\\.$/, '').split('.')) : []\r\n}\r\n\r\nexport default helperGetHGSKeys\r\n","import staticHGKeyRE from './staticHGKeyRE'\r\n\r\nimport helperGetHGSKeys from './helperGetHGSKeys'\r\nimport hasOwnProp from './hasOwnProp'\r\nimport isUndefined from './isUndefined'\r\nimport eqNull from './eqNull'\r\n\r\n/**\r\n * 获取对象的属性的值,如果值为 undefined,则返回默认值\r\n * @param {Object/Array} obj 对象\r\n * @param {String/Function} property 键、路径\r\n * @param {Object} defaultValue 默认值\r\n * @return {Object}\r\n */\r\nfunction get (obj, property, defaultValue) {\r\n if (eqNull(obj)) {\r\n return defaultValue\r\n }\r\n var result = getValueByPath(obj, property)\r\n return isUndefined(result) ? defaultValue : result\r\n}\r\n\r\nfunction getDeepProps (obj, key) {\r\n var matchs = key ? key.match(staticHGKeyRE) : ''\r\n return matchs ? (matchs[1] ? (obj[matchs[1]] ? obj[matchs[1]][matchs[2]] : undefined) : obj[matchs[2]]) : obj[key]\r\n}\r\n\r\nfunction getValueByPath (obj, property) {\r\n if (obj) {\r\n var rest, props, len\r\n var index = 0\r\n if (obj[property] || hasOwnProp(obj, property)) {\r\n return obj[property]\r\n } else {\r\n props = helperGetHGSKeys(property)\r\n len = props.length\r\n if (len) {\r\n for (rest = obj; index < len; index++) {\r\n rest = getDeepProps(rest, props[index])\r\n if (eqNull(rest)) {\r\n if (index === len - 1) {\r\n return rest\r\n }\r\n return\r\n }\r\n }\r\n }\r\n return rest\r\n }\r\n }\r\n}\r\n\r\nexport default get\r\n","import arrayEach from './arrayEach'\r\nimport toArray from './toArray'\r\nimport map from './map'\r\n\r\nimport isArray from './isArray'\r\nimport isFunction from './isFunction'\r\nimport isPlainObject from './isPlainObject'\r\nimport isUndefined from './isUndefined'\r\nimport isNull from './isNull'\r\nimport eqNull from './eqNull'\r\nimport get from './get'\r\nimport property from './property'\r\n\r\nvar ORDER_PROP_ASC = 'asc'\r\nvar ORDER_PROP_DESC = 'desc'\r\n\r\n// function handleSort (v1, v2) {\r\n// return v1 > v2 ? 1 : -1\r\n// }\r\n\r\n// '' < 数字 < 字符 < null < undefined\r\nfunction handleSort (v1, v2) {\r\n if (isUndefined(v1)) {\r\n return 1\r\n }\r\n if (isNull(v1)) {\r\n return isUndefined(v2) ? -1 : 1\r\n }\r\n return v1 && v1.localeCompare ? v1.localeCompare(v2) : (v1 > v2 ? 1 : -1)\r\n}\r\n\r\nfunction buildMultiOrders (name, confs, compares) {\r\n return function (item1, item2) {\r\n var v1 = item1[name]\r\n var v2 = item2[name]\r\n if (v1 === v2) {\r\n return compares ? compares(item1, item2) : 0\r\n }\r\n return confs.order === ORDER_PROP_DESC ? handleSort(v2, v1) : handleSort(v1, v2)\r\n }\r\n}\r\n\r\nfunction getSortConfs (arr, list, fieldConfs, context) {\r\n var sortConfs = []\r\n fieldConfs = isArray(fieldConfs) ? fieldConfs : [fieldConfs]\r\n arrayEach(fieldConfs, function (handle, index) {\r\n if (handle) {\r\n var field = handle\r\n var order\r\n if (isArray(handle)) {\r\n field = handle[0]\r\n order = handle[1]\r\n } else if (isPlainObject(handle)) {\r\n field = handle.field\r\n order = handle.order\r\n }\r\n sortConfs.push({\r\n field: field,\r\n order: order || ORDER_PROP_ASC\r\n })\r\n arrayEach(list, isFunction(field) ? function (item, key) {\r\n item[index] = field.call(context, item.data, key, arr)\r\n } : function (item) {\r\n item[index] = field ? get(item.data, field) : item.data\r\n })\r\n }\r\n })\r\n return sortConfs\r\n}\r\n\r\n/**\r\n * 将数组进行排序\r\n *\r\n * @param {Array} arr 数组\r\n * @param {Function/String/Array} fieldConfs 方法或属性\r\n * @param {Object} context 上下文\r\n * @return {Array}\r\n */\r\nfunction orderBy (arr, fieldConfs, context) {\r\n if (arr) {\r\n if (eqNull(fieldConfs)) {\r\n return toArray(arr).sort(handleSort)\r\n }\r\n var compares\r\n var list = map(arr, function (item) {\r\n return { data: item }\r\n })\r\n var sortConfs = getSortConfs(arr, list, fieldConfs, context)\r\n var len = sortConfs.length - 1\r\n while (len >= 0) {\r\n compares = buildMultiOrders(len, sortConfs[len], compares)\r\n len--\r\n }\r\n if (compares) {\r\n list = list.sort(compares)\r\n }\r\n return map(list, property('data'))\r\n }\r\n return []\r\n}\r\n\r\nexport default orderBy\r\n","import orderBy from './orderBy'\r\n\r\nvar sortBy = orderBy\r\n\r\nexport default sortBy\r\n","/**\r\n * 获取一个指定范围内随机数\r\n *\r\n * @param {Number} minVal 最小值\r\n * @param {Number} maxVal 最大值\r\n * @return {Number}\r\n */\r\nfunction random (minVal, maxVal) {\r\n return minVal >= maxVal ? minVal : ((minVal = minVal >> 0) + Math.round(Math.random() * ((maxVal || 9) - minVal)))\r\n}\r\n\r\nexport default random\r\n","import helperCreateGetObjects from './helperCreateGetObjects'\r\n\r\n/**\r\n * 获取对象所有值\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @return {Array}\r\n */\r\nvar values = helperCreateGetObjects('values', 0)\r\n\r\nexport default values\r\n","import random from './random'\r\n\r\nimport values from './values'\r\n\r\n/**\r\n * 将一个数组随机打乱,返回一个新的数组\r\n *\r\n * @param {Array} array 数组\r\n * @return {Array}\r\n */\r\nfunction shuffle (array) {\r\n var index\r\n var result = []\r\n var list = values(array)\r\n var len = list.length - 1\r\n for (; len >= 0; len--) {\r\n index = len > 0 ? random(0, len) : 0\r\n result.push(list[index])\r\n list.splice(index, 1)\r\n }\r\n return result\r\n}\r\n\r\nexport default shuffle\r\n","function helperCreateToNumber (handle) {\r\n return function (str) {\r\n if (str) {\r\n var num = handle(str && str.replace ? str.replace(/,/g, '') : str)\r\n if (!isNaN(num)) {\r\n return num\r\n }\r\n }\r\n return 0\r\n }\r\n}\r\n\r\nexport default helperCreateToNumber\r\n","import helperCreateToNumber from './helperCreateToNumber'\r\n\r\n/**\r\n * 转数值\r\n * @param { String/Number } str 数值\r\n *\r\n * @return {Number}\r\n */\r\nvar toNumber = helperCreateToNumber(parseFloat)\r\n\r\nexport default toNumber\r\n","import toNumber from './toNumber'\r\n\r\n/**\r\n * 裁剪 Arguments 或数组 array,从 start 位置开始到 end 结束,但不包括 end 本身的位置\r\n * @param {Array/Arguments} array 数组或Arguments\r\n * @param {Number} startIndex 开始索引\r\n * @param {Number} endIndex 结束索引\r\n */\r\nfunction slice (array, startIndex, endIndex) {\r\n var result = []\r\n var argsSize = arguments.length\r\n if (array) {\r\n startIndex = argsSize >= 2 ? toNumber(startIndex) : 0\r\n endIndex = argsSize >= 3 ? toNumber(endIndex) : array.length\r\n if (array.slice) {\r\n return array.slice(startIndex, endIndex)\r\n }\r\n for (; startIndex < endIndex; startIndex++) {\r\n result.push(array[startIndex])\r\n }\r\n }\r\n return result\r\n}\r\n\r\nexport default slice\r\n","import helperCreateIterateHandle from './helperCreateIterateHandle'\r\n\r\n/**\r\n * 查找匹配第一条数据的键\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @param {Object} context 上下文\r\n * @return {Object}\r\n */\r\nvar findKey = helperCreateIterateHandle('', 0, 2, true)\r\n\r\nexport default findKey\r\n","import helperCreateIterateHandle from './helperCreateIterateHandle'\r\n\r\n/**\r\n * 从左至右遍历,匹配最近的一条数据\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @param {Object} context 上下文\r\n * @return {Object}\r\n */\r\nvar find = helperCreateIterateHandle('find', 1, 3, true)\r\n\r\nexport default find\r\n","import map from './map'\r\nimport property from './property'\r\n\r\n/**\r\n * 获取数组对象中某属性值,返回一个数组\r\n *\r\n * @param {Array} array 数组\r\n * @param {String} key 属性值\r\n * @return {Array}\r\n */\r\nfunction pluck (obj, key) {\r\n return map(obj, property(key))\r\n}\r\n\r\nexport default pluck\r\n","import isFunction from './isFunction'\r\nimport eqNull from './eqNull'\r\nimport get from './get'\r\n\r\nimport arrayEach from './arrayEach'\r\n\r\nfunction helperCreateMinMax (handle) {\r\n return function (arr, iterate) {\r\n if (arr && arr.length) {\r\n var rest, itemIndex\r\n arrayEach(arr, function (itemVal, index) {\r\n if (iterate) {\r\n itemVal = isFunction(iterate) ? iterate(itemVal, index, arr) : get(itemVal, iterate)\r\n }\r\n if (!eqNull(itemVal) && (eqNull(rest) || handle(rest, itemVal))) {\r\n itemIndex = index\r\n rest = itemVal\r\n }\r\n })\r\n return arr[itemIndex]\r\n }\r\n return rest\r\n }\r\n}\r\n\r\nexport default helperCreateMinMax\r\n","import helperCreateMinMax from './helperCreateMinMax'\r\n\r\n/**\r\n * 获取最大值\r\n *\r\n * @param {Array} arr 数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @return {Number}\r\n */\r\nvar max = helperCreateMinMax(function (rest, itemVal) {\r\n return rest < itemVal\r\n})\r\n\r\nexport default max\r\n","import pluck from './pluck'\r\n\r\nimport max from './max'\r\n\r\n/**\r\n * 与 zip 相反\r\n *\r\n * @param {Array} arrays 数组集合\r\n */\r\nfunction unzip (arrays) {\r\n var index, maxItem, len\r\n var result = []\r\n if (arrays && arrays.length) {\r\n index = 0\r\n maxItem = max(arrays, function (item) {\r\n return item ? item.length : 0\r\n })\r\n for (len = maxItem ? maxItem.length : 0; index < len; index++) {\r\n result.push(pluck(arrays, index))\r\n }\r\n }\r\n return result\r\n}\r\n\r\nexport default unzip\r\n","import isArray from './isArray'\r\nimport arrayEach from './arrayEach'\r\n\r\nfunction flattenDeep (array, deep) {\r\n var result = []\r\n arrayEach(array, function (vals) {\r\n result = result.concat(isArray(vals) ? (deep ? flattenDeep(vals, deep) : vals) : [vals])\r\n })\r\n return result\r\n}\r\n\r\n/**\r\n * 将一个多维数组铺平\r\n * @param {Array} array 数组\r\n * @param {Boolean} deep 是否深层\r\n * @return {Array}\r\n */\r\nfunction flatten (array, deep) {\r\n if (isArray(array)) {\r\n return flattenDeep(array, deep)\r\n }\r\n return []\r\n}\r\n\r\nexport default flatten\r\n","function helperLog (type, msg) {\r\n return (console[type] || console.log)(msg)\r\n}\r\n\r\nexport default helperLog\r\n","function helperDeleteProperty (obj, property) {\r\n try {\r\n delete obj[property]\r\n } catch (e) {\r\n obj[property] = undefined\r\n }\r\n}\r\n\r\nexport default helperDeleteProperty\r\n","import isArray from './isArray'\r\nimport lastArrayEach from './lastArrayEach'\r\nimport lastObjectEach from './lastObjectEach'\r\n\r\n/**\r\n * 迭代器,从最后开始迭代\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @param {Object} context 上下文\r\n * @return {Object}\r\n */\r\nfunction lastEach (obj, iterate, context) {\r\n if (obj) {\r\n return (isArray(obj) ? lastArrayEach : lastObjectEach)(obj, iterate, context)\r\n }\r\n return obj\r\n}\r\n\r\nexport default lastEach\r\n","import helperCreateInTypeof from './helperCreateInTypeof'\r\n\r\n/**\r\n * 判断是否Object对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar isObject = helperCreateInTypeof('object')\r\n\r\nexport default isObject\r\n","import helperDeleteProperty from './helperDeleteProperty'\r\n\r\nimport isPlainObject from './isPlainObject'\r\nimport isObject from './isObject'\r\nimport isArray from './isArray'\r\nimport isNull from './isNull'\r\nimport assign from './assign'\r\nimport objectEach from './objectEach'\r\n\r\n/**\r\n * 清空对象\r\n *\r\n * @param {Object} obj 对象\r\n * @param {*} defs 默认值,如果不传(清空所有属性)、如果传对象(清空并继承)、如果传值(给所有赋值)\r\n * @param {Object/Array} assigns 默认值\r\n * @return {Object}\r\n */\r\nfunction clear (obj, defs, assigns) {\r\n if (obj) {\r\n var len\r\n var isDefs = arguments.length > 1 && (isNull(defs) || !isObject(defs))\r\n var extds = isDefs ? assigns : defs\r\n if (isPlainObject(obj)) {\r\n objectEach(obj, isDefs ? function (val, key) {\r\n obj[key] = defs\r\n } : function (val, key) {\r\n helperDeleteProperty(obj, key)\r\n })\r\n if (extds) {\r\n assign(obj, extds)\r\n }\r\n } else if (isArray(obj)) {\r\n if (isDefs) {\r\n len = obj.length\r\n while (len > 0) {\r\n len--\r\n obj[len] = defs\r\n }\r\n } else {\r\n obj.length = 0\r\n }\r\n if (extds) {\r\n obj.push.apply(obj, extds)\r\n }\r\n }\r\n }\r\n return obj\r\n}\r\n\r\nexport default clear\r\n","import helperDeleteProperty from './helperDeleteProperty'\r\n\r\nimport isFunction from './isFunction'\r\nimport isArray from './isArray'\r\nimport each from './each'\r\nimport arrayEach from './arrayEach'\r\nimport lastEach from './lastEach'\r\nimport clear from './clear'\r\nimport eqNull from './eqNull'\r\n\r\nfunction pluckProperty (name) {\r\n return function (obj, key) {\r\n return key === name\r\n }\r\n}\r\n\r\n/**\r\n * 移除对象属性\r\n *\r\n * @param {Object/Array} obj 对象/数组\r\n * @param {Function/String} iterate 方法或属性\r\n * @param {Object} context 上下文\r\n * @return {Object/Array}\r\n */\r\nfunction remove (obj, iterate, context) {\r\n if (obj) {\r\n if (!eqNull(iterate)) {\r\n var removeKeys = []\r\n var rest = []\r\n if (!isFunction(iterate)) {\r\n iterate = pluckProperty(iterate)\r\n }\r\n each(obj, function (item, index, rest) {\r\n if (iterate.call(context, item, index, rest)) {\r\n removeKeys.push(index)\r\n }\r\n })\r\n if (isArray(obj)) {\r\n lastEach(removeKeys, function (item, key) {\r\n rest.push(obj[item])\r\n obj.splice(item, 1)\r\n })\r\n } else {\r\n rest = {}\r\n arrayEach(removeKeys, function (key) {\r\n rest[key] = obj[key]\r\n helperDeleteProperty(obj, key)\r\n })\r\n }\r\n return rest\r\n }\r\n return clear(obj)\r\n }\r\n return obj\r\n}\r\n\r\nexport default remove\r\n","import setupDefaults from './setupDefaults'\r\n\r\nimport arrayEach from './arrayEach'\r\n\r\nimport assign from './assign'\r\n\r\nfunction unTreeList (result, parentItem, array, opts) {\r\n var optKey = opts.key\r\n var optParentKey = opts.parentKey\r\n var optChildren = opts.children\r\n var optData = opts.data\r\n var optUpdated = opts.updated\r\n var optClear = opts.clear\r\n arrayEach(array, function (item) {\r\n var childList = item[optChildren]\r\n if (optData) {\r\n item = item[optData]\r\n }\r\n if (optUpdated !== false) {\r\n item[optParentKey] = parentItem ? parentItem[optKey] : null\r\n }\r\n result.push(item)\r\n if (childList && childList.length) {\r\n unTreeList(result, item, childList, opts)\r\n }\r\n if (optClear) {\r\n delete item[optChildren]\r\n }\r\n })\r\n return result\r\n}\r\n\r\n/**\r\n * 将一个树结构转成数组列表\r\n *\r\n * @param {Array} array 数组\r\n * @param {Object} options { children: 'children', data: 'data', clear: false }\r\n * @return {Array}\r\n */\r\nfunction toTreeArray (array, options) {\r\n return unTreeList([], null, array, assign({}, setupDefaults.treeOptions, options))\r\n}\r\n\r\nexport default toTreeArray\r\n","function helperCreateTreeFunc (handle) {\r\n return function (obj, iterate, options, context) {\r\n var opts = options || {}\r\n var optChildren = opts.children || 'children'\r\n return handle(null, obj, iterate, context, [], [], optChildren, opts)\r\n }\r\n}\r\n\r\nexport default helperCreateTreeFunc\r\n","import helperCreateTreeFunc from './helperCreateTreeFunc'\r\n\r\nfunction findTreeItem (parent, obj, iterate, context, path, node, parseChildren, opts) {\r\n if (obj) {\r\n var item, index, len, paths, nodes, match\r\n for (index = 0, len = obj.length; index < len; index++) {\r\n item = obj[index]\r\n paths = path.concat(['' + index])\r\n nodes = node.concat([item])\r\n if (iterate.call(context, item, index, obj, paths, parent, nodes)) {\r\n return { index: index, item: item, path: paths, items: obj, parent: parent, nodes: nodes }\r\n }\r\n if (parseChildren && item) {\r\n match = findTreeItem(item, item[parseChildren], iterate, context, paths.concat([parseChildren]), nodes, parseChildren, opts)\r\n if (match) {\r\n return match\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 从树结构中查找匹配第一条数据的键、值、路径\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, items, path, parent, nodes) 回调\r\n * @param {Object} options {children: 'children'}\r\n * @param {Object} context 上下文\r\n * @return {Object} { item, index, items, path, parent, nodes }\r\n */\r\nvar findTree = helperCreateTreeFunc(findTreeItem)\r\n\r\nexport default findTree\r\n","import helperCreateTreeFunc from './helperCreateTreeFunc'\r\nimport each from './each'\r\n\r\nfunction eachTreeItem (parent, obj, iterate, context, path, node, parseChildren, opts) {\r\n var paths, nodes\r\n each(obj, function (item, index) {\r\n paths = path.concat(['' + index])\r\n nodes = node.concat([item])\r\n iterate.call(context, item, index, obj, paths, parent, nodes)\r\n if (item && parseChildren) {\r\n paths.push(parseChildren)\r\n eachTreeItem(item, item[parseChildren], iterate, context, paths, nodes, parseChildren, opts)\r\n }\r\n })\r\n}\r\n\r\n/**\r\n * 从树结构中遍历数据的键、值、路径\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, items, path, parent, nodes) 回调\r\n * @param {Object} options {children: 'children', mapChildren: 'children}\r\n * @param {Object} context 上下文\r\n */\r\nvar eachTree = helperCreateTreeFunc(eachTreeItem)\r\n\r\nexport default eachTree\r\n","import helperCreateTreeFunc from './helperCreateTreeFunc'\r\n\r\nimport map from './map'\r\n\r\nfunction mapTreeItem (parent, obj, iterate, context, path, node, parseChildren, opts) {\r\n var paths, nodes, rest\r\n var mapChildren = opts.mapChildren || parseChildren\r\n return map(obj, function (item, index) {\r\n paths = path.concat(['' + index])\r\n nodes = node.concat([item])\r\n rest = iterate.call(context, item, index, obj, paths, parent, nodes)\r\n if (rest && item && parseChildren && item[parseChildren]) {\r\n rest[mapChildren] = mapTreeItem(item, item[parseChildren], iterate, context, paths, nodes, parseChildren, opts)\r\n }\r\n return rest\r\n })\r\n}\r\n\r\n/**\r\n * 从树结构中指定方法后的返回值组成的新数组\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, items, path, parent, nodes) 回调\r\n * @param {Object} options {children: 'children'}\r\n * @param {Object} context 上下文\r\n * @return {Object/Array}\r\n */\r\nvar mapTree = helperCreateTreeFunc(mapTreeItem)\r\n\r\nexport default mapTree\r\n","import helperCreateTreeFunc from './helperCreateTreeFunc'\r\n\r\nimport arrayEach from './arrayEach'\r\n\r\nimport assign from './assign'\r\n\r\nfunction searchTreeItem (matchParent, parent, obj, iterate, context, path, node, parseChildren, opts) {\r\n var paths, nodes, rest, isMatch, hasChild\r\n var rests = []\r\n var hasOriginal = opts.original\r\n var sourceData = opts.data\r\n var mapChildren = opts.mapChildren || parseChildren\r\n var isEvery = opts.isEvery\r\n arrayEach(obj, function (item, index) {\r\n paths = path.concat(['' + index])\r\n nodes = node.concat([item])\r\n isMatch = (matchParent && !isEvery) || iterate.call(context, item, index, obj, paths, parent, nodes)\r\n hasChild = parseChildren && item[parseChildren]\r\n if (isMatch || hasChild) {\r\n if (hasOriginal) {\r\n rest = item\r\n } else {\r\n rest = assign({}, item)\r\n if (sourceData) {\r\n rest[sourceData] = item\r\n }\r\n }\r\n rest[mapChildren] = searchTreeItem(isMatch, item, item[parseChildren], iterate, context, paths, nodes, parseChildren, opts)\r\n if (isMatch || rest[mapChildren].length) {\r\n rests.push(rest)\r\n }\r\n } else if (isMatch) {\r\n rests.push(rest)\r\n }\r\n })\r\n return rests\r\n}\r\n\r\n/**\r\n * 从树结构中根据回调查找数据\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, items, path, parent, nodes) 回调\r\n * @param {Object} options {children: 'children'}\r\n * @param {Object} context 上下文\r\n * @return {Array}\r\n */\r\nvar searchTree = helperCreateTreeFunc(function (parent, obj, iterate, context, path, nodes, parseChildren, opts) {\r\n return searchTreeItem(0, parent, obj, iterate, context, path, nodes, parseChildren, opts)\r\n})\r\n\r\nexport default searchTree\r\n","function arrayIndexOf (list, val) {\r\n if (list.indexOf) {\r\n return list.indexOf(val)\r\n }\r\n for (var index = 0, len = list.length; index < len; index++) {\r\n if (val === list[index]) {\r\n return index\r\n }\r\n }\r\n}\r\n\r\nexport default arrayIndexOf\r\n","function arrayLastIndexOf (list, val) {\r\n if (list.lastIndexOf) {\r\n return list.lastIndexOf(val)\r\n }\r\n for (var len = list.length - 1; len >= 0; len--) {\r\n if (val === list[len]) {\r\n return len\r\n }\r\n }\r\n return -1\r\n}\r\n\r\nexport default arrayLastIndexOf\r\n","import helperCreateInTypeof from './helperCreateInTypeof'\r\n\r\n/**\r\n * 判断是否Number对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar isNumber = helperCreateInTypeof('number')\r\n\r\nexport default isNumber\r\n","import helperCreateInTypeof from './helperCreateInTypeof'\r\n\r\n/**\r\n * 判断是否String对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar isString = helperCreateInTypeof('string')\r\n\r\nexport default isString\r\n","import helperCreateInInObjectString from './helperCreateInInObjectString'\r\n\r\n/**\r\n * 判断是否Date对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar isDate = helperCreateInInObjectString('Date')\r\n\r\nexport default isDate\r\n","var staticParseInt = parseInt\r\n\r\nexport default staticParseInt\r\n","function helperGetUTCDateTime (resMaps) {\r\n return Date.UTC(resMaps.y, resMaps.M || 0, resMaps.d || 1, resMaps.H || 0, resMaps.m || 0, resMaps.s || 0, resMaps.S || 0)\r\n}\r\n\r\nexport default helperGetUTCDateTime\r\n","function helperGetDateTime (date) {\r\n return date.getTime()\r\n}\r\n\r\nexport default helperGetDateTime\r\n","import staticParseInt from './staticParseInt'\r\n\r\nimport helperGetUTCDateTime from './helperGetUTCDateTime'\r\nimport helperGetDateTime from './helperGetDateTime'\r\n\r\nimport isString from './isString'\r\nimport isDate from './isDate'\r\n\r\nfunction getParseRule (txt) {\r\n return '(\\\\d{' + txt + '})'\r\n}\r\n\r\nfunction toParseMs (num) {\r\n if (num < 10) {\r\n return num * 100\r\n } else if (num < 100) {\r\n return num * 10\r\n }\r\n return num\r\n}\r\n\r\nfunction toParseNum (num) {\r\n return isNaN(num) ? num : staticParseInt(num)\r\n}\r\n\r\nvar d2 = getParseRule(2)\r\nvar d1or2 = getParseRule('1,2')\r\nvar d1or7 = getParseRule('1,7')\r\nvar d3or4 = getParseRule('3,4')\r\nvar place = '.{1}'\r\nvar d1Or2RE = place + d1or2\r\nvar dzZ = '(([zZ])|([-+]\\\\d{2}:?\\\\d{2}))'\r\n\r\nvar defaulParseStrs = [d3or4, d1Or2RE, d1Or2RE, d1Or2RE, d1Or2RE, d1Or2RE, place + d1or7, dzZ]\r\nvar defaulParseREs = []\r\n\r\nfor (var len = defaulParseStrs.length - 1; len >= 0; len--) {\r\n var rule = ''\r\n for (var i = 0; i < len + 1; i++) {\r\n rule += defaulParseStrs[i]\r\n }\r\n defaulParseREs.push(new RegExp('^' + rule + '$'))\r\n}\r\n\r\n/**\r\n * 解析默认格式\r\n */\r\nfunction parseDefaultRules (str) {\r\n var matchRest, resMaps = {}\r\n for (var i = 0, dfrLen = defaulParseREs.length; i < dfrLen; i++) {\r\n matchRest = str.match(defaulParseREs[i])\r\n if (matchRest) {\r\n resMaps.y = matchRest[1]\r\n resMaps.M = matchRest[2]\r\n resMaps.d = matchRest[3]\r\n resMaps.H = matchRest[4]\r\n resMaps.m = matchRest[5]\r\n resMaps.s = matchRest[6]\r\n resMaps.S = matchRest[7]\r\n resMaps.Z = matchRest[8]\r\n break\r\n }\r\n }\r\n return resMaps\r\n}\r\n\r\nvar customParseStrs = [\r\n ['yyyy', d3or4],\r\n ['yy', d2],\r\n ['MM', d2],\r\n ['M', d1or2],\r\n ['dd', d2],\r\n ['d', d1or2],\r\n ['HH', d2],\r\n ['H', d1or2],\r\n ['mm', d2],\r\n ['m', d1or2],\r\n ['ss', d2],\r\n ['s', d1or2],\r\n ['SSS', getParseRule(3)],\r\n ['S', d1or7],\r\n ['Z', dzZ]\r\n]\r\nvar parseRuleMaps = {}\r\nvar parseRuleKeys = ['\\\\[([^\\\\]]+)\\\\]']\r\n\r\nfor (var i = 0; i < customParseStrs.length; i++) {\r\n var itemRule = customParseStrs[i]\r\n parseRuleMaps[itemRule[0]] = itemRule[1] + '?'\r\n parseRuleKeys.push(itemRule[0])\r\n}\r\n\r\nvar customParseRes = new RegExp(parseRuleKeys.join('|'), 'g')\r\nvar cacheFormatMaps = {}\r\n\r\n/**\r\n * 解析自定义格式\r\n */\r\nfunction parseCustomRules (str, format) {\r\n var cacheItem = cacheFormatMaps[format]\r\n if (!cacheItem) {\r\n var posIndexs = []\r\n var re = format.replace(/([$(){}*+.?\\\\^|])/g, \"\\\\$1\").replace(customParseRes, function (text, val) {\r\n var firstChar = text.charAt(0)\r\n // 如果为转义符号:[关键字]\r\n if (firstChar === '[') {\r\n return val\r\n }\r\n posIndexs.push(firstChar)\r\n return parseRuleMaps[text]\r\n })\r\n cacheItem = cacheFormatMaps[format] = {\r\n _i: posIndexs,\r\n _r: new RegExp(re)\r\n }\r\n }\r\n var resMaps = {}\r\n var matchRest = str.match(cacheItem._r)\r\n if (matchRest) {\r\n var _i = cacheItem._i\r\n for (var i = 1, len = matchRest.length; i < len; i++) {\r\n resMaps[_i[i - 1]] = matchRest[i]\r\n }\r\n return resMaps\r\n }\r\n return resMaps\r\n}\r\n\r\n/**\r\n * 解析时区\r\n */\r\nfunction parseTimeZone (resMaps) {\r\n // 如果为UTC 时间\r\n if (/^[zZ]/.test(resMaps.Z)) {\r\n return new Date(helperGetUTCDateTime(resMaps))\r\n } else {\r\n // 如果指定时区,时区转换\r\n var matchRest = resMaps.Z.match(/([-+])(\\d{2}):?(\\d{2})/)\r\n if (matchRest) {\r\n return new Date(helperGetUTCDateTime(resMaps) - (matchRest[1] === '-' ? -1 : 1) * staticParseInt(matchRest[2]) * 3600000 + staticParseInt(matchRest[3]) * 60000)\r\n }\r\n }\r\n return new Date('')\r\n}\r\n\r\n/**\r\n * 字符串转为日期\r\n *\r\n * @param {String/Number/Date} str 日期或数字\r\n * @param {String} format 解析日期格式(yyyy年份、MM月份、dd天、hh(12)HH(24)小时、mm分钟、ss秒、SSS毫秒、Z时区)\r\n * @return {Date}\r\n */\r\nfunction toStringDate (str, format) {\r\n if (str) {\r\n var isDType = isDate(str)\r\n if (isDType || (!format && /^[0-9]{11,15}$/.test(str))) {\r\n return new Date(isDType ? helperGetDateTime(str) : staticParseInt(str))\r\n }\r\n if (isString(str)) {\r\n var resMaps = format ? parseCustomRules(str, format) : parseDefaultRules(str)\r\n if (resMaps.y) {\r\n if (resMaps.M) {\r\n resMaps.M = toParseNum(resMaps.M) - 1\r\n }\r\n if (resMaps.S) {\r\n // 如果7位则是微秒,只精确到3位毫秒\r\n resMaps.S = toParseMs(toParseNum(resMaps.S.substring(0, 3)))\r\n }\r\n if (resMaps.Z) {\r\n return parseTimeZone(resMaps)\r\n } else {\r\n return new Date(resMaps.y, resMaps.M || 0, resMaps.d || 1, resMaps.H || 0, resMaps.m || 0, resMaps.s || 0, resMaps.S || 0)\r\n }\r\n }\r\n }\r\n }\r\n return new Date('')\r\n}\r\n\r\nexport default toStringDate\r\n","function helperNewDate () {\r\n return new Date()\r\n}\r\n\r\nexport default helperNewDate\r\n","import isDate from './isDate'\r\nimport toStringDate from './toStringDate'\r\n\r\nimport helperNewDate from './helperNewDate'\r\n\r\n/**\r\n * 判断是否闰年\r\n *\r\n * @param {Date} date 日期或数字\r\n * @return {Boolean}\r\n */\r\nfunction isLeapYear (date) {\r\n var year\r\n var currentDate = date ? toStringDate(date) : helperNewDate()\r\n if (isDate(currentDate)) {\r\n year = currentDate.getFullYear()\r\n return (year % 4 === 0) && (year % 100 !== 0 || year % 400 === 0)\r\n }\r\n return false\r\n}\r\n\r\nexport default isLeapYear\r\n","import isArray from './isArray'\r\nimport isString from './isString'\r\nimport hasOwnProp from './hasOwnProp'\r\n\r\nfunction helperCreateIndexOf (name, callback) {\r\n return function (obj, val) {\r\n if (obj) {\r\n if (obj[name]) {\r\n return obj[name](val)\r\n }\r\n if (isString(obj) || isArray(obj)) {\r\n return callback(obj, val)\r\n }\r\n for (var key in obj) {\r\n if (hasOwnProp(obj, key)) {\r\n if (val === obj[key]) {\r\n return key\r\n }\r\n }\r\n }\r\n }\r\n return -1\r\n }\r\n}\r\n\r\nexport default helperCreateIndexOf\r\n","import helperCreateIndexOf from './helperCreateIndexOf'\r\n\r\nimport arrayIndexOf from './arrayIndexOf'\r\n\r\n/**\r\n * 返回对象第一个索引值\r\n *\r\n * @param {Object} obj 对象\r\n * @param {Object} val 值\r\n * @return {Number}\r\n */\r\nvar indexOf = helperCreateIndexOf('indexOf', arrayIndexOf)\r\n\r\nexport default indexOf\r\n","import helperCreateIndexOf from './helperCreateIndexOf'\r\n\r\nimport arrayLastIndexOf from './arrayLastIndexOf'\r\n\r\n/**\r\n * 从最后开始的索引值,返回对象第一个索引值\r\n *\r\n * @param {Object} array 对象\r\n * @param {Object} val 值\r\n * @return {Number}\r\n */\r\nvar lastIndexOf = helperCreateIndexOf('lastIndexOf', arrayLastIndexOf)\r\n\r\nexport default lastIndexOf\r\n","import isArray from './isArray'\r\nimport isString from './isString'\r\nimport each from './each'\r\n\r\n/**\r\n * 返回对象的长度\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Number}\r\n */\r\nfunction getSize (obj) {\r\n var len = 0\r\n if (isString(obj) || isArray(obj)) {\r\n return obj.length\r\n }\r\n each(obj, function () {\r\n len++\r\n })\r\n return len\r\n}\r\n\r\nexport default getSize\r\n","import isArray from './isArray'\r\nimport isNull from './isNull'\r\n\r\n/**\r\n * 判断是否整数\r\n *\r\n * @param {Number, String} number 数值\r\n * @return {Boolean}\r\n */\r\nvar isInteger = function (obj) {\r\n return !isNull(obj) && !isNaN(obj) && !isArray(obj) && obj % 1 === 0\r\n}\r\n\r\nexport default isInteger\r\n","import helperCreateInTypeof from './helperCreateInTypeof'\r\n\r\n/**\r\n * 判断是否Boolean对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar isBoolean = helperCreateInTypeof('boolean')\r\n\r\nexport default isBoolean\r\n","import helperCreateInInObjectString from './helperCreateInInObjectString'\r\n\r\n/**\r\n * 判断是否RegExp对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar isRegExp = helperCreateInInObjectString('RegExp')\r\n\r\nexport default isRegExp\r\n","import helperCreateInInObjectString from './helperCreateInInObjectString'\r\n\r\n/**\r\n * 判断是否Error对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar isError = helperCreateInInObjectString('Error')\r\n\r\nexport default isError\r\n","/**\r\n * 判断是否为空对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nfunction isEmpty (obj) {\r\n for (var key in obj) {\r\n return false\r\n }\r\n return true\r\n}\r\n\r\nexport default isEmpty\r\n","/* eslint-disable valid-typeof */\r\nimport staticStrUndefined from './staticStrUndefined'\r\n\r\n/**\r\n * 判断是否Symbol对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar supportSymbol = typeof Symbol !== staticStrUndefined\r\nfunction isSymbol (obj) {\r\n return supportSymbol && Symbol.isSymbol ? Symbol.isSymbol(obj) : (typeof obj === 'symbol')\r\n}\r\n\r\nexport default isSymbol\r\n","import helperCreateInInObjectString from './helperCreateInInObjectString'\r\n\r\n/**\r\n * 判断是否Arguments对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar isArguments = helperCreateInInObjectString('Arguments')\r\n\r\nexport default isArguments\r\n","import staticStrUndefined from './staticStrUndefined'\r\n\r\n/* eslint-disable valid-typeof */\r\nvar staticDocument = typeof document === staticStrUndefined ? 0 : document\r\n\r\nexport default staticDocument\r\n","import staticStrUndefined from './staticStrUndefined'\r\n\r\n/* eslint-disable valid-typeof */\r\nvar staticWindow = typeof window === staticStrUndefined ? 0 : window\r\n\r\nexport default staticWindow\r\n","/* eslint-disable valid-typeof */\r\nimport staticStrUndefined from './staticStrUndefined'\r\n\r\n/**\r\n * 判断是否FormData对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar supportFormData = typeof FormData !== staticStrUndefined\r\nfunction isFormData (obj) {\r\n return supportFormData && obj instanceof FormData\r\n}\r\n\r\nexport default isFormData\r\n","/* eslint-disable valid-typeof */\r\nimport staticStrUndefined from './staticStrUndefined'\r\n\r\n/**\r\n * 判断是否Map对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar supportMap = typeof Map !== staticStrUndefined\r\nfunction isMap (obj) {\r\n return supportMap && obj instanceof Map\r\n}\r\n\r\nexport default isMap\r\n","/* eslint-disable valid-typeof */\r\nimport staticStrUndefined from './staticStrUndefined'\r\n\r\n/**\r\n * 判断是否WeakMap对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar supportWeakMap = typeof WeakMap !== staticStrUndefined\r\nfunction isWeakMap (obj) {\r\n return supportWeakMap && obj instanceof WeakMap\r\n}\r\n\r\nexport default isWeakMap\r\n","/* eslint-disable valid-typeof */\r\nimport staticStrUndefined from './staticStrUndefined'\r\n\r\n/**\r\n * 判断是否Set对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar supportSet = typeof Set !== staticStrUndefined\r\nfunction isSet (obj) {\r\n return supportSet && obj instanceof Set\r\n}\r\n\r\nexport default isSet\r\n","/* eslint-disable valid-typeof */\r\nimport staticStrUndefined from './staticStrUndefined'\r\n\r\n/**\r\n * 判断是否WeakSet对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar supportWeakSet = typeof WeakSet !== staticStrUndefined\r\nfunction isWeakSet (obj) {\r\n return supportWeakSet && obj instanceof WeakSet\r\n}\r\n\r\nexport default isWeakSet\r\n","import isFunction from './isFunction'\r\nimport isString from './isString'\r\nimport isArray from './isArray'\r\nimport hasOwnProp from './hasOwnProp'\r\n\r\nfunction helperCreateiterateIndexOf (callback) {\r\n return function (obj, iterate, context) {\r\n if (obj && isFunction(iterate)) {\r\n if (isArray(obj) || isString(obj)) {\r\n return callback(obj, iterate, context)\r\n }\r\n for (var key in obj) {\r\n if (hasOwnProp(obj, key)) {\r\n if (iterate.call(context, obj[key], key, obj)) {\r\n return key\r\n }\r\n }\r\n }\r\n }\r\n return -1\r\n }\r\n}\r\n\r\nexport default helperCreateiterateIndexOf\r\n","import helperCreateiterateIndexOf from './helperCreateiterateIndexOf'\r\n\r\n/**\r\n * 返回对象第一个索引值\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @param {Object} context 上下文\r\n * @return {Object}\r\n */\r\nvar findIndexOf = helperCreateiterateIndexOf(function (obj, iterate, context) {\r\n for (var index = 0, len = obj.length; index < len; index++) {\r\n if (iterate.call(context, obj[index], index, obj)) {\r\n return index\r\n }\r\n }\r\n return -1\r\n})\r\n\r\nexport default findIndexOf\r\n","import isNumber from './isNumber'\r\nimport isArray from './isArray'\r\nimport isString from './isString'\r\nimport isRegExp from './isRegExp'\r\nimport isDate from './isDate'\r\nimport isBoolean from './isBoolean'\r\nimport isUndefined from './isUndefined'\r\nimport keys from './keys'\r\n\r\nimport every from './every'\r\n\r\nfunction helperEqualCompare (val1, val2, compare, func, key, obj1, obj2) {\r\n if (val1 === val2) {\r\n return true\r\n }\r\n if (val1 && val2 && !isNumber(val1) && !isNumber(val2) && !isString(val1) && !isString(val2)) {\r\n if (isRegExp(val1)) {\r\n return compare('' + val1, '' + val2, key, obj1, obj2)\r\n } if (isDate(val1) || isBoolean(val1)) {\r\n return compare(+val1, +val2, key, obj1, obj2)\r\n } else {\r\n var result, val1Keys, val2Keys\r\n var isObj1Arr = isArray(val1)\r\n var isObj2Arr = isArray(val2)\r\n if (isObj1Arr || isObj2Arr ? isObj1Arr && isObj2Arr : val1.constructor === val2.constructor) {\r\n val1Keys = keys(val1)\r\n val2Keys = keys(val2)\r\n if (func) {\r\n result = func(val1, val2, key)\r\n }\r\n if (val1Keys.length === val2Keys.length) {\r\n return isUndefined(result) ? every(val1Keys, function (key, index) {\r\n return key === val2Keys[index] && helperEqualCompare(val1[key], val2[val2Keys[index]], compare, func, isObj1Arr || isObj2Arr ? index : key, val1, val2)\r\n }) : !!result\r\n }\r\n return false\r\n }\r\n }\r\n }\r\n return compare(val1, val2, key, obj1, obj2)\r\n}\r\n\r\nexport default helperEqualCompare\r\n","function helperDefaultCompare (v1, v2) {\r\n return v1 === v2\r\n}\r\n\r\nexport default helperDefaultCompare\r\n","import helperEqualCompare from './helperEqualCompare'\r\nimport helperDefaultCompare from './helperDefaultCompare'\r\n\r\n/**\r\n * 深度比较两个对象之间的值是否相等\r\n *\r\n * @param {Object} obj1 值1\r\n * @param {Object} obj2 值2\r\n * @return {Boolean}\r\n */\r\nfunction isEqual (obj1, obj2) {\r\n return helperEqualCompare(obj1, obj2, helperDefaultCompare)\r\n}\r\n\r\nexport default isEqual\r\n","import helperCreateiterateIndexOf from './helperCreateiterateIndexOf'\r\n\r\n/**\r\n * 从最后开始的索引值,返回对象第一个索引值\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @param {Object} context 上下文\r\n * @return {Object}\r\n */\r\nvar findLastIndexOf = helperCreateiterateIndexOf(function (obj, iterate, context) {\r\n for (var len = obj.length - 1; len >= 0; len--) {\r\n if (iterate.call(context, obj[len], len, obj)) {\r\n return len\r\n }\r\n }\r\n return -1\r\n})\r\n\r\nexport default findLastIndexOf\r\n","import helperCreateGetObjects from './helperCreateGetObjects'\r\n\r\n/**\r\n * 获取对象所有属性、值\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @return {Array}\r\n */\r\nvar entries = helperCreateGetObjects('entries', 2)\r\n\r\nexport default entries\r\n","import isFunction from './isFunction'\r\nimport isArray from './isArray'\r\nimport each from './each'\r\nimport findIndexOf from './findIndexOf'\r\n\r\nfunction helperCreatePickOmit (case1, case2) {\r\n return function (obj, callback) {\r\n var item, index\r\n var rest = {}\r\n var result = []\r\n var context = this\r\n var args = arguments\r\n var len = args.length\r\n if (!isFunction(callback)) {\r\n for (index = 1; index < len; index++) {\r\n item = args[index]\r\n result.push.apply(result, isArray(item) ? item : [item])\r\n }\r\n callback = 0\r\n }\r\n each(obj, function (val, key) {\r\n if ((callback ? callback.call(context, val, key, obj) : findIndexOf(result, function (name) {\r\n return name === key\r\n }) > -1) ? case1 : case2) {\r\n rest[key] = val\r\n }\r\n })\r\n return rest\r\n }\r\n}\r\n\r\nexport default helperCreatePickOmit\r\n","import helperCreatePickOmit from './helperCreatePickOmit'\r\n\r\n/**\r\n * 根据 key 过滤指定的属性值,返回一个新的对象\r\n *\r\n * @param {Object} obj 对象\r\n * @param {String/Array} key 键数组\r\n * @return {Object}\r\n */\r\nvar pick = helperCreatePickOmit(1, 0)\r\n\r\nexport default pick\r\n","import helperCreatePickOmit from './helperCreatePickOmit'\r\n\r\n/**\r\n * 根据 key 排除指定的属性值,返回一个新的对象\r\n *\r\n * @param {Object} obj 对象\r\n * @param {String/Array} key 键数组\r\n * @return {Object}\r\n */\r\nvar omit = helperCreatePickOmit(0, 1)\r\n\r\nexport default omit\r\n","import staticParseInt from './staticParseInt'\r\n\r\nimport helperGetHGSKeys from './helperGetHGSKeys'\r\nimport helperCheckCopyKey from './helperCheckCopyKey'\r\n\r\nimport hasOwnProp from './hasOwnProp'\r\n\r\nvar sKeyRE = /(.+)?\\[(\\d+)\\]$/\r\n\r\nfunction setDeepProps (obj, key, isEnd, nextKey, value) {\r\n if (obj[key]) {\r\n if (isEnd) {\r\n obj[key] = value\r\n }\r\n } else {\r\n var index\r\n var rest\r\n var currMatchs = key ? key.match(sKeyRE) : null\r\n if (isEnd) {\r\n rest = value\r\n } else {\r\n var nextMatchs = nextKey ? nextKey.match(sKeyRE) : null\r\n if (nextMatchs && !nextMatchs[1]) {\r\n // 如果下一个属性为数组类型\r\n rest = new Array(staticParseInt(nextMatchs[2]) + 1)\r\n } else {\r\n rest = {}\r\n }\r\n }\r\n if (currMatchs) {\r\n if (currMatchs[1]) {\r\n // 如果为对象中数组\r\n index = staticParseInt(currMatchs[2])\r\n if (obj[currMatchs[1]]) {\r\n if (isEnd) {\r\n obj[currMatchs[1]][index] = rest\r\n } else {\r\n if (obj[currMatchs[1]][index]) {\r\n rest = obj[currMatchs[1]][index]\r\n } else {\r\n obj[currMatchs[1]][index] = rest\r\n }\r\n }\r\n } else {\r\n obj[currMatchs[1]] = new Array(index + 1)\r\n obj[currMatchs[1]][index] = rest\r\n }\r\n } else {\r\n // 如果为数组\r\n obj[currMatchs[2]] = rest\r\n }\r\n } else {\r\n // 如果为对象\r\n obj[key] = rest\r\n }\r\n return rest\r\n }\r\n return obj[key]\r\n}\r\n\r\n/**\r\n * 设置对象属性上的值。如果属性不存在则创建它\r\n * @param {Object/Array} obj 对象\r\n * @param {String/Function} property 键、路径\r\n * @param {Object} value 值\r\n */\r\nfunction set (obj, property, value) {\r\n if (obj && helperCheckCopyKey(property)) {\r\n if ((obj[property] || hasOwnProp(obj, property)) && !isPrototypePolluted(property)) {\r\n obj[property] = value\r\n } else {\r\n var rest = obj\r\n var props = helperGetHGSKeys(property)\r\n var len = props.length\r\n for (var index = 0; index < len; index++) {\r\n if (isPrototypePolluted(props[index])) {\r\n continue\r\n }\r\n var isEnd = index === len - 1\r\n rest = setDeepProps(rest, props[index], isEnd, isEnd ? null : props[index + 1], value)\r\n }\r\n }\r\n }\r\n return obj\r\n}\r\n\r\n/**\r\n * Blacklist certain keys to prevent Prototype Pollution\r\n * @param {string} key\r\n */\r\nfunction isPrototypePolluted(key) {\r\n return key === '__proto__' || key === 'constructor' || key === 'prototype'\r\n}\r\n\r\nexport default set\r\n","import isEmpty from './isEmpty'\r\nimport isObject from './isObject'\r\nimport isFunction from './isFunction'\r\nimport property from './property'\r\nimport each from './each'\r\n\r\nfunction createiterateEmpty (iterate) {\r\n return function () {\r\n return isEmpty(iterate)\r\n }\r\n}\r\n\r\n/**\r\n * 集合分组,默认使用键值分组,如果有iterate则使用结果进行分组\r\n *\r\n * @param {Array} obj 对象\r\n * @param {Function} iterate 回调/对象属性\r\n * @param {Object} context 上下文\r\n * @return {Object}\r\n */\r\nfunction groupBy (obj, iterate, context) {\r\n var groupKey\r\n var result = {}\r\n if (obj) {\r\n if (iterate && isObject(iterate)) {\r\n iterate = createiterateEmpty(iterate)\r\n } else if (!isFunction(iterate)) {\r\n iterate = property(iterate)\r\n }\r\n each(obj, function (val, key) {\r\n groupKey = iterate ? iterate.call(context, val, key, obj) : val\r\n if (result[groupKey]) {\r\n result[groupKey].push(val)\r\n } else {\r\n result[groupKey] = [val]\r\n }\r\n })\r\n }\r\n return result\r\n}\r\n\r\nexport default groupBy\r\n","/**\r\n * 序号列表生成函数\r\n *\r\n * @param {Number} start 起始值\r\n * @param {Number} stop 结束值\r\n * @param {Number} step 自增值\r\n * @return {Array}\r\n */\r\nfunction range (start, stop, step) {\r\n var index, len\r\n var result = []\r\n var args = arguments\r\n if (args.length < 2) {\r\n stop = args[0]\r\n start = 0\r\n }\r\n index = start >> 0\r\n len = stop >> 0\r\n if (index < stop) {\r\n step = step >> 0 || 1\r\n for (; index < len; index += step) {\r\n result.push(index)\r\n }\r\n }\r\n return result\r\n}\r\n\r\nexport default range\r\n","import helperCreateMinMax from './helperCreateMinMax'\r\n\r\n/**\r\n * 获取最小值\r\n *\r\n * @param {Array} arr 数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @return {Number}\r\n */\r\nvar min = helperCreateMinMax(function (rest, itemVal) {\r\n return rest > itemVal\r\n})\r\n\r\nexport default min\r\n","function helperNumberDecimal (numStr) {\r\n return (numStr.split('.')[1] || '').length\r\n}\r\n\r\nexport default helperNumberDecimal\r\n","import staticParseInt from './staticParseInt'\r\n\r\nfunction helperStringRepeat (str, count) {\r\n if (str.repeat) {\r\n return str.repeat(count)\r\n }\r\n var list = isNaN(count) ? [] : new Array(staticParseInt(count))\r\n return list.join(str) + (list.length > 0 ? str : '')\r\n}\r\n\r\nexport default helperStringRepeat\r\n","function helperNumberOffsetPoint (str, offsetIndex) {\r\n return str.substring(0, offsetIndex) + '.' + str.substring(offsetIndex, str.length)\r\n}\r\n\r\nexport default helperNumberOffsetPoint\r\n","import helperStringRepeat from './helperStringRepeat'\r\nimport helperNumberOffsetPoint from './helperNumberOffsetPoint'\r\n\r\n/**\r\n * 数值转字符串,科学计数转字符串\r\n * @param { Number } num 数值\r\n *\r\n * @return {Number}\r\n */\r\nfunction toNumberString(num) {\r\n var rest = '' + num\r\n var scienceMatchs = rest.match(/^([-+]?)((\\d+)|((\\d+)?[.](\\d+)?))e([-+]{1})([0-9]+)$/)\r\n if (scienceMatchs) {\r\n var isNegative = num < 0\r\n var absFlag = isNegative ? '-' : ''\r\n var intNumStr = scienceMatchs[3] || ''\r\n var dIntNumStr = scienceMatchs[5] || ''\r\n var dFloatNumStr = scienceMatchs[6] || ''\r\n var sciencFlag = scienceMatchs[7]\r\n var scienceNumStr = scienceMatchs[8]\r\n var floatOffsetIndex = scienceNumStr - dFloatNumStr.length\r\n var intOffsetIndex = scienceNumStr - intNumStr.length\r\n var dIntOffsetIndex = scienceNumStr - dIntNumStr.length\r\n if (sciencFlag === '+') {\r\n if (intNumStr) {\r\n return absFlag + intNumStr + helperStringRepeat('0', scienceNumStr)\r\n }\r\n if (floatOffsetIndex > 0) {\r\n return absFlag + dIntNumStr + dFloatNumStr + helperStringRepeat('0', floatOffsetIndex)\r\n }\r\n return absFlag + dIntNumStr + helperNumberOffsetPoint(dFloatNumStr, scienceNumStr)\r\n }\r\n if (intNumStr) {\r\n if (intOffsetIndex > 0) {\r\n return absFlag + '0.' + helperStringRepeat('0', Math.abs(intOffsetIndex)) + intNumStr\r\n }\r\n return absFlag + helperNumberOffsetPoint(intNumStr, intOffsetIndex)\r\n }\r\n if (dIntOffsetIndex > 0) {\r\n return absFlag + '0.' + helperStringRepeat('0', Math.abs(dIntOffsetIndex)) + dIntNumStr + dFloatNumStr\r\n }\r\n return absFlag + helperNumberOffsetPoint(dIntNumStr, dIntOffsetIndex) + dFloatNumStr\r\n }\r\n return rest\r\n}\r\n\r\nexport default toNumberString\r\n","import helperNumberDecimal from './helperNumberDecimal'\r\nimport toNumberString from './toNumberString'\r\n\r\nfunction helperMultiply (multiplier, multiplicand) {\r\n var str1 = toNumberString(multiplier)\r\n var str2 = toNumberString(multiplicand)\r\n return parseInt(str1.replace('.', '')) * parseInt(str2.replace('.', '')) / Math.pow(10, helperNumberDecimal(str1) + helperNumberDecimal(str2))\r\n}\r\n\r\nexport default helperMultiply\r\n","import helperMultiply from './helperMultiply'\r\n\r\nimport toNumber from './toNumber'\r\nimport toNumberString from './toNumberString'\r\n\r\nfunction helperCreateMathNumber(name) {\r\n return function (num, digits) {\r\n var numRest = toNumber(num)\r\n var rest = numRest\r\n if (numRest) {\r\n digits = digits >> 0\r\n var numStr = toNumberString(numRest)\r\n var nums = numStr.split('.')\r\n var intStr = nums[0]\r\n var floatStr = nums[1] || ''\r\n var fStr = floatStr.substring(0, digits + 1)\r\n var subRest = intStr + (fStr ? ('.' + fStr) : '')\r\n if (digits >= floatStr.length) {\r\n return toNumber(subRest)\r\n }\r\n subRest = numRest\r\n if (digits > 0) {\r\n var ratio = Math.pow(10, digits)\r\n rest = Math[name](helperMultiply(subRest, ratio)) / ratio\r\n } else {\r\n rest = Math[name](subRest)\r\n }\r\n }\r\n return rest\r\n }\r\n}\r\n\r\nexport default helperCreateMathNumber\r\n","import helperCreateMathNumber from './helperCreateMathNumber'\r\n\r\n/**\r\n * 将数值四舍五入\r\n *\r\n * @param {string|number} num 数值\r\n * @param {number} digits 小数保留位数\r\n * @return {number}\r\n */\r\nvar round = helperCreateMathNumber('round')\r\n\r\nexport default round\r\n","import helperCreateMathNumber from './helperCreateMathNumber'\r\n\r\n/**\r\n * 将数值向上舍入\r\n *\r\n * @param {string|number} num 数值\r\n * @param {number} digits 小数保留位数\r\n * @return {number}\r\n */\r\nvar ceil = helperCreateMathNumber('ceil')\r\n\r\nexport default ceil\r\n","import helperCreateMathNumber from './helperCreateMathNumber'\r\n\r\n/**\r\n * 将数值向下舍入\r\n *\r\n * @param {string|number} num 数值\r\n * @param {number} digits 小数保留位数\r\n * @return {number}\r\n */\r\nvar floor = helperCreateMathNumber('floor')\r\n\r\nexport default floor\r\n","import eqNull from './eqNull'\r\nimport isNumber from './isNumber'\r\nimport toNumberString from './toNumberString'\r\n\r\nfunction toValueString (obj) {\r\n if (isNumber(obj)) {\r\n return toNumberString(obj)\r\n }\r\n return '' + (eqNull(obj) ? '' : obj)\r\n}\r\n\r\nexport default toValueString\r\n","import round from './round'\r\nimport toValueString from './toValueString'\r\n\r\nimport helperStringRepeat from './helperStringRepeat'\r\nimport helperNumberOffsetPoint from './helperNumberOffsetPoint'\r\n\r\n/**\r\n * 将数值四舍五入并格式化为固定小数位的字符串\r\n *\r\n * @param {string|number} num 数值\r\n * @param {number} digits 小数保留位数\r\n * @return {String}\r\n */\r\nfunction toFixed (num, digits) {\r\n digits = digits >> 0\r\n var str = toValueString(round(num, digits))\r\n var nums = str.split('.')\r\n var intStr = nums[0]\r\n var floatStr = nums[1] || ''\r\n var digitOffsetIndex = digits - floatStr.length\r\n if (digits) {\r\n if (digitOffsetIndex > 0) {\r\n return intStr + '.' + floatStr + helperStringRepeat('0', digitOffsetIndex)\r\n }\r\n return intStr + helperNumberOffsetPoint(floatStr, Math.abs(digitOffsetIndex))\r\n }\r\n return intStr\r\n}\r\n\r\nexport default toFixed\r\n","import staticParseInt from './staticParseInt'\r\n\r\nimport helperCreateToNumber from './helperCreateToNumber'\r\n\r\n/**\r\n * 转整数\r\n * @param { String/Number } str 数值\r\n *\r\n * @return {Number}\r\n */\r\nvar toInteger = helperCreateToNumber(staticParseInt)\r\n\r\nexport default toInteger\r\n","import helperMultiply from './helperMultiply'\r\n\r\nimport toNumber from './toNumber'\r\n\r\n/**\r\n * 乘法运算\r\n *\r\n * @param { Number } num1 数值1\r\n * @param { Number } num2 数值2\r\n * @return {Number}\r\n */\r\nfunction multiply (num1, num2) {\r\n var multiplier = toNumber(num1)\r\n var multiplicand = toNumber(num2)\r\n return helperMultiply(multiplier, multiplicand)\r\n}\r\n\r\nexport default multiply\r\n","import helperNumberDecimal from './helperNumberDecimal'\r\nimport toNumberString from './toNumberString'\r\nimport multiply from './multiply'\r\n\r\nfunction helperNumberAdd (addend, augend) {\r\n var str1 = toNumberString(addend)\r\n var str2 = toNumberString(augend)\r\n var ratio = Math.pow(10, Math.max(helperNumberDecimal(str1), helperNumberDecimal(str2)))\r\n return (multiply(addend, ratio) + multiply(augend, ratio)) / ratio\r\n}\r\n\r\nexport default helperNumberAdd\r\n","import helperNumberDecimal from './helperNumberDecimal'\r\nimport toNumberString from './toNumberString'\r\nimport multiply from './multiply'\r\n\r\nfunction helperNumberDivide (divisor, dividend) {\r\n var str1 = toNumberString(divisor)\r\n var str2 = toNumberString(dividend)\r\n var divisorDecimal = helperNumberDecimal(str1)\r\n var dividendDecimal = helperNumberDecimal(str2)\r\n var powY = dividendDecimal - divisorDecimal\r\n var isMinus = powY < 0\r\n var multiplicand = Math.pow(10, isMinus ? Math.abs(powY) : powY)\r\n return multiply(str1.replace('.', '') / str2.replace('.', ''), isMinus ? 1 / multiplicand : multiplicand)\r\n}\r\n\r\nexport default helperNumberDivide\r\n","import helperNumberAdd from './helperNumberAdd'\r\n\r\nimport isFunction from './isFunction'\r\nimport isArray from './isArray'\r\nimport each from './each'\r\nimport get from './get'\r\n\r\n/**\r\n * 求和函数,将数值相加\r\n *\r\n * @param {Array} array 数组\r\n * @param {Function/String} iterate 方法或属性\r\n * @param {Object} context 上下文\r\n * @return {Number}\r\n */\r\nfunction sum (array, iterate, context) {\r\n var result = 0\r\n each(array && array.length > 2 && isArray(array) ? array.sort() : array, iterate ? isFunction(iterate) ? function () {\r\n result = helperNumberAdd(result, iterate.apply(context, arguments))\r\n } : function (val) {\r\n result = helperNumberAdd(result, get(val, iterate))\r\n } : function (val) {\r\n result = helperNumberAdd(result, val)\r\n })\r\n return result\r\n}\r\n\r\nexport default sum\r\n","var staticStrFirst = 'first'\r\n\r\nexport default staticStrFirst\r\n","var staticStrLast = 'last'\r\n\r\nexport default staticStrLast\r\n","function helperGetDateFullYear (date) {\r\n return date.getFullYear()\r\n}\r\n\r\nexport default helperGetDateFullYear\r\n","var staticDayTime = 86400000\r\n\r\nexport default staticDayTime\r\n","function helperGetDateMonth (date) {\r\n return date.getMonth()\r\n}\r\n\r\nexport default helperGetDateMonth\r\n","import isDate from './isDate'\r\nimport helperGetDateTime from './helperGetDateTime'\r\n\r\n/**\r\n * 判断是否有效的Date对象\r\n *\r\n * @param {any} val 对象\r\n * @return {boolean}\r\n */\r\nfunction isValidDate (val) {\r\n return isDate(val) && !isNaN(helperGetDateTime(val))\r\n}\r\n\r\nexport default isValidDate\r\n","import staticStrFirst from './staticStrFirst'\r\nimport staticStrLast from './staticStrLast'\r\nimport staticDayTime from './staticDayTime'\r\n\r\nimport helperGetDateFullYear from './helperGetDateFullYear'\r\nimport helperGetDateTime from './helperGetDateTime'\r\nimport helperGetDateMonth from './helperGetDateMonth'\r\n\r\nimport toStringDate from './toStringDate'\r\nimport isValidDate from './isValidDate'\r\nimport isNumber from './isNumber'\r\n\r\n/**\r\n * 返回前几月或后几月的日期\r\n *\r\n * @param {Date} date 日期或数字\r\n * @param {Number} offsetMonth 月(默认当前月)、前几个月、后几个月\r\n * @param {Number/String} offsetDay 获取哪天:月初(first)、月末(last)、指定天数(数值),如果为空,但超过指定月份的天数时,则默认单月最后一天\r\n * @return {Date}\r\n */\r\nfunction getWhatMonth (date, offsetMonth, offsetDay) {\r\n var monthNum = offsetMonth && !isNaN(offsetMonth) ? offsetMonth : 0\r\n date = toStringDate(date)\r\n if (isValidDate(date)) {\r\n if (offsetDay === staticStrFirst) {\r\n return new Date(helperGetDateFullYear(date), helperGetDateMonth(date) + monthNum, 1)\r\n } else if (offsetDay === staticStrLast) {\r\n return new Date(helperGetDateTime(getWhatMonth(date, monthNum + 1, staticStrFirst)) - 1)\r\n } else if (isNumber(offsetDay)) {\r\n date.setDate(offsetDay)\r\n }\r\n if (monthNum) {\r\n var currDate = date.getDate()\r\n date.setMonth(helperGetDateMonth(date) + monthNum)\r\n if (currDate !== date.getDate()) {\r\n // 当为指定天数,且被跨月了,则默认单月最后一天\r\n date.setDate(1)\r\n return new Date(helperGetDateTime(date) - staticDayTime)\r\n }\r\n }\r\n }\r\n return date\r\n}\r\n\r\nexport default getWhatMonth\r\n","import staticStrFirst from './staticStrFirst'\r\nimport staticStrLast from './staticStrLast'\r\n\r\nimport helperGetDateFullYear from './helperGetDateFullYear'\r\n\r\nimport getWhatMonth from './getWhatMonth'\r\nimport toStringDate from './toStringDate'\r\nimport isValidDate from './isValidDate'\r\n\r\n/**\r\n * 返回前几年或后几年的日期\r\n *\r\n * @param {Date} date 日期或数字\r\n * @param {Number} offset 年(默认当前年)、前几个年(数值)、后几个年(数值)\r\n * @param {Number/String} month 获取哪月(null默认当前年)、年初(first)、年末(last)、指定月份(0-11)\r\n * @return {Date}\r\n */\r\nfunction getWhatYear (date, offset, month) {\r\n var number\r\n date = toStringDate(date)\r\n if (isValidDate(date)) {\r\n if (offset) {\r\n number = offset && !isNaN(offset) ? offset : 0\r\n date.setFullYear(helperGetDateFullYear(date) + number)\r\n }\r\n if (month || !isNaN(month)) {\r\n if (month === staticStrFirst) {\r\n return new Date(helperGetDateFullYear(date), 0, 1)\r\n } else if (month === staticStrLast) {\r\n date.setMonth(11)\r\n return getWhatMonth(date, 0, staticStrLast)\r\n } else {\r\n date.setMonth(month)\r\n }\r\n }\r\n }\r\n return date\r\n}\r\n\r\nexport default getWhatYear\r\n","import staticDayTime from './staticDayTime'\r\n\r\nvar staticWeekTime = staticDayTime * 7\r\n\r\nexport default staticWeekTime\r\n","import setupDefaults from './setupDefaults'\r\n\r\nimport staticDayTime from './staticDayTime'\r\nimport staticWeekTime from './staticWeekTime'\r\n\r\nimport helperGetDateTime from './helperGetDateTime'\r\n\r\nimport toStringDate from './toStringDate'\r\n\r\nimport isValidDate from './isValidDate'\r\nimport isNumber from './isNumber'\r\n\r\n/**\r\n * 返回前几周或后几周的星期几\r\n *\r\n * @param {Date} date 日期\r\n * @param {Number} offsetWeek 周(默认当前周)、前几周、后几周\r\n * @param {Number} offsetDay 星期天(默认0)、星期一(1)、星期二(2)、星期三(3)、星期四(4)、星期五(5)、星期六(6)\r\n * @param {Number} firstDay 周视图的起始天,默认星期一\r\n * @return {Date}\r\n */\r\nfunction getWhatWeek (date, offsetWeek, offsetDay, firstDay) {\r\n date = toStringDate(date)\r\n if (isValidDate(date)) {\r\n var hasCustomDay = isNumber(offsetDay)\r\n var hasStartDay = isNumber(firstDay)\r\n var whatDayTime = helperGetDateTime(date)\r\n // 如果指定了天或周视图起始天\r\n if (hasCustomDay || hasStartDay) {\r\n var viewStartDay = hasStartDay ? firstDay : setupDefaults.firstDayOfWeek\r\n var currentDay = date.getDay()\r\n var customDay = hasCustomDay ? offsetDay : currentDay\r\n if (currentDay !== customDay) {\r\n var offsetNum = 0\r\n if (viewStartDay > currentDay) {\r\n offsetNum = -(7 - viewStartDay + currentDay)\r\n } else if (viewStartDay < currentDay) {\r\n offsetNum = viewStartDay - currentDay\r\n }\r\n if (customDay > viewStartDay) {\r\n whatDayTime += ((customDay === 0 ? 7 : customDay) - viewStartDay + offsetNum) * staticDayTime\r\n } else if (customDay < viewStartDay) {\r\n whatDayTime += (7 - viewStartDay + customDay + offsetNum) * staticDayTime\r\n } else {\r\n whatDayTime += offsetNum * staticDayTime\r\n }\r\n }\r\n }\r\n if (offsetWeek && !isNaN(offsetWeek)) {\r\n whatDayTime += offsetWeek * staticWeekTime\r\n }\r\n return new Date(whatDayTime)\r\n }\r\n return date\r\n}\r\n\r\nexport default getWhatWeek\r\n","import staticStrFirst from './staticStrFirst'\r\nimport staticStrLast from './staticStrLast'\r\nimport staticParseInt from './staticParseInt'\r\n\r\nimport helperGetDateFullYear from './helperGetDateFullYear'\r\nimport helperGetDateMonth from './helperGetDateMonth'\r\nimport helperGetDateTime from './helperGetDateTime'\r\n\r\nimport toStringDate from './toStringDate'\r\nimport isValidDate from './isValidDate'\r\n\r\n/**\r\n * 返回前几天或后几天的日期\r\n *\r\n * @param {Date} date 日期或数字\r\n * @param {Number} offset 天偏移量(默认0)、前几天、后几天\r\n * @param {String} mode 指定小时(null默认当前分)、0时(first)、23时(last)\r\n * @return {Date}\r\n */\r\nfunction getWhatDay (date, offset, mode) {\r\n date = toStringDate(date)\r\n if (isValidDate(date) && !isNaN(offset)) {\r\n date.setDate(date.getDate() + staticParseInt(offset))\r\n if (mode === staticStrFirst) {\r\n return new Date(helperGetDateFullYear(date), helperGetDateMonth(date), date.getDate())\r\n } else if (mode === staticStrLast) {\r\n return new Date(helperGetDateTime(getWhatDay(date, 1, staticStrFirst)) - 1)\r\n }\r\n }\r\n return date\r\n}\r\n\r\nexport default getWhatDay\r\n","function helperStringUpperCase (str) {\r\n return str.toUpperCase()\r\n}\r\n\r\nexport default helperStringUpperCase\r\n","import setupDefaults from './setupDefaults'\r\n\r\nimport staticDayTime from './staticDayTime'\r\nimport staticWeekTime from './staticWeekTime'\r\n\r\nimport isNumber from './isNumber'\r\nimport includes from './includes'\r\nimport toStringDate from './toStringDate'\r\nimport isValidDate from './isValidDate'\r\nimport getWhatWeek from './getWhatWeek'\r\nimport range from './range'\r\nimport map from './map'\r\n\r\nimport helperGetDateTime from './helperGetDateTime'\r\n\r\nvar nextStartMaps = map(range(0, 7), function (day) {\r\n return [(day + 1) % 7, (day + 2) % 7, (day + 3) % 7]\r\n})\r\n\r\nfunction matchWeekStartDay (time, viewStartDay) {\r\n var day = new Date(time).getDay()\r\n return includes(nextStartMaps[viewStartDay], day)\r\n}\r\n\r\nfunction helperCreateGetDateWeek (getStartDate, checkCrossDate) {\r\n return function (date, firstDay) {\r\n var viewStartDay = isNumber(firstDay) ? firstDay : setupDefaults.firstDayOfWeek\r\n var targetDate = toStringDate(date)\r\n if (isValidDate(targetDate)) {\r\n var targetWeekStartDate = getWhatWeek(targetDate, 0, viewStartDay, viewStartDay)\r\n var firstDate = getStartDate(targetWeekStartDate)\r\n var firstTime = helperGetDateTime(firstDate)\r\n var targetWeekStartTime = helperGetDateTime(targetWeekStartDate)\r\n var targetWeekEndTime = targetWeekStartTime + staticDayTime * 6\r\n var targetWeekEndDate = new Date(targetWeekEndTime)\r\n var firstWeekStartDate = getWhatWeek(firstDate, 0, viewStartDay, viewStartDay)\r\n var firstWeekStartTime = helperGetDateTime(firstWeekStartDate)\r\n var tempTime\r\n if (targetWeekStartTime === firstWeekStartTime) {\r\n return 1\r\n }\r\n if (checkCrossDate(targetWeekStartDate, targetWeekEndDate)) {\r\n tempTime = helperGetDateTime(getStartDate(targetWeekEndDate))\r\n for (; tempTime < targetWeekEndTime; tempTime += staticDayTime) {\r\n if (matchWeekStartDay(tempTime, viewStartDay)) {\r\n return 1\r\n }\r\n }\r\n }\r\n var firstWeekEndTime = firstWeekStartTime + staticDayTime * 6\r\n var firstWeekEndDate = new Date(targetWeekEndTime)\r\n var offsetNum = 1\r\n if (checkCrossDate(firstWeekStartDate, firstWeekEndDate)) {\r\n offsetNum = 0\r\n tempTime = firstTime\r\n for (; tempTime < firstWeekEndTime; tempTime += staticDayTime) {\r\n if (matchWeekStartDay(tempTime, viewStartDay)) {\r\n offsetNum++\r\n break\r\n }\r\n }\r\n }\r\n return Math.floor((targetWeekStartTime - firstWeekStartTime) / staticWeekTime) + offsetNum\r\n }\r\n return NaN\r\n }\r\n}\r\n\r\nexport default helperCreateGetDateWeek\r\n","import helperCreateGetDateWeek from './helperCreateGetDateWeek'\r\n\r\n/**\r\n * 返回某个年份的第几周\r\n *\r\n * @param {Date} date 日期或数字\r\n * @param {Number} firstDay 从年初的星期几为起始开始周开始算,默认星期一\r\n * @return {Number}\r\n */\r\nvar getYearWeek = helperCreateGetDateWeek(function (targetDate) {\r\n return new Date(targetDate.getFullYear(), 0, 1)\r\n}, function (date1, date2) {\r\n return date1.getFullYear() !== date2.getFullYear()\r\n})\r\n\r\nexport default getYearWeek\r\n","import helperGetDateTime from './helperGetDateTime'\r\nimport helperGetYMD from './helperGetYMD'\r\n\r\nfunction helperGetYMDTime (date) {\r\n return helperGetDateTime(helperGetYMD(date))\r\n}\r\n\r\nexport default helperGetYMDTime\r\n","import helperGetDateFullYear from './helperGetDateFullYear'\r\nimport helperGetDateMonth from './helperGetDateMonth'\r\n\r\nfunction helperGetYMD (date) {\r\n return new Date(helperGetDateFullYear(date), helperGetDateMonth(date), date.getDate())\r\n}\r\n\r\nexport default helperGetYMD\r\n","import staticDayTime from './staticDayTime'\r\nimport staticStrFirst from './staticStrFirst'\r\n\r\nimport helperGetYMDTime from './helperGetYMDTime'\r\n\r\nimport getWhatYear from './getWhatYear'\r\nimport toStringDate from './toStringDate'\r\n\r\nimport isValidDate from './isValidDate'\r\n\r\n/**\r\n * 返回某个年份的第几天\r\n *\r\n * @param {Date} date 日期或数字\r\n * @return {Number}\r\n */\r\nfunction getYearDay (date) {\r\n date = toStringDate(date)\r\n if (isValidDate(date)) {\r\n return Math.floor((helperGetYMDTime(date) - helperGetYMDTime(getWhatYear(date, 0, staticStrFirst))) / staticDayTime) + 1\r\n }\r\n return NaN\r\n}\r\n\r\nexport default getYearDay\r\n","import toValueString from './toValueString'\r\n\r\nimport isUndefined from './isUndefined'\r\n\r\nimport helperStringRepeat from './helperStringRepeat'\r\n\r\n/**\r\n * 用指定字符从前面开始补全字符串\r\n *\r\n * @param {String} str 字符串\r\n * @param {Number} targetLength 结果长度\r\n * @param {Number} padString 补全字符\r\n * @return {String}\r\n */\r\nfunction padStart (str, targetLength, padString) {\r\n var rest = toValueString(str)\r\n targetLength = targetLength >> 0\r\n padString = isUndefined(padString) ? ' ' : '' + padString\r\n if (rest.padStart) {\r\n return rest.padStart(targetLength, padString)\r\n }\r\n if (targetLength > rest.length) {\r\n targetLength -= rest.length\r\n if (targetLength > padString.length) {\r\n padString += helperStringRepeat(padString, targetLength / padString.length)\r\n }\r\n return padString.slice(0, targetLength) + rest\r\n }\r\n return rest\r\n}\r\n\r\nexport default padStart\r\n","import setupDefaults from './setupDefaults'\r\n\r\nimport helperStringUpperCase from './helperStringUpperCase'\r\nimport helperGetDateFullYear from './helperGetDateFullYear'\r\nimport helperGetDateMonth from './helperGetDateMonth'\r\n\r\nimport toStringDate from './toStringDate'\r\nimport getYearWeek from './getYearWeek'\r\nimport getYearDay from './getYearDay'\r\n\r\nimport assign from './assign'\r\n\r\nimport isValidDate from './isValidDate'\r\nimport isFunction from './isFunction'\r\nimport eqNull from './eqNull'\r\n\r\nimport padStart from './padStart'\r\n\r\nfunction handleCustomTemplate (date, formats, match, value) {\r\n var format = formats[match]\r\n if (format) {\r\n if (isFunction(format)) {\r\n return format(value, match, date)\r\n } else {\r\n return format[value]\r\n }\r\n }\r\n return value\r\n}\r\n\r\nvar dateFormatRE = /\\[([^\\]]+)]|y{2,4}|M{1,2}|d{1,2}|H{1,2}|h{1,2}|m{1,2}|s{1,2}|S{1,3}|Z{1,2}|W{1,2}|D{1,3}|[aAeEq]/g\r\n\r\n/**\r\n * 日期格式化为字符串,转义符号 []\r\n *\r\n * @param {Date} date 日期或数字\r\n * @param {String} format 输出日期格式(年份(yy|yyyy)、月份(M|MM自动补0)、天(d|dd自动补0)、12小时制(h|hh自动补0)、24小时制(H|HH自动补0)、分钟(m|mm自动补0)、秒(s|ss自动补0)、毫秒(S|SSS自动补0)、D当年的第几天、a/A上午下午、e/E星期几、w当年的第几周、W当月的第几周、q当年第几个季度、Z时区)\r\n * @param {Object} options {formats: {q: ['日', '一', '二', '三', '四', '五', '六'], E: function (value, match, date) {return '三'}, }} 自定义格式化模板\r\n * @return {String}\r\n */\r\nfunction toDateString (date, format, options) {\r\n if (date) {\r\n date = toStringDate(date)\r\n if (isValidDate(date)) {\r\n var opts = options || {}\r\n var result = format || setupDefaults.parseDateFormat || setupDefaults.formatString\r\n var hours = date.getHours()\r\n var apm = hours < 12 ? 'am' : 'pm'\r\n var formats = assign({}, setupDefaults.parseDateRules || setupDefaults.formatStringMatchs, opts.formats)\r\n var fy = function (match, length) {\r\n return ('' + helperGetDateFullYear(date)).substring(4 - length)\r\n }\r\n var fM = function (match, length) {\r\n return padStart(helperGetDateMonth(date) + 1, length, '0')\r\n }\r\n var fd = function (match, length) {\r\n return padStart(date.getDate(), length, '0')\r\n }\r\n var fH = function (match, length) {\r\n return padStart(hours, length, '0')\r\n }\r\n var fh = function (match, length) {\r\n return padStart(hours <= 12 ? hours : hours - 12, length, '0')\r\n }\r\n var fm = function (match, length) {\r\n return padStart(date.getMinutes(), length, '0')\r\n }\r\n var fs = function (match, length) {\r\n return padStart(date.getSeconds(), length, '0')\r\n }\r\n var fS = function (match, length) {\r\n return padStart(date.getMilliseconds(), length, '0')\r\n }\r\n var fZ = function (match, length) {\r\n var zoneHours = date.getTimezoneOffset() / 60 * -1\r\n return handleCustomTemplate(date, formats, match, (zoneHours >= 0 ? '+' : '-') + padStart(zoneHours, 2, '0') + (length === 1 ? ':' : '') + '00')\r\n }\r\n var fW = function (match, length) {\r\n return padStart(handleCustomTemplate(date, formats, match, getYearWeek(date, eqNull(opts.firstDay) ? setupDefaults.firstDayOfWeek : opts.firstDay)), length, '0')\r\n }\r\n var fD = function (match, length) {\r\n return padStart(handleCustomTemplate(date, formats, match, getYearDay(date)), length, '0')\r\n }\r\n var parseDates = {\r\n yyyy: fy,\r\n yy: fy,\r\n MM: fM,\r\n M: fM,\r\n dd: fd,\r\n d: fd,\r\n HH: fH,\r\n H: fH,\r\n hh: fh,\r\n h: fh,\r\n mm: fm,\r\n m: fm,\r\n ss: fs,\r\n s: fs,\r\n SSS: fS,\r\n S: fS,\r\n ZZ: fZ,\r\n Z: fZ,\r\n WW: fW,\r\n W: fW,\r\n DDD: fD,\r\n D: fD,\r\n a: function (match) {\r\n return handleCustomTemplate(date, formats, match, apm)\r\n },\r\n A: function (match) {\r\n return handleCustomTemplate(date, formats, match, helperStringUpperCase(apm))\r\n },\r\n e: function (match) {\r\n return handleCustomTemplate(date, formats, match, date.getDay())\r\n },\r\n E: function (match) {\r\n return handleCustomTemplate(date, formats, match, date.getDay())\r\n },\r\n q: function (match) {\r\n return handleCustomTemplate(date, formats, match, Math.floor((helperGetDateMonth(date) + 3) / 3))\r\n }\r\n }\r\n return result.replace(dateFormatRE, function (match, skip) {\r\n return skip || (parseDates[match] ? parseDates[match](match, match.length) : match)\r\n })\r\n }\r\n return 'Invalid Date'\r\n }\r\n return ''\r\n}\r\n\r\nexport default toDateString\r\n","import helperGetDateTime from './helperGetDateTime'\r\nimport helperNewDate from './helperNewDate'\r\n\r\n/**\r\n * 返回当前时间戳\r\n *\r\n * @returns Number\r\n */\r\nvar now = Date.now || function () {\r\n return helperGetDateTime(helperNewDate())\r\n}\r\n\r\nexport default now\r\n","import helperCreateGetDateWeek from './helperCreateGetDateWeek'\r\n\r\n/**\r\n * 返回某个月的第几周\r\n *\r\n * @param {Date} date 日期或数字\r\n * @param {Number} firstDay 周视图的起始天,默认星期一\r\n * @return {Number}\r\n */\r\nvar getMonthWeek = helperCreateGetDateWeek(function (targetDate) {\r\n return new Date(targetDate.getFullYear(), targetDate.getMonth(), 1)\r\n}, function (date1, date2) {\r\n return date1.getMonth() !== date2.getMonth()\r\n})\r\n\r\nexport default getMonthWeek\r\n","import helperGetDateTime from './helperGetDateTime'\r\nimport helperNewDate from './helperNewDate'\r\n\r\nimport toStringDate from './toStringDate'\r\n\r\nimport isValidDate from './isValidDate'\r\n\r\nvar dateDiffRules = [\r\n ['yyyy', 31536000000],\r\n ['MM', 2592000000],\r\n ['dd', 86400000],\r\n ['HH', 3600000],\r\n ['mm', 60000],\r\n ['ss', 1000],\r\n ['S', 0]\r\n]\r\n\r\n/**\r\n * 返回两个日期之间差距,如果结束日期小于开始日期done为fasle\r\n *\r\n * @param {Date} startDate 开始日期\r\n * @param {Date} endDate 结束日期或当期日期\r\n * @return {Object}\r\n */\r\nfunction getDateDiff (startDate, endDate) {\r\n var startTime, endTime, item, diffTime, len, index\r\n var result = { done: false, status: false, time: 0 }\r\n startDate = toStringDate(startDate)\r\n endDate = endDate ? toStringDate(endDate) : helperNewDate()\r\n if (isValidDate(startDate) && isValidDate(endDate)) {\r\n startTime = helperGetDateTime(startDate)\r\n endTime = helperGetDateTime(endDate)\r\n if (startTime < endTime) {\r\n diffTime = result.time = endTime - startTime\r\n result.done = true\r\n result.status = true\r\n for (index = 0, len = dateDiffRules.length; index < len; index++) {\r\n item = dateDiffRules[index]\r\n if (diffTime >= item[1]) {\r\n if (index === len - 1) {\r\n result[item[0]] = diffTime || 0\r\n } else {\r\n result[item[0]] = Math.floor(diffTime / item[1])\r\n diffTime -= result[item[0]] * item[1]\r\n }\r\n } else {\r\n result[item[0]] = 0\r\n }\r\n }\r\n }\r\n }\r\n return result\r\n}\r\n\r\nexport default getDateDiff\r\n","import toValueString from './toValueString'\r\n\r\n/**\r\n * 去除字符串右边的空格\r\n *\r\n * @param {String} str 字符串\r\n * @return {String}\r\n */\r\nfunction trimRight (str) {\r\n return str && str.trimRight ? str.trimRight() : toValueString(str).replace(/[\\s\\uFEFF\\xA0]+$/g, '')\r\n}\r\n\r\nexport default trimRight\r\n","import toValueString from './toValueString'\r\n\r\n/**\r\n * 去除字符串左边的空格\r\n *\r\n * @param {String} str 字符串\r\n * @return {String}\r\n */\r\nfunction trimLeft (str) {\r\n return str && str.trimLeft ? str.trimLeft() : toValueString(str).replace(/^[\\s\\uFEFF\\xA0]+/g, '')\r\n}\r\n\r\nexport default trimLeft\r\n","import trimRight from './trimRight'\r\nimport trimLeft from './trimLeft'\r\n\r\n/**\r\n * 去除字符串左右两边的空格\r\n *\r\n * @param {String} str 字符串\r\n * @return {String}\r\n */\r\nfunction trim (str) {\r\n return str && str.trim ? str.trim() : trimRight(trimLeft(str))\r\n}\r\n\r\nexport default trim\r\n","var staticEscapeMap = {\r\n '&': '&',\r\n '<': '<',\r\n '>': '>',\r\n '\"': '"',\r\n \"'\": ''',\r\n '`': '`'\r\n}\r\n\r\nexport default staticEscapeMap\r\n","import toValueString from './toValueString'\r\nimport keys from './keys'\r\n\r\nfunction helperFormatEscaper (dataMap) {\r\n var replaceRegexp = new RegExp('(?:' + keys(dataMap).join('|') + ')', 'g')\r\n return function (str) {\r\n return toValueString(str).replace(replaceRegexp, function (match) {\r\n return dataMap[match]\r\n })\r\n }\r\n}\r\n\r\nexport default helperFormatEscaper\r\n","import staticEscapeMap from './staticEscapeMap'\r\n\r\nimport helperFormatEscaper from './helperFormatEscaper'\r\n\r\n/**\r\n * 转义HTML字符串,替换&, <, >, \", ', `字符\r\n *\r\n * @param {String} str 字符串\r\n * @return {String}\r\n */\r\nvar escape = helperFormatEscaper(staticEscapeMap)\r\n\r\nexport default escape\r\n","import staticEscapeMap from './staticEscapeMap'\r\n\r\nimport helperFormatEscaper from './helperFormatEscaper'\r\n\r\nimport each from './each'\r\n\r\nvar unescapeMap = {}\r\neach(staticEscapeMap, function (item, key) {\r\n unescapeMap[staticEscapeMap[key]] = key\r\n})\r\n\r\n/**\r\n * 反转escape\r\n *\r\n * @param {String} str 字符串\r\n * @return {String}\r\n */\r\nvar unescape = helperFormatEscaper(unescapeMap)\r\n\r\nexport default unescape\r\n","function helperStringSubstring (str, start, end) {\r\n return str.substring(start, end)\r\n}\r\n\r\nexport default helperStringSubstring\r\n","function helperStringLowerCase (str) {\r\n return str.toLowerCase()\r\n}\r\n\r\nexport default helperStringLowerCase\r\n","import toValueString from './toValueString'\r\nimport helperStringSubstring from './helperStringSubstring'\r\nimport helperStringUpperCase from './helperStringUpperCase'\r\nimport helperStringLowerCase from './helperStringLowerCase'\r\n\r\nvar camelCacheMaps = {}\r\n\r\n/**\r\n * 将带字符串转成驼峰字符串,例如: project-name 转为 projectName\r\n *\r\n * @param {String} str 字符串\r\n * @return {String}\r\n */\r\nfunction camelCase (str) {\r\n str = toValueString(str)\r\n if (camelCacheMaps[str]) {\r\n return camelCacheMaps[str]\r\n }\r\n var strLen = str.length\r\n var rest = str.replace(/([-]+)/g, function (text, flag, index) {\r\n return index && index + flag.length < strLen ? '-' : ''\r\n })\r\n strLen = rest.length\r\n rest = rest.replace(/([A-Z]+)/g, function (text, upper, index) {\r\n var upperLen = upper.length\r\n upper = helperStringLowerCase(upper)\r\n if (index) {\r\n if (upperLen > 2 && index + upperLen < strLen) {\r\n return helperStringUpperCase(helperStringSubstring(upper, 0, 1)) + helperStringSubstring(upper, 1, upperLen - 1) + helperStringUpperCase(helperStringSubstring(upper, upperLen - 1, upperLen))\r\n }\r\n return helperStringUpperCase(helperStringSubstring(upper, 0, 1)) + helperStringSubstring(upper, 1, upperLen)\r\n } else {\r\n if (upperLen > 1 && index + upperLen < strLen) {\r\n return helperStringSubstring(upper, 0, upperLen - 1) + helperStringUpperCase(helperStringSubstring(upper, upperLen - 1, upperLen))\r\n }\r\n }\r\n return upper\r\n }).replace(/(-[a-zA-Z])/g, function (text, upper) {\r\n return helperStringUpperCase(helperStringSubstring(upper, 1, upper.length))\r\n })\r\n camelCacheMaps[str] = rest\r\n return rest\r\n}\r\n\r\nexport default camelCase\r\n","import toValueString from './toValueString'\r\nimport helperStringSubstring from './helperStringSubstring'\r\nimport helperStringLowerCase from './helperStringLowerCase'\r\n\r\nvar kebabCacheMaps = {}\r\n\r\n/**\r\n * 将带驼峰字符串转成字符串,例如: projectName 转为 project-name\r\n *\r\n * @param {String} str 字符串\r\n * @return {String}\r\n */\r\nfunction kebabCase (str) {\r\n str = toValueString(str)\r\n if (kebabCacheMaps[str]) {\r\n return kebabCacheMaps[str]\r\n }\r\n if (/^[A-Z]+$/.test(str)) {\r\n return helperStringLowerCase(str)\r\n }\r\n var rest = str.replace(/^([a-z])([A-Z]+)([a-z]+)$/, function (text, prevLower, upper, nextLower) {\r\n var upperLen = upper.length\r\n if (upperLen > 1) {\r\n return prevLower + '-' + helperStringLowerCase(helperStringSubstring(upper, 0, upperLen - 1)) + '-' + helperStringLowerCase(helperStringSubstring(upper, upperLen - 1, upperLen)) + nextLower\r\n }\r\n return helperStringLowerCase(prevLower + '-' + upper + nextLower)\r\n }).replace(/^([A-Z]+)([a-z]+)?$/, function (text, upper, nextLower) {\r\n var upperLen = upper.length\r\n return helperStringLowerCase(helperStringSubstring(upper, 0, upperLen - 1) + '-' + helperStringSubstring(upper, upperLen - 1, upperLen) + (nextLower || ''))\r\n }).replace(/([a-z]?)([A-Z]+)([a-z]?)/g, function (text, prevLower, upper, nextLower, index) {\r\n var upperLen = upper.length\r\n if (upperLen > 1) {\r\n if (prevLower) {\r\n prevLower += '-'\r\n }\r\n if (nextLower) {\r\n return (prevLower || '') + helperStringLowerCase(helperStringSubstring(upper, 0, upperLen - 1)) + '-' + helperStringLowerCase(helperStringSubstring(upper, upperLen - 1, upperLen)) + nextLower\r\n }\r\n }\r\n return (prevLower || '') + (index ? '-' : '') + helperStringLowerCase(upper) + (nextLower || '')\r\n })\r\n rest = rest.replace(/([-]+)/g, function (text, flag, index) {\r\n return index && index + flag.length < rest.length ? '-' : ''\r\n })\r\n kebabCacheMaps[str] = rest\r\n return rest\r\n}\r\n\r\nexport default kebabCase\r\n","import setupDefaults from './setupDefaults'\r\n\r\nimport toValueString from './toValueString'\r\nimport trim from './trim'\r\n\r\nimport get from './get'\r\n\r\n/**\r\n * 解析动态字符串模板\r\n * @param {atring} str 字符串模板\r\n * @param {any | any[]} args 对象\r\n * @param {any} options \r\n */\r\nfunction template (str, args, options) {\r\n return toValueString(str).replace((options || setupDefaults).tmplRE || /\\{{2}([.\\w[\\]\\s]+)\\}{2}/g, function (match, key) {\r\n return get(args, trim(key))\r\n })\r\n}\r\n\r\nexport default template\r\n","var staticDecodeURIComponent = decodeURIComponent\r\n\r\nexport default staticDecodeURIComponent\r\n","import staticDecodeURIComponent from './staticDecodeURIComponent'\r\n\r\nimport arrayEach from './arrayEach'\r\n\r\nimport isString from './isString'\r\n\r\n/**\r\n * 反序列化查询参数\r\n * @param {String} query 字符串\r\n */\r\nfunction unserialize (str) {\r\n var items\r\n var result = {}\r\n if (str && isString(str)) {\r\n arrayEach(str.split('&'), function (param) {\r\n items = param.split('=')\r\n result[staticDecodeURIComponent(items[0])] = staticDecodeURIComponent(items[1] || '')\r\n })\r\n }\r\n return result\r\n}\r\n\r\nexport default unserialize\r\n","var staticEncodeURIComponent = encodeURIComponent\r\n\r\nexport default staticEncodeURIComponent\r\n","import staticEncodeURIComponent from './staticEncodeURIComponent'\r\n\r\nimport each from './each'\r\nimport isArray from './isArray'\r\nimport isNull from './isNull'\r\nimport isUndefined from './isUndefined'\r\nimport isPlainObject from './isPlainObject'\r\n\r\nfunction stringifyParams (resultVal, resultKey, isArr) {\r\n var _arr\r\n var result = []\r\n each(resultVal, function (item, key) {\r\n _arr = isArray(item)\r\n if (isPlainObject(item) || _arr) {\r\n result = result.concat(stringifyParams(item, resultKey + '[' + key + ']', _arr))\r\n } else {\r\n result.push(staticEncodeURIComponent(resultKey + '[' + (isArr ? '' : key) + ']') + '=' + staticEncodeURIComponent(isNull(item) ? '' : item))\r\n }\r\n })\r\n return result\r\n}\r\n\r\n/**\r\n * 序列化查询参数\r\n *\r\n * @param {Object} query 查询参数\r\n */\r\nfunction serialize (query) {\r\n var _arr\r\n var params = []\r\n each(query, function (item, key) {\r\n if (!isUndefined(item)) {\r\n _arr = isArray(item)\r\n if (isPlainObject(item) || _arr) {\r\n params = params.concat(stringifyParams(item, key, _arr))\r\n } else {\r\n params.push(staticEncodeURIComponent(key) + '=' + staticEncodeURIComponent(isNull(item) ? '' : item))\r\n }\r\n }\r\n })\r\n return params.join('&').replace(/%20/g, '+')\r\n}\r\n\r\nexport default serialize\r\n","import staticStrUndefined from './staticStrUndefined'\r\n\r\n/* eslint-disable valid-typeof */\r\nvar staticLocation = typeof location === staticStrUndefined ? 0 : location\r\n\r\nexport default staticLocation\r\n","import staticLocation from './staticLocation'\r\n\r\nfunction helperGetLocatOrigin () {\r\n return staticLocation ? (staticLocation.origin || (staticLocation.protocol + '//' + staticLocation.host)) : ''\r\n}\r\n\r\nexport default helperGetLocatOrigin\r\n","import staticLocation from './staticLocation'\r\n\r\nimport unserialize from './unserialize'\r\n\r\nimport helperGetLocatOrigin from './helperGetLocatOrigin'\r\n\r\nfunction parseURLQuery (uri) {\r\n return unserialize(uri.split('?')[1] || '')\r\n}\r\n\r\nfunction parseUrl (url) {\r\n var hashs, portText, searchs, parsed\r\n var href = '' + url\r\n if (href.indexOf('//') === 0) {\r\n href = (staticLocation ? staticLocation.protocol : '') + href\r\n } else if (href.indexOf('/') === 0) {\r\n href = helperGetLocatOrigin() + href\r\n }\r\n searchs = href.replace(/#.*/, '').match(/(\\?.*)/)\r\n parsed = {\r\n href: href,\r\n hash: '',\r\n host: '',\r\n hostname: '',\r\n protocol: '',\r\n port: '',\r\n search: searchs && searchs[1] && searchs[1].length > 1 ? searchs[1] : ''\r\n }\r\n parsed.path = href.replace(/^([a-z0-9.+-]*:)\\/\\//, function (text, protocol) {\r\n parsed.protocol = protocol\r\n return ''\r\n }).replace(/^([a-z0-9.+-]*)(:\\d+)?\\/?/, function (text, hostname, port) {\r\n portText = port || ''\r\n parsed.port = portText.replace(':', '')\r\n parsed.hostname = hostname\r\n parsed.host = hostname + portText\r\n return '/'\r\n }).replace(/(#.*)/, function (text, hash) {\r\n parsed.hash = hash.length > 1 ? hash : ''\r\n return ''\r\n })\r\n hashs = parsed.hash.match(/#((.*)\\?|(.*))/)\r\n parsed.pathname = parsed.path.replace(/(\\?|#.*).*/, '')\r\n parsed.origin = parsed.protocol + '//' + parsed.host\r\n parsed.hashKey = hashs ? (hashs[2] || hashs[1] || '') : ''\r\n parsed.hashQuery = parseURLQuery(parsed.hash)\r\n parsed.searchQuery = parseURLQuery(parsed.search)\r\n return parsed\r\n}\r\n\r\nexport default parseUrl\r\n","import setupDefaults from './setupDefaults'\r\nimport staticDocument from './staticDocument'\r\nimport staticDecodeURIComponent from './staticDecodeURIComponent'\r\nimport staticEncodeURIComponent from './staticEncodeURIComponent'\r\n\r\nimport isArray from './isArray'\r\nimport isObject from './isObject'\r\nimport isDate from './isDate'\r\nimport isUndefined from './isUndefined'\r\nimport includes from './includes'\r\nimport keys from './keys'\r\n\r\nimport assign from './assign'\r\n\r\nimport arrayEach from './arrayEach'\r\n\r\nimport helperNewDate from './helperNewDate'\r\nimport helperGetDateTime from './helperGetDateTime'\r\nimport getWhatYear from './getWhatYear'\r\nimport getWhatMonth from './getWhatMonth'\r\nimport getWhatDay from './getWhatDay'\r\n\r\nfunction toCookieUnitTime (unit, expires) {\r\n var num = parseFloat(expires)\r\n var nowdate = helperNewDate()\r\n var time = helperGetDateTime(nowdate)\r\n switch (unit) {\r\n case 'y': return helperGetDateTime(getWhatYear(nowdate, num))\r\n case 'M': return helperGetDateTime(getWhatMonth(nowdate, num))\r\n case 'd': return helperGetDateTime(getWhatDay(nowdate, num))\r\n case 'h':\r\n case 'H': return time + num * 60 * 60 * 1000\r\n case 'm': return time + num * 60 * 1000\r\n case 's': return time + num * 1000\r\n }\r\n return time\r\n}\r\n\r\nfunction toCookieUTCString (date) {\r\n return (isDate(date) ? date : new Date(date)).toUTCString()\r\n}\r\n\r\n/**\r\n * cookie操作函数\r\n * @param {String/Array/Object} name 键/数组/对象\r\n * @param {String} value 值\r\n * @param {Object} options 参数\r\n * @param {String} name: 键\r\n * @param {Object} value: 值\r\n * @param {String} path: 路径\r\n * @param {String} domain: 作用域\r\n * @param {Boolean} secure: 设置为安全的,只能用https协议\r\n * @param {Number} expires: 过期时间,可以指定日期或者字符串,默认天\r\n */\r\nfunction cookie (name, value, options) {\r\n if (staticDocument) {\r\n var opts, expires, values, result, cookies, keyIndex\r\n var inserts = []\r\n var args = arguments\r\n if (isArray(name)) {\r\n inserts = name\r\n } else if (args.length > 1) {\r\n inserts = [assign({ name: name, value: value }, options)]\r\n } else if (isObject(name)) {\r\n inserts = [name]\r\n }\r\n if (inserts.length > 0) {\r\n arrayEach(inserts, function (obj) {\r\n opts = assign({}, setupDefaults.cookies, obj)\r\n values = []\r\n if (opts.name) {\r\n expires = opts.expires\r\n values.push(staticEncodeURIComponent(opts.name) + '=' + staticEncodeURIComponent(isObject(opts.value) ? JSON.stringify(opts.value) : opts.value))\r\n if (expires) {\r\n if (isNaN(expires)) {\r\n // UTCString || Unit\r\n expires = expires.replace(/^([0-9]+)(y|M|d|H|h|m|s)$/, function (text, num, unit) {\r\n return toCookieUTCString(toCookieUnitTime(unit, num))\r\n })\r\n } else if (/^[0-9]{11,13}$/.test(expires) || isDate(expires)) {\r\n // Date || now\r\n expires = toCookieUTCString(expires)\r\n } else {\r\n // day\r\n expires = toCookieUTCString(toCookieUnitTime('d', expires))\r\n }\r\n opts.expires = expires\r\n }\r\n arrayEach(['expires', 'path', 'domain', 'secure'], function (key) {\r\n if (!isUndefined(opts[key])) {\r\n values.push(opts[key] && key === 'secure' ? key : (key + '=' + opts[key]))\r\n }\r\n })\r\n }\r\n staticDocument.cookie = values.join('; ')\r\n })\r\n return true\r\n } else {\r\n result = {}\r\n cookies = staticDocument.cookie\r\n if (cookies) {\r\n arrayEach(cookies.split('; '), function (val) {\r\n keyIndex = val.indexOf('=')\r\n result[staticDecodeURIComponent(val.substring(0, keyIndex))] = staticDecodeURIComponent(val.substring(keyIndex + 1) || '')\r\n })\r\n }\r\n return args.length === 1 ? result[name] : result\r\n }\r\n }\r\n return false\r\n}\r\n\r\nfunction hasCookieItem (value) {\r\n return includes(cookieKeys(), value)\r\n}\r\n\r\nfunction getCookieItem (name) {\r\n return cookie(name)\r\n}\r\n\r\nfunction setCookieItem (name, value, options) {\r\n cookie(name, value, options)\r\n return cookie\r\n}\r\n\r\nfunction removeCookieItem (name, options) {\r\n cookie(name, '', assign({ expires: -1 }, setupDefaults.cookies, options))\r\n}\r\n\r\nfunction cookieKeys () {\r\n return keys(cookie())\r\n}\r\n\r\nfunction cookieJson () {\r\n return cookie()\r\n}\r\n\r\nassign(cookie, {\r\n has: hasCookieItem,\r\n set: setCookieItem,\r\n setItem: setCookieItem,\r\n get: getCookieItem,\r\n getItem: getCookieItem,\r\n remove: removeCookieItem,\r\n removeItem: removeCookieItem,\r\n keys: cookieKeys,\r\n getJSON: cookieJson\r\n})\r\n\r\nexport default cookie\r\n","import staticStrUndefined from './staticStrUndefined'\r\nimport staticDocument from './staticDocument'\r\nimport staticWindow from './staticWindow'\r\n\r\nimport assign from './assign'\r\nimport arrayEach from './arrayEach'\r\n\r\n/* eslint-disable valid-typeof */\r\nfunction isBrowseStorage (storage) {\r\n try {\r\n var testKey = '__xe_t'\r\n storage.setItem(testKey, 1)\r\n storage.removeItem(testKey)\r\n return true\r\n } catch (e) {\r\n return false\r\n }\r\n}\r\n\r\nfunction isBrowseType (type) {\r\n return navigator.userAgent.indexOf(type) > -1\r\n}\r\n\r\n/**\r\n * 获取浏览器内核\r\n * @return Object\r\n */\r\nfunction browse () {\r\n var $body, isChrome, isEdge\r\n var isMobile = false\r\n var isLocalStorage = false\r\n var isSessionStorage = false\r\n var result = {\r\n isNode: false,\r\n isMobile: isMobile,\r\n isPC: false,\r\n isDoc: !!staticDocument\r\n }\r\n if (!staticWindow && typeof process !== staticStrUndefined) {\r\n result.isNode = true\r\n } else {\r\n isEdge = isBrowseType('Edge')\r\n isChrome = isBrowseType('Chrome')\r\n isMobile = /(Android|webOS|iPhone|iPad|iPod|SymbianOS|BlackBerry|Windows Phone)/.test(navigator.userAgent)\r\n if (result.isDoc) {\r\n $body = staticDocument.body || staticDocument.documentElement\r\n arrayEach(['webkit', 'khtml', 'moz', 'ms', 'o'], function (core) {\r\n result['-' + core] = !!$body[core + 'MatchesSelector']\r\n })\r\n }\r\n try {\r\n isLocalStorage = isBrowseStorage(staticWindow.localStorage)\r\n } catch(e) {}\r\n try {\r\n isSessionStorage = isBrowseStorage(staticWindow.sessionStorage)\r\n } catch(e) {}\r\n assign(result, {\r\n edge: isEdge,\r\n firefox: isBrowseType('Firefox'),\r\n msie: !isEdge && result['-ms'],\r\n safari: !isChrome && !isEdge && isBrowseType('Safari'),\r\n isMobile: isMobile,\r\n isPC: !isMobile,\r\n isLocalStorage: isLocalStorage,\r\n isSessionStorage: isSessionStorage\r\n })\r\n }\r\n return result\r\n}\r\n\r\nexport default browse\r\n","// 核心\r\nimport XEUtils from './ctor'\r\n\r\n// 对象相关的方法\r\nimport assign from './assign'\r\nimport objectEach from './objectEach'\r\nimport lastObjectEach from './lastObjectEach'\r\nimport objectMap from './objectMap'\r\nimport merge from './merge'\r\n\r\n// 数组相关的方法\r\nimport map from './map'\r\nimport some from './some'\r\nimport every from './every'\r\nimport includeArrays from './includeArrays'\r\nimport arrayEach from './arrayEach'\r\nimport lastArrayEach from './lastArrayEach'\r\nimport uniq from './uniq'\r\nimport union from './union'\r\nimport toArray from './toArray'\r\nimport sortBy from './sortBy'\r\nimport orderBy from './orderBy'\r\nimport shuffle from './shuffle'\r\nimport sample from './sample'\r\nimport slice from './slice'\r\nimport filter from './filter'\r\nimport findKey from './findKey'\r\nimport includes from './includes'\r\nimport find from './find'\r\nimport findLast from './findLast'\r\nimport reduce from './reduce'\r\nimport copyWithin from './copyWithin'\r\nimport chunk from './chunk'\r\nimport zip from './zip'\r\nimport unzip from './unzip'\r\nimport zipObject from './zipObject'\r\nimport flatten from './flatten'\r\nimport pluck from './pluck'\r\nimport invoke from './invoke'\r\nimport toArrayTree from './toArrayTree'\r\nimport toTreeArray from './toTreeArray'\r\nimport findTree from './findTree'\r\nimport eachTree from './eachTree'\r\nimport mapTree from './mapTree'\r\nimport filterTree from './filterTree'\r\nimport searchTree from './searchTree'\r\nimport arrayIndexOf from './arrayIndexOf'\r\nimport arrayLastIndexOf from './arrayLastIndexOf'\r\n\r\n// 基础方法\r\nimport hasOwnProp from './hasOwnProp'\r\nimport isArray from './isArray'\r\nimport isNull from './isNull'\r\nimport isNumberNaN from './isNaN'\r\nimport isUndefined from './isUndefined'\r\nimport isFunction from './isFunction'\r\nimport isObject from './isObject'\r\nimport isString from './isString'\r\nimport isPlainObject from './isPlainObject'\r\nimport isLeapYear from './isLeapYear'\r\nimport isDate from './isDate'\r\nimport eqNull from './eqNull'\r\nimport each from './each'\r\nimport forOf from './forOf'\r\nimport lastForOf from './lastForOf'\r\nimport indexOf from './indexOf'\r\nimport lastIndexOf from './lastIndexOf'\r\nimport keys from './keys'\r\nimport values from './values'\r\nimport clone from './clone'\r\nimport getSize from './getSize'\r\nimport lastEach from './lastEach'\r\nimport remove from './remove'\r\nimport clear from './clear'\r\nimport isNumberFinite from './isFinite'\r\nimport isFloat from './isFloat'\r\nimport isInteger from './isInteger'\r\nimport isBoolean from './isBoolean'\r\nimport isNumber from './isNumber'\r\nimport isRegExp from './isRegExp'\r\nimport isError from './isError'\r\nimport isTypeError from './isTypeError'\r\nimport isEmpty from './isEmpty'\r\nimport isSymbol from './isSymbol'\r\nimport isArguments from './isArguments'\r\nimport isElement from './isElement'\r\nimport isDocument from './isDocument'\r\nimport isWindow from './isWindow'\r\nimport isFormData from './isFormData'\r\nimport isMap from './isMap'\r\nimport isWeakMap from './isWeakMap'\r\nimport isSet from './isSet'\r\nimport isWeakSet from './isWeakSet'\r\nimport isMatch from './isMatch'\r\nimport isEqual from './isEqual'\r\nimport isEqualWith from './isEqualWith'\r\nimport getType from './getType'\r\nimport uniqueId from './uniqueId'\r\nimport findIndexOf from './findIndexOf'\r\nimport findLastIndexOf from './findLastIndexOf'\r\nimport toStringJSON from './toStringJSON'\r\nimport toJSONString from './toJSONString'\r\nimport entries from './entries'\r\nimport pick from './pick'\r\nimport omit from './omit'\r\nimport first from './first'\r\nimport last from './last'\r\nimport has from './has'\r\nimport get from './get'\r\nimport set from './set'\r\nimport groupBy from './groupBy'\r\nimport countBy from './countBy'\r\nimport range from './range'\r\nimport destructuring from './destructuring'\r\n\r\n// 数值相关方法\r\nimport random from './random'\r\nimport max from './max'\r\nimport min from './min'\r\nimport commafy from './commafy'\r\nimport round from './round'\r\nimport ceil from './ceil'\r\nimport floor from './floor'\r\nimport toFixed from './toFixed'\r\nimport toInteger from './toInteger'\r\nimport toNumber from './toNumber'\r\nimport toNumberString from './toNumberString'\r\nimport add from './add'\r\nimport subtract from './subtract'\r\nimport multiply from './multiply'\r\nimport divide from './divide'\r\nimport sum from './sum'\r\nimport mean from './mean'\r\n\r\n// 日期相关的方法\r\nimport getWhatYear from './getWhatYear'\r\nimport getWhatQuarter from './getWhatQuarter'\r\nimport getWhatMonth from './getWhatMonth'\r\nimport getWhatWeek from './getWhatWeek'\r\nimport getWhatDay from './getWhatDay'\r\nimport getWhatHours from './getWhatHours'\r\nimport getWhatMinutes from './getWhatMinutes'\r\nimport getWhatSeconds from './getWhatSeconds'\r\nimport toStringDate from './toStringDate'\r\nimport toDateString from './toDateString'\r\nimport now from './now'\r\nimport timestamp from './timestamp'\r\nimport isValidDate from './isValidDate'\r\nimport isDateSame from './isDateSame'\r\nimport getYearDay from './getYearDay'\r\nimport getYearWeek from './getYearWeek'\r\nimport getMonthWeek from './getMonthWeek'\r\nimport getDayOfYear from './getDayOfYear'\r\nimport getDayOfMonth from './getDayOfMonth'\r\nimport getDateDiff from './getDateDiff'\r\n\r\n// 字符串相关的方法\r\nimport padEnd from './padEnd'\r\nimport padStart from './padStart'\r\nimport repeat from './repeat'\r\nimport trim from './trim'\r\nimport trimRight from './trimRight'\r\nimport trimLeft from './trimLeft'\r\nimport escape from './escape'\r\nimport unescape from './unescape'\r\nimport camelCase from './camelCase'\r\nimport kebabCase from './kebabCase'\r\nimport startsWith from './startsWith'\r\nimport endsWith from './endsWith'\r\nimport template from './template'\r\nimport toFormatString from './toFormatString'\r\nimport toValueString from './toValueString'\r\n\r\n// 函数相关的方法\r\nimport noop from './noop'\r\nimport property from './property'\r\nimport bind from './bind'\r\nimport once from './once'\r\nimport after from './after'\r\nimport before from './before'\r\nimport throttle from './throttle'\r\nimport debounce from './debounce'\r\nimport delay from './delay'\r\n\r\n// 地址相关的方法\r\nimport unserialize from './unserialize'\r\nimport serialize from './serialize'\r\nimport parseUrl from './parseUrl'\r\n\r\n// 浏览器相关的方法\r\nimport getBaseURL from './getBaseURL'\r\nimport locat from './locat'\r\nimport cookie from './cookie'\r\nimport browse from './browse'\r\n\r\nassign(XEUtils, {\r\n // object\r\n assign: assign,\r\n objectEach: objectEach,\r\n lastObjectEach: lastObjectEach,\r\n objectMap: objectMap,\r\n merge: merge,\r\n\r\n // array\r\n uniq: uniq,\r\n union: union,\r\n sortBy: sortBy,\r\n orderBy: orderBy,\r\n shuffle: shuffle,\r\n sample: sample,\r\n some: some,\r\n every: every,\r\n slice: slice,\r\n filter: filter,\r\n find: find,\r\n findLast: findLast,\r\n findKey: findKey,\r\n includes: includes,\r\n arrayIndexOf: arrayIndexOf,\r\n arrayLastIndexOf: arrayLastIndexOf,\r\n map: map,\r\n reduce: reduce,\r\n copyWithin: copyWithin,\r\n chunk: chunk,\r\n zip: zip,\r\n unzip: unzip,\r\n zipObject: zipObject,\r\n flatten: flatten,\r\n toArray: toArray,\r\n includeArrays: includeArrays,\r\n pluck: pluck,\r\n invoke: invoke,\r\n arrayEach: arrayEach,\r\n lastArrayEach: lastArrayEach,\r\n toArrayTree: toArrayTree,\r\n toTreeArray: toTreeArray,\r\n findTree: findTree,\r\n eachTree: eachTree,\r\n mapTree: mapTree,\r\n filterTree: filterTree,\r\n searchTree: searchTree,\r\n\r\n // base\r\n hasOwnProp: hasOwnProp,\r\n eqNull: eqNull,\r\n isNaN: isNumberNaN,\r\n isFinite: isNumberFinite,\r\n isUndefined: isUndefined,\r\n isArray: isArray,\r\n isFloat: isFloat,\r\n isInteger: isInteger,\r\n isFunction: isFunction,\r\n isBoolean: isBoolean,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isRegExp: isRegExp,\r\n isObject: isObject,\r\n isPlainObject: isPlainObject,\r\n isDate: isDate,\r\n isError: isError,\r\n isTypeError: isTypeError,\r\n isEmpty: isEmpty,\r\n isNull: isNull,\r\n isSymbol: isSymbol,\r\n isArguments: isArguments,\r\n isElement: isElement,\r\n isDocument: isDocument,\r\n isWindow: isWindow,\r\n isFormData: isFormData,\r\n isMap: isMap,\r\n isWeakMap: isWeakMap,\r\n isSet: isSet,\r\n isWeakSet: isWeakSet,\r\n isLeapYear: isLeapYear,\r\n isMatch: isMatch,\r\n isEqual: isEqual,\r\n isEqualWith: isEqualWith,\r\n getType: getType,\r\n uniqueId: uniqueId,\r\n getSize: getSize,\r\n indexOf: indexOf,\r\n lastIndexOf: lastIndexOf,\r\n findIndexOf: findIndexOf,\r\n findLastIndexOf: findLastIndexOf,\r\n toStringJSON: toStringJSON,\r\n toJSONString: toJSONString,\r\n keys: keys,\r\n values: values,\r\n entries: entries,\r\n pick: pick,\r\n omit: omit,\r\n first: first,\r\n last: last,\r\n each: each,\r\n forOf: forOf,\r\n lastForOf: lastForOf,\r\n lastEach: lastEach,\r\n has: has,\r\n get: get,\r\n set: set,\r\n groupBy: groupBy,\r\n countBy: countBy,\r\n clone: clone,\r\n clear: clear,\r\n remove: remove,\r\n range: range,\r\n destructuring: destructuring,\r\n\r\n // number\r\n random: random,\r\n min: min,\r\n max: max,\r\n commafy: commafy,\r\n round: round,\r\n ceil: ceil,\r\n floor: floor,\r\n toFixed: toFixed,\r\n toNumber: toNumber,\r\n toNumberString: toNumberString,\r\n toInteger: toInteger,\r\n add: add,\r\n subtract: subtract,\r\n multiply: multiply,\r\n divide: divide,\r\n sum: sum,\r\n mean: mean,\r\n\r\n // date\r\n now: now,\r\n timestamp: timestamp,\r\n isValidDate: isValidDate,\r\n isDateSame: isDateSame,\r\n toStringDate: toStringDate,\r\n toDateString: toDateString,\r\n getWhatYear: getWhatYear,\r\n getWhatQuarter: getWhatQuarter,\r\n getWhatMonth: getWhatMonth,\r\n getWhatWeek: getWhatWeek,\r\n getWhatDay: getWhatDay,\r\n getWhatHours: getWhatHours,\r\n getWhatMinutes: getWhatMinutes,\r\n getWhatSeconds: getWhatSeconds,\r\n getYearDay: getYearDay,\r\n getYearWeek: getYearWeek,\r\n getMonthWeek: getMonthWeek,\r\n getDayOfYear: getDayOfYear,\r\n getDayOfMonth: getDayOfMonth,\r\n getDateDiff: getDateDiff,\r\n\r\n // string\r\n trim: trim,\r\n trimLeft: trimLeft,\r\n trimRight: trimRight,\r\n escape: escape,\r\n unescape: unescape,\r\n camelCase: camelCase,\r\n kebabCase: kebabCase,\r\n repeat: repeat,\r\n padStart: padStart,\r\n padEnd: padEnd,\r\n startsWith: startsWith,\r\n endsWith: endsWith,\r\n template: template,\r\n toFormatString: toFormatString,\r\n toString: toValueString,\r\n toValueString: toValueString,\r\n\r\n // function\r\n noop: noop,\r\n property: property,\r\n bind: bind,\r\n once: once,\r\n after: after,\r\n before: before,\r\n throttle: throttle,\r\n debounce: debounce,\r\n delay: delay,\r\n\r\n // url\r\n unserialize: unserialize,\r\n serialize: serialize,\r\n parseUrl: parseUrl,\r\n\r\n // web\r\n getBaseURL: getBaseURL,\r\n locat: locat,\r\n browse: browse,\r\n cookie: cookie\r\n})\r\n\r\nexport default XEUtils\r\n","import each from './each'\r\nimport isFunction from './isFunction'\r\nimport property from './property'\r\n\r\n/**\r\n * 指定方法后的返回值组成的新对象\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @param {Object} context 上下文\r\n * @return {Object}\r\n */\r\nfunction objectMap (obj, iterate, context) {\r\n var result = {}\r\n if (obj) {\r\n if (iterate) {\r\n if (!isFunction(iterate)) {\r\n iterate = property(iterate)\r\n }\r\n each(obj, function (val, index) {\r\n result[index] = iterate.call(context, val, index, obj)\r\n })\r\n } else {\r\n return obj\r\n }\r\n }\r\n return result\r\n}\r\n\r\nexport default objectMap\r\n","import uniq from './uniq'\r\nimport toArray from './toArray'\r\n\r\n/**\r\n * 将多个数的值返回唯一的并集数组\r\n *\r\n * @param {...Array} 数组\r\n * @return {Array}\r\n */\r\nfunction union () {\r\n var args = arguments\r\n var result = []\r\n var index = 0\r\n var len = args.length\r\n for (; index < len; index++) {\r\n result = result.concat(toArray(args[index]))\r\n }\r\n return uniq(result)\r\n}\r\n\r\nexport default union\r\n","import shuffle from './shuffle'\r\n\r\n/**\r\n * 从一个数组中随机返回几个元素\r\n *\r\n * @param {Array} array 数组\r\n * @param {Number} number 个数\r\n * @return {Array}\r\n */\r\nfunction sample (array, number) {\r\n var result = shuffle(array)\r\n if (arguments.length <= 1) {\r\n return result[0]\r\n }\r\n if (number < result.length) {\r\n result.length = number || 0\r\n }\r\n return result\r\n}\r\n\r\nexport default sample\r\n","import each from './each'\r\n\r\n/**\r\n * 根据回调过滤数据\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @param {Object} context 上下文\r\n * @return {Object}\r\n */\r\nfunction filter (obj, iterate, context) {\r\n var result = []\r\n if (obj && iterate) {\r\n if (obj.filter) {\r\n return obj.filter(iterate, context)\r\n }\r\n each(obj, function (val, key) {\r\n if (iterate.call(context, val, key, obj)) {\r\n result.push(val)\r\n }\r\n })\r\n }\r\n return result\r\n}\r\n\r\nexport default filter\r\n","import isArray from './isArray'\r\nimport values from './values'\r\n\r\n/**\r\n * 从右至左遍历,匹配最近的一条数据\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @param {Object} context 上下文\r\n * @return {Object}\r\n */\r\nfunction findLast (obj, iterate, context) {\r\n if (obj) {\r\n if (!isArray(obj)) {\r\n obj = values(obj)\r\n }\r\n for (var len = obj.length - 1; len >= 0; len--) {\r\n if (iterate.call(context, obj[len], len, obj)) {\r\n return obj[len]\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default findLast\r\n","import keys from './keys'\r\n\r\n/**\r\n * 接收一个函数作为累加器,数组中的每个值(从左到右)开始合并,最终为一个值。\r\n *\r\n * @param {Array} array 数组\r\n * @param {Function} callback 方法\r\n * @param {Object} initialValue 初始值\r\n * @return {Number}\r\n */\r\nfunction reduce (array, callback, initialValue) {\r\n if (array) {\r\n var len, reduceMethod\r\n var index = 0\r\n var context = null\r\n var previous = initialValue\r\n var isInitialVal = arguments.length > 2\r\n var keyList = keys(array)\r\n if (array.length && array.reduce) {\r\n reduceMethod = function () {\r\n return callback.apply(context, arguments)\r\n }\r\n if (isInitialVal) {\r\n return array.reduce(reduceMethod, previous)\r\n }\r\n return array.reduce(reduceMethod)\r\n }\r\n if (isInitialVal) {\r\n index = 1\r\n previous = array[keyList[0]]\r\n }\r\n for (len = keyList.length; index < len; index++) {\r\n previous = callback.call(context, previous, array[keyList[index]], index, array)\r\n }\r\n return previous\r\n }\r\n}\r\n\r\nexport default reduce\r\n","import isArray from './isArray'\r\n\r\n/**\r\n * 浅复制数组的一部分到同一数组中的另一个位置,数组大小不变\r\n *\r\n * @param {Array} array 数组\r\n * @param {Number} target 从该位置开始替换数据\r\n * @param {Number} start 从该位置开始读取数据,默认为 0 。如果为负值,表示倒数\r\n * @param {Number} end 到该位置前停止读取数据,默认等于数组长度。如果为负值,表示倒数\r\n * @return {Array}\r\n */\r\nfunction copyWithin (array, target, start, end) {\r\n if (isArray(array) && array.copyWithin) {\r\n return array.copyWithin(target, start, end)\r\n }\r\n var replaceIndex, replaceArray\r\n var targetIndex = target >> 0\r\n var startIndex = start >> 0\r\n var len = array.length\r\n var endIndex = arguments.length > 3 ? end >> 0 : len\r\n if (targetIndex < len) {\r\n targetIndex = targetIndex >= 0 ? targetIndex : len + targetIndex\r\n if (targetIndex >= 0) {\r\n startIndex = startIndex >= 0 ? startIndex : len + startIndex\r\n endIndex = endIndex >= 0 ? endIndex : len + endIndex\r\n if (startIndex < endIndex) {\r\n for (replaceIndex = 0, replaceArray = array.slice(startIndex, endIndex); targetIndex < len; targetIndex++) {\r\n if (replaceArray.length <= replaceIndex) {\r\n break\r\n }\r\n array[targetIndex] = replaceArray[replaceIndex++]\r\n }\r\n }\r\n }\r\n }\r\n return array\r\n}\r\n\r\nexport default copyWithin\r\n","import isArray from './isArray'\r\n\r\n/**\r\n * 将一个数组分割成大小的组。如果数组不能被平均分配,那么最后一块将是剩下的元素\r\n *\r\n * @param {Array} array 数组\r\n * @param {Number} size 每组大小\r\n * @return {Array}\r\n */\r\nfunction chunk (array, size) {\r\n var index\r\n var result = []\r\n var arrLen = size >> 0 || 1\r\n if (isArray(array)) {\r\n if (arrLen >= 0 && array.length > arrLen) {\r\n index = 0\r\n while (index < array.length) {\r\n result.push(array.slice(index, index + arrLen))\r\n index += arrLen\r\n }\r\n } else {\r\n result = array.length ? [array] : array\r\n }\r\n }\r\n return result\r\n}\r\n\r\nexport default chunk\r\n","import unzip from './unzip'\r\n\r\n/**\r\n * 将每个数组中相应位置的值合并在一起\r\n *\r\n * @param {Array*} array 数组\r\n */\r\nfunction zip () {\r\n return unzip(arguments)\r\n}\r\n\r\nexport default zip\r\n","import values from './values'\r\nimport each from './each'\r\n\r\n/**\r\n * 根据键数组、值数组对转换为对象\r\n *\r\n * @param {Array} props 键数组\r\n * @param {Number} arr 值数组\r\n * @return {Object}\r\n */\r\nfunction zipObject (props, arr) {\r\n var result = {}\r\n arr = arr || []\r\n each(values(props), function (val, key) {\r\n result[val] = arr[key]\r\n })\r\n return result\r\n}\r\n\r\nexport default zipObject\r\n","import map from './map'\r\n\r\nimport isArray from './isArray'\r\n\r\nfunction deepGetObj (obj, path) {\r\n var index = 0\r\n var len = path.length\r\n while (obj && index < len) {\r\n obj = obj[path[index++]]\r\n }\r\n return len && obj ? obj : 0\r\n}\r\n\r\n/**\r\n * 在list的每个元素上执行方法,任何传递的额外参数都会在调用方法的时候传递给它\r\n *\r\n * @param {Array} list\r\n * @param {Array/String/Function} path\r\n * @param {...Object} arguments\r\n * @return {Array}\r\n */\r\nfunction invoke (list, path) {\r\n var func\r\n var args = arguments\r\n var params = []\r\n var paths = []\r\n var index = 2\r\n var len = args.length\r\n for (; index < len; index++) {\r\n params.push(args[index])\r\n }\r\n if (isArray(path)) {\r\n len = path.length - 1\r\n for (index = 0; index < len; index++) {\r\n paths.push(path[index])\r\n }\r\n path = path[len]\r\n }\r\n return map(list, function (context) {\r\n if (paths.length) {\r\n context = deepGetObj(context, paths)\r\n }\r\n func = context[path] || path\r\n if (func && func.apply) {\r\n return func.apply(context, params)\r\n }\r\n })\r\n}\r\n\r\nexport default invoke\r\n","import setupDefaults from './setupDefaults'\r\nimport helperLog from './helperLog'\r\n\r\nimport orderBy from './orderBy'\r\n\r\nimport clone from './clone'\r\nimport eqNull from './eqNull'\r\nimport each from './each'\r\nimport remove from './remove'\r\n\r\nimport assign from './assign'\r\n\r\nfunction strictTree (array, optChildren) {\r\n each(array, function (item) {\r\n if (item[optChildren] && !item[optChildren].length) {\r\n remove(item, optChildren)\r\n }\r\n })\r\n}\r\n\r\n/**\r\n * 将一个带层级的数据列表转成树结构\r\n *\r\n * @param {Array} array 数组\r\n * @param {Object} options {strict: false, parentKey: 'parentId', key: 'id', children: 'children', mapChildren: 'children', data: 'data'}\r\n * @return {Array}\r\n */\r\nfunction toArrayTree (array, options) {\r\n var opts = assign({}, setupDefaults.treeOptions, options)\r\n var optStrict = opts.strict\r\n var optKey = opts.key\r\n var optParentKey = opts.parentKey\r\n var optChildren = opts.children\r\n var optMapChildren = opts.mapChildren\r\n var optSortKey = opts.sortKey\r\n var optReverse = opts.reverse\r\n var optData = opts.data\r\n var result = []\r\n var treeMaps = {}\r\n var idsMap = {}\r\n var id, treeData, parentId\r\n\r\n if (optSortKey) {\r\n array = orderBy(clone(array), optSortKey)\r\n if (optReverse) {\r\n array = array.reverse()\r\n }\r\n }\r\n\r\n each(array, function (item) {\r\n id = item[optKey]\r\n if (idsMap[id]) {\r\n helperLog('warn', 'Duplicate primary key=' + id)\r\n }\r\n idsMap[id] = true\r\n })\r\n\r\n each(array, function (item) {\r\n id = item[optKey]\r\n\r\n if (optData) {\r\n treeData = {}\r\n treeData[optData] = item\r\n } else {\r\n treeData = item\r\n }\r\n\r\n parentId = item[optParentKey]\r\n treeMaps[id] = treeMaps[id] || []\r\n treeData[optKey] = id\r\n treeData[optParentKey] = parentId\r\n\r\n if (id === parentId) {\r\n parentId = null\r\n helperLog('warn', 'Error infinite Loop. key=' + id + ' parentKey=' + id)\r\n }\r\n\r\n treeMaps[parentId] = treeMaps[parentId] || []\r\n treeMaps[parentId].push(treeData)\r\n treeData[optChildren] = treeMaps[id]\r\n if (optMapChildren) {\r\n treeData[optMapChildren] = treeMaps[id]\r\n }\r\n\r\n if (!optStrict || (optStrict && eqNull(parentId))) {\r\n if (!idsMap[parentId]) {\r\n result.push(treeData)\r\n }\r\n }\r\n })\r\n\r\n if (optStrict) {\r\n strictTree(array, optChildren)\r\n }\r\n\r\n return result\r\n}\r\n\r\nexport default toArrayTree\r\n","import eachTree from './eachTree'\r\n\r\n/**\r\n * 从树结构中根据回调过滤数据\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, items, path, parent) 回调\r\n * @param {Object} options {children: 'children'}\r\n * @param {Object} context 上下文\r\n * @return {Array}\r\n */\r\nfunction filterTree (obj, iterate, options, context) {\r\n var result = []\r\n if (obj && iterate) {\r\n eachTree(obj, function (item, index, items, path, parent, nodes) {\r\n if (iterate.call(context, item, index, items, path, parent, nodes)) {\r\n result.push(item)\r\n }\r\n }, options)\r\n }\r\n return result\r\n}\r\n\r\nexport default filterTree\r\n","import isNumber from './isNumber'\r\n\r\n/* eslint-disable eqeqeq */\r\nfunction isNumberNaN (obj) {\r\n return isNumber(obj) && isNaN(obj)\r\n}\r\n\r\nexport default isNumberNaN\r\n","import isNumber from './isNumber'\r\n\r\nfunction isNumberFinite (obj) {\r\n return isNumber(obj) && isFinite(obj)\r\n}\r\n\r\nexport default isNumberFinite\r\n","import isArray from './isArray'\r\nimport isInteger from './isInteger'\r\nimport isNull from './isNull'\r\n\r\n/**\r\n * 判断是否小数\r\n *\r\n * @param {Number} obj 数值\r\n * @return {Boolean}\r\n */\r\nfunction isFloat (obj) {\r\n return !isNull(obj) && !isNaN(obj) && !isArray(obj) && !isInteger(obj)\r\n}\r\n\r\nexport default isFloat\r\n","/**\r\n * 判断是否TypeError对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nfunction isTypeError (obj) {\r\n return obj ? obj.constructor === TypeError : false\r\n}\r\n\r\nexport default isTypeError\r\n","import isString from './isString'\r\nimport isNumber from './isNumber'\r\n\r\n/**\r\n * 判断是否Element对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nfunction isElement (obj) {\r\n return !!(obj && isString(obj.nodeName) && isNumber(obj.nodeType))\r\n}\r\n\r\nexport default isElement\r\n","import staticDocument from './staticDocument'\r\n\r\n/**\r\n * 判断是否Document对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nfunction isDocument (obj) {\r\n return !!(obj && staticDocument && obj.nodeType === 9)\r\n}\r\n\r\nexport default isDocument\r\n","import staticWindow from './staticWindow'\r\n\r\n/**\r\n * 判断是否Window对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nfunction isWindow (obj) {\r\n return !!(staticWindow && !!(obj && obj === obj.window))\r\n}\r\n\r\nexport default isWindow\r\n","import keys from './keys'\r\nimport findIndexOf from './findIndexOf'\r\nimport isEqual from './isEqual'\r\n\r\nimport some from './some'\r\nimport includeArrays from './includeArrays'\r\n\r\n/**\r\n * 判断属性中的键和值是否包含在对象中\r\n *\r\n * @param {Object/Array} obj 对象\r\n * @param {Object} source 值\r\n * @return {Boolean}\r\n */\r\nfunction isMatch (obj, source) {\r\n var objKeys = keys(obj)\r\n var sourceKeys = keys(source)\r\n if (sourceKeys.length) {\r\n if (includeArrays(objKeys, sourceKeys)) {\r\n return some(sourceKeys, function (key2) {\r\n return findIndexOf(objKeys, function (key1) {\r\n return key1 === key2 && isEqual(obj[key1], source[key2])\r\n }) > -1\r\n })\r\n }\r\n } else {\r\n return true\r\n }\r\n return isEqual(obj, source)\r\n}\r\n\r\nexport default isMatch\r\n","import helperEqualCompare from './helperEqualCompare'\r\nimport helperDefaultCompare from './helperDefaultCompare'\r\n\r\nimport isFunction from './isFunction'\r\nimport isUndefined from './isUndefined'\r\n\r\n/**\r\n * 深度比较两个对象之间的值是否相等,使用自定义比较函数\r\n *\r\n * @param {Object} obj1 值1\r\n * @param {Object} obj2 值2\r\n * @param {Function} func 自定义函数\r\n * @return {Boolean}\r\n */\r\nfunction isEqualWith (obj1, obj2, func) {\r\n if (isFunction(func)) {\r\n return helperEqualCompare(obj1, obj2, function (v1, v2, key, obj1, obj2) {\r\n var result = func(v1, v2, key, obj1, obj2)\r\n return isUndefined(result) ? helperDefaultCompare(v1, v2) : !!result\r\n }, func)\r\n }\r\n return helperEqualCompare(obj1, obj2, helperDefaultCompare)\r\n}\r\n\r\nexport default isEqualWith\r\n","import isSymbol from './isSymbol'\r\nimport isDate from './isDate'\r\nimport isArray from './isArray'\r\nimport isRegExp from './isRegExp'\r\nimport isError from './isError'\r\nimport isNull from './isNull'\r\n\r\n/**\r\n * 获取对象类型\r\n *\r\n * @param {Object} obj 对象\r\n * @return {String}\r\n */\r\nfunction getType (obj) {\r\n if (isNull(obj)) {\r\n return 'null'\r\n }\r\n if (isSymbol(obj)) {\r\n return 'symbol'\r\n }\r\n if (isDate(obj)) {\r\n return 'date'\r\n }\r\n if (isArray(obj)) {\r\n return 'array'\r\n }\r\n if (isRegExp(obj)) {\r\n return 'regexp'\r\n }\r\n if (isError(obj)) {\r\n return 'error'\r\n }\r\n return typeof obj\r\n}\r\n\r\nexport default getType\r\n","import setupDefaults from './setupDefaults'\r\n\r\nimport eqNull from './eqNull'\r\n\r\n/**\r\n * 获取一个全局唯一标识\r\n *\r\n * @param {String} prefix 前缀\r\n * @return {Number}\r\n */\r\nfunction uniqueId (prefix) {\r\n return '' + (eqNull(prefix) ? '' : prefix) + (setupDefaults.keyId++)\r\n}\r\n\r\nexport default uniqueId\r\n","import isPlainObject from './isPlainObject'\r\nimport isString from './isString'\r\n\r\n/**\r\n * 字符串转JSON\r\n *\r\n * @param {String} str 字符串\r\n * @return {Object} 返回转换后对象\r\n */\r\nfunction toStringJSON (str) {\r\n if (isPlainObject(str)) {\r\n return str\r\n } else if (isString(str)) {\r\n try {\r\n return JSON.parse(str)\r\n } catch (e) {}\r\n }\r\n return {}\r\n}\r\n\r\nexport default toStringJSON\r\n","import eqNull from './eqNull'\r\n\r\n/**\r\n * JSON转字符串\r\n *\r\n * @param {Object} obj 对象\r\n * @return {String} 返回字符串\r\n */\r\nfunction toJSONString (obj) {\r\n return eqNull(obj) ? '' : JSON.stringify(obj)\r\n}\r\n\r\nexport default toJSONString\r\n","import values from './values'\r\n\r\n/**\r\n * 获取对象第一个值\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @return {Object}\r\n */\r\nfunction first (obj) {\r\n return values(obj)[0]\r\n}\r\n\r\nexport default first\r\n","import values from './values'\r\n\r\n/**\r\n * 获取对象最后一个值\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @return {Object}\r\n */\r\nfunction last (obj) {\r\n var list = values(obj)\r\n return list[list.length - 1]\r\n}\r\n\r\nexport default last\r\n","import isArray from './isArray'\r\nimport hasOwnProp from './hasOwnProp'\r\n\r\n/**\r\n * 已废弃,被 some, every 替换\r\n * @deprecated\r\n */\r\nfunction forOf (obj, iterate, context) {\r\n if (obj) {\r\n if (isArray(obj)) {\r\n for (var index = 0, len = obj.length; index < len; index++) {\r\n if (iterate.call(context, obj[index], index, obj) === false) {\r\n break\r\n }\r\n }\r\n } else {\r\n for (var key in obj) {\r\n if (hasOwnProp(obj, key)) {\r\n if (iterate.call(context, obj[key], key, obj) === false) {\r\n break\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default forOf\r\n","import isArray from './isArray'\r\nimport keys from './hasOwnProp'\r\n\r\n/**\r\n * 已废弃\r\n * @deprecated\r\n */\r\nfunction lastForOf (obj, iterate, context) {\r\n if (obj) {\r\n var len, list\r\n if (isArray(obj)) {\r\n for (len = obj.length - 1; len >= 0; len--) {\r\n if (iterate.call(context, obj[len], len, obj) === false) {\r\n break\r\n }\r\n }\r\n } else {\r\n list = keys(obj)\r\n for (len = list.length - 1; len >= 0; len--) {\r\n if (iterate.call(context, obj[list[len]], list[len], obj) === false) {\r\n break\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default lastForOf\r\n","import staticHGKeyRE from './staticHGKeyRE'\r\n\r\nimport helperGetHGSKeys from './helperGetHGSKeys'\r\n\r\nimport hasOwnProp from './hasOwnProp'\r\n\r\n/**\r\n * 检查键、路径是否是该对象的属性\r\n *\r\n * @param {Object/Array} data 对象\r\n * @param {String/Function} property 键、路径\r\n * @return {Boolean}\r\n */\r\nfunction has (obj, property) {\r\n if (obj) {\r\n if (hasOwnProp(obj, property)) {\r\n return true\r\n } else {\r\n var prop, arrIndex, objProp, matchs, rest, isHas\r\n var props = helperGetHGSKeys(property)\r\n var index = 0\r\n var len = props.length\r\n for (rest = obj; index < len; index++) {\r\n isHas = false\r\n prop = props[index]\r\n matchs = prop ? prop.match(staticHGKeyRE) : ''\r\n if (matchs) {\r\n arrIndex = matchs[1]\r\n objProp = matchs[2]\r\n if (arrIndex) {\r\n if (rest[arrIndex]) {\r\n if (hasOwnProp(rest[arrIndex], objProp)) {\r\n isHas = true\r\n rest = rest[arrIndex][objProp]\r\n }\r\n }\r\n } else {\r\n if (hasOwnProp(rest, objProp)) {\r\n isHas = true\r\n rest = rest[objProp]\r\n }\r\n }\r\n } else {\r\n if (hasOwnProp(rest, prop)) {\r\n isHas = true\r\n rest = rest[prop]\r\n }\r\n }\r\n if (isHas) {\r\n if (index === len - 1) {\r\n return true\r\n }\r\n } else {\r\n break\r\n }\r\n }\r\n }\r\n }\r\n return false\r\n}\r\n\r\nexport default has\r\n","import groupBy from './groupBy'\r\n\r\nimport objectEach from './objectEach'\r\n\r\n/**\r\n * 集合分组统计,返回各组中对象的数量统计\r\n *\r\n * @param {Array} obj 对象\r\n * @param {Function} iterate 回调/对象属性\r\n * @param {Object} context 上下文\r\n * @return {Object}\r\n */\r\nfunction countBy (obj, iterate, context) {\r\n var result = groupBy(obj, iterate, context || this)\r\n objectEach(result, function (item, key) {\r\n result[key] = item.length\r\n })\r\n return result\r\n}\r\n\r\nexport default countBy\r\n","import keys from './keys'\r\n\r\nimport slice from './slice'\r\nimport includes from './includes'\r\nimport arrayEach from './arrayEach'\r\n\r\nimport assign from './assign'\r\n\r\n/**\r\n * 将一个或者多个对象值解构到目标对象\r\n *\r\n * @param {Object} destination 目标对象\r\n * @param {...Object}\r\n * @return {Boolean}\r\n */\r\nfunction destructuring (destination, sources) {\r\n if (destination && sources) {\r\n var rest = assign.apply(this, [{}].concat(slice(arguments, 1)))\r\n var restKeys = keys(rest)\r\n arrayEach(keys(destination), function (key) {\r\n if (includes(restKeys, key)) {\r\n destination[key] = rest[key]\r\n }\r\n })\r\n }\r\n return destination\r\n}\r\n\r\nexport default destructuring\r\n","import setupDefaults from './setupDefaults'\r\n\r\nimport round from './round'\r\nimport ceil from './ceil'\r\nimport floor from './floor'\r\n\r\nimport isNumber from './isNumber'\r\nimport toValueString from './toValueString'\r\nimport toFixed from './toFixed'\r\n\r\nimport toNumberString from './toNumberString'\r\nimport assign from './assign'\r\n\r\n/**\r\n * 千分位分隔符、小数点\r\n *\r\n * @param {String/Number} num 数值\r\n * @param {CommafyOptions} options 参数\r\n * @return {String}\r\n */\r\nfunction commafy(num, options) {\r\n var opts = assign({}, setupDefaults.commafyOptions, options)\r\n var optDigits = opts.digits\r\n var isNum = isNumber(num)\r\n var rest, result, isNegative, intStr, floatStr\r\n if (isNum) {\r\n rest = (opts.ceil ? ceil : (opts.floor ? floor : round))(num, optDigits)\r\n result = toNumberString(optDigits ? toFixed(rest, optDigits) : rest).split('.')\r\n intStr = result[0]\r\n floatStr = result[1]\r\n isNegative = intStr && rest < 0\r\n if (isNegative) {\r\n intStr = intStr.substring(1, intStr.length)\r\n }\r\n } else {\r\n rest = toValueString(num).replace(/,/g, '')\r\n result = rest ? [rest] : []\r\n intStr = result[0]\r\n }\r\n if (result.length) {\r\n return (isNegative ? '-' : '') + intStr.replace(new RegExp('(?=(?!(\\\\b))(.{' + (opts.spaceNumber || 3) + '})+$)', 'g'), (opts.separator || ',')) + (floatStr ? ('.' + floatStr) : '')\r\n }\r\n return rest\r\n}\r\n\r\nexport default commafy\r\n","import helperNumberAdd from './helperNumberAdd'\r\nimport toNumber from './toNumber'\r\n\r\n/**\r\n * 加法运算\r\n *\r\n * @param { Number } num1 被加数\r\n * @param { Number } num2 加数\r\n * @return {Number}\r\n */\r\nfunction add (num1, num2) {\r\n return helperNumberAdd(toNumber(num1), toNumber(num2))\r\n}\r\n\r\nexport default add\r\n","import helperNumberDecimal from './helperNumberDecimal'\r\nimport toNumberString from './toNumberString'\r\nimport toNumber from './toNumber'\r\nimport toFixed from './toFixed'\r\n\r\n/**\r\n * 减法运算\r\n *\r\n * @param { Number } num1 被减数\r\n * @param { Number } num2 减数\r\n * @return {Number}\r\n */\r\nfunction subtract (num1, num2) {\r\n var subtrahend = toNumber(num1)\r\n var minuend = toNumber(num2)\r\n var str1 = toNumberString(subtrahend)\r\n var str2 = toNumberString(minuend)\r\n var digit1 = helperNumberDecimal(str1)\r\n var digit2 = helperNumberDecimal(str2)\r\n var ratio = Math.pow(10, Math.max(digit1, digit2))\r\n var precision = (digit1 >= digit2) ? digit1 : digit2\r\n return parseFloat(toFixed((subtrahend * ratio - minuend * ratio) / ratio, precision))\r\n}\r\n\r\nexport default subtract\r\n","import helperNumberDivide from './helperNumberDivide'\r\nimport toNumber from './toNumber'\r\n\r\n/**\r\n * 除法运算\r\n *\r\n * @param { Number } num1 数值1\r\n * @param { Number } num2 数值2\r\n * @return {Number}\r\n */\r\nfunction divide (num1, num2) {\r\n return helperNumberDivide(toNumber(num1), toNumber(num2))\r\n}\r\n\r\nexport default divide\r\n","import helperNumberDivide from './helperNumberDivide'\r\n\r\nimport getSize from './getSize'\r\n\r\nimport sum from './sum'\r\n\r\n/**\r\n * 求平均值函数\r\n *\r\n * @param {Array} array 数组\r\n * @param {Function/String} iterate 方法或属性\r\n * @param {Object} context 上下文\r\n * @return {Number}\r\n */\r\nfunction mean (array, iterate, context) {\r\n return helperNumberDivide(sum(array, iterate, context), getSize(array))\r\n}\r\n\r\nexport default mean\r\n","import helperGetDateTime from './helperGetDateTime'\r\n\r\nimport now from './now'\r\nimport toStringDate from './toStringDate'\r\n\r\nimport isDate from './isDate'\r\n\r\n/**\r\n * 将日期格式化为时间戳\r\n *\r\n * @param {String/Number/Date} str 日期或数字\r\n * @param {String} format 解析日期格式\r\n * @returns Number\r\n */\r\nvar timestamp = function (str, format) {\r\n if (str) {\r\n var date = toStringDate(str, format)\r\n return isDate(date) ? helperGetDateTime(date) : date\r\n }\r\n return now()\r\n}\r\n\r\nexport default timestamp\r\n","import toDateString from './toDateString'\r\n\r\n/**\r\n * 比较两个日期\r\n *\r\n * @param {Number/String/Date} date1 日期\r\n * @param {Number/String/Date} date2 日期\r\n * @param {String} format 对比格式\r\n */\r\nfunction isDateSame (date1, date2, format) {\r\n if (date1 && date2) {\r\n date1 = toDateString(date1, format)\r\n return date1 !== 'Invalid Date' && date1 === toDateString(date2, format)\r\n }\r\n return false\r\n}\r\n\r\nexport default isDateSame\r\n","import getWhatMonth from './getWhatMonth'\r\n\r\nimport toStringDate from './toStringDate'\r\n\r\nimport isValidDate from './isValidDate'\r\n\r\nfunction getQuarterNumber (date) {\r\n var month = date.getMonth()\r\n if (month < 3) {\r\n return 1\r\n } else if (month < 6) {\r\n return 2\r\n } else if (month < 9) {\r\n return 3\r\n }\r\n return 4\r\n}\r\n\r\n/**\r\n * 返回前几季度或后几季度的日期\r\n *\r\n * @param {Date} date 日期\r\n * @param {Number} offset 季度(默认当前季度)、前几季度、后几季度\r\n * @param {Number} day 获取哪天:月初(first)、月末(last)、指定天数(数值),如果为空,但超过指定月份的天数时,则默认单月最后一天\r\n * @return {Date}\r\n */\r\nfunction getWhatQuarter (date, offset, day) {\r\n var currMonth, monthOffset = offset && !isNaN(offset) ? offset * 3 : 0\r\n date = toStringDate(date)\r\n if (isValidDate(date)) {\r\n currMonth = (getQuarterNumber(date) - 1) * 3\r\n date.setMonth(currMonth)\r\n return getWhatMonth(date, monthOffset, day)\r\n }\r\n return date\r\n}\r\n\r\nexport default getWhatQuarter\r\n","import staticStrFirst from './staticStrFirst'\r\nimport staticStrLast from './staticStrLast'\r\nimport staticParseInt from './staticParseInt'\r\n\r\nimport helperGetDateFullYear from './helperGetDateFullYear'\r\nimport helperGetDateMonth from './helperGetDateMonth'\r\nimport helperGetDateTime from './helperGetDateTime'\r\n\r\nimport toStringDate from './toStringDate'\r\nimport isValidDate from './isValidDate'\r\n\r\n/**\r\n * 返回前几小时或后几小时的日期\r\n *\r\n * @param {Date} date 日期或数字\r\n * @param {Number} offset 小时偏移量(默认0)、前几小时、后几小时\r\n * @param {String} mode 指定分钟(null默认当前分)、0分(first)、59分(last)\r\n * @return {Date}\r\n */\r\nfunction getWhatHours (date, offset, mode) {\r\n date = toStringDate(date)\r\n if (isValidDate(date) && !isNaN(offset)) {\r\n date.setHours(date.getHours() + staticParseInt(offset))\r\n if (mode === staticStrFirst) {\r\n return new Date(helperGetDateFullYear(date), helperGetDateMonth(date), date.getDate(), date.getHours())\r\n } else if (mode === staticStrLast) {\r\n return new Date(helperGetDateTime(getWhatHours(date, 1, staticStrFirst)) - 1)\r\n }\r\n }\r\n return date\r\n}\r\n\r\nexport default getWhatHours\r\n","import staticStrFirst from './staticStrFirst'\r\nimport staticStrLast from './staticStrLast'\r\nimport staticParseInt from './staticParseInt'\r\n\r\nimport helperGetDateFullYear from './helperGetDateFullYear'\r\nimport helperGetDateMonth from './helperGetDateMonth'\r\nimport helperGetDateTime from './helperGetDateTime'\r\n\r\nimport toStringDate from './toStringDate'\r\nimport isValidDate from './isValidDate'\r\n\r\n/**\r\n * 返回前几分钟或后几分钟的日期\r\n *\r\n * @param {Date} date 日期或数字\r\n * @param {Number} offset 分钟偏移量(默认0)、前几分钟、后几分钟\r\n * @param {String} mode 指定秒(null默认当前秒)、0秒(first)、59秒(last)\r\n * @return {Date}\r\n */\r\nfunction getWhatMinutes (date, offset, mode) {\r\n date = toStringDate(date)\r\n if (isValidDate(date) && !isNaN(offset)) {\r\n date.setMinutes(date.getMinutes() + staticParseInt(offset))\r\n if (mode === staticStrFirst) {\r\n return new Date(helperGetDateFullYear(date), helperGetDateMonth(date), date.getDate(), date.getHours(), date.getMinutes())\r\n } else if (mode === staticStrLast) {\r\n return new Date(helperGetDateTime(getWhatMinutes(date, 1, staticStrFirst)) - 1)\r\n }\r\n }\r\n return date\r\n}\r\n\r\nexport default getWhatMinutes\r\n","import staticStrFirst from './staticStrFirst'\r\nimport staticStrLast from './staticStrLast'\r\nimport staticParseInt from './staticParseInt'\r\n\r\nimport helperGetDateFullYear from './helperGetDateFullYear'\r\nimport helperGetDateMonth from './helperGetDateMonth'\r\nimport helperGetDateTime from './helperGetDateTime'\r\n\r\nimport toStringDate from './toStringDate'\r\nimport isValidDate from './isValidDate'\r\n\r\n/**\r\n * 返回前几秒或后几秒的日期\r\n *\r\n * @param {Date} date 日期或数字\r\n * @param {Number} offset 秒偏移量(默认0)、前几秒、后几秒\r\n * @param {String} mode 指定毫秒(null默认当前毫秒)、0毫秒(first)、59毫秒(last)\r\n * @return {Date}\r\n */\r\nfunction getWhatSeconds (date, offset, mode) {\r\n date = toStringDate(date)\r\n if (isValidDate(date) && !isNaN(offset)) {\r\n date.setSeconds(date.getSeconds() + staticParseInt(offset))\r\n if (mode === staticStrFirst) {\r\n return new Date(helperGetDateFullYear(date), helperGetDateMonth(date), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds())\r\n } else if (mode === staticStrLast) {\r\n return new Date(helperGetDateTime(getWhatSeconds(date, 1, staticStrFirst)) - 1)\r\n }\r\n }\r\n return date\r\n}\r\n\r\nexport default getWhatSeconds\r\n","import getWhatYear from './getWhatYear'\r\nimport toStringDate from './toStringDate'\r\n\r\nimport isValidDate from './isValidDate'\r\nimport isLeapYear from './isLeapYear'\r\n\r\n/**\r\n * 返回某个年份的天数\r\n *\r\n * @param {Date} date 日期或数字\r\n * @param {Number} offset 年(默认当年)、前几个年、后几个年\r\n * @return {Number}\r\n */\r\nfunction getDayOfYear (date, year) {\r\n date = toStringDate(date)\r\n if (isValidDate(date)) {\r\n return isLeapYear(getWhatYear(date, year)) ? 366 : 365\r\n }\r\n return NaN\r\n}\r\n\r\nexport default getDayOfYear\r\n","import staticDayTime from './staticDayTime'\r\nimport staticStrFirst from './staticStrFirst'\r\nimport staticStrLast from './staticStrLast'\r\n\r\nimport helperGetDateTime from './helperGetDateTime'\r\n\r\nimport getWhatMonth from './getWhatMonth'\r\nimport toStringDate from './toStringDate'\r\n\r\nimport isValidDate from './isValidDate'\r\n\r\n/**\r\n * 返回某个月份的天数\r\n *\r\n * @param {Date} date 日期或数字\r\n * @param {Number} offset 月(默认当月)、前几个月、后几个月\r\n * @return {Number}\r\n */\r\nfunction getDayOfMonth (date, month) {\r\n date = toStringDate(date)\r\n if (isValidDate(date)) {\r\n return Math.floor((helperGetDateTime(getWhatMonth(date, month, staticStrLast)) - helperGetDateTime(getWhatMonth(date, month, staticStrFirst))) / staticDayTime) + 1\r\n }\r\n return NaN\r\n}\r\n\r\nexport default getDayOfMonth\r\n","import toValueString from './toValueString'\r\n\r\nimport helperStringRepeat from './helperStringRepeat'\r\n\r\n/**\r\n * 将字符串重复 n 次\r\n *\r\n * @param {String} str 字符串\r\n * @param {Number} count 次数\r\n * @return {String}\r\n */\r\nfunction repeat (str, count) {\r\n return helperStringRepeat(toValueString(str), count)\r\n}\r\n\r\nexport default repeat\r\n","import toValueString from './toValueString'\r\n\r\nimport isUndefined from './isUndefined'\r\n\r\nimport helperStringRepeat from './helperStringRepeat'\r\n\r\n/**\r\n * 用指定字符从后面开始补全字符串\r\n *\r\n * @param {String} str 字符串\r\n * @param {Number} targetLength 结果长度\r\n * @param {Number} padString 补全字符\r\n * @return {String}\r\n */\r\nfunction padEnd (str, targetLength, padString) {\r\n var rest = toValueString(str)\r\n targetLength = targetLength >> 0\r\n padString = isUndefined(padString) ? ' ' : '' + padString\r\n if (rest.padEnd) {\r\n return rest.padEnd(targetLength, padString)\r\n }\r\n if (targetLength > rest.length) {\r\n targetLength -= rest.length\r\n if (targetLength > padString.length) {\r\n padString += helperStringRepeat(padString, targetLength / padString.length)\r\n }\r\n return rest + padString.slice(0, targetLength)\r\n }\r\n return rest\r\n}\r\n\r\nexport default padEnd\r\n","import toValueString from './toValueString'\r\n\r\n/**\r\n * 判断字符串是否在源字符串的头部\r\n *\r\n * @param {String} str 字符串\r\n * @param {String/Number} val 值\r\n * @param {Number} startIndex 开始索引\r\n * @return {String}\r\n */\r\nfunction startsWith (str, val, startIndex) {\r\n var rest = toValueString(str)\r\n return (arguments.length === 1 ? rest : rest.substring(startIndex)).indexOf(val) === 0\r\n}\r\n\r\nexport default startsWith\r\n","import toValueString from './toValueString'\r\n\r\n/**\r\n * 判断字符串是否在源字符串的尾部\r\n *\r\n * @param {String} str 字符串\r\n * @param {String/Number} val 值\r\n * @param {Number} startIndex 开始索引\r\n * @return {String}\r\n */\r\nfunction endsWith (str, val, startIndex) {\r\n var rest = toValueString(str)\r\n var argsLen = arguments.length\r\n return argsLen > 1 && (argsLen > 2 ? rest.substring(0, startIndex).indexOf(val) === startIndex - 1 : rest.indexOf(val) === rest.length - 1)\r\n}\r\n\r\nexport default endsWith\r\n","import template from './template'\r\n\r\n/**\r\n * 字符串格式化占位符\r\n * @param { string } str \r\n * @param { object | any[] } obj \r\n */\r\nfunction toFormatString (str, obj) {\r\n return template(str, obj,{ tmplRE: /\\{([.\\w[\\]\\s]+)\\}/g })\r\n}\r\n\r\nexport default toFormatString\r\n","/**\r\n * 一个空的方法,始终返回 undefined,可用于初始化值\r\n */\r\nfunction noop () {}\r\n\r\nexport default noop\r\n","import slice from './slice'\r\n\r\n/**\r\n * 创建一个绑定上下文的函数\r\n *\r\n * @param {Function} callback 函数\r\n * @param {Object} context 上下文\r\n * @param {*} args 额外的参数\r\n * @return {Object}\r\n */\r\nfunction bind (callback, context) {\r\n var args = slice(arguments, 2)\r\n return function () {\r\n return callback.apply(context, slice(arguments).concat(args))\r\n }\r\n}\r\n\r\nexport default bind\r\n","import slice from './slice'\r\n\r\n/**\r\n * 创建一个只能调用一次的函数,只会返回第一次执行后的结果\r\n *\r\n * @param {Function} callback 函数\r\n * @param {Object} context 上下文\r\n * @param {*} args 额外的参数\r\n * @return {Object}\r\n */\r\nfunction once (callback, context) {\r\n var done = false\r\n var rest = null\r\n var args = slice(arguments, 2)\r\n return function () {\r\n if (done) {\r\n return rest\r\n }\r\n rest = callback.apply(context, slice(arguments).concat(args))\r\n done = true\r\n return rest\r\n }\r\n}\r\n\r\nexport default once\r\n","import slice from './slice'\r\n\r\n/**\r\n * 创建一个函数, 调用次数超过 count 次之后执行回调并将所有结果记住后返回\r\n *\r\n * @param {Number} count 调用次数\r\n * @param {Function} callback 完成回调\r\n * @return {Object}\r\n */\r\nfunction after (count, callback, context) {\r\n var runCount = 0\r\n var rests = []\r\n return function () {\r\n var args = arguments\r\n runCount++\r\n if (runCount <= count) {\r\n rests.push(args[0])\r\n }\r\n if (runCount >= count) {\r\n callback.apply(context, [rests].concat(slice(args)))\r\n }\r\n }\r\n}\r\n\r\nexport default after\r\n","import slice from './slice'\r\n\r\n/**\r\n * 创建一个函数, 调用次数不超过 count 次之前执行回调并将所有结果记住后返回\r\n *\r\n * @param {Number} count 调用次数\r\n * @param {Function} callback 完成回调\r\n * @return {Object}\r\n */\r\nfunction before (count, callback, context) {\r\n var runCount = 0\r\n var rests = []\r\n context = context || this\r\n return function () {\r\n var args = arguments\r\n runCount++\r\n if (runCount < count) {\r\n rests.push(args[0])\r\n callback.apply(context, [rests].concat(slice(args)))\r\n }\r\n }\r\n}\r\n\r\nexport default before\r\n","import assign from './assign'\r\n\r\n/**\r\n * 节流函数;当被调用 n 毫秒后才会执行,如果在这时间内又被调用则至少每隔 n 秒毫秒调用一次该函数\r\n *\r\n * @param {Function} callback 回调\r\n * @param {Number} wait 多少秒毫\r\n * @param {Object} options 参数{leading: 是否在之前执行, trailing: 是否在之后执行}\r\n * @return {Function}\r\n */\r\nfunction throttle (callback, wait, options) {\r\n var args = null\r\n var context = null\r\n var runFlag = false\r\n var timeout = null\r\n var opts = assign({ leading: true, trailing: true }, options)\r\n var optLeading = opts.leading\r\n var optTrailing = opts.trailing\r\n\r\n var gcFn = function () {\r\n args = null\r\n context = null\r\n }\r\n\r\n var runFn = function () {\r\n runFlag = true\r\n callback.apply(context, args)\r\n timeout = setTimeout(endFn, wait)\r\n gcFn()\r\n }\r\n\r\n var endFn = function () {\r\n timeout = null\r\n if (runFlag) {\r\n gcFn()\r\n return\r\n }\r\n if (optTrailing === true) {\r\n runFn()\r\n return\r\n }\r\n gcFn()\r\n }\r\n\r\n var cancelFn = function () {\r\n var rest = timeout !== null\r\n if (rest) {\r\n clearTimeout(timeout)\r\n }\r\n gcFn()\r\n timeout = null\r\n runFlag = false\r\n return rest\r\n }\r\n\r\n var throttled = function () {\r\n args = arguments\r\n context = this\r\n runFlag = false\r\n if (timeout === null && optLeading === true) {\r\n runFn()\r\n return\r\n }\r\n if (optTrailing === true) {\r\n timeout = setTimeout(endFn, wait)\r\n }\r\n }\r\n\r\n throttled.cancel = cancelFn\r\n\r\n return throttled\r\n}\r\n\r\nexport default throttle\r\n","import assign from './assign'\r\n\r\n/**\r\n * 函数去抖;当被调用 n 毫秒后才会执行,如果在这时间内又被调用则将重新计算执行时间\r\n *\r\n * @param {Function} callback 回调\r\n * @param {Number} wait 多少秒毫\r\n * @param {Object} options 参数{leading: 是否在之前执行, trailing: 是否在之后执行}\r\n * @return {Function}\r\n */\r\nfunction debounce (callback, wait, options) {\r\n var args = null\r\n var context = null\r\n var opts = typeof options === 'boolean' ? { leading: options, trailing: !options } : assign({ leading: false, trailing: true }, options)\r\n var runFlag = false\r\n var timeout = null\r\n var optLeading = opts.leading\r\n var optTrailing = opts.trailing\r\n\r\n var gcFn = function () {\r\n args = null\r\n context = null\r\n }\r\n\r\n var runFn = function () {\r\n runFlag = true\r\n callback.apply(context, args)\r\n gcFn()\r\n }\r\n\r\n var endFn = function () {\r\n if (optLeading === true) {\r\n timeout = null\r\n }\r\n if (runFlag) {\r\n gcFn()\r\n return\r\n }\r\n if (optTrailing === true) {\r\n runFn()\r\n return\r\n }\r\n gcFn()\r\n }\r\n\r\n var cancelFn = function () {\r\n var rest = timeout !== null\r\n if (rest) {\r\n clearTimeout(timeout)\r\n }\r\n gcFn()\r\n timeout = null\r\n runFlag = false\r\n return rest\r\n }\r\n\r\n var debounced = function () {\r\n runFlag = false\r\n args = arguments\r\n context = this\r\n if (timeout === null) {\r\n if (optLeading === true) {\r\n runFn()\r\n }\r\n } else {\r\n clearTimeout(timeout)\r\n }\r\n timeout = setTimeout(endFn, wait)\r\n }\r\n\r\n debounced.cancel = cancelFn\r\n\r\n return debounced\r\n}\r\n\r\nexport default debounce\r\n","import slice from './slice'\r\n\r\n/**\r\n * 该方法和 setTimeout 一样的效果,区别就是支持上下文和额外参数\r\n *\r\n * @param {Function} callback 函数\r\n * @param {Number} wait 延迟毫秒\r\n * @param {*} args 额外的参数\r\n * @return {Number}\r\n */\r\nfunction delay (callback, wait) {\r\n var args = slice(arguments, 2)\r\n var context = this\r\n return setTimeout(function () {\r\n callback.apply(context, args)\r\n }, wait)\r\n}\r\n\r\nexport default delay\r\n","import staticLocation from './staticLocation'\r\n\r\nimport helperGetLocatOrigin from './helperGetLocatOrigin'\r\n\r\nimport lastIndexOf from './lastIndexOf'\r\n\r\nfunction getBaseURL () {\r\n if (staticLocation) {\r\n var pathname = staticLocation.pathname\r\n var lastIndex = lastIndexOf(pathname, '/') + 1\r\n return helperGetLocatOrigin() + (lastIndex === pathname.length ? pathname : pathname.substring(0, lastIndex))\r\n }\r\n return ''\r\n}\r\n\r\nexport default getBaseURL\r\n","import staticLocation from './staticLocation'\r\n\r\nimport parseUrl from './parseUrl'\r\n\r\n/**\r\n * 获取地址栏信息\r\n *\r\n * @return Object\r\n */\r\nfunction locat () {\r\n return staticLocation ? parseUrl(staticLocation.href) : {}\r\n}\r\n\r\nexport default locat\r\n","import type { WritableComputedRef } from \"vue\";\r\nimport { isArray, isObject } from \"./is\";\r\nimport { computed } from \"vue\";\r\nimport XEUtils from \"xe-utils\";\r\nimport { twMerge } from \"tailwind-merge\";\r\nimport type { ClassValue } from \"clsx\";\r\nimport { clsx } from \"clsx\";\r\nimport { klona } from \"klona/full\";\r\nimport dayjs from \"dayjs\";\r\nimport utc from \"dayjs/plugin/utc\";\r\nimport timezone from \"dayjs/plugin/timezone\";\r\n\r\nlet isExtendDayjs = false;\r\n\r\nexport type DebounceSettings = {\r\n /**\r\n * 前沿触发\r\n */\r\n leading?: boolean | undefined;\r\n /**\r\n * 最大等待时间\r\n */\r\n maxWait?: number | undefined;\r\n /**\r\n * 尾部触发\r\n */\r\n trailing?: boolean | undefined;\r\n};\r\n\r\n/**\r\n * 获取localStorage数据,item值非json对象,请直接localStorage.setItem\r\n * @param item 键名\r\n */\r\nexport function getStorage<T = any>(item: string): T | string | null {\r\n if (!item) return null;\r\n const localdata = localStorage.getItem(item);\r\n if (!localdata) return null;\r\n\r\n try {\r\n return JSON.parse(localdata, (_key, value) => {\r\n if (value && typeof value === \"string\") {\r\n const fn = function () {\r\n return value.replace(\"SJZY_FUNCTION\", \"\");\r\n };\r\n return value.includes(\"SJZY_FUNCTION\") ? fn() : value;\r\n }\r\n return value;\r\n });\r\n } catch {\r\n // console.log(error)\r\n return localdata;\r\n }\r\n}\r\n\r\n/**\r\n * @description 计算文字宽度\r\n */\r\nexport function calcWordsWidth(\r\n words: string,\r\n fontSize = \"12\",\r\n fontFamily = \"Microsoft YaHei,Arial,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue','Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji'\",\r\n): number {\r\n let wordsWidth = 0;\r\n const canvas = document.createElement(\"canvas\");\r\n const ctx = canvas.getContext(\"2d\");\r\n if (ctx) {\r\n ctx.font = `${fontSize} ${fontFamily}`;\r\n wordsWidth = ctx.measureText(words).width;\r\n }\r\n return wordsWidth;\r\n}\r\n\r\n/**\r\n * @description 脏数据检测方法\r\n * @param newObj 新对象\r\n * @param oldObj 原始对象\r\n * @param keyObj 对象中数组的唯一key e: { list: { key: 'id' }, list2: { key: 'id' }, }\r\n */\r\nexport function getDifference(\r\n newObj: { [key: string]: any },\r\n oldObj: { [key: string]: any },\r\n keyObj?: any,\r\n): {\r\n [k: string]: any;\r\n} {\r\n const excludeAll = keyObj?.excludeAll || [];\r\n const excludeItem = keyObj?.exclude || [];\r\n if (!excludeAll.includes(\"Id\")) excludeAll.push(\"Id\");\r\n if (!excludeAll.includes(\"rowId\")) excludeAll.push(\"rowId\");\r\n return Object.fromEntries(\r\n Object.entries(newObj).reduce((r: any, [k, v]) => {\r\n if (excludeAll.includes(k) || excludeItem.includes(k)) return r;\r\n else if (v && isObject(v)) setDifferenceObj(keyObj, oldObj, v, k, r);\r\n else if (v && isArray(v)) setDifferenceArr(keyObj, oldObj, v, k, r);\r\n else setDifferenceField(keyObj, oldObj, v, k, r);\r\n\r\n return r;\r\n }, []),\r\n );\r\n}\r\n/** 脏数据检测方法--设置对象 */\r\nexport function setDifferenceObj(keyObj: any, oldObj: any, v: any, k: any, r: any): void {\r\n const temp = getDifference(v, oldObj[k] || {}, {\r\n excludeAll: keyObj?.excludeAll,\r\n ...keyObj,\r\n });\r\n if (Object.keys(temp).length) r.push([k, temp]);\r\n}\r\n/** 脏数据检测方法--设置数组 */\r\nexport function setDifferenceArr(keyObj: any, oldObj: any, v: any[], k: any, r: any): void {\r\n const arr: any[] = [];\r\n const arrKey = (keyObj || {})[k]?.key;\r\n if (oldObj[k]) {\r\n const len: any[] = v?.length >= oldObj[k]?.length ? v : oldObj[k];\r\n const min: any[] = v?.length < oldObj[k]?.length ? v : oldObj[k];\r\n if (arrKey) {\r\n len.forEach(e => {\r\n const o = min.find((i: any) => i[arrKey] === e[arrKey]);\r\n if (o) {\r\n const t = getDifference(e, o, {\r\n excludeAll: keyObj?.excludeAll,\r\n ...keyObj[k],\r\n });\r\n if (Object.keys(t).length) arr.push({ [arrKey]: o[arrKey], ...t });\r\n } else {\r\n arr.push(e);\r\n }\r\n });\r\n } else {\r\n len.forEach((e, index) => {\r\n const o = min[index];\r\n if ((isObject(e) && !isObject(o)) || (isArray(e) && !isArray(o)) || typeof e !== typeof o || !o) {\r\n arr.push(e);\r\n } else if (isObject(e) || isArray(e)) {\r\n const t = getDifference(e, o, { excludeAll: keyObj?.excludeAll });\r\n if (Object.keys(t).length) arr.push({ ...t });\r\n } else if (e !== o) {\r\n arr.push(e);\r\n }\r\n });\r\n }\r\n } else {\r\n arr.push(...v);\r\n }\r\n\r\n if (arr.length) r.push([k, arr]);\r\n}\r\n/** 脏数据检测方法--设置普通字段 */\r\nexport function setDifferenceField(keyObj: any, oldObj: any, v: any[], k: any, r: any): void {\r\n const notNullToFalse = keyObj?.notNullToFalse || [];\r\n if (\r\n (typeof v === \"string\" && typeof oldObj[k] === \"number\") ||\r\n (typeof v === \"number\" && typeof oldObj[k] === \"string\")\r\n ) {\r\n if (Number(v) !== Number(oldObj[k])) r.push([k, v]);\r\n } else if ([undefined, null, \"\"].includes(v as any)) {\r\n if (![undefined, null, \"\"].includes(oldObj[k] as any)) r.push([k, v]);\r\n } else if (v !== oldObj[k]) {\r\n if ((v as any) === false && [undefined, null, \"\"].includes(oldObj[k] as any) && !notNullToFalse.includes(k)) {\r\n return;\r\n }\r\n r.push([k, v]);\r\n }\r\n}\r\n\r\nexport function deepMerge<T = any>(src: any = {}, target: any = {}): T {\r\n let key: string;\r\n for (key in target) src[key] = isObject(src[key]) ? deepMerge(src[key], target[key]) : (src[key] = target[key]);\r\n\r\n return src;\r\n}\r\n\r\nexport function toCssUnit(val?: number | string, unit = \"px\"): string {\r\n if (XEUtils.isNumber(val) || /^\\d+$/.test(`${val}`)) {\r\n return `${val}${unit}`;\r\n }\r\n return `${val || \"\"}`;\r\n}\r\n/** 响应式绑定 */\r\nexport function useVModel(props: Record<string, any>, propName: string, emit: any): WritableComputedRef<any, any> {\r\n // console.log(props[propName], '------------')\r\n return computed({\r\n get() {\r\n return new Proxy(props[propName], {\r\n set(obj, name, val) {\r\n emit(`update:${propName}`, {\r\n ...obj,\r\n [name]: val,\r\n });\r\n return true;\r\n },\r\n });\r\n },\r\n set(value) {\r\n emit(`update:${propName}`, value);\r\n },\r\n });\r\n}\r\n\r\nexport function bindMethods<T extends object>(instance: T): T {\r\n const proto = Object.getPrototypeOf(instance);\r\n if (!proto || proto === Object.prototype) {\r\n return instance;\r\n }\r\n\r\n const propertyNames = Object.getOwnPropertyNames(proto);\r\n for (const name of propertyNames) {\r\n const value = (instance as any)[name];\r\n if (name !== \"constructor\" && typeof value === \"function\") {\r\n (instance as any)[name] = value.bind(instance);\r\n }\r\n }\r\n\r\n return instance;\r\n}\r\n\r\nexport function deepCopy<T>(obj: T): T {\r\n if (obj === null || typeof obj !== \"object\") {\r\n return obj;\r\n }\r\n\r\n if (obj instanceof Date) {\r\n return new Date(obj.getTime()) as any;\r\n }\r\n\r\n if (obj instanceof RegExp) {\r\n return new RegExp(obj) as any;\r\n }\r\n\r\n if (Array.isArray(obj)) {\r\n return obj.map(item => deepCopy(item)) as any;\r\n }\r\n\r\n const result: any = {};\r\n Object.keys(obj).forEach(key => {\r\n result[key] = deepCopy((obj as any)[key]);\r\n });\r\n\r\n return result;\r\n}\r\n\r\nexport function arrayToTree(items: any[], id = \"id\", parentId = \"parentId\", children = \"children\"): any[] {\r\n const itemMap = new Map();\r\n const result: any[] = [];\r\n\r\n items.forEach(item => {\r\n itemMap.set(item[id], { ...item, [children]: [] });\r\n });\r\n\r\n items.forEach(item => {\r\n const currentItem = itemMap.get(item[id]);\r\n if (item[parentId]) {\r\n const parentItem = itemMap.get(item[parentId]);\r\n if (parentItem) parentItem[children].push(currentItem);\r\n } else {\r\n result.push(currentItem);\r\n }\r\n });\r\n\r\n return result;\r\n}\r\n\r\nexport function getFirstNonNullOrUndefined(...args: any[]): any {\r\n for (const arg of args) {\r\n if (arg !== undefined && arg !== null) {\r\n return arg;\r\n }\r\n }\r\n return undefined;\r\n}\r\n\r\n/** className 合并 */\r\nexport function clnm(...inputs: ClassValue[]): string {\r\n return twMerge(clsx(inputs));\r\n}\r\n\r\n/**\r\n * 触发窗口的 resize 事件\r\n * @description 手动触发浏览器窗口的 resize 事件,用于强制更新依赖窗口大小的组件或布局\r\n *\r\n * @example\r\n * // 在DOM更新后触发重新布局\r\n * updateDOM()\r\n * triggerWindowResize()\r\n *\r\n * // 在组件挂载后强制更新响应式布局\r\n * onMounted(() => {\r\n * triggerWindowResize()\r\n * })\r\n */\r\nexport function triggerWindowResize(): void {\r\n // 创建一个新的 resize 事件\r\n const resizeEvent = new Event(\"resize\");\r\n\r\n // 触发 window 的 resize 事件\r\n window.dispatchEvent(resizeEvent);\r\n}\r\n\r\n/**\r\n * 遍历目标数组 从源对象获取数据并赋值。\r\n * @param targrt array 目标对象\r\n * @param sources {} 源对象\r\n * @param key 关联字段key\r\n * @param content 要修改的字段 字段名string 或数组\r\n */\r\nexport function arrGive(targrt: any, sources: any, key: any = \"prop\", content: any = \"content\"): void {\r\n targrt.forEach((element: any) => {\r\n if (Object.prototype.hasOwnProperty.call(element, key)) {\r\n if (isArray(content)) {\r\n content.forEach((contentItem: any) => {\r\n if (Object.prototype.hasOwnProperty.call(element, contentItem)) element[contentItem] = sources[element[key]];\r\n });\r\n } else {\r\n if (Object.prototype.hasOwnProperty.call(element, content)) element[content] = sources[element[key]];\r\n }\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * 时间转换过滤器 依赖dayjs 默认UTC时间\r\n * @param value key 时间戳接收毫秒\r\n * @param format 格式化样式YYYY-MM-DD HH:mm:ss.SSS A (dayjs的format)\r\n * @param tz 默认时区 Asia/Shanghai\r\n */\r\nexport const dateFormat = function (\r\n value: string | number | Date,\r\n format = \"YYYY-MM-DD HH:mm:ss\",\r\n tz: string = \"Asia/Shanghai\",\r\n): string {\r\n if (value === \"\" || value === null || value === undefined || value === 0 || value === \"0\") return \"\";\r\n\r\n if (!dayjs(value).isValid()) return \"\";\r\n\r\n if (!isExtendDayjs) {\r\n dayjs.extend(utc);\r\n dayjs.extend(timezone);\r\n isExtendDayjs = true;\r\n }\r\n\r\n return dayjs(value).tz(tz).format(format);\r\n};\r\n\r\n/**\r\n * 深度克隆对象或数组 禁止循环引用对象\r\n * @description 使用 klona 库进行深度克隆,支持所有类型的数据结构 https://www.npmjs.com/package/klona\r\n * @template T 要克隆的数据类型 (默认: any)\r\n * @param source 源数据\r\n * @returns 深度克隆后的新数据\r\n *\r\n * @examples\r\n * // 克隆对象\r\n * const obj = { a: 1, b: { c: 2 } }\r\n * const clonedObj = cloneDeep(obj)\r\n *\r\n * // 克隆数组\r\n * const arr = [1, { b: 2 }]\r\n * const clonedArr = cloneDeep(arr)\r\n *\r\n * // 克隆 Date 对象\r\n * const date = new Date()\r\n * const clonedDate = cloneDeep(date)\r\n */\r\nexport function cloneDeep<T = any>(source: T): T {\r\n return klona(source);\r\n}\r\n\r\n/**\r\n * 从对象中排除指定的属性\r\n * 返回一个新对象,不包含指定的属性\r\n */\r\nexport function omit<T, TKeys extends keyof T>(obj: T, keys: TKeys[]): Omit<T, TKeys> {\r\n if (!obj) return {} as Omit<T, TKeys>;\r\n if (!keys || keys.length === 0) return obj as Omit<T, TKeys>;\r\n return keys.reduce(\r\n (acc, key) => {\r\n // 这里确实很粗暴,我知道,它在修改对象\r\n // 但在这个非常有限的范围内,我们允许这样做\r\n // 因为这涉及到 omit 函数的性能问题\r\n // 这不是一个应该在其他地方使用的模式或实践\r\n delete acc[key];\r\n return acc;\r\n },\r\n { ...obj },\r\n );\r\n}\r\n\r\n/**\r\n * 防抖函数\r\n * @param func 实际要执行的函数\r\n * @param delay 延迟时间,单位是毫秒(ms)\r\n * @param options 配置选项\r\n * @return 返回一个防抖函数\r\n */\r\nexport function debounce<TArgs extends any[], TReturn = any>(\r\n func: (...args: TArgs) => TReturn,\r\n delay: number = 200,\r\n options: DebounceSettings = {},\r\n): DebounceFunction<TArgs, TReturn> {\r\n const { leading = false, trailing = true, maxWait } = options;\r\n\r\n // 状态变量\r\n let timer: number | undefined;\r\n let maxTimer: number | undefined;\r\n let lastCallTime: number | undefined;\r\n let lastInvokeTime = 0;\r\n let lastArgs: TArgs | undefined;\r\n let result: any;\r\n\r\n // 执行原函数\r\n function invokeFunc(time: number): TReturn {\r\n const args = lastArgs;\r\n lastArgs = undefined; // 立即清理引用\r\n lastInvokeTime = time;\r\n result = func(...args);\r\n return result;\r\n }\r\n\r\n // 安全的定时器清理\r\n function clearAllTimers(): void {\r\n if (timer !== undefined) {\r\n window.clearTimeout(timer);\r\n timer = undefined;\r\n }\r\n if (maxTimer !== undefined) {\r\n window.clearTimeout(maxTimer);\r\n maxTimer = undefined;\r\n }\r\n }\r\n\r\n // 完整的状态重置\r\n function resetState(): void {\r\n clearAllTimers();\r\n lastInvokeTime = 0;\r\n lastArgs = undefined;\r\n lastCallTime = undefined;\r\n result = undefined; // 清理结果引用\r\n }\r\n\r\n // 计算剩余等待时间\r\n function remainingWait(time: number): number {\r\n const timeSinceLastCall = time - lastCallTime!;\r\n const timeSinceLastInvoke = time - lastInvokeTime;\r\n const timeWaiting = delay - timeSinceLastCall;\r\n\r\n return maxWait !== undefined ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;\r\n }\r\n\r\n // 判断是否应该立即执行\r\n function shouldInvoke(time: number): boolean {\r\n if (lastCallTime === undefined) return true;\r\n\r\n const timeSinceLastCall = time - lastCallTime;\r\n const timeSinceLastInvoke = time - lastInvokeTime;\r\n\r\n return (\r\n timeSinceLastCall >= delay || timeSinceLastCall < 0 || (maxWait !== undefined && timeSinceLastInvoke >= maxWait)\r\n );\r\n }\r\n\r\n // leading edge 处理\r\n function leadingEdge(time: number): TReturn | undefined {\r\n lastInvokeTime = time;\r\n\r\n // 确保旧定时器被清理\r\n clearAllTimers();\r\n\r\n timer = window.setTimeout(timerExpired, delay);\r\n\r\n if (maxWait !== undefined) {\r\n maxTimer = window.setTimeout(maxTimerExpired, maxWait);\r\n }\r\n\r\n return leading ? invokeFunc(time) : result;\r\n }\r\n\r\n // trailing edge 处理\r\n function trailingEdge(time: number): TReturn | undefined {\r\n timer = undefined;\r\n\r\n if (trailing && lastArgs !== undefined) {\r\n return invokeFunc(time);\r\n }\r\n\r\n lastArgs = undefined; // 清理参数引用\r\n return result;\r\n }\r\n\r\n // 普通定时器到期处理\r\n function timerExpired(): void {\r\n const time = Date.now();\r\n\r\n if (shouldInvoke(time)) {\r\n trailingEdge(time);\r\n return;\r\n }\r\n\r\n // 重新计算等待时间并启动定时器\r\n const remaining = remainingWait(time);\r\n if (remaining > 0) {\r\n timer = window.setTimeout(timerExpired, remaining);\r\n } else {\r\n timer = undefined;\r\n }\r\n }\r\n\r\n // maxWait 定时器到期处理\r\n function maxTimerExpired(): void {\r\n const time = Date.now();\r\n\r\n // 清理所有定时器\r\n clearAllTimers();\r\n\r\n if (lastArgs !== undefined) {\r\n invokeFunc(time);\r\n }\r\n }\r\n\r\n // 主防抖函数\r\n const debounced: DebounceFunction<TArgs, TReturn> = (...args: TArgs): TReturn | undefined => {\r\n const time = Date.now();\r\n const isInvoking = shouldInvoke(time);\r\n\r\n // 保存参数,即使没有参数也要保存空数组\r\n lastArgs = args || ([] as TArgs);\r\n lastCallTime = time;\r\n\r\n if (isInvoking) {\r\n if (timer === undefined) {\r\n return leadingEdge(time);\r\n }\r\n\r\n if (maxWait !== undefined) {\r\n clearAllTimers();\r\n\r\n timer = window.setTimeout(timerExpired, delay);\r\n maxTimer = window.setTimeout(maxTimerExpired, maxWait);\r\n\r\n return leading ? invokeFunc(time) : result;\r\n }\r\n }\r\n\r\n if (timer === undefined) {\r\n timer = window.setTimeout(timerExpired, delay);\r\n\r\n if (maxWait !== undefined) {\r\n maxTimer = window.setTimeout(maxTimerExpired, maxWait);\r\n }\r\n }\r\n\r\n return result;\r\n };\r\n\r\n // 检查是否有待执行的调用\r\n debounced.isPending = (): boolean => {\r\n return timer !== undefined || maxTimer !== undefined;\r\n };\r\n\r\n // 取消所有待执行的调用\r\n debounced.cancel = (): void => {\r\n resetState();\r\n };\r\n\r\n // 立即执行待执行的函数\r\n debounced.flush = (...args: TArgs): TReturn | undefined => {\r\n if (!debounced.isPending()) {\r\n if (args.length > 0) {\r\n return func(...args);\r\n }\r\n return result;\r\n }\r\n\r\n const argsToUse = lastArgs !== undefined ? lastArgs : args;\r\n\r\n resetState();\r\n\r\n return func(...argsToUse);\r\n };\r\n\r\n return debounced;\r\n}\r\n\r\nexport type DebounceFunction<TArgs extends any[], TReturn = any> = {\r\n (...args: TArgs): TReturn;\r\n /**\r\n * Cancels the debounced function\r\n */\r\n cancel: () => void;\r\n /**\r\n * Checks if there is any invocation debounced\r\n */\r\n isPending: () => boolean;\r\n /**\r\n * Runs the debounced function immediately\r\n */\r\n flush: (...args: TArgs) => TReturn;\r\n};\r\n","import type { Defu } from 'defu'\r\nimport { createDefu } from 'defu'\r\n\r\nexport {\r\n /** 定制合并 createMerge=createDefu https://www.npmjs.com/package/defu */\r\n createDefu as createMerge,\r\n /** 对象合并 merge=defu https://www.npmjs.com/package/defu */\r\n defu as merge,\r\n /** 过滤 mergFn=defuFn https://www.npmjs.com/package/defu */\r\n defuFn as mergFn,\r\n} from 'defu'\r\n\r\n/**\r\n * 对象合并函数,支持指定字段直接覆盖和数组类型直接替换\r\n * @param source 源对象,将被合并的目标对象\r\n * @param defaultsAndOptions 其他默认对象,最后一项可为 Source 的 key 数组,指定需要覆盖的 key\r\n * @returns 合并后的对象\r\n */\r\nexport function mergeWithArrayOverride<\r\n Source extends Record<string, any>,\r\n Defaults extends Array<Record<string, any>>,\r\n>(source: Source, ...defaultsAndOptions: [...Defaults]): Defu<Source, Defaults>\r\nexport function mergeWithArrayOverride<\r\n Source extends Record<string, any>,\r\n Defaults extends Array<Record<string, any>>,\r\n>(source: Source, ...defaultsAndOptions: [...Defaults, Array<keyof Source>]): Defu<Source, Defaults>\r\nexport function mergeWithArrayOverride<\r\n Source extends Record<string, any>,\r\n Defaults extends Array<Record<string, any>>,\r\n>(source: Source, ...defaultsAndOptions: [...Defaults, Array<keyof Source>]) {\r\n // 初始化需要覆盖的key数组\r\n let overrideKeys: Array<keyof Source> = []\r\n const lastItem = defaultsAndOptions[defaultsAndOptions.length - 1]\r\n // 检查最后一个参数是否是覆盖key数组\r\n if (\r\n defaultsAndOptions.length > 0 &&\r\n Array.isArray(lastItem) &&\r\n lastItem.every(item => ['string', 'number', 'symbol'].includes(typeof item))\r\n ) {\r\n overrideKeys = defaultsAndOptions.pop() as Array<keyof Source>\r\n }\r\n\r\n // 使用defu创建自定义合并函数\r\n return createDefu((originObj, key, updates) => {\r\n // 如果key在覆盖列表中,直接替换值\r\n if (overrideKeys.includes(key as keyof Source)) {\r\n originObj[key] = updates\r\n return true\r\n }\r\n // 如果原值和更新值都是数组,直接替换数组\r\n if (Array.isArray(originObj[key]) && Array.isArray(updates)) {\r\n originObj[key] = updates\r\n return true\r\n }\r\n })(source, ...defaultsAndOptions)\r\n}\r\n\r\n// https://www.npmjs.com/package/defu\r\n","import Decimal from 'decimal.js'\r\n\r\ntype Recordable<T = any> = Record<string, T>\r\n\r\n/**\r\n * 加法运算\r\n * @param args 运算数\r\n */\r\nexport function add(...args: (number | string)[]): number {\r\n let result = new Decimal(args[0])\r\n for (let i = 1; i < args.length; i++) result = result.add(new Decimal(args[i]))\r\n\r\n return result.toNumber()\r\n}\r\n\r\n/**\r\n * 减法运算\r\n * @param args 运算数\r\n */\r\nexport function subtract(...args: (number | string)[]): number {\r\n let result = new Decimal(args[0])\r\n for (let i = 1; i < args.length; i++) result = result.sub(new Decimal(args[i]))\r\n\r\n return result.toNumber()\r\n}\r\n\r\n/**\r\n * 乘法运算\r\n * @param args 运算数\r\n */\r\nexport function multiply(...args: (number | string)[]): number {\r\n let result = new Decimal(args[0])\r\n for (let i = 1; i < args.length; i++) result = result.mul(new Decimal(args[i]))\r\n\r\n return result.toNumber()\r\n}\r\n\r\n/**\r\n * 除法运算\r\n * @param args 运算数\r\n */\r\nexport function divide(...args: (number | string)[]): number {\r\n let result = new Decimal(args[0])\r\n for (let i = 1; i < args.length; i++) result = result.div(new Decimal(args[i]))\r\n\r\n return result.toNumber()\r\n}\r\n\r\n/**\r\n * 合计数组中所有数值\r\n * @param datas 需要计算的数组,可以是数字数组或字符串数组(字符串会被转换为数字)\r\n * @returns {number} 返回数组中所有数值的总和\r\n */\r\nexport function sumTotal(...args: (number | string)[]) {\r\n return args.reduce((total, item) => calc(total).add(item).toNumber(), 0)\r\n}\r\n\r\n/**\r\n * 数组对象合计\r\n * @param datas 需要计算的数组对象\r\n * @param iteratee 迭代函数,用于从每个对象中提取需要计算的数值\r\n * @returns {number} 返回所有对象中提取数值的总和\r\n */\r\nexport function sumTotalBy(datas: Recordable[], iteratee: (item: Recordable) => number | string) {\r\n return datas.reduce((total, item) => calc(total).add(iteratee(item)).toNumber(), 0)\r\n}\r\n\r\n/**\r\n * 分类合计\r\n * @param datas 需要计算的数组对象\r\n * @param keyIteratee 键提取函数\r\n * @param valueIteratee 值提取函数\r\n */\r\nexport function clsSumTotalBy(\r\n datas: Recordable[],\r\n keyIteratee: (item: Recordable) => string | number,\r\n valueIteratee: (item: Recordable) => number | string\r\n) {\r\n const result: { [key: string]: number } = {}\r\n const getValue = valueIteratee\r\n\r\n datas.forEach(item => {\r\n const key = keyIteratee(item)\r\n if (key) {\r\n const value = getValue(item)\r\n result[key] = calc(result[key] || 0)\r\n .add(value)\r\n .toNumber()\r\n }\r\n })\r\n\r\n return result\r\n}\r\n\r\n/** 计算封装 */\r\nexport function calc(value: number | string): Decimal {\r\n const bool1 = Number(value) || value === 0\r\n const bool2 = Number.isNaN(Number(value))\r\n const decimal = new Decimal(value)\r\n if (bool1 && !bool2) {\r\n return decimal\r\n } else {\r\n console.error('请输入合理数字!')\r\n const decimal = new Decimal(Number.NaN)\r\n return decimal\r\n }\r\n}\r\n\r\nexport default {\r\n add,\r\n subtract,\r\n multiply,\r\n divide,\r\n sumTotal,\r\n sumTotalBy,\r\n clsSumTotalBy,\r\n calc,\r\n}\r\n","export class StateHandler {\r\n private condition: boolean = false\r\n private promiseResolvers: {\r\n resolve: (value: void | PromiseLike<void>) => void\r\n reject: (reason?: any) => void\r\n } | null = null\r\n\r\n isConditionTrue(): boolean {\r\n return this.condition\r\n }\r\n\r\n reset(): void {\r\n this.condition = false\r\n this.clearPromises()\r\n }\r\n\r\n setConditionFalse(): void {\r\n this.condition = false\r\n if (this.promiseResolvers) {\r\n this.promiseResolvers.reject()\r\n this.clearPromises()\r\n }\r\n }\r\n\r\n setConditionTrue(): void {\r\n this.condition = true\r\n if (this.promiseResolvers) {\r\n this.promiseResolvers.resolve()\r\n this.clearPromises()\r\n }\r\n }\r\n\r\n waitForCondition(): Promise<void> {\r\n if (this.condition) {\r\n return Promise.resolve()\r\n }\r\n const { promise, resolve, reject } = Promise.withResolvers<void>()\r\n this.promiseResolvers = { resolve, reject }\r\n return promise\r\n }\r\n\r\n private clearPromises() {\r\n this.promiseResolvers = null\r\n }\r\n}\r\n\r\nexport class StateHandlerOld {\r\n private condition: boolean = false\r\n private rejectCondition: (() => void) | null = null\r\n private resolveCondition: (() => void) | null = null\r\n\r\n isConditionTrue(): boolean {\r\n return this.condition\r\n }\r\n\r\n reset(): void {\r\n this.condition = false\r\n this.clearPromises()\r\n }\r\n\r\n // 触发状态为 false 时,reject\r\n setConditionFalse(): void {\r\n this.condition = false\r\n if (this.rejectCondition) {\r\n this.rejectCondition()\r\n this.clearPromises()\r\n }\r\n }\r\n\r\n // 触发状态为 true 时,resolve\r\n setConditionTrue(): void {\r\n this.condition = true\r\n if (this.resolveCondition) {\r\n this.resolveCondition()\r\n this.clearPromises()\r\n }\r\n }\r\n\r\n // 返回一个 Promise,等待 condition 变为 true\r\n waitForCondition(): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n if (this.condition) {\r\n resolve() // 如果 condition 已经为 true,立即 resolve\r\n } else {\r\n this.resolveCondition = resolve\r\n this.rejectCondition = reject\r\n }\r\n })\r\n }\r\n\r\n // 清理 resolve/reject 函数\r\n private clearPromises() {\r\n this.resolveCondition = null\r\n this.rejectCondition = null\r\n }\r\n}\r\n","import { isNullOrUnDef } from \"./is\";\r\nimport { decrypt, encrypt } from \"crypto-js/aes\";\r\nimport UTF8, { parse } from \"crypto-js/enc-utf8\";\r\nimport ECB from \"crypto-js/mode-ecb\";\r\nimport pkcs7 from \"crypto-js/pad-pkcs7\";\r\n\r\nexport type Options = Partial<CreateStorageParams>;\r\n\r\nexport const enableStorageEncryption = true;\r\n\r\nexport const DEFAULT_CACHE_TIME: number = 60 * 60 * 7;\r\n\r\nexport type CreateStorageParams = {\r\n prefixKey: string;\r\n storage: Storage;\r\n hasEncrypt: boolean;\r\n timeout?: number | null;\r\n} & EncryptionParams;\r\n\r\nexport type EncryptionParams = {\r\n key: string;\r\n iv: string;\r\n};\r\n\r\ntype CipherOption = {\r\n iv?: CryptoJS.lib.WordArray | undefined;\r\n [key: string]: any;\r\n};\r\n\r\nexport const cacheCipher = {\r\n key: \"_11111000001111@\",\r\n iv: \"@11111000001111_\",\r\n};\r\n\r\nclass AesEncryption {\r\n private key;\r\n private iv;\r\n\r\n constructor(opt: Partial<EncryptionParams> = {}) {\r\n const { key, iv } = opt;\r\n if (key) this.key = parse?.(key);\r\n\r\n if (iv) this.iv = parse?.(iv);\r\n }\r\n\r\n get getOptions() {\r\n return {\r\n mode: ECB,\r\n padding: pkcs7,\r\n iv: this.iv,\r\n } as CipherOption;\r\n }\r\n\r\n encryptByAES(cipherText: string): string {\r\n return encrypt(cipherText, this.key!, this.getOptions).toString();\r\n }\r\n\r\n decryptByAES(cipherText: string): string {\r\n return decrypt(cipherText, this.key!, this.getOptions).toString(UTF8);\r\n }\r\n}\r\n\r\nexport function create({\r\n prefixKey = \"\",\r\n storage = sessionStorage,\r\n key = cacheCipher.key,\r\n iv = cacheCipher.iv,\r\n timeout = null,\r\n hasEncrypt = true,\r\n}: Partial<CreateStorageParams> = {}): {\r\n storage: Storage;\r\n prefixKey?: string;\r\n encryption: AesEncryption;\r\n hasEncrypt: boolean;\r\n getKey: (key: string) => string;\r\n set: (key: string, value: any, expire?: number | null) => void;\r\n get: (key: string, def?: any) => any;\r\n remove: (key: string) => void;\r\n clear: () => void;\r\n} {\r\n if (hasEncrypt && [key.length, iv.length].some(item => item !== 16))\r\n throw new Error(\"When hasEncrypt is true, the key or iv must be 16 bits!\");\r\n\r\n const encryption = new AesEncryption({ key, iv });\r\n\r\n /**\r\n *Cache class\r\n *Construction parameters can be passed into sessionStorage, localStorage,\r\n * @class Cache\r\n * @example\r\n */\r\n const WebStorage = class WebStorage {\r\n storage: Storage;\r\n prefixKey?: string;\r\n encryption: AesEncryption;\r\n hasEncrypt: boolean;\r\n constructor() {\r\n this.storage = storage;\r\n this.prefixKey = prefixKey;\r\n this.encryption = encryption;\r\n this.hasEncrypt = hasEncrypt;\r\n }\r\n\r\n getKey(key: string) {\r\n // console.log(this.prefixKey, key);\r\n return `${this.prefixKey}${key}`.toUpperCase();\r\n }\r\n\r\n /**\r\n *\r\n * Set cache\r\n * @param {string} key\r\n * @param {*} value\r\n * @expire Expiration time in seconds\r\n * @memberof Cache\r\n */\r\n set(key: string, value: any, expire: number | null = timeout) {\r\n const stringData = JSON.stringify({\r\n value,\r\n time: Date.now(),\r\n expire: !isNullOrUnDef(expire) ? new Date().getTime() + expire * 1000 : null,\r\n });\r\n const stringifyValue = this.hasEncrypt ? this.encryption.encryptByAES(stringData) : stringData;\r\n this.storage.setItem(this.getKey(key), stringifyValue);\r\n }\r\n\r\n /**\r\n *Read cache\r\n * @param {string} key\r\n * @memberof Cache\r\n */\r\n get(key: string, def: any = null): any {\r\n const val = this.storage.getItem(this.getKey(key));\r\n if (!val) return def;\r\n\r\n try {\r\n const decVal = this.hasEncrypt ? this.encryption.decryptByAES(val) : val;\r\n const data = JSON.parse(decVal);\r\n const { value, expire } = data;\r\n if (isNullOrUnDef(expire) || expire >= new Date().getTime()) return value;\r\n\r\n this.remove(key);\r\n } catch (e) {\r\n console.error(`get erroe:${e}`);\r\n return def;\r\n }\r\n }\r\n\r\n /**\r\n * Delete cache based on key\r\n * @param {string} key\r\n * @memberof Cache\r\n */\r\n remove(key: string) {\r\n this.storage.removeItem(this.getKey(key));\r\n }\r\n\r\n /**\r\n * 根据选项删除缓存\r\n * @param options - 清除选项\r\n * @param options.keys - 要清除的特定键数组(如果提供,只清除这些键)\r\n * @param options.exclude - 清除时要排除的键数组(如果提供,清除除这些键之外的所有键)\r\n * @example\r\n * // 清除所有缓存\r\n * clear()\r\n *\r\n * // 清除指定键\r\n * clear({ keys: ['user', 'token'] })\r\n *\r\n * // 清除所有但排除指定键\r\n * clear({ exclude: ['settings', 'theme'] })\r\n */\r\n /**\r\n * 收集所有匹配前缀的存储键\r\n */\r\n private getKeysWithPrefix(prefixKeyUpper: string): string[] {\r\n const keysToRemove: string[] = [];\r\n for (let i = 0; i < this.storage.length; i++) {\r\n const storageKey = this.storage.key(i);\r\n if (storageKey && storageKey.startsWith(prefixKeyUpper)) {\r\n keysToRemove.push(storageKey);\r\n }\r\n }\r\n return keysToRemove;\r\n }\r\n\r\n /**\r\n * 收集所有匹配前缀但不在排除列表中的存储键\r\n */\r\n private getKeysWithPrefixExcluding(prefixKeyUpper: string, excludeSet: Set<string>): string[] {\r\n const keysToRemove: string[] = [];\r\n for (let i = 0; i < this.storage.length; i++) {\r\n const storageKey = this.storage.key(i);\r\n if (storageKey && storageKey.startsWith(prefixKeyUpper) && !excludeSet.has(storageKey)) {\r\n keysToRemove.push(storageKey);\r\n }\r\n }\r\n return keysToRemove;\r\n }\r\n\r\n /**\r\n * 删除指定的存储键\r\n */\r\n private removeKeys(keys: string[]): void {\r\n keys.forEach(storageKey => {\r\n this.storage.removeItem(storageKey);\r\n });\r\n }\r\n\r\n clear(options?: { keys?: string[]; exclude?: string[] }): void {\r\n const prefixKeyUpper = (this.prefixKey || \"\").toUpperCase();\r\n\r\n if (!options) {\r\n // 未提供选项,清除所有带前缀的缓存\r\n this.removeKeys(this.getKeysWithPrefix(prefixKeyUpper));\r\n return;\r\n }\r\n\r\n const { keys, exclude } = options;\r\n\r\n if (keys && keys.length > 0) {\r\n // 只清除指定的键\r\n keys.forEach(key => {\r\n this.remove(key);\r\n });\r\n return;\r\n }\r\n\r\n if (exclude && exclude.length > 0) {\r\n // 清除所有但排除指定的键\r\n const excludeSet = new Set(exclude.map(key => this.getKey(key)));\r\n this.removeKeys(this.getKeysWithPrefixExcluding(prefixKeyUpper, excludeSet));\r\n return;\r\n }\r\n\r\n // 如果提供了选项但都是空的,清除所有带前缀的缓存\r\n this.removeKeys(this.getKeysWithPrefix(prefixKeyUpper));\r\n }\r\n };\r\n return new WebStorage();\r\n}\r\n\r\nfunction createOptions(storage: Storage, options: Options = {}): Options {\r\n return {\r\n // No encryption in debug mode\r\n hasEncrypt: enableStorageEncryption,\r\n storage,\r\n prefixKey: \"tt-admin\",\r\n ...options,\r\n };\r\n}\r\n\r\nexport function createStorage(\r\n storage: Storage = sessionStorage,\r\n options: Options = {},\r\n): {\r\n storage: Storage;\r\n prefixKey?: string;\r\n encryption: AesEncryption;\r\n hasEncrypt: boolean;\r\n getKey: (key: string) => string;\r\n set: (key: string, value: any, expire?: number | null) => void;\r\n get: (key: string, def?: any) => any;\r\n remove: (key: string) => void;\r\n clear: (options?: { keys?: string[]; exclude?: string[] }) => void;\r\n} {\r\n return create(createOptions(storage, options));\r\n}\r\n\r\nexport function createSessionStorage(options: Options = {}): {\r\n storage: Storage;\r\n prefixKey?: string;\r\n encryption: AesEncryption;\r\n hasEncrypt: boolean;\r\n getKey: (key: string) => string;\r\n set: (key: string, value: any, expire?: number | null) => void;\r\n get: (key: string, def?: any) => any;\r\n remove: (key: string) => void;\r\n clear: (options?: { keys?: string[]; exclude?: string[] }) => void;\r\n} {\r\n return createStorage(sessionStorage, { ...options, timeout: DEFAULT_CACHE_TIME });\r\n}\r\n\r\nexport function createLocalStorage(options: Options = {}): {\r\n storage: Storage;\r\n prefixKey?: string;\r\n encryption: AesEncryption;\r\n hasEncrypt: boolean;\r\n getKey: (key: string) => string;\r\n set: (key: string, value: any, expire?: number | null) => void;\r\n get: (key: string, def?: any) => any;\r\n remove: (key: string) => void;\r\n clear: (options?: { keys?: string[]; exclude?: string[] }) => void;\r\n} {\r\n return createStorage(localStorage, { ...options, timeout: DEFAULT_CACHE_TIME });\r\n}\r\n","/**\r\n * 检查当前版本是否满足最低版本要求\r\n * @param currentVersion 当前版本号,格式为 'x.y.z'\r\n * @param major 要求的主版本号\r\n * @param minor 要求的次版本号\r\n * @param patch 可选的补丁版本号\r\n * @returns 是否满足版本要求\r\n */\r\nexport function checkVersion(currentVersion: string, major: number, minor: number, patch?: number): boolean {\r\n if (!currentVersion) return false;\r\n\r\n const versions = currentVersion.split(\".\").map(Number);\r\n if (versions.length < 2) return false;\r\n\r\n // 检查主版本号\r\n if (versions[0] > major) return true;\r\n if (versions[0] < major) return false;\r\n\r\n // 检查次版本号\r\n if (versions[1] > minor) return true;\r\n if (versions[1] < minor) return false;\r\n\r\n // 如果有补丁版本号要求,则检查\r\n if (patch !== undefined) {\r\n const currentPatch = versions[2] || 0;\r\n return currentPatch >= patch;\r\n }\r\n\r\n return true;\r\n}\r\n"],"names":["capitalize","str","charAt","toUpperCase","slice","trim","kebabToCamelCase","replace","_","c","downloadFile","res","type","blob","Blob","data","a","document","createElement","herf","window","URL","webkitURL","createObjectURL","href","fileName","headers","split","at","decodeURI","decodedParts","download","style","display","body","appendChild","click","removeChild","revokeObjectURL","error","console","log","ApiStatus","HttpMsg","HttpError","Error","code","timestamp","url","method","constructor","message","options","super","this","name","Date","toISOString","toLogData","stack","handleError","warn","requestCancelled","statusCode","response","status","errorMessage","msg","requestConfig","config","networkError","unauthorized","forbidden","notFound","methodNotAllowed","requestTimeout","internalServerError","badGateway","serviceUnavailable","gatewayTimeout","requestFailed","showError","showMessage","ElMessage","getLoadingBackground","documentElement","classList","contains","DEFAULT_LOADING_CONFIG","lock","background","svg","svgViewBox","customClass","loadingInstance","loadingService","showLoading","ElLoading","service","hideLoading","close","TtHttp","router","useUserStore","VITE_API_URL","VITE_WITH_CREDENTIALS","pendingLoading","FILE_TYPES","activeRequests","debuncesLoading","setTimeout","nextTick","isUnauthorizedErrorShown","unauthorizedTimer","axiosInstance","axios","create","timeout","baseURL","withCredentials","validateStatus","transformResponse","contentType","includes","JSON","parse","createHttpError","handleUnauthorizedError","logOut","resetUnauthorizedError","clearTimeout","interceptors","request","use","accessToken","info","set","userId","currentRoute","value","meta","permissionOnlyCode","FormData","stringify","requestConfigError","Promise","reject","success","success1","INVALID_TOKEN","async","retryRequest","retries","params","undefined","showSuccessMessage","showSuccess","excludeError","NEED_REFRESH_TOKEN","showErrorMessage","refreshTokenFunc","delay","ms","resolve","api","get","post","put","del","setBaseUrl","defaults","withInstall","main","extra","install","app","comp","Object","values","component","key","entries","toString","prototype","is","val","call","isDef","isUndefined","isNull","isNullOrUnDef","isObject","isEmpty","isArray","isString","length","Map","Set","size","keys","isEmptyZero","isDate","isNumber","isPromise","isFunction","then","catch","isBoolean","isRegExp","Array","isWindow","isElement","e","Element","isMap","isServer","isClient","isUrl","path","test","isStringNumber","Number","isNaN","isPrimitive","isError","isSymbol","isSet","isFalse","isTrue","getDeviceType","u","navigator","userAgent","getBrowserType","isOpera","isIE","reIE","match","fIEVersion","parseFloat","getIEVersion","isIE11","isEdge","isFF","isSafari","isChrome","isIos","isAndroid","isPC","userAgentInfo","Agents","flag","v","agent","indexOf","isExternal","isJson","obj","isDayjsObject","dayjs","isDayjs","extractResourceFromApi","generateTestId","parts","filter","part","join","toKebabCase","toLowerCase","generateFormName","fieldNames","maxLength","validFieldNames","extractIdFromTitle","title","isValidTestId","testid","setupDefaults","keyId","cookies","treeOptions","parentKey","children","parseDateFormat","firstDayOfWeek","arrayEach","list","iterate","context","forEach","index","len","objectToString","helperCreateInInObjectString","hasOwnProp","hasOwnProperty","objectEach","each","helperCreateInTypeof","helperCreateGetObjects","getIndex","proMethod","result","push","arguments","getCativeCtor","args","Ctor","__proto__","handleValueClone","item","isDeep","copyValue","restObj","getPrototypeOf","valueOf","restArr","restSet","add","restMap","clone","deep","objectAssignFns","assign","handleAssign","destination","isClone","source","target","apply","XEUtils","setConfig","version","lastArrayEach","lastObjectEach","property","defs","isPlainObject","helperCheckCopyKey","handleMerge","VERSION","mixin","methods","fn","$context","setup","getConfig","map","helperCreateIterateHandle","prop","useArray","restIndex","matchValue","defaultValue","some","every","includeArrays","array1","array2","uniq","array","valMap","toArray","staticStrUndefined","eqNull","staticHGKeyRE","helperGetHGSKeys","splice","rest","props","getDeepProps","getValueByPath","matchs","handleSort","v1","v2","localeCompare","buildMultiOrders","confs","compares","item1","item2","order","orderBy","arr","fieldConfs","sort","sortConfs","handle","field","getSortConfs","sortBy","random","minVal","maxVal","Math","round","shuffle","helperCreateToNumber","num","toNumber","startIndex","endIndex","argsSize","findKey","find","pluck","helperCreateMinMax","itemIndex","itemVal","max","unzip","arrays","maxItem","flattenDeep","vals","concat","helperLog","helperDeleteProperty","lastEach","clear","assigns","isDefs","extds","remove","removeKeys","unTreeList","parentItem","opts","optKey","optParentKey","optChildren","optData","optUpdated","updated","optClear","childList","helperCreateTreeFunc","findTree","findTreeItem","parent","node","parseChildren","paths","nodes","items","eachTree","eachTreeItem","mapTree","mapTreeItem","mapChildren","searchTreeItem","matchParent","isMatch","hasChild","rests","hasOriginal","original","sourceData","isEvery","searchTree","arrayIndexOf","arrayLastIndexOf","lastIndexOf","staticParseInt","parseInt","helperGetUTCDateTime","resMaps","UTC","y","M","d","H","m","s","S","helperGetDateTime","date","getTime","getParseRule","txt","toParseNum","d2","d1or2","d1or7","d3or4","place","d1Or2RE","dzZ","defaulParseStrs","defaulParseREs","rule","i","RegExp","customParseStrs","parseRuleMaps","parseRuleKeys","itemRule","customParseRes","cacheFormatMaps","toStringDate","format","isDType","cacheItem","posIndexs","re","text","firstChar","_i","_r","matchRest","parseCustomRules","dfrLen","Z","parseDefaultRules","substring","parseTimeZone","helperNewDate","isLeapYear","year","currentDate","getFullYear","helperCreateIndexOf","callback","getSize","isInteger","supportSymbol","Symbol","isArguments","staticDocument","staticWindow","supportFormData","supportMap","supportWeakMap","WeakMap","supportSet","supportWeakSet","WeakSet","helperCreateiterateIndexOf","findIndexOf","helperEqualCompare","val1","val2","compare","func","obj1","obj2","val1Keys","val2Keys","isObj1Arr","isObj2Arr","helperDefaultCompare","isEqual","findLastIndexOf","helperCreatePickOmit","case1","case2","pick","omit","sKeyRE","setDeepProps","isEnd","nextKey","currMatchs","nextMatchs","isPrototypePolluted","groupBy","groupKey","createiterateEmpty","range","start","stop","step","min","helperNumberDecimal","numStr","helperStringRepeat","count","repeat","helperNumberOffsetPoint","offsetIndex","toNumberString","scienceMatchs","absFlag","intNumStr","dIntNumStr","dFloatNumStr","sciencFlag","scienceNumStr","floatOffsetIndex","intOffsetIndex","dIntOffsetIndex","abs","helperMultiply","multiplier","multiplicand","str1","str2","pow","helperCreateMathNumber","digits","numRest","nums","intStr","floatStr","fStr","subRest","ratio","ceil","floor","toValueString","toFixed","digitOffsetIndex","toInteger","multiply","num1","num2","helperNumberAdd","addend","augend","helperNumberDivide","divisor","dividend","divisorDecimal","powY","isMinus","sum","staticStrFirst","staticStrLast","helperGetDateFullYear","staticDayTime","helperGetDateMonth","getMonth","isValidDate","getWhatMonth","offsetMonth","offsetDay","monthNum","setDate","currDate","getDate","setMonth","getWhatYear","offset","month","number","setFullYear","staticWeekTime","getWhatWeek","offsetWeek","firstDay","hasCustomDay","hasStartDay","whatDayTime","viewStartDay","currentDay","getDay","customDay","offsetNum","getWhatDay","mode","helperStringUpperCase","nextStartMaps","day","matchWeekStartDay","time","helperCreateGetDateWeek","getStartDate","checkCrossDate","targetDate","tempTime","targetWeekStartDate","firstDate","firstTime","targetWeekStartTime","targetWeekEndTime","targetWeekEndDate","firstWeekStartDate","firstWeekStartTime","firstWeekEndTime","firstWeekEndDate","NaN","getYearWeek","date1","date2","helperGetYMDTime","helperGetYMD","getYearDay","padStart","targetLength","padString","handleCustomTemplate","formats","dateFormatRE","toDateString","formatString","hours","getHours","apm","parseDateRules","formatStringMatchs","fy","fM","fd","fH","fh","fm","getMinutes","fs","getSeconds","fS","getMilliseconds","fZ","zoneHours","getTimezoneOffset","fW","fD","parseDates","yyyy","yy","MM","dd","HH","hh","h","mm","ss","SSS","ZZ","WW","W","DDD","D","A","E","q","skip","now","getMonthWeek","dateDiffRules","trimRight","trimLeft","staticEscapeMap","helperFormatEscaper","dataMap","replaceRegexp","escape","unescapeMap","unescape","helperStringSubstring","end","helperStringLowerCase","camelCacheMaps","kebabCacheMaps","template","tmplRE","staticDecodeURIComponent","decodeURIComponent","unserialize","param","staticEncodeURIComponent","encodeURIComponent","stringifyParams","resultVal","resultKey","isArr","_arr","staticLocation","location","helperGetLocatOrigin","origin","protocol","host","parseURLQuery","uri","parseUrl","hashs","portText","searchs","parsed","hash","hostname","port","search","pathname","hashKey","hashQuery","searchQuery","toCookieUnitTime","unit","expires","nowdate","toCookieUTCString","toUTCString","cookie","keyIndex","inserts","getCookieItem","setCookieItem","removeCookieItem","cookieKeys","isBrowseStorage","storage","testKey","setItem","removeItem","isBrowseType","has","getItem","getJSON","objectMap","merge","union","sample","findLast","reduce","initialValue","reduceMethod","previous","isInitialVal","keyList","copyWithin","replaceIndex","replaceArray","targetIndex","chunk","arrLen","zip","zipObject","flatten","invoke","deepGetObj","toArrayTree","id","treeData","parentId","optStrict","strict","optMapChildren","optSortKey","sortKey","optReverse","reverse","treeMaps","idsMap","strictTree","toTreeArray","filterTree","isFinite","isFloat","isTypeError","TypeError","nodeName","nodeType","isDocument","isFormData","isWeakMap","isWeakSet","objKeys","sourceKeys","key2","key1","isEqualWith","getType","uniqueId","prefix","toStringJSON","toJSONString","first","last","forOf","lastForOf","arrIndex","objProp","isHas","countBy","destructuring","sources","restKeys","commafy","isNegative","commafyOptions","optDigits","spaceNumber","separator","subtract","subtrahend","minuend","digit1","digit2","divide","mean","isDateSame","getWhatQuarter","currMonth","monthOffset","getQuarterNumber","getWhatHours","setHours","getWhatMinutes","setMinutes","getWhatSeconds","setSeconds","getDayOfYear","getDayOfMonth","getDateDiff","startDate","endDate","startTime","endTime","diffTime","done","camelCase","strLen","upper","upperLen","kebabCase","prevLower","nextLower","padEnd","startsWith","endsWith","argsLen","toFormatString","noop","bind","once","after","runCount","before","throttle","wait","runFlag","leading","trailing","optLeading","optTrailing","gcFn","runFn","endFn","throttled","cancel","debounce","debounced","serialize","query","getBaseURL","lastIndex","locat","browse","$body","isMobile","isLocalStorage","isSessionStorage","isNode","isDoc","process","core","localStorage","sessionStorage","edge","firefox","msie","safari","isExtendDayjs","getStorage","localdata","_key","calcWordsWidth","words","fontSize","fontFamily","wordsWidth","ctx","getContext","font","measureText","width","getDifference","newObj","oldObj","keyObj","excludeAll","excludeItem","exclude","fromEntries","r","k","setDifferenceObj","setDifferenceArr","setDifferenceField","temp","arrKey","o","t","notNullToFalse","deepMerge","src","toCssUnit","useVModel","propName","emit","computed","Proxy","bindMethods","instance","proto","propertyNames","getOwnPropertyNames","deepCopy","arrayToTree","itemMap","currentItem","getFirstNonNullOrUndefined","arg","clnm","inputs","twMerge","clsx","triggerWindowResize","resizeEvent","Event","dispatchEvent","arrGive","targrt","content","element","contentItem","dateFormat","tz","isValid","extend","utc","timezone","cloneDeep","klona","acc","maxWait","timer","maxTimer","lastCallTime","lastArgs","lastInvokeTime","invokeFunc","clearAllTimers","resetState","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","remaining","timeSinceLastInvoke","timeWaiting","remainingWait","maxTimerExpired","isInvoking","leadingEdge","isPending","flush","argsToUse","mergeWithArrayOverride","defaultsAndOptions","overrideKeys","lastItem","pop","createDefu","originObj","updates","Decimal","sub","mul","div","sumTotal","total","calc","sumTotalBy","datas","iteratee","clsSumTotalBy","keyIteratee","valueIteratee","getValue","bool1","bool2","decimal","StateHandler","condition","promiseResolvers","isConditionTrue","reset","clearPromises","setConditionFalse","setConditionTrue","waitForCondition","promise","withResolvers","StateHandlerOld","rejectCondition","resolveCondition","enableStorageEncryption","DEFAULT_CACHE_TIME","cacheCipher","iv","AesEncryption","opt","getOptions","ECB","padding","pkcs7","encryptByAES","cipherText","encrypt","decryptByAES","decrypt","UTF8","prefixKey","hasEncrypt","encryption","getKey","expire","stringData","stringifyValue","def","decVal","getKeysWithPrefix","prefixKeyUpper","keysToRemove","storageKey","getKeysWithPrefixExcluding","excludeSet","createStorage","createOptions","createSessionStorage","createLocalStorage","checkVersion","currentVersion","major","minor","patch","versions"],"mappings":"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","x_google_ignoreList":[10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236]}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/string.ts","../src/file.ts","../src/axios/status.ts","../src/axios/error.ts","../src/axios/loadinSvg.ts","../src/axios/loading.ts","../src/axios/index.ts","../src/install.ts","../src/is.ts","../src/testid-helper.ts","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/setupDefaults.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/arrayEach.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticObjectToString.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperCreateInInObjectString.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isArray.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/hasOwnProp.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/objectEach.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/each.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperCreateInTypeof.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isFunction.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperCreateGetObjects.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/keys.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/clone.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/assign.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/ctor.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/lastArrayEach.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/lastObjectEach.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isNull.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/property.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isPlainObject.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperCheckCopyKey.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/merge.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/map.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperCreateIterateHandle.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/some.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/every.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/includes.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/includeArrays.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/uniq.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/toArray.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticStrUndefined.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isUndefined.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/eqNull.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticHGKeyRE.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperGetHGSKeys.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/get.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/orderBy.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/sortBy.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/random.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/values.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/shuffle.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperCreateToNumber.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/toNumber.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/slice.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/findKey.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/find.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/pluck.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperCreateMinMax.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/max.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/unzip.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/flatten.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperLog.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperDeleteProperty.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/lastEach.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isObject.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/clear.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/remove.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/toTreeArray.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperCreateTreeFunc.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/findTree.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/eachTree.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/mapTree.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/searchTree.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/arrayIndexOf.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/arrayLastIndexOf.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isNumber.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isString.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isDate.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticParseInt.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperGetUTCDateTime.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperGetDateTime.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/toStringDate.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperNewDate.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isLeapYear.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperCreateIndexOf.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/indexOf.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/lastIndexOf.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getSize.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isInteger.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isBoolean.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isRegExp.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isError.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isEmpty.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isSymbol.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isArguments.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticDocument.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticWindow.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isFormData.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isMap.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isWeakMap.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isSet.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isWeakSet.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperCreateiterateIndexOf.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/findIndexOf.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperEqualCompare.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperDefaultCompare.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isEqual.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/findLastIndexOf.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/entries.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperCreatePickOmit.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/pick.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/omit.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/set.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/groupBy.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/range.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/min.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperNumberDecimal.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperStringRepeat.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperNumberOffsetPoint.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/toNumberString.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperMultiply.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperCreateMathNumber.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/round.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/ceil.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/floor.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/toValueString.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/toFixed.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/toInteger.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/multiply.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperNumberAdd.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperNumberDivide.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/sum.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticStrFirst.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticStrLast.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperGetDateFullYear.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticDayTime.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperGetDateMonth.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isValidDate.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getWhatMonth.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getWhatYear.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticWeekTime.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getWhatWeek.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getWhatDay.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperStringUpperCase.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperCreateGetDateWeek.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getYearWeek.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperGetYMDTime.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperGetYMD.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getYearDay.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/padStart.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/toDateString.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/now.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getMonthWeek.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getDateDiff.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/trimRight.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/trimLeft.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/trim.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticEscapeMap.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperFormatEscaper.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/escape.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/unescape.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperStringSubstring.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperStringLowerCase.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/camelCase.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/kebabCase.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/template.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticDecodeURIComponent.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/unserialize.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticEncodeURIComponent.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/serialize.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/staticLocation.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/helperGetLocatOrigin.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/parseUrl.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/cookie.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/browse.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/index.esm.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/objectMap.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/union.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/sample.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/filter.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/findLast.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/reduce.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/copyWithin.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/chunk.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/zip.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/zipObject.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/invoke.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/toArrayTree.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/filterTree.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isNaN.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isFinite.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isFloat.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isTypeError.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isElement.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isDocument.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isWindow.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isMatch.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isEqualWith.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getType.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/uniqueId.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/toStringJSON.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/toJSONString.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/first.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/last.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/forOf.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/lastForOf.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/has.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/countBy.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/destructuring.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/commafy.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/add.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/subtract.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/divide.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/mean.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/timestamp.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/isDateSame.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getWhatQuarter.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getWhatHours.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getWhatMinutes.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getWhatSeconds.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getDayOfYear.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getDayOfMonth.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/repeat.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/padEnd.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/startsWith.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/endsWith.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/toFormatString.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/noop.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/bind.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/once.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/after.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/before.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/throttle.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/debounce.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/delay.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/getBaseURL.js","../../../node_modules/.pnpm/xe-utils@4.0.0/node_modules/xe-utils/es/locat.js","../src/tool.ts","../src/merge.ts","../src/calc.ts","../src/stateHandler.ts","../src/stroge.ts","../src/check.ts"],"sourcesContent":["export function capitalize(str: string): string {\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n}\r\n\r\nexport function trim(str: string): string {\r\n return str.trim();\r\n}\r\n\r\nexport function kebabToCamelCase(str: string): string {\r\n return str.replace(/-(\\w)/g, (_, c) => (c ? c.toUpperCase() : ''))\r\n}\r\n","/**\r\n * @param res 响应 { data: Blob, ... }\r\n * @param type 类型\r\n */\r\n\r\ninterface HttpResponse<T> {\r\n data: T;\r\n headers: Record<string, string>;\r\n status: number;\r\n statusText: string;\r\n}\r\nexport const downloadFile = (res: HttpResponse<Blob>, type: string) => {\r\n try {\r\n // 创建blob对象,解析流数据\r\n const blob = new Blob([res.data], {\r\n type\r\n });\r\n const a = document.createElement(\"a\");\r\n const URL = window.URL || window.webkitURL;\r\n const herf = URL.createObjectURL(blob);\r\n a.href = herf;\r\n const contentDisposition: string[] = (res.headers[\"content-disposition\"] || \"\").split(\"=\") || [];\r\n let fileName = contentDisposition.at(-1) || \"\";\r\n fileName = fileName ? decodeURI(fileName.replace(/\"/g, \"\")) : \"\";\r\n const decodedParts = fileName?.split(\"''\");\r\n fileName = decodedParts.at(-1) || \"\";\r\n a.download = fileName;\r\n a.style.display = \"none\";\r\n document.body.appendChild(a);\r\n a.click();\r\n document.body.removeChild(a);\r\n window.URL.revokeObjectURL(herf);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n","/**\r\n * 接口状态码\r\n */\r\nexport enum ApiStatus {\r\n success = 200, // 成功\r\n success1 = 0, // 成功\r\n error = 400, // 错误\r\n unauthorized = 401, // 未授权\r\n forbidden = 403, // 禁止访问\r\n notFound = 404, // 未找到\r\n methodNotAllowed = 405, // 方法不允许\r\n requestTimeout = 408, // 请求超时\r\n internalServerError = 500, // 服务器错误\r\n notImplemented = 501, // 未实现\r\n badGateway = 502, // 网关错误\r\n serviceUnavailable = 503, // 服务不可用\r\n gatewayTimeout = 504, // 网关超时\r\n httpVersionNotSupported = 505, // HTTP版本不支持\r\n NEED_REFRESH_TOKEN = 1001, // 需要刷新令牌\r\n API_NO_AUTH = 1002, // 接口未授权\r\n INVALID_TOKEN = 1005 // 无效的token\r\n}\r\n\r\n// 错误提示\r\nexport enum HttpMsg {\r\n badGateway = \"网关错误,请稍后重试\",\r\n forbidden = \"禁止访问该资源\",\r\n gatewayTimeout = \"网关超时,请稍后重试\",\r\n internalServerError = \"服务器内部错误,请稍后重试\",\r\n methodNotAllowed = \"请求方法不允许\",\r\n networkError = \"网络连接异常,请检查网络连接\",\r\n notFound = \"请求的资源不存在\",\r\n requestCancelled = \"请求已取消\",\r\n requestConfigError = \"请求配置错误\",\r\n requestFailed = \"请求失败\",\r\n requestTimeout = \"请求超时,请稍后重试\",\r\n serviceUnavailable = \"服务暂时不可用,请稍后重试\",\r\n unauthorized = \"未授权访问,请重新登录\"\r\n}\r\n","/**\r\n * HTTP 错误处理模块\r\n *\r\n * 提供统一的 HTTP 请求错误处理机制\r\n *\r\n * ## 主要功能\r\n *\r\n * - 自定义 HttpError 错误类,封装错误信息、状态码、时间戳等\r\n * - 错误拦截和转换,将 Axios 错误转换为标准的 HttpError\r\n * - 错误消息国际化处理,根据状态码返回对应的多语言错误提示\r\n * - 错误日志记录,便于问题追踪和调试\r\n * - 错误和成功消息的统一展示\r\n * - 类型守卫函数,用于判断错误类型\r\n *\r\n * ## 使用场景\r\n *\r\n * - HTTP 请求拦截器中统一处理错误\r\n * - 业务代码中捕获和处理特定错误\r\n * - 错误日志收集和上报\r\n *\r\n * @module utils/http/error\r\n * @author Art Design Pro Team\r\n */\r\nimport { AxiosError } from \"axios\";\r\nimport { ApiStatus, HttpMsg } from \"./status\";\r\nimport { ElMessage } from \"element-plus\";\r\n\r\n// 错误响应接口\r\nexport interface ErrorResponse {\r\n /** 错误状态码 */\r\n code: number;\r\n /** 错误消息 */\r\n msg: string;\r\n /** 错误附加数据 */\r\n data?: unknown;\r\n}\r\n\r\n// 错误日志数据接口\r\nexport interface ErrorLogData {\r\n /** 错误状态码 */\r\n code: number;\r\n /** 错误消息 */\r\n message: string;\r\n /** 错误附加数据 */\r\n data?: unknown;\r\n /** 错误发生时间戳 */\r\n timestamp: string;\r\n /** 请求 URL */\r\n url?: string;\r\n /** 请求方法 */\r\n method?: string;\r\n /** 错误堆栈信息 */\r\n stack?: string;\r\n}\r\n\r\n// 自定义 HttpError 类\r\nexport class HttpError extends Error {\r\n public readonly code: number;\r\n public readonly data?: unknown;\r\n public readonly timestamp: string;\r\n public readonly url?: string;\r\n public readonly method?: string;\r\n\r\n constructor(\r\n message: string,\r\n code: number,\r\n options?: {\r\n data?: unknown;\r\n url?: string;\r\n method?: string;\r\n }\r\n ) {\r\n super(message);\r\n this.name = \"HttpError\";\r\n this.code = code;\r\n this.data = options?.data;\r\n this.timestamp = new Date().toISOString();\r\n this.url = options?.url || \"\";\r\n this.method = options?.method || \"\";\r\n }\r\n\r\n public toLogData(): ErrorLogData {\r\n return {\r\n code: this.code,\r\n message: this.message,\r\n data: this.data,\r\n timestamp: this.timestamp,\r\n url: this.url || \"\",\r\n method: this.method || \"\",\r\n stack: this.stack || \"\"\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * 获取错误消息\r\n * @param status 错误状态码\r\n * @returns 错误消息\r\n */\r\nconst getErrorMessage = (status: number): string => {\r\n const errorMap: Record<number, string> = {\r\n [ApiStatus.unauthorized]: HttpMsg.unauthorized,\r\n [ApiStatus.forbidden]: HttpMsg.forbidden,\r\n [ApiStatus.notFound]: HttpMsg.notFound,\r\n [ApiStatus.methodNotAllowed]: HttpMsg.methodNotAllowed,\r\n [ApiStatus.requestTimeout]: HttpMsg.requestTimeout,\r\n [ApiStatus.internalServerError]: HttpMsg.internalServerError,\r\n [ApiStatus.badGateway]: HttpMsg.badGateway,\r\n [ApiStatus.serviceUnavailable]: HttpMsg.serviceUnavailable,\r\n [ApiStatus.gatewayTimeout]: HttpMsg.gatewayTimeout\r\n };\r\n\r\n return errorMap[status] || HttpMsg.internalServerError;\r\n};\r\n\r\n/**\r\n * 处理错误\r\n * @param error 错误对象\r\n * @returns 错误对象\r\n */\r\nexport function handleError(error: AxiosError<ErrorResponse>): never {\r\n // 处理取消的请求\r\n if (error.code === \"ERR_CANCELED\") {\r\n console.warn(\"Request cancelled:\", error.message);\r\n throw new HttpError(HttpMsg.requestCancelled, ApiStatus.error);\r\n }\r\n\r\n const statusCode = error.response?.status;\r\n const errorMessage = error.response?.data?.msg || error.message;\r\n const requestConfig = error.config;\r\n\r\n // 处理网络错误\r\n if (!error.response) {\r\n throw new HttpError(HttpMsg.networkError, ApiStatus.error, {\r\n url: requestConfig?.url || \"\",\r\n method: requestConfig?.method?.toUpperCase() || \"\"\r\n });\r\n }\r\n\r\n // 处理 HTTP 状态码错误\r\n const message = statusCode ? getErrorMessage(statusCode) : errorMessage || HttpMsg.requestFailed;\r\n throw new HttpError(message, statusCode || ApiStatus.error, {\r\n data: error.response.data,\r\n url: requestConfig?.url || \"\",\r\n method: requestConfig?.method?.toUpperCase() || \"\"\r\n });\r\n}\r\n\r\n/**\r\n * 显示错误消息\r\n * @param error 错误对象\r\n * @param showMessage 是否显示错误消息\r\n */\r\nexport function showError(error: HttpError, showMessage: boolean = true): void {\r\n if (showMessage) {\r\n ElMessage.error(error.message);\r\n }\r\n // 记录错误日志\r\n console.error(\"[HTTP Error]\", error.toLogData());\r\n}\r\n\r\n/**\r\n * 显示成功消息\r\n * @param message 成功消息\r\n * @param showMessage 是否显示消息\r\n */\r\nexport function showSuccess(message: string, showMessage: boolean = true): void {\r\n if (showMessage) {\r\n ElMessage.success(message);\r\n }\r\n}\r\n\r\n/**\r\n * 判断是否为 HttpError 类型\r\n * @param error 错误对象\r\n * @returns 是否为 HttpError 类型\r\n */\r\nexport const isHttpError = (error: unknown): error is HttpError => {\r\n return error instanceof HttpError;\r\n};\r\n","// 自定义四点旋转SVG\r\nexport const fourDotsSpinnerSvg = `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\">\r\n <style>\r\n .spinner {\r\n transform-origin: 20px 20px;\r\n animation: rotate 1.6s linear infinite;\r\n }\r\n .dot {\r\n fill: var(--theme-color);\r\n animation: fade 1.6s infinite;\r\n }\r\n .dot:nth-child(1) { animation-delay: 0s; }\r\n .dot:nth-child(2) { animation-delay: 0.5s; }\r\n .dot:nth-child(3) { animation-delay: 1s; }\r\n .dot:nth-child(4) { animation-delay: 1.5s; }\r\n @keyframes rotate {\r\n 100% { transform: rotate(360deg); }\r\n }\r\n @keyframes fade {\r\n 0%, 100% { opacity: 1; }\r\n 50% { opacity: 0.5; }\r\n }\r\n </style>\r\n <g class=\"spinner\">\r\n <circle class=\"dot\" cx=\"20\" cy=\"8\" r=\"4\"/>\r\n <circle class=\"dot\" cx=\"32\" cy=\"20\" r=\"4\"/>\r\n <circle class=\"dot\" cx=\"20\" cy=\"32\" r=\"4\"/>\r\n <circle class=\"dot\" cx=\"8\" cy=\"20\" r=\"4\"/>\r\n </g>\r\n </svg>\r\n`;\r\n","/**\r\n * 全局 Loading 加载管理模块\r\n *\r\n * 提供统一的全屏加载动画管理\r\n *\r\n * ## 主要功能\r\n *\r\n * - 全屏 Loading 显示和隐藏\r\n * - 自动适配明暗主题背景色\r\n * - 自定义 SVG 加载动画\r\n * - 单例模式防止重复创建\r\n * - 锁定页面交互\r\n *\r\n * ## 使用场景\r\n *\r\n * - 页面初始化加载\r\n * - 大量数据请求\r\n * - 路由切换过渡\r\n * - 异步操作等待\r\n *\r\n * ## 特性\r\n *\r\n * - 自动检测当前主题并应用对应背景色\r\n * - 使用自定义 SVG 动画(四点旋转)\r\n * - 单例模式确保同时只有一个 Loading\r\n * - 提供便捷的显示/隐藏方法\r\n *\r\n * @module utils/ui/loading\r\n * @author Art Design Pro Team\r\n */\r\nimport { fourDotsSpinnerSvg } from \"./loadinSvg\";\r\nimport { ElLoading } from \"element-plus\";\r\n/**\r\n * 获取当前主题对应的loading背景色\r\n * @returns 背景色字符串\r\n */\r\nconst getLoadingBackground = (): string => {\r\n const isDark = document.documentElement.classList.contains(\"dark\");\r\n return isDark ? \"rgba(7, 7, 7, 0.85)\" : \"rgba(255, 255, 255, 0.5)\";\r\n};\r\n\r\nconst DEFAULT_LOADING_CONFIG = {\r\n lock: true,\r\n get background() {\r\n return getLoadingBackground();\r\n },\r\n svg: fourDotsSpinnerSvg,\r\n svgViewBox: \"0 0 40 40\",\r\n customClass: \"art-loading-fix\"\r\n} as const;\r\n\r\ninterface LoadingInstance {\r\n close: () => void;\r\n}\r\n\r\nlet loadingInstance: LoadingInstance | null = null;\r\n\r\nexport const loadingService = {\r\n /**\r\n * 显示 loading\r\n * @returns 关闭 loading 的函数\r\n */\r\n showLoading(): () => void {\r\n if (!loadingInstance) {\r\n // 每次显示时获取最新的配置,确保背景色与当前主题同步\r\n const config = {\r\n ...DEFAULT_LOADING_CONFIG,\r\n background: getLoadingBackground()\r\n };\r\n loadingInstance = ElLoading.service(config);\r\n }\r\n return () => this.hideLoading();\r\n },\r\n\r\n /**\r\n * 隐藏 loading\r\n */\r\n hideLoading(): void {\r\n if (loadingInstance) {\r\n loadingInstance.close();\r\n loadingInstance = null;\r\n }\r\n }\r\n};\r\n","import axios, { AxiosRequestConfig, AxiosResponse, InternalAxiosRequestConfig } from \"axios\";\r\nimport { HttpError, handleError, showError, showSuccess } from \"./error\";\r\nimport { ApiStatus, HttpMsg } from \"./status\";\r\nimport { BaseResponse, TtHttpReturnType } from \"./type\";\r\nimport { downloadFile } from \"../file\";\r\nimport { nextTick } from \"vue\";\r\nimport { loadingService } from \"./loading\";\r\n\r\n// 需要传入\r\n// router useUserStore closeLoading startLoading VITE_API_URL VITE_WITH_CREDENTIALS\r\n/** 退出登录函数 */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function TtHttp(config: any): TtHttpReturnType {\r\n const { router, useUserStore, VITE_API_URL, VITE_WITH_CREDENTIALS } = config;\r\n\r\n // 跟踪是否需要关闭 loading\r\n let pendingLoading = false;\r\n function closeLoading(): void {\r\n if (pendingLoading) {\r\n nextTick(() => {\r\n loadingService.hideLoading();\r\n pendingLoading = false;\r\n });\r\n }\r\n }\r\n /** 开始 loading 效果 */\r\n function startLoading(): void {\r\n pendingLoading = true;\r\n loadingService.showLoading();\r\n }\r\n // 文件类型\r\n const FILE_TYPES = [\r\n \"image/jpeg\",\r\n \"image/png\",\r\n \"image/gif\",\r\n \"image/webp\",\r\n \"image/svg+xml\",\r\n \"application/pdf\",\r\n \"application/msword\",\r\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\r\n \"application/vnd.ms-excel\",\r\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8\",\r\n ];\r\n\r\n /** 请求配置常量 */\r\n const REQUEST_TIMEOUT = 1000 * 60;\r\n const LOGOUT_DELAY = 500;\r\n const MAX_RETRIES = 0;\r\n const RETRY_DELAY = 1000;\r\n const UNAUTHORIZED_DEBOUNCE_TIME = 3000;\r\n\r\n let activeRequests = 0;\r\n function debuncesLoading() {\r\n setTimeout(() => {\r\n activeRequests--;\r\n if (activeRequests === 0) {\r\n closeLoading();\r\n }\r\n }, 0);\r\n }\r\n\r\n /** 401防抖状态 */\r\n let isUnauthorizedErrorShown = false;\r\n let unauthorizedTimer: NodeJS.Timeout | null = null;\r\n\r\n /** 扩展 AxiosRequestConfig */\r\n interface ExtendedAxiosRequestConfig extends AxiosRequestConfig {\r\n showErrorMessage?: boolean;\r\n showSuccessMessage?: boolean;\r\n hideLoading?: boolean;\r\n }\r\n\r\n /** Axios实例 */\r\n const axiosInstance = axios.create({\r\n timeout: REQUEST_TIMEOUT,\r\n baseURL: \"/\" + VITE_API_URL,\r\n withCredentials: VITE_WITH_CREDENTIALS === \"true\",\r\n validateStatus: status => status >= 200 && status < 300,\r\n transformResponse: [\r\n (data, headers) => {\r\n const contentType = headers[\"content-type\"];\r\n if (contentType?.includes(\"application/json\")) {\r\n try {\r\n return JSON.parse(data);\r\n } catch {\r\n return data;\r\n }\r\n }\r\n return data;\r\n },\r\n ],\r\n });\r\n\r\n /** 请求拦截器 */\r\n axiosInstance.interceptors.request.use(\r\n (request: InternalAxiosRequestConfig) => {\r\n const { accessToken, info } = useUserStore();\r\n if (accessToken) {\r\n request.headers.set(\"Authorization\", accessToken);\r\n request.headers.set(\"token\", accessToken);\r\n request.headers.set(\"x-userid-header\", info.userId);\r\n request.headers.set(\"x-permission-code-header\", router.currentRoute.value.meta.permissionOnlyCode as string);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n if (!(request as any).hideLoading && activeRequests === 0) {\r\n startLoading();\r\n }\r\n activeRequests++;\r\n\r\n if (request.data && !(request.data instanceof FormData) && !request.headers[\"Content-Type\"]) {\r\n request.headers.set(\"Content-Type\", \"application/json\");\r\n request.data = JSON.stringify(request.data);\r\n }\r\n\r\n return request;\r\n },\r\n error => {\r\n showError(createHttpError(HttpMsg.requestConfigError, ApiStatus.error));\r\n return Promise.reject(error);\r\n },\r\n );\r\n\r\n /** 响应拦截器 */\r\n axiosInstance.interceptors.response.use(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (response: AxiosResponse<BaseResponse> | any) => {\r\n debuncesLoading();\r\n const contentType = response.headers[\"content-type\"];\r\n if (contentType?.includes(\"application/json\")) {\r\n const { code, msg } = response.data;\r\n if ([ApiStatus.success, ApiStatus.success1].includes(code)) return response;\r\n if ([ApiStatus.unauthorized, ApiStatus.INVALID_TOKEN].includes(code)) handleUnauthorizedError(msg);\r\n throw createHttpError(msg || HttpMsg.requestFailed, code);\r\n } else if (FILE_TYPES.includes(contentType)) {\r\n // 文件类型 下载\r\n downloadFile(response, contentType);\r\n return response;\r\n }\r\n },\r\n error => {\r\n debuncesLoading();\r\n if (error.response?.status === ApiStatus.unauthorized) handleUnauthorizedError();\r\n return Promise.reject(handleError(error));\r\n },\r\n );\r\n\r\n /** 统一创建HttpError */\r\n function createHttpError(message: string, code: number) {\r\n return new HttpError(message, code);\r\n }\r\n\r\n /** 处理401错误(带防抖) */\r\n function handleUnauthorizedError(message?: string): never {\r\n const error = createHttpError(message || HttpMsg.unauthorized, ApiStatus.unauthorized);\r\n\r\n if (!isUnauthorizedErrorShown) {\r\n isUnauthorizedErrorShown = true;\r\n logOut();\r\n\r\n unauthorizedTimer = setTimeout(resetUnauthorizedError, UNAUTHORIZED_DEBOUNCE_TIME);\r\n\r\n showError(error, true);\r\n throw error;\r\n }\r\n\r\n throw error;\r\n }\r\n\r\n /** 重置401防抖状态 */\r\n function resetUnauthorizedError() {\r\n isUnauthorizedErrorShown = false;\r\n if (unauthorizedTimer) clearTimeout(unauthorizedTimer);\r\n unauthorizedTimer = null;\r\n }\r\n\r\n const logOut = () => {\r\n setTimeout(() => {\r\n useUserStore().logOut();\r\n }, LOGOUT_DELAY);\r\n };\r\n /** 是否需要重试 */\r\n function shouldRetry(statusCode: number) {\r\n return [\r\n ApiStatus.requestTimeout,\r\n ApiStatus.internalServerError,\r\n ApiStatus.badGateway,\r\n ApiStatus.serviceUnavailable,\r\n ApiStatus.gatewayTimeout,\r\n ].includes(statusCode);\r\n }\r\n\r\n /** 请求重试逻辑 */\r\n async function retryRequest<T>(config: ExtendedAxiosRequestConfig, retries: number = MAX_RETRIES): Promise<T> {\r\n try {\r\n return await request<T>(config);\r\n } catch (error) {\r\n if (error instanceof HttpError && [ApiStatus.NEED_REFRESH_TOKEN].includes(error.code)) {\r\n if (!config.url?.includes(\"/iam/user/refreshToken\")) {\r\n // 刷新token\r\n await useUserStore().refreshTokenFunc();\r\n await delay(RETRY_DELAY);\r\n return retryRequest<T>(config, retries - 1);\r\n }\r\n }\r\n if (retries > 0 && error instanceof HttpError && shouldRetry(error.code)) {\r\n await delay(RETRY_DELAY);\r\n return retryRequest<T>(config, retries - 1);\r\n }\r\n throw error;\r\n }\r\n }\r\n\r\n /** 延迟函数 */\r\n function delay(ms: number) {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n /** 请求函数 */\r\n async function request<T>(config: ExtendedAxiosRequestConfig): Promise<T> {\r\n // POST | PUT 参数自动填充\r\n if ([\"POST\", \"PUT\"].includes(config.method?.toUpperCase() || \"\") && config.params && !config.data) {\r\n config.data = config.params;\r\n config.params = undefined;\r\n }\r\n\r\n try {\r\n const res = await axiosInstance.request<BaseResponse<T>>(config);\r\n\r\n // 显示成功消息\r\n if (config.showSuccessMessage && res.data.msg) {\r\n showSuccess(res.data.msg);\r\n }\r\n\r\n return res.data.data as T;\r\n } catch (error) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const excludeError = [ApiStatus.unauthorized, ApiStatus.NEED_REFRESH_TOKEN].includes((error as any).code);\r\n if (error instanceof HttpError && !excludeError) {\r\n const showMsg = config.showErrorMessage !== false;\r\n showError(error, showMsg);\r\n }\r\n return Promise.reject(error);\r\n }\r\n }\r\n\r\n /**\r\n * 设置baseUrl\r\n */\r\n const setBaseUrl = (url: string) => {\r\n axiosInstance.defaults.baseURL = url;\r\n };\r\n\r\n /** API方法集合 */\r\n const api = {\r\n get<T>(config: ExtendedAxiosRequestConfig) {\r\n return retryRequest<T>({ ...config, method: \"GET\" });\r\n },\r\n post<T>(config: ExtendedAxiosRequestConfig) {\r\n return retryRequest<T>({ ...config, method: \"POST\" });\r\n },\r\n put<T>(config: ExtendedAxiosRequestConfig) {\r\n return retryRequest<T>({ ...config, method: \"PUT\" });\r\n },\r\n del<T>(config: ExtendedAxiosRequestConfig) {\r\n return retryRequest<T>({ ...config, method: \"DELETE\" });\r\n },\r\n request<T>(config: ExtendedAxiosRequestConfig) {\r\n return retryRequest<T>(config);\r\n },\r\n };\r\n\r\n return {\r\n ...api,\r\n logOut,\r\n setBaseUrl,\r\n };\r\n}\r\n","import type { App, Plugin } from 'vue'\r\n\r\nexport type SFCWithInstall<T> = T & Plugin\r\n\r\nexport function withInstall<T, E extends Record<string, any>>(main: T, extra?: E) {\r\n ;(main as SFCWithInstall<T>).install = (app: App) => {\r\n for (const comp of [main, ...Object.values(extra ?? {})]) {\r\n const name = (comp as any).name\r\n if (name) {\r\n app.component(name, comp)\r\n }\r\n }\r\n }\r\n if (extra) {\r\n for (const [key, comp] of Object.entries(extra)) {\r\n ;(main as any)[key] = comp\r\n }\r\n }\r\n return main as SFCWithInstall<T> & E\r\n}\r\n","import dayjs from \"dayjs\";\r\n\r\nconst toString = Object.prototype.toString;\r\n\r\n/**\r\n * 判断值的类型\r\n *\r\n * @param val 未知类型的值\r\n * @param type 需要判断的目标类型\r\n * @returns 如果val的类型与目标类型相符,则返回true;否则返回false\r\n *\r\n * 说明:\r\n * - 该函数通过Object.prototype.toString.call(val)方法获取val的内部[[Class]]属性值,然后与目标类型进行比较\r\n * - 这种方法可以准确地判断值的类型,包括数组、函数、日期等特殊对象\r\n */\r\nexport function is(val: unknown, type: string): boolean {\r\n return toString.call(val) === `[object ${type}]`;\r\n}\r\n\r\n/**\r\n * 判断一个值是否已定义\r\n *\r\n * 此函数用于检查传入的值是否为 undefined,以确定该值是否已定义\r\n * 在 TypeScript 中,通过这种方式可以对类型进行精确的判断,而不仅仅是依赖于值\r\n *\r\n * @param val 可能为任意类型的值,可能为 undefined\r\n * @returns 如果值不为 undefined,则返回 true;否则返回 false\r\n */\r\nexport function isDef<T = unknown>(val?: T): val is T {\r\n return typeof val !== \"undefined\";\r\n}\r\n\r\n/**\r\n * 判断值是否未定义\r\n *\r\n * 此函数用于检查传入的值是否为 undefined 或者 null\r\n * 它提供了一种类型安全的方式来忽略未知的类型,并确保我们在处理可能不存在的值时能够安全地进行\r\n *\r\n * @param val 可能为 undefined 或具体类型的值\r\n * @returns 如果值为 undefined 则返回 true;否则返回 false\r\n */\r\nexport function isUndefined(val?: any): val is undefined {\r\n return !isDef(val);\r\n}\r\n\r\n/**\r\n * 判断给定的值是否为 null\r\n *\r\n * @param val 任何类型的值,用于检查是否为 null\r\n * @returns 返回 true 如果 val 是 null,否则返回 false\r\n */\r\nexport function isNull(val: unknown): val is null {\r\n return val === null;\r\n}\r\n\r\n/**\r\n * 检查值是否为 null 或 undefined\r\n *\r\n * @param val 未知类型值,从 unknown 类型进行参数输入,可以接受任何类型的值\r\n * @returns 返回一个布尔值,如果 val 是 undefined 或 null,则返回 true,否则返回 false\r\n */\r\nexport function isNullOrUnDef(val: unknown): val is null | undefined {\r\n return isUndefined(val) || isNull(val);\r\n}\r\n\r\n/**\r\n * 检查给定的值是否为对象\r\n *\r\n * @param val 任意值,待检查其类型\r\n * @returns 如果值是对象,则返回true;否则返回false\r\n *\r\n * 此函数的存在是为了提供一个精确的类型检查机制,以确定传入的参数是否符合Record类型,\r\n * 这在处理复杂的数据结构时尤其有用,例如JSON数据解析或复杂的对象操作。通过这种方式,\r\n * 开发者可以确保数据的结构符合预期,从而避免潜在的运行时错误。\r\n * @example 如需从联合类型中获取对象类型,可以使用以下方式\r\n * isObject<TipConfig>\r\n */\r\nexport function isObject<T>(val: unknown | Record<string, T>): val is Record<string, T> {\r\n if (isNullOrUnDef(val)) return false;\r\n // 判断是否为 Promise 实例\r\n if (val instanceof Promise) {\r\n return true;\r\n }\r\n // 判断是否为普通对象\r\n return is(val, \"Object\");\r\n}\r\n\r\n/**\r\n * 检查给定的值是否为空\r\n * 此函数旨在统一处理多种数据类型,包括字符串、数组、Map、Set和对象\r\n * undefined 和 null 值也被视为\"空\"\r\n * 以判断它们是否为空。对于每种数据类型,采用不同的方法来检查空值\r\n *\r\n * @param val 任意类型的值,其空状态将被检查\r\n * @returns 如果值被认为是空的,则返回 true,否则返回 false\r\n */\r\nexport function isEmpty<T>(val: T): boolean {\r\n if (isNullOrUnDef(val)) return true;\r\n\r\n if (isArray(val) || isString(val)) return val.length === 0;\r\n\r\n if (val instanceof Map || val instanceof Set) return val.size === 0;\r\n\r\n if (isObject(val)) return Object.keys(val).length === 0;\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * 检查给定的值是否为空(包括0值)\r\n * 将以下值判定为空:0、'0'、'undefined'、'null'\r\n *\r\n * @param val 任意类型的值\r\n * @returns 如果值为 0、'0'、'undefined'、'null',则返回 true,否则返回 false\r\n */\r\nexport function isEmptyZero(val: unknown): boolean {\r\n if (isEmpty(val)) return true;\r\n\r\n // 检查数字 0\r\n if (val === 0) return true;\r\n\r\n // 检查字符串类型\r\n if (isString(val)) {\r\n return val === \"0\" || val === \"undefined\" || val === \"null\";\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * 判断给定的值是否为Date类型\r\n *\r\n * @param val 未知类型值,由用户传入\r\n * @returns 如果val是Date类型,返回true;否则返回false\r\n */\r\nexport function isDate(val: unknown): val is Date {\r\n return is(val, \"Date\");\r\n}\r\n\r\n/**\r\n * 判断给定的值是否为Number类型 排除NaN\r\n * 一个数字与自身相比较,除了 NaN 之外都应该相等\r\n * @param val 未知类型值,由用户传入\r\n * @returns 如果val是Number类型,返回true;否则返回false\r\n */\r\nexport function isNumber(val: unknown): val is number {\r\n // eslint-disable-next-line no-self-compare\r\n return is(val, \"Number\") && val === val;\r\n}\r\n\r\n/**\r\n * 判断给定的值是否为Promise类型\r\n *\r\n * @param val 未知类型值,由用户传入\r\n * @returns 如果val是Promise类型,返回true;否则返回false\r\n */\r\nexport function isPromise<T = any>(val: unknown): val is Promise<T> {\r\n return is(val, \"Promise\") && isObject(val) && isFunction(val.then) && isFunction(val.catch);\r\n}\r\n\r\n/**\r\n * 判断给定的值是否为String类型\r\n *\r\n * @param val 未知类型值,由用户传入\r\n * @returns 如果val是String类型,返回true;否则返回false\r\n */\r\nexport function isString(val: unknown): val is string {\r\n return is(val, \"String\");\r\n}\r\n\r\n/**\r\n * 判断给定的值是否为Function类型\r\n *\r\n * @param val 未知类型值,由用户传入\r\n * @returns 如果val是Function类型,返回true;否则返回false\r\n */\r\nexport function isFunction(val: unknown): val is (...args: any[]) => any {\r\n return typeof val === \"function\";\r\n}\r\n\r\n/**\r\n * 判断给定的值是否为Boolean类型\r\n *\r\n * @param val 未知类型值,由用户传入\r\n * @returns 如果val是Boolean类型,返回true;否则返回false\r\n */\r\nexport function isBoolean(val: unknown): val is boolean {\r\n return is(val, \"Boolean\");\r\n}\r\n\r\n/**\r\n * 判断给定的值是否为RegExp类型\r\n *\r\n * @param val 未知类型值,由用户传入\r\n * @returns 如果val是RegExp类型,返回true;否则返回false\r\n */\r\nexport function isRegExp(val: unknown): val is RegExp {\r\n return is(val, \"RegExp\");\r\n}\r\n\r\n/**\r\n * 判断给定的值是否为Array类型\r\n *\r\n * @param val 未知类型值,由用户传入\r\n * @returns 如果val是Array类型,返回true;否则返回false\r\n */\r\nexport function isArray(val: any): val is Array<any> {\r\n return val && Array.isArray(val);\r\n}\r\n\r\n/**\r\n * 判断给定的值是否为Window类型\r\n *\r\n * @param val 未知类型值,由用户传入\r\n * @returns 如果val是Window类型,返回true;否则返回false\r\n */\r\nexport function isWindow(val: any): val is Window {\r\n return typeof window !== \"undefined\" && is(val, \"Window\");\r\n}\r\n\r\n/**\r\n * 判断给定的值是否是一个 DOM 元素。\r\n *\r\n * @param e 任意类型的值,其类型由调用者决定。\r\n * @returns 如果 `e` 是一个 DOM 元素实例,则返回 `true`,否则返回 `false`。\r\n */\r\nexport function isElement(e: unknown): e is Element {\r\n if (typeof Element === \"undefined\") return false;\r\n return e instanceof Element;\r\n}\r\n\r\n/**\r\n * 检查给定的值是否为Map类型\r\n *\r\n * @param val 未知类型的值\r\n * @returns 如果给定的值是Map类型,则返回true;否则返回false\r\n */\r\nexport function isMap(val: unknown): val is Map<any, any> {\r\n return is(val, \"Map\");\r\n}\r\n\r\nexport const isServer: boolean = typeof window === \"undefined\";\r\n\r\nexport const isClient: boolean = !isServer;\r\n\r\n/**\r\n * 检查给定的值是否为正确的Url地址\r\n *\r\n * @param path 字符串类型的值\r\n * @returns 如果给定的值是Url地址,则返回true;否则返回false\r\n */\r\nexport function isUrl(path: string): boolean {\r\n const reg =\r\n /(?:^https?:(?:\\/\\/)?(?:[-;:&=+$,\\w]+@)?[A-Za-z0-9.-]+(?::\\d+)?|(?:www.|[-;:&=+$,\\w]+@)[A-Za-z0-9.-]+)(?:\\/[+~%/.\\w-]*)?\\??[-+=&;%@.\\w]*(?:#\\w*)?$/;\r\n return reg.test(path);\r\n}\r\n\r\n/**\r\n * 判断一个字符串是否可以转换为数字\r\n *\r\n * @param val 待检查的字符串\r\n * @returns 如果字符串可以转换为数字,则返回true;否则返回false\r\n */\r\nexport function isStringNumber(val: string): boolean {\r\n if (!isString(val)) return false;\r\n\r\n return !Number.isNaN(Number(val));\r\n}\r\n\r\n/**\r\n * 检查给定的值是否为原始类型\r\n *\r\n * 原始类型包括:数字、字符串、布尔值、符号、大整数、未定义、空值\r\n *\r\n * @param {*} value 要检查的值\r\n * @returns {boolean} 检查结果\r\n */\r\nexport function isPrimitive(value: any): boolean {\r\n return value === undefined || value === null || (typeof value !== \"object\" && typeof value !== \"function\");\r\n}\r\n\r\n/**\r\n * 是否为错误对象\r\n * @param val 入参\r\n */\r\nexport function isError(val: any): boolean {\r\n return Object.prototype.toString.call(val).slice(8, -1) === \"Error\";\r\n}\r\n\r\n/**\r\n * 是否为Symbol函数\r\n * @param val 入参\r\n */\r\nexport function isSymbol(val: any): boolean {\r\n return Object.prototype.toString.call(val).slice(8, -1) === \"Symbol\";\r\n}\r\n\r\n/**\r\n * 是否为Set对象\r\n * @param val 入参\r\n */\r\nexport function isSet(val: any): boolean {\r\n return Object.prototype.toString.call(val).slice(8, -1) === \"Set\";\r\n}\r\n\r\n/**\r\n * 是否为非真\r\n * @param val 入参\r\n */\r\nexport function isFalse(val: any): boolean {\r\n if (!val || val === isNull(val) || val === isUndefined(val) || val === false || val === Number.isNaN(val)) {\r\n return true;\r\n }\r\n if (isArray(val) && val.length === 0) return true;\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * 是否为真\r\n * @param val 入参\r\n */\r\nexport function isTrue(val: any): boolean {\r\n return !isFalse(val);\r\n}\r\n\r\n/**\r\n * 获取设备类型\r\n */\r\nexport function getDeviceType(): string {\r\n const u = navigator.userAgent;\r\n if (u.includes(\"Android\") || u.includes(\"Linux\")) {\r\n // 安卓\r\n return \"Android\";\r\n } else if (u.includes(\"iPhone\")) {\r\n // 苹果\r\n return \"iPhone\";\r\n } else if (u.includes(\"iPad\")) {\r\n // iPad\r\n return \"iPad\";\r\n } else if (u.includes(\"Windows Phone\")) {\r\n // winphone手机\r\n return \"Windows Phone\";\r\n } else {\r\n return u;\r\n }\r\n}\r\n\r\n/**\r\n * 获取浏览器类型\r\n */\r\nexport function getBrowserType(): string {\r\n const userAgent = navigator.userAgent; // 取得浏览器的userAgent字符串\r\n\r\n if (isIE(userAgent)) {\r\n return getIEVersion(userAgent);\r\n }\r\n if (isIE11(userAgent)) return \"IE11\";\r\n if (isEdge(userAgent)) return \"Edge\";\r\n if (isFF(userAgent)) return \"FF\";\r\n if (isOpera(userAgent)) return \"Opera\";\r\n if (isSafari(userAgent)) return \"Safari\";\r\n if (isChrome(userAgent)) return \"Chrome\";\r\n return \"\";\r\n}\r\n\r\nfunction isIE(userAgent: string): boolean {\r\n const isOpera = userAgent.includes(\"Opera\"); // 判断是否Opera浏览器\r\n return userAgent.includes(\"compatible\") && userAgent.includes(\"MSIE\") && !isOpera;\r\n}\r\n\r\nfunction isIE11(userAgent: string): boolean {\r\n return userAgent.includes(\"Trident\") && userAgent.includes(\"rv:11.0\");\r\n}\r\n\r\nfunction isEdge(userAgent: string): boolean {\r\n const isIE = userAgent.includes(\"compatible\") && userAgent.includes(\"MSIE\");\r\n return userAgent.includes(\"Edge\") && !isIE;\r\n}\r\n\r\nfunction isFF(userAgent: string): boolean {\r\n return userAgent.includes(\"Firefox\");\r\n}\r\n\r\nfunction isOpera(userAgent: string): boolean {\r\n return userAgent.includes(\"Opera\");\r\n}\r\n\r\nfunction isSafari(userAgent: string): boolean {\r\n return userAgent.includes(\"Safari\") && !userAgent.includes(\"Chrome\");\r\n}\r\n\r\nfunction isChrome(userAgent: string): boolean {\r\n return userAgent.includes(\"Chrome\") && userAgent.includes(\"Safari\");\r\n}\r\n\r\nfunction getIEVersion(userAgent: string): string {\r\n const reIE = /MSIE (\\d+\\.\\d+);/;\r\n const match = userAgent.match(reIE);\r\n const fIEVersion = match ? Number.parseFloat(match[1] || \"0\") : 0;\r\n if (fIEVersion === 7) return \"IE7\";\r\n else if (fIEVersion === 8) return \"IE8\";\r\n else if (fIEVersion === 9) return \"IE9\";\r\n else if (fIEVersion === 10) return \"IE10\";\r\n else return \"IE7以下\";\r\n}\r\n\r\n/**\r\n * 是否为ios\r\n * @returns {boolean} 是-否\r\n */\r\nexport function isIos(): boolean {\r\n const tag = getDeviceType();\r\n if (tag === \"iPhone\") return true;\r\n else return false;\r\n}\r\n\r\n/**\r\n * 是否为Android\r\n */\r\nexport function isAndroid(): boolean {\r\n const tag = getDeviceType();\r\n if (tag === \"Android\") return true;\r\n else return false;\r\n}\r\n\r\n/**\r\n * 是否为PC端\r\n */\r\nexport function isPC(): boolean {\r\n const userAgentInfo = navigator.userAgent;\r\n const Agents = [\"Android\", \"iPhone\", \"SymbianOS\", \"Windows Phone\", \"iPad\", \"iPod\"];\r\n let flag = true;\r\n for (let v = 0; v < Agents.length; v++) {\r\n const agent = Agents[v];\r\n if (agent && userAgentInfo.indexOf(agent) > 0) {\r\n flag = false;\r\n break;\r\n }\r\n }\r\n return flag;\r\n}\r\n\r\n/**\r\n * @description 判读是否为外链\r\n * @param path\r\n */\r\nexport function isExternal(path: string): boolean {\r\n return /^(?:https?:|mailto:|tel:|\\/\\/)/.test(path);\r\n}\r\n\r\n/**\r\n * @description 判断是否为json\r\n * @param value\r\n */\r\nexport function isJson(value: string | null): boolean {\r\n if (typeof value === \"string\") {\r\n try {\r\n const obj = JSON.parse(value);\r\n return !!(typeof obj === \"object\" && obj);\r\n } catch (e) {\r\n console.error(`error:${e}`);\r\n return false;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport function isDayjsObject(value: any): value is dayjs.Dayjs {\r\n return dayjs.isDayjs(value);\r\n}\r\n","/**\r\n * TestID 生成工具函数\r\n * 用于为组件自动生成唯一、层级化的 testid\r\n *\r\n * @module testid-helper\r\n * @see e2e-testing-solution/TESTID-SPECIFICATION.md\r\n */\r\n\r\n/**\r\n * 从组件传入的 API 配置提取资源名称\r\n *\r\n * - 当 `api` 是字符串时,直接返回字符串(推荐传入类似 `client.queryUserList` 的唯一名称)\r\n * - 当 `api` 是函数引用时,返回函数名\r\n * - 其它情况返回空字符串,由调用方自行兜底\r\n *\r\n * @param api - API 字符串或函数\r\n * @returns 资源名称(原样或函数名)\r\n *\r\n * @example\r\n * ```ts\r\n * extractResourceFromApi('adminClientImpl.FindTriggerProjects')\r\n * // → 'adminClientImpl.FindTriggerProjects'\r\n *\r\n * extractResourceFromApi(CountryGetPageGET)\r\n * // → 'CountryGetPageGET'\r\n * ```\r\n */\r\nexport function extractResourceFromApi(api: string | Function): string {\r\n if (typeof api === 'string') \r\nreturn api.trim()\r\n\r\n if (typeof api === 'function') {\r\n const name = api.name || ''\r\n // 移除绑定函数的 'bound ' 前缀\r\n return name.replace(/^bound\\s+/i, '')\r\n }\r\n\r\n return ''\r\n}\r\n\r\n/**\r\n * 生成 testid\r\n *\r\n * 将多个部分拼接成完整的 testid,自动过滤 null、undefined 和空字符串\r\n *\r\n * @param parts - testid 的各个部分\r\n * @returns 拼接后的 testid\r\n *\r\n * @example\r\n * ```ts\r\n * generateTestId('user', 'form', 'field', 'username')\r\n * // → 'user-form-field-username'\r\n *\r\n * generateTestId('user', null, 'table', undefined, 'row', '123')\r\n * // → 'user-table-row-123'\r\n *\r\n * generateTestId('modal', 'user-edit')\r\n * // → 'modal-user-edit'\r\n * ```\r\n */\r\nexport function generateTestId(...parts: (string | undefined | null)[]): string {\r\n return parts\r\n .filter((part): part is string => {\r\n return part !== null && part !== undefined && part !== ''\r\n })\r\n .join('-')\r\n}\r\n\r\n/**\r\n * 转换为 kebab-case\r\n *\r\n * 支持以下转换:\r\n * - 空格分隔: \"Add User\" → \"add-user\"\r\n * - PascalCase: \"AddUser\" → \"add-user\"\r\n * - camelCase: \"addUser\" → \"add-user\"\r\n * - 下划线: \"add_user\" → \"add-user\"\r\n * - 中文: \"用户管理\" → \"yong-hu-guan-li\"(需要拼音库,可选功能)\r\n *\r\n * @param str - 要转换的字符串\r\n * @returns kebab-case 字符串\r\n *\r\n * @example\r\n * ```ts\r\n * toKebabCase('Add User')\r\n * // → 'add-user'\r\n *\r\n * toKebabCase('AddUser')\r\n * // → 'add-user'\r\n *\r\n * toKebabCase('addUser')\r\n * // → 'add-user'\r\n *\r\n * toKebabCase('add_user')\r\n * // → 'add-user'\r\n *\r\n * toKebabCase('Add-User')\r\n * // → 'add-user'\r\n * ```\r\n */\r\nexport function toKebabCase(str: string): string {\r\n if (!str) \r\nreturn ''\r\n\r\n return (\r\n str\r\n // 处理 PascalCase 和 camelCase: \"AddUser\" → \"Add-User\"\r\n .replace(/([a-z])([A-Z])/g, '$1-$2')\r\n // 处理连续大写字母: \"XMLParser\" → \"XML-Parser\"\r\n .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')\r\n // 将空格、下划线等替换为连字符\r\n .replace(/[\\s_]+/g, '-')\r\n // 移除特殊字符\r\n .replace(/[^\\w\\u4E00-\\u9FA5-]+/g, '-')\r\n // 转小写\r\n .toLowerCase()\r\n // 移除首尾连字符\r\n .replace(/^-+|-+$/g, '')\r\n // 合并多个连续的连字符\r\n .replace(/-+/g, '-')\r\n )\r\n}\r\n\r\n/**\r\n * 从 fieldNames 生成表单名称\r\n *\r\n * 取 schema 中前 N 个 fieldName 拼接,用于自动生成表单名称\r\n *\r\n * @param fieldNames - 字段名称数组\r\n * @param maxLength - 最多取几个字段名(默认 3)\r\n * @returns 拼接后的表单名称\r\n *\r\n * @example\r\n * ```ts\r\n * generateFormName(['username', 'email', 'phone', 'address'])\r\n * // → 'username-email-phone'\r\n *\r\n * generateFormName(['username', 'email'], 3)\r\n * // → 'username-email'\r\n *\r\n * generateFormName(['username'], 3)\r\n * // → 'username'\r\n *\r\n * generateFormName([])\r\n * // → 'form'\r\n * ```\r\n */\r\nexport function generateFormName(fieldNames: string[], maxLength = 3): string {\r\n if (!fieldNames || fieldNames.length === 0) {\r\n return 'form'\r\n }\r\n\r\n const validFieldNames = fieldNames\r\n .filter((name): name is string => {\r\n return name !== null && name !== undefined && name !== ''\r\n })\r\n .slice(0, maxLength)\r\n\r\n if (validFieldNames.length === 0) {\r\n return 'form'\r\n }\r\n\r\n return validFieldNames.join('-')\r\n}\r\n\r\n/**\r\n * 从标题提取 ID\r\n *\r\n * 用于从 Modal/Drawer 的 title 生成 ID\r\n *\r\n * @param title - 标题字符串\r\n * @returns kebab-case ID\r\n *\r\n * @example\r\n * ```ts\r\n * extractIdFromTitle('Add User')\r\n * // → 'add-user'\r\n *\r\n * extractIdFromTitle('编辑用户信息')\r\n * // → 'bian-ji-yong-hu-xin-xi'\r\n * ```\r\n */\r\nexport function extractIdFromTitle(title: string): string {\r\n if (!title) \r\nreturn ''\r\n return toKebabCase(title)\r\n}\r\n\r\n/**\r\n * 验证 testid 是否有效\r\n *\r\n * 检查 testid 是否符合命名规范:\r\n * - 非空\r\n * - 只包含小写字母、数字、连字符\r\n * - 不以连字符开头或结尾\r\n *\r\n * @param testid - 要验证的 testid\r\n * @returns 是否有效\r\n *\r\n * @example\r\n * ```ts\r\n * isValidTestId('user-form-field-username')\r\n * // → true\r\n *\r\n * isValidTestId('User-Form')\r\n * // → false (包含大写字母)\r\n *\r\n * isValidTestId('-user-form')\r\n * // → false (以连字符开头)\r\n *\r\n * isValidTestId('')\r\n * // → false (空字符串)\r\n * ```\r\n */\r\nexport function isValidTestId(testid: string): boolean {\r\n if (!testid) \r\nreturn false\r\n\r\n // 只允许小写字母、数字、连字符\r\n const validPattern = /^[a-z0-9]+(-[a-z0-9]+)*$/\r\n return validPattern.test(testid)\r\n}\r\n","var setupDefaults = {\r\n keyId: 1,\r\n cookies: {\r\n path: '/'\r\n },\r\n treeOptions: {\r\n parentKey: 'parentId',\r\n key: 'id',\r\n children: 'children'\r\n },\r\n parseDateFormat: 'yyyy-MM-dd HH:mm:ss',\r\n firstDayOfWeek: 1\r\n}\r\n\r\nexport default setupDefaults\r\n","function arrayEach (list, iterate, context) {\r\n if (list) {\r\n if (list.forEach) {\r\n list.forEach(iterate, context)\r\n } else {\r\n for (var index = 0, len = list.length; index < len; index++) {\r\n iterate.call(context, list[index], index, list)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default arrayEach\r\n","var objectToString = Object.prototype.toString\r\n\r\nexport default objectToString\r\n","import objectToString from './staticObjectToString'\r\n\r\nfunction helperCreateInInObjectString (type) {\r\n return function (obj) {\r\n return '[object ' + type + ']' === objectToString.call(obj)\r\n }\r\n}\r\n\r\nexport default helperCreateInInObjectString\r\n","import helperCreateInInObjectString from './helperCreateInInObjectString'\r\n\r\n/**\r\n * 判断是否数组\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar isArray = Array.isArray || helperCreateInInObjectString('Array')\r\n\r\nexport default isArray\r\n","/**\r\n * 判断对象自身属性中是否具有指定的属性\r\n *\r\n * @param {Object} obj 对象\r\n * @param {String/Number} key 键值\r\n * @return {Boolean}\r\n */\r\nfunction hasOwnProp (obj, key) {\r\n return obj && obj.hasOwnProperty ? obj.hasOwnProperty(key) : false\r\n}\r\n\r\nexport default hasOwnProp\r\n","import hasOwnProp from './hasOwnProp'\r\n\r\nfunction objectEach (obj, iterate, context) {\r\n if (obj) {\r\n for (var key in obj) {\r\n if (hasOwnProp(obj, key)) {\r\n iterate.call(context, obj[key], key, obj)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default objectEach\r\n","import isArray from './isArray'\r\nimport arrayEach from './arrayEach'\r\nimport objectEach from './objectEach'\r\n\r\n/**\r\n * 迭代器\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @param {Object} context 上下文\r\n * @return {Object}\r\n */\r\nfunction each (obj, iterate, context) {\r\n if (obj) {\r\n return (isArray(obj) ? arrayEach : objectEach)(obj, iterate, context)\r\n }\r\n return obj\r\n}\r\n\r\nexport default each\r\n","/* eslint-disable valid-typeof */\r\nfunction helperCreateInTypeof (type) {\r\n return function (obj) {\r\n return typeof obj === type\r\n }\r\n}\r\n\r\nexport default helperCreateInTypeof\r\n","import helperCreateInTypeof from './helperCreateInTypeof'\r\n\r\n/**\r\n * 判断是否方法\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar isFunction = helperCreateInTypeof('function')\r\n\r\nexport default isFunction\r\n","import each from './each'\r\n\r\nfunction helperCreateGetObjects (name, getIndex) {\r\n var proMethod = Object[name]\r\n return function (obj) {\r\n var result = []\r\n if (obj) {\r\n if (proMethod) {\r\n return proMethod(obj)\r\n }\r\n each(obj, getIndex > 1 ? function (key) {\r\n result.push(['' + key, obj[key]])\r\n } : function () {\r\n result.push(arguments[getIndex])\r\n })\r\n }\r\n return result\r\n }\r\n}\r\n\r\nexport default helperCreateGetObjects\r\n","import helperCreateGetObjects from './helperCreateGetObjects'\r\n\r\n/**\r\n * 获取对象所有属性\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @return {Array}\r\n */\r\nvar keys = helperCreateGetObjects('keys', 1)\r\n\r\nexport default keys\r\n","import objectToString from './staticObjectToString'\r\n\r\nimport objectEach from './objectEach'\r\nimport arrayEach from './arrayEach'\r\n\r\nfunction getCativeCtor (val, args) {\r\n var Ctor = val.__proto__.constructor\r\n return args ? new Ctor(args) : new Ctor()\r\n}\r\n\r\nfunction handleValueClone (item, isDeep) {\r\n return isDeep ? copyValue(item, isDeep) : item\r\n}\r\n\r\nfunction copyValue (val, isDeep) {\r\n if (val) {\r\n switch(objectToString.call(val)) {\r\n case \"[object Object]\": {\r\n var restObj = Object.create(Object.getPrototypeOf(val))\r\n objectEach(val, function (item, key) {\r\n restObj[key] = handleValueClone(item, isDeep)\r\n })\r\n return restObj\r\n }\r\n case \"[object Date]\":\r\n case \"[object RegExp]\": {\r\n return getCativeCtor(val, val.valueOf())\r\n }\r\n case \"[object Array]\":\r\n case \"[object Arguments]\": {\r\n var restArr = []\r\n arrayEach(val, function (item) {\r\n restArr.push(handleValueClone(item, isDeep))\r\n })\r\n return restArr\r\n }\r\n case \"[object Set]\": {\r\n var restSet = getCativeCtor(val)\r\n restSet.forEach(function (item) {\r\n restSet.add(handleValueClone(item, isDeep))\r\n })\r\n return restSet\r\n }\r\n case \"[object Map]\": {\r\n var restMap = getCativeCtor(val)\r\n restMap.forEach(function (item, key) {\r\n restMap.set(key, handleValueClone(item, isDeep))\r\n })\r\n return restMap\r\n }\r\n }\r\n }\r\n return val\r\n}\r\n\r\n/**\r\n * 浅拷贝/深拷贝\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Boolean} deep 是否深拷贝\r\n * @return {Object}\r\n */\r\nfunction clone (obj, deep) {\r\n if (obj) {\r\n return copyValue(obj, deep)\r\n }\r\n return obj\r\n}\r\n\r\nexport default clone\r\n","import arrayEach from './arrayEach'\r\nimport keys from './keys'\r\nimport isArray from './isArray'\r\nimport clone from './clone'\r\n\r\nvar objectAssignFns = Object.assign\r\n\r\nfunction handleAssign (destination, args, isClone) {\r\n var len = args.length\r\n for (var source, index = 1; index < len; index++) {\r\n source = args[index]\r\n arrayEach(keys(args[index]), isClone ? function (key) {\r\n destination[key] = clone(source[key], isClone)\r\n } : function (key) {\r\n destination[key] = source[key]\r\n })\r\n }\r\n return destination\r\n}\r\n\r\n/**\r\n * 将一个或多个源对象复制到目标对象中\r\n *\r\n * @param {Object} target 目标对象\r\n * @param {...Object}\r\n * @return {Boolean}\r\n */\r\nvar assign = function (target) {\r\n if (target) {\r\n var args = arguments\r\n if (target === true) {\r\n if (args.length > 1) {\r\n target = isArray(target[1]) ? [] : {}\r\n return handleAssign(target, args, true)\r\n }\r\n } else {\r\n return objectAssignFns ? objectAssignFns.apply(Object, args) : handleAssign(target, args)\r\n }\r\n }\r\n return target\r\n}\r\n\r\nexport default assign\r\n","import setupDefaults from './setupDefaults'\r\n\r\nimport arrayEach from './arrayEach'\r\nimport each from './each'\r\nimport isFunction from './isFunction'\r\n\r\nimport assign from './assign'\r\n\r\nvar XEUtils = function () {}\r\n\r\nfunction mixin () {\r\n arrayEach(arguments, function (methods) {\r\n each(methods, function (fn, name) {\r\n XEUtils[name] = isFunction(fn) ? function () {\r\n var result = fn.apply(XEUtils.$context, arguments)\r\n XEUtils.$context = null\r\n return result\r\n } : fn\r\n })\r\n })\r\n}\r\n\r\nfunction setConfig (options) {\r\n return assign(setupDefaults, options)\r\n}\r\n\r\nfunction getConfig () {\r\n return setupDefaults\r\n}\r\n\r\nvar version = '4.0.0'\r\n\r\nXEUtils.VERSION = version\r\nXEUtils.version = version\r\nXEUtils.mixin = mixin\r\nXEUtils.setup = setConfig\r\nXEUtils.setConfig = setConfig\r\nXEUtils.getConfig = getConfig\r\n\r\nexport default XEUtils\r\n","function lastArrayEach (obj, iterate, context) {\r\n for (var len = obj.length - 1; len >= 0; len--) {\r\n iterate.call(context, obj[len], len, obj)\r\n }\r\n}\r\n\r\nexport default lastArrayEach\r\n","import lastArrayEach from './lastArrayEach'\r\nimport keys from './keys'\r\n\r\nfunction lastObjectEach (obj, iterate, context) {\r\n lastArrayEach(keys(obj), function (key) {\r\n iterate.call(context, obj[key], key, obj)\r\n })\r\n}\r\n\r\nexport default lastObjectEach\r\n","/**\r\n * 判断是否为Null\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nfunction isNull (obj) {\r\n return obj === null\r\n}\r\n\r\nexport default isNull\r\n","import isNull from './isNull'\r\n\r\n/**\r\n * 返回一个获取对象属性的函数\r\n *\r\n * @param {String} name 属性名\r\n * @param {Object} defs 空值\r\n */\r\nfunction property (name, defs) {\r\n return function (obj) {\r\n return isNull(obj) ? defs : obj[name]\r\n }\r\n}\r\n\r\nexport default property\r\n","/**\r\n * 判断是否对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nfunction isPlainObject (obj) {\r\n return obj ? obj.constructor === Object : false\r\n}\r\n\r\nexport default isPlainObject\r\n","function helperCheckCopyKey (key) {\r\n return key !== '__proto__' && key !== 'constructor'\r\n}\r\n\r\nexport default helperCheckCopyKey\r\n","import isArray from './isArray'\r\nimport isPlainObject from './isPlainObject'\r\nimport isFunction from './isFunction'\r\nimport each from './each'\r\n\r\nimport helperCheckCopyKey from './helperCheckCopyKey'\r\n\r\nfunction handleMerge (target, source) {\r\n if ((isPlainObject(target) && isPlainObject(source)) || (isArray(target) && isArray(source))) {\r\n each(source, function (val, key) {\r\n if (helperCheckCopyKey(key)) {\r\n target[key] = isFunction(source) ? val : handleMerge(target[key], val)\r\n }\r\n })\r\n return target\r\n }\r\n return source\r\n}\r\n\r\n/**\r\n * 将一个或多个源对象合并到目标对象中\r\n *\r\n * @param {Object} target 目标对象\r\n * @param {...Object}\r\n * @return {Boolean}\r\n */\r\nvar merge = function (target) {\r\n if (!target) {\r\n target = {}\r\n }\r\n var args = arguments\r\n var len = args.length\r\n for (var source, index = 1; index < len; index++) {\r\n source = args[index]\r\n if (source) {\r\n handleMerge(target, source)\r\n }\r\n }\r\n return target\r\n}\r\n\r\nexport default merge\r\n","import each from './each'\r\n\r\n/**\r\n * 指定方法后的返回值组成的新数组\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @param {Object} context 上下文\r\n * @return {Array}\r\n */\r\nfunction map (obj, iterate, context) {\r\n var result = []\r\n if (obj && arguments.length > 1) {\r\n if (obj.map) {\r\n return obj.map(iterate, context)\r\n } else {\r\n each(obj, function () {\r\n result.push(iterate.apply(context, arguments))\r\n })\r\n }\r\n }\r\n return result\r\n}\r\n\r\nexport default map\r\n","import hasOwnProp from './hasOwnProp'\r\nimport isArray from './isArray'\r\n\r\nfunction helperCreateIterateHandle (prop, useArray, restIndex, matchValue, defaultValue) {\r\n return function (obj, iterate, context) {\r\n if (obj && iterate) {\r\n if (prop && obj[prop]) {\r\n return obj[prop](iterate, context)\r\n } else {\r\n if (useArray && isArray(obj)) {\r\n for (var index = 0, len = obj.length; index < len; index++) {\r\n if (!!iterate.call(context, obj[index], index, obj) === matchValue) {\r\n return [true, false, index, obj[index]][restIndex]\r\n }\r\n }\r\n } else {\r\n for (var key in obj) {\r\n if (hasOwnProp(obj, key)) {\r\n if (!!iterate.call(context, obj[key], key, obj) === matchValue) {\r\n return [true, false, key, obj[key]][restIndex]\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return defaultValue\r\n }\r\n}\r\n\r\nexport default helperCreateIterateHandle\r\n","import helperCreateIterateHandle from './helperCreateIterateHandle'\r\n\r\n/**\r\n * 对象中的值中的每一项运行给定函数,如果函数对任一项返回true,则返回true,否则返回false\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @param {Object} context 上下文\r\n * @return {Boolean}\r\n */\r\nvar some = helperCreateIterateHandle('some', 1, 0, true, false)\r\n\r\nexport default some\r\n","import helperCreateIterateHandle from './helperCreateIterateHandle'\r\n\r\n/**\r\n * 对象中的值中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true,否则返回false\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @param {Object} context 上下文\r\n * @return {Boolean}\r\n */\r\nvar every = helperCreateIterateHandle('every', 1, 1, false, true)\r\n\r\nexport default every\r\n","import hasOwnProp from './hasOwnProp'\r\n\r\n/**\r\n * 判断对象是否包含该值,成功返回true否则false\r\n *\r\n * @param {Object} obj 对象\r\n * @param {Object} val 值\r\n * @return {Boolean}\r\n */\r\nfunction includes (obj, val) {\r\n if (obj) {\r\n if (obj.includes) {\r\n return obj.includes(val)\r\n }\r\n for (var key in obj) {\r\n if (hasOwnProp(obj, key)) {\r\n if (val === obj[key]) {\r\n return true\r\n }\r\n }\r\n }\r\n }\r\n return false\r\n}\r\n\r\nexport default includes\r\n","import isArray from './isArray'\r\nimport includes from './includes'\r\n\r\n/**\r\n * 判断数组是否包含另一数组\r\n *\r\n * @param {Array} array1 数组\r\n * @param {Array} array2 被包含数组\r\n * @return {Boolean}\r\n */\r\nfunction includeArrays (array1, array2) {\r\n var len\r\n var index = 0\r\n if (isArray(array1) && isArray(array2)) {\r\n for (len = array2.length; index < len; index++) {\r\n if (!includes(array1, array2[index])) {\r\n return false\r\n }\r\n }\r\n return true\r\n }\r\n return includes(array1, array2)\r\n}\r\n\r\nexport default includeArrays\r\n","import each from './each'\r\nimport includes from './includes'\r\nimport isFunction from './isFunction'\r\nimport property from './property'\r\n\r\n/**\r\n * 数组去重\r\n * \r\n * @param {*} array 数组\r\n * @param {*} iterate 字段或回调\r\n * @param {*} context \r\n * @returns \r\n */\r\nfunction uniq (array, iterate, context) {\r\n var result = []\r\n if (iterate) {\r\n if (!isFunction(iterate)) {\r\n iterate = property(iterate)\r\n }\r\n var val, valMap = {}\r\n each(array, function (item, key) {\r\n val = iterate.call(context, item, key, array)\r\n if (!valMap[val]) {\r\n valMap[val] = 1\r\n result.push(item)\r\n }\r\n })\r\n } else {\r\n each(array, function (value) {\r\n if (!includes(result, value)) {\r\n result.push(value)\r\n }\r\n })\r\n }\r\n return result\r\n}\r\n\r\nexport default uniq\r\n","import map from './map'\r\n\r\n/**\r\n * 将对象或者伪数组转为新数组\r\n *\r\n * @param {Array} list 数组\r\n * @return {Array}\r\n */\r\nfunction toArray (list) {\r\n return map(list, function (item) {\r\n return item\r\n })\r\n}\r\n\r\nexport default toArray\r\n","var staticStrUndefined = 'undefined'\r\n\r\nexport default staticStrUndefined\r\n","import staticStrUndefined from './staticStrUndefined'\r\n\r\nimport helperCreateInTypeof from './helperCreateInTypeof'\r\n\r\n/**\r\n * 判断是否Undefined\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar isUndefined = helperCreateInTypeof(staticStrUndefined)\r\n\r\nexport default isUndefined\r\n","import isNull from './isNull'\r\nimport isUndefined from './isUndefined'\r\n\r\n/**\r\n * 判断是否 undefined 和 null\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nfunction eqNull (obj) {\r\n return isNull(obj) || isUndefined(obj)\r\n}\r\n\r\nexport default eqNull\r\n","var staticHGKeyRE = /(.+)?\\[(\\d+)\\]$/\r\n\r\nexport default staticHGKeyRE\r\n","function helperGetHGSKeys (property) {\r\n // 以最快的方式判断数组,可忽略准确性\r\n return property ? (property.splice && property.join ? property : ('' + property).replace(/(\\[\\d+\\])\\.?/g,'$1.').replace(/\\.$/, '').split('.')) : []\r\n}\r\n\r\nexport default helperGetHGSKeys\r\n","import staticHGKeyRE from './staticHGKeyRE'\r\n\r\nimport helperGetHGSKeys from './helperGetHGSKeys'\r\nimport hasOwnProp from './hasOwnProp'\r\nimport isUndefined from './isUndefined'\r\nimport eqNull from './eqNull'\r\n\r\n/**\r\n * 获取对象的属性的值,如果值为 undefined,则返回默认值\r\n * @param {Object/Array} obj 对象\r\n * @param {String/Function} property 键、路径\r\n * @param {Object} defaultValue 默认值\r\n * @return {Object}\r\n */\r\nfunction get (obj, property, defaultValue) {\r\n if (eqNull(obj)) {\r\n return defaultValue\r\n }\r\n var result = getValueByPath(obj, property)\r\n return isUndefined(result) ? defaultValue : result\r\n}\r\n\r\nfunction getDeepProps (obj, key) {\r\n var matchs = key ? key.match(staticHGKeyRE) : ''\r\n return matchs ? (matchs[1] ? (obj[matchs[1]] ? obj[matchs[1]][matchs[2]] : undefined) : obj[matchs[2]]) : obj[key]\r\n}\r\n\r\nfunction getValueByPath (obj, property) {\r\n if (obj) {\r\n var rest, props, len\r\n var index = 0\r\n if (obj[property] || hasOwnProp(obj, property)) {\r\n return obj[property]\r\n } else {\r\n props = helperGetHGSKeys(property)\r\n len = props.length\r\n if (len) {\r\n for (rest = obj; index < len; index++) {\r\n rest = getDeepProps(rest, props[index])\r\n if (eqNull(rest)) {\r\n if (index === len - 1) {\r\n return rest\r\n }\r\n return\r\n }\r\n }\r\n }\r\n return rest\r\n }\r\n }\r\n}\r\n\r\nexport default get\r\n","import arrayEach from './arrayEach'\r\nimport toArray from './toArray'\r\nimport map from './map'\r\n\r\nimport isArray from './isArray'\r\nimport isFunction from './isFunction'\r\nimport isPlainObject from './isPlainObject'\r\nimport isUndefined from './isUndefined'\r\nimport isNull from './isNull'\r\nimport eqNull from './eqNull'\r\nimport get from './get'\r\nimport property from './property'\r\n\r\nvar ORDER_PROP_ASC = 'asc'\r\nvar ORDER_PROP_DESC = 'desc'\r\n\r\n// function handleSort (v1, v2) {\r\n// return v1 > v2 ? 1 : -1\r\n// }\r\n\r\n// '' < 数字 < 字符 < null < undefined\r\nfunction handleSort (v1, v2) {\r\n if (isUndefined(v1)) {\r\n return 1\r\n }\r\n if (isNull(v1)) {\r\n return isUndefined(v2) ? -1 : 1\r\n }\r\n return v1 && v1.localeCompare ? v1.localeCompare(v2) : (v1 > v2 ? 1 : -1)\r\n}\r\n\r\nfunction buildMultiOrders (name, confs, compares) {\r\n return function (item1, item2) {\r\n var v1 = item1[name]\r\n var v2 = item2[name]\r\n if (v1 === v2) {\r\n return compares ? compares(item1, item2) : 0\r\n }\r\n return confs.order === ORDER_PROP_DESC ? handleSort(v2, v1) : handleSort(v1, v2)\r\n }\r\n}\r\n\r\nfunction getSortConfs (arr, list, fieldConfs, context) {\r\n var sortConfs = []\r\n fieldConfs = isArray(fieldConfs) ? fieldConfs : [fieldConfs]\r\n arrayEach(fieldConfs, function (handle, index) {\r\n if (handle) {\r\n var field = handle\r\n var order\r\n if (isArray(handle)) {\r\n field = handle[0]\r\n order = handle[1]\r\n } else if (isPlainObject(handle)) {\r\n field = handle.field\r\n order = handle.order\r\n }\r\n sortConfs.push({\r\n field: field,\r\n order: order || ORDER_PROP_ASC\r\n })\r\n arrayEach(list, isFunction(field) ? function (item, key) {\r\n item[index] = field.call(context, item.data, key, arr)\r\n } : function (item) {\r\n item[index] = field ? get(item.data, field) : item.data\r\n })\r\n }\r\n })\r\n return sortConfs\r\n}\r\n\r\n/**\r\n * 将数组进行排序\r\n *\r\n * @param {Array} arr 数组\r\n * @param {Function/String/Array} fieldConfs 方法或属性\r\n * @param {Object} context 上下文\r\n * @return {Array}\r\n */\r\nfunction orderBy (arr, fieldConfs, context) {\r\n if (arr) {\r\n if (eqNull(fieldConfs)) {\r\n return toArray(arr).sort(handleSort)\r\n }\r\n var compares\r\n var list = map(arr, function (item) {\r\n return { data: item }\r\n })\r\n var sortConfs = getSortConfs(arr, list, fieldConfs, context)\r\n var len = sortConfs.length - 1\r\n while (len >= 0) {\r\n compares = buildMultiOrders(len, sortConfs[len], compares)\r\n len--\r\n }\r\n if (compares) {\r\n list = list.sort(compares)\r\n }\r\n return map(list, property('data'))\r\n }\r\n return []\r\n}\r\n\r\nexport default orderBy\r\n","import orderBy from './orderBy'\r\n\r\nvar sortBy = orderBy\r\n\r\nexport default sortBy\r\n","/**\r\n * 获取一个指定范围内随机数\r\n *\r\n * @param {Number} minVal 最小值\r\n * @param {Number} maxVal 最大值\r\n * @return {Number}\r\n */\r\nfunction random (minVal, maxVal) {\r\n return minVal >= maxVal ? minVal : ((minVal = minVal >> 0) + Math.round(Math.random() * ((maxVal || 9) - minVal)))\r\n}\r\n\r\nexport default random\r\n","import helperCreateGetObjects from './helperCreateGetObjects'\r\n\r\n/**\r\n * 获取对象所有值\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @return {Array}\r\n */\r\nvar values = helperCreateGetObjects('values', 0)\r\n\r\nexport default values\r\n","import random from './random'\r\n\r\nimport values from './values'\r\n\r\n/**\r\n * 将一个数组随机打乱,返回一个新的数组\r\n *\r\n * @param {Array} array 数组\r\n * @return {Array}\r\n */\r\nfunction shuffle (array) {\r\n var index\r\n var result = []\r\n var list = values(array)\r\n var len = list.length - 1\r\n for (; len >= 0; len--) {\r\n index = len > 0 ? random(0, len) : 0\r\n result.push(list[index])\r\n list.splice(index, 1)\r\n }\r\n return result\r\n}\r\n\r\nexport default shuffle\r\n","function helperCreateToNumber (handle) {\r\n return function (str) {\r\n if (str) {\r\n var num = handle(str && str.replace ? str.replace(/,/g, '') : str)\r\n if (!isNaN(num)) {\r\n return num\r\n }\r\n }\r\n return 0\r\n }\r\n}\r\n\r\nexport default helperCreateToNumber\r\n","import helperCreateToNumber from './helperCreateToNumber'\r\n\r\n/**\r\n * 转数值\r\n * @param { String/Number } str 数值\r\n *\r\n * @return {Number}\r\n */\r\nvar toNumber = helperCreateToNumber(parseFloat)\r\n\r\nexport default toNumber\r\n","import toNumber from './toNumber'\r\n\r\n/**\r\n * 裁剪 Arguments 或数组 array,从 start 位置开始到 end 结束,但不包括 end 本身的位置\r\n * @param {Array/Arguments} array 数组或Arguments\r\n * @param {Number} startIndex 开始索引\r\n * @param {Number} endIndex 结束索引\r\n */\r\nfunction slice (array, startIndex, endIndex) {\r\n var result = []\r\n var argsSize = arguments.length\r\n if (array) {\r\n startIndex = argsSize >= 2 ? toNumber(startIndex) : 0\r\n endIndex = argsSize >= 3 ? toNumber(endIndex) : array.length\r\n if (array.slice) {\r\n return array.slice(startIndex, endIndex)\r\n }\r\n for (; startIndex < endIndex; startIndex++) {\r\n result.push(array[startIndex])\r\n }\r\n }\r\n return result\r\n}\r\n\r\nexport default slice\r\n","import helperCreateIterateHandle from './helperCreateIterateHandle'\r\n\r\n/**\r\n * 查找匹配第一条数据的键\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @param {Object} context 上下文\r\n * @return {Object}\r\n */\r\nvar findKey = helperCreateIterateHandle('', 0, 2, true)\r\n\r\nexport default findKey\r\n","import helperCreateIterateHandle from './helperCreateIterateHandle'\r\n\r\n/**\r\n * 从左至右遍历,匹配最近的一条数据\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @param {Object} context 上下文\r\n * @return {Object}\r\n */\r\nvar find = helperCreateIterateHandle('find', 1, 3, true)\r\n\r\nexport default find\r\n","import map from './map'\r\nimport property from './property'\r\n\r\n/**\r\n * 获取数组对象中某属性值,返回一个数组\r\n *\r\n * @param {Array} array 数组\r\n * @param {String} key 属性值\r\n * @return {Array}\r\n */\r\nfunction pluck (obj, key) {\r\n return map(obj, property(key))\r\n}\r\n\r\nexport default pluck\r\n","import isFunction from './isFunction'\r\nimport eqNull from './eqNull'\r\nimport get from './get'\r\n\r\nimport arrayEach from './arrayEach'\r\n\r\nfunction helperCreateMinMax (handle) {\r\n return function (arr, iterate) {\r\n if (arr && arr.length) {\r\n var rest, itemIndex\r\n arrayEach(arr, function (itemVal, index) {\r\n if (iterate) {\r\n itemVal = isFunction(iterate) ? iterate(itemVal, index, arr) : get(itemVal, iterate)\r\n }\r\n if (!eqNull(itemVal) && (eqNull(rest) || handle(rest, itemVal))) {\r\n itemIndex = index\r\n rest = itemVal\r\n }\r\n })\r\n return arr[itemIndex]\r\n }\r\n return rest\r\n }\r\n}\r\n\r\nexport default helperCreateMinMax\r\n","import helperCreateMinMax from './helperCreateMinMax'\r\n\r\n/**\r\n * 获取最大值\r\n *\r\n * @param {Array} arr 数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @return {Number}\r\n */\r\nvar max = helperCreateMinMax(function (rest, itemVal) {\r\n return rest < itemVal\r\n})\r\n\r\nexport default max\r\n","import pluck from './pluck'\r\n\r\nimport max from './max'\r\n\r\n/**\r\n * 与 zip 相反\r\n *\r\n * @param {Array} arrays 数组集合\r\n */\r\nfunction unzip (arrays) {\r\n var index, maxItem, len\r\n var result = []\r\n if (arrays && arrays.length) {\r\n index = 0\r\n maxItem = max(arrays, function (item) {\r\n return item ? item.length : 0\r\n })\r\n for (len = maxItem ? maxItem.length : 0; index < len; index++) {\r\n result.push(pluck(arrays, index))\r\n }\r\n }\r\n return result\r\n}\r\n\r\nexport default unzip\r\n","import isArray from './isArray'\r\nimport arrayEach from './arrayEach'\r\n\r\nfunction flattenDeep (array, deep) {\r\n var result = []\r\n arrayEach(array, function (vals) {\r\n result = result.concat(isArray(vals) ? (deep ? flattenDeep(vals, deep) : vals) : [vals])\r\n })\r\n return result\r\n}\r\n\r\n/**\r\n * 将一个多维数组铺平\r\n * @param {Array} array 数组\r\n * @param {Boolean} deep 是否深层\r\n * @return {Array}\r\n */\r\nfunction flatten (array, deep) {\r\n if (isArray(array)) {\r\n return flattenDeep(array, deep)\r\n }\r\n return []\r\n}\r\n\r\nexport default flatten\r\n","function helperLog (type, msg) {\r\n return (console[type] || console.log)(msg)\r\n}\r\n\r\nexport default helperLog\r\n","function helperDeleteProperty (obj, property) {\r\n try {\r\n delete obj[property]\r\n } catch (e) {\r\n obj[property] = undefined\r\n }\r\n}\r\n\r\nexport default helperDeleteProperty\r\n","import isArray from './isArray'\r\nimport lastArrayEach from './lastArrayEach'\r\nimport lastObjectEach from './lastObjectEach'\r\n\r\n/**\r\n * 迭代器,从最后开始迭代\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @param {Object} context 上下文\r\n * @return {Object}\r\n */\r\nfunction lastEach (obj, iterate, context) {\r\n if (obj) {\r\n return (isArray(obj) ? lastArrayEach : lastObjectEach)(obj, iterate, context)\r\n }\r\n return obj\r\n}\r\n\r\nexport default lastEach\r\n","import helperCreateInTypeof from './helperCreateInTypeof'\r\n\r\n/**\r\n * 判断是否Object对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar isObject = helperCreateInTypeof('object')\r\n\r\nexport default isObject\r\n","import helperDeleteProperty from './helperDeleteProperty'\r\n\r\nimport isPlainObject from './isPlainObject'\r\nimport isObject from './isObject'\r\nimport isArray from './isArray'\r\nimport isNull from './isNull'\r\nimport assign from './assign'\r\nimport objectEach from './objectEach'\r\n\r\n/**\r\n * 清空对象\r\n *\r\n * @param {Object} obj 对象\r\n * @param {*} defs 默认值,如果不传(清空所有属性)、如果传对象(清空并继承)、如果传值(给所有赋值)\r\n * @param {Object/Array} assigns 默认值\r\n * @return {Object}\r\n */\r\nfunction clear (obj, defs, assigns) {\r\n if (obj) {\r\n var len\r\n var isDefs = arguments.length > 1 && (isNull(defs) || !isObject(defs))\r\n var extds = isDefs ? assigns : defs\r\n if (isPlainObject(obj)) {\r\n objectEach(obj, isDefs ? function (val, key) {\r\n obj[key] = defs\r\n } : function (val, key) {\r\n helperDeleteProperty(obj, key)\r\n })\r\n if (extds) {\r\n assign(obj, extds)\r\n }\r\n } else if (isArray(obj)) {\r\n if (isDefs) {\r\n len = obj.length\r\n while (len > 0) {\r\n len--\r\n obj[len] = defs\r\n }\r\n } else {\r\n obj.length = 0\r\n }\r\n if (extds) {\r\n obj.push.apply(obj, extds)\r\n }\r\n }\r\n }\r\n return obj\r\n}\r\n\r\nexport default clear\r\n","import helperDeleteProperty from './helperDeleteProperty'\r\n\r\nimport isFunction from './isFunction'\r\nimport isArray from './isArray'\r\nimport each from './each'\r\nimport arrayEach from './arrayEach'\r\nimport lastEach from './lastEach'\r\nimport clear from './clear'\r\nimport eqNull from './eqNull'\r\n\r\nfunction pluckProperty (name) {\r\n return function (obj, key) {\r\n return key === name\r\n }\r\n}\r\n\r\n/**\r\n * 移除对象属性\r\n *\r\n * @param {Object/Array} obj 对象/数组\r\n * @param {Function/String} iterate 方法或属性\r\n * @param {Object} context 上下文\r\n * @return {Object/Array}\r\n */\r\nfunction remove (obj, iterate, context) {\r\n if (obj) {\r\n if (!eqNull(iterate)) {\r\n var removeKeys = []\r\n var rest = []\r\n if (!isFunction(iterate)) {\r\n iterate = pluckProperty(iterate)\r\n }\r\n each(obj, function (item, index, rest) {\r\n if (iterate.call(context, item, index, rest)) {\r\n removeKeys.push(index)\r\n }\r\n })\r\n if (isArray(obj)) {\r\n lastEach(removeKeys, function (item, key) {\r\n rest.push(obj[item])\r\n obj.splice(item, 1)\r\n })\r\n } else {\r\n rest = {}\r\n arrayEach(removeKeys, function (key) {\r\n rest[key] = obj[key]\r\n helperDeleteProperty(obj, key)\r\n })\r\n }\r\n return rest\r\n }\r\n return clear(obj)\r\n }\r\n return obj\r\n}\r\n\r\nexport default remove\r\n","import setupDefaults from './setupDefaults'\r\n\r\nimport arrayEach from './arrayEach'\r\n\r\nimport assign from './assign'\r\n\r\nfunction unTreeList (result, parentItem, array, opts) {\r\n var optKey = opts.key\r\n var optParentKey = opts.parentKey\r\n var optChildren = opts.children\r\n var optData = opts.data\r\n var optUpdated = opts.updated\r\n var optClear = opts.clear\r\n arrayEach(array, function (item) {\r\n var childList = item[optChildren]\r\n if (optData) {\r\n item = item[optData]\r\n }\r\n if (optUpdated !== false) {\r\n item[optParentKey] = parentItem ? parentItem[optKey] : null\r\n }\r\n result.push(item)\r\n if (childList && childList.length) {\r\n unTreeList(result, item, childList, opts)\r\n }\r\n if (optClear) {\r\n delete item[optChildren]\r\n }\r\n })\r\n return result\r\n}\r\n\r\n/**\r\n * 将一个树结构转成数组列表\r\n *\r\n * @param {Array} array 数组\r\n * @param {Object} options { children: 'children', data: 'data', clear: false }\r\n * @return {Array}\r\n */\r\nfunction toTreeArray (array, options) {\r\n return unTreeList([], null, array, assign({}, setupDefaults.treeOptions, options))\r\n}\r\n\r\nexport default toTreeArray\r\n","function helperCreateTreeFunc (handle) {\r\n return function (obj, iterate, options, context) {\r\n var opts = options || {}\r\n var optChildren = opts.children || 'children'\r\n return handle(null, obj, iterate, context, [], [], optChildren, opts)\r\n }\r\n}\r\n\r\nexport default helperCreateTreeFunc\r\n","import helperCreateTreeFunc from './helperCreateTreeFunc'\r\n\r\nfunction findTreeItem (parent, obj, iterate, context, path, node, parseChildren, opts) {\r\n if (obj) {\r\n var item, index, len, paths, nodes, match\r\n for (index = 0, len = obj.length; index < len; index++) {\r\n item = obj[index]\r\n paths = path.concat(['' + index])\r\n nodes = node.concat([item])\r\n if (iterate.call(context, item, index, obj, paths, parent, nodes)) {\r\n return { index: index, item: item, path: paths, items: obj, parent: parent, nodes: nodes }\r\n }\r\n if (parseChildren && item) {\r\n match = findTreeItem(item, item[parseChildren], iterate, context, paths.concat([parseChildren]), nodes, parseChildren, opts)\r\n if (match) {\r\n return match\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 从树结构中查找匹配第一条数据的键、值、路径\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, items, path, parent, nodes) 回调\r\n * @param {Object} options {children: 'children'}\r\n * @param {Object} context 上下文\r\n * @return {Object} { item, index, items, path, parent, nodes }\r\n */\r\nvar findTree = helperCreateTreeFunc(findTreeItem)\r\n\r\nexport default findTree\r\n","import helperCreateTreeFunc from './helperCreateTreeFunc'\r\nimport each from './each'\r\n\r\nfunction eachTreeItem (parent, obj, iterate, context, path, node, parseChildren, opts) {\r\n var paths, nodes\r\n each(obj, function (item, index) {\r\n paths = path.concat(['' + index])\r\n nodes = node.concat([item])\r\n iterate.call(context, item, index, obj, paths, parent, nodes)\r\n if (item && parseChildren) {\r\n paths.push(parseChildren)\r\n eachTreeItem(item, item[parseChildren], iterate, context, paths, nodes, parseChildren, opts)\r\n }\r\n })\r\n}\r\n\r\n/**\r\n * 从树结构中遍历数据的键、值、路径\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, items, path, parent, nodes) 回调\r\n * @param {Object} options {children: 'children', mapChildren: 'children}\r\n * @param {Object} context 上下文\r\n */\r\nvar eachTree = helperCreateTreeFunc(eachTreeItem)\r\n\r\nexport default eachTree\r\n","import helperCreateTreeFunc from './helperCreateTreeFunc'\r\n\r\nimport map from './map'\r\n\r\nfunction mapTreeItem (parent, obj, iterate, context, path, node, parseChildren, opts) {\r\n var paths, nodes, rest\r\n var mapChildren = opts.mapChildren || parseChildren\r\n return map(obj, function (item, index) {\r\n paths = path.concat(['' + index])\r\n nodes = node.concat([item])\r\n rest = iterate.call(context, item, index, obj, paths, parent, nodes)\r\n if (rest && item && parseChildren && item[parseChildren]) {\r\n rest[mapChildren] = mapTreeItem(item, item[parseChildren], iterate, context, paths, nodes, parseChildren, opts)\r\n }\r\n return rest\r\n })\r\n}\r\n\r\n/**\r\n * 从树结构中指定方法后的返回值组成的新数组\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, items, path, parent, nodes) 回调\r\n * @param {Object} options {children: 'children'}\r\n * @param {Object} context 上下文\r\n * @return {Object/Array}\r\n */\r\nvar mapTree = helperCreateTreeFunc(mapTreeItem)\r\n\r\nexport default mapTree\r\n","import helperCreateTreeFunc from './helperCreateTreeFunc'\r\n\r\nimport arrayEach from './arrayEach'\r\n\r\nimport assign from './assign'\r\n\r\nfunction searchTreeItem (matchParent, parent, obj, iterate, context, path, node, parseChildren, opts) {\r\n var paths, nodes, rest, isMatch, hasChild\r\n var rests = []\r\n var hasOriginal = opts.original\r\n var sourceData = opts.data\r\n var mapChildren = opts.mapChildren || parseChildren\r\n var isEvery = opts.isEvery\r\n arrayEach(obj, function (item, index) {\r\n paths = path.concat(['' + index])\r\n nodes = node.concat([item])\r\n isMatch = (matchParent && !isEvery) || iterate.call(context, item, index, obj, paths, parent, nodes)\r\n hasChild = parseChildren && item[parseChildren]\r\n if (isMatch || hasChild) {\r\n if (hasOriginal) {\r\n rest = item\r\n } else {\r\n rest = assign({}, item)\r\n if (sourceData) {\r\n rest[sourceData] = item\r\n }\r\n }\r\n rest[mapChildren] = searchTreeItem(isMatch, item, item[parseChildren], iterate, context, paths, nodes, parseChildren, opts)\r\n if (isMatch || rest[mapChildren].length) {\r\n rests.push(rest)\r\n }\r\n } else if (isMatch) {\r\n rests.push(rest)\r\n }\r\n })\r\n return rests\r\n}\r\n\r\n/**\r\n * 从树结构中根据回调查找数据\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, items, path, parent, nodes) 回调\r\n * @param {Object} options {children: 'children'}\r\n * @param {Object} context 上下文\r\n * @return {Array}\r\n */\r\nvar searchTree = helperCreateTreeFunc(function (parent, obj, iterate, context, path, nodes, parseChildren, opts) {\r\n return searchTreeItem(0, parent, obj, iterate, context, path, nodes, parseChildren, opts)\r\n})\r\n\r\nexport default searchTree\r\n","function arrayIndexOf (list, val) {\r\n if (list.indexOf) {\r\n return list.indexOf(val)\r\n }\r\n for (var index = 0, len = list.length; index < len; index++) {\r\n if (val === list[index]) {\r\n return index\r\n }\r\n }\r\n}\r\n\r\nexport default arrayIndexOf\r\n","function arrayLastIndexOf (list, val) {\r\n if (list.lastIndexOf) {\r\n return list.lastIndexOf(val)\r\n }\r\n for (var len = list.length - 1; len >= 0; len--) {\r\n if (val === list[len]) {\r\n return len\r\n }\r\n }\r\n return -1\r\n}\r\n\r\nexport default arrayLastIndexOf\r\n","import helperCreateInTypeof from './helperCreateInTypeof'\r\n\r\n/**\r\n * 判断是否Number对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar isNumber = helperCreateInTypeof('number')\r\n\r\nexport default isNumber\r\n","import helperCreateInTypeof from './helperCreateInTypeof'\r\n\r\n/**\r\n * 判断是否String对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar isString = helperCreateInTypeof('string')\r\n\r\nexport default isString\r\n","import helperCreateInInObjectString from './helperCreateInInObjectString'\r\n\r\n/**\r\n * 判断是否Date对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar isDate = helperCreateInInObjectString('Date')\r\n\r\nexport default isDate\r\n","var staticParseInt = parseInt\r\n\r\nexport default staticParseInt\r\n","function helperGetUTCDateTime (resMaps) {\r\n return Date.UTC(resMaps.y, resMaps.M || 0, resMaps.d || 1, resMaps.H || 0, resMaps.m || 0, resMaps.s || 0, resMaps.S || 0)\r\n}\r\n\r\nexport default helperGetUTCDateTime\r\n","function helperGetDateTime (date) {\r\n return date.getTime()\r\n}\r\n\r\nexport default helperGetDateTime\r\n","import staticParseInt from './staticParseInt'\r\n\r\nimport helperGetUTCDateTime from './helperGetUTCDateTime'\r\nimport helperGetDateTime from './helperGetDateTime'\r\n\r\nimport isString from './isString'\r\nimport isDate from './isDate'\r\n\r\nfunction getParseRule (txt) {\r\n return '(\\\\d{' + txt + '})'\r\n}\r\n\r\nfunction toParseMs (num) {\r\n if (num < 10) {\r\n return num * 100\r\n } else if (num < 100) {\r\n return num * 10\r\n }\r\n return num\r\n}\r\n\r\nfunction toParseNum (num) {\r\n return isNaN(num) ? num : staticParseInt(num)\r\n}\r\n\r\nvar d2 = getParseRule(2)\r\nvar d1or2 = getParseRule('1,2')\r\nvar d1or7 = getParseRule('1,7')\r\nvar d3or4 = getParseRule('3,4')\r\nvar place = '.{1}'\r\nvar d1Or2RE = place + d1or2\r\nvar dzZ = '(([zZ])|([-+]\\\\d{2}:?\\\\d{2}))'\r\n\r\nvar defaulParseStrs = [d3or4, d1Or2RE, d1Or2RE, d1Or2RE, d1Or2RE, d1Or2RE, place + d1or7, dzZ]\r\nvar defaulParseREs = []\r\n\r\nfor (var len = defaulParseStrs.length - 1; len >= 0; len--) {\r\n var rule = ''\r\n for (var i = 0; i < len + 1; i++) {\r\n rule += defaulParseStrs[i]\r\n }\r\n defaulParseREs.push(new RegExp('^' + rule + '$'))\r\n}\r\n\r\n/**\r\n * 解析默认格式\r\n */\r\nfunction parseDefaultRules (str) {\r\n var matchRest, resMaps = {}\r\n for (var i = 0, dfrLen = defaulParseREs.length; i < dfrLen; i++) {\r\n matchRest = str.match(defaulParseREs[i])\r\n if (matchRest) {\r\n resMaps.y = matchRest[1]\r\n resMaps.M = matchRest[2]\r\n resMaps.d = matchRest[3]\r\n resMaps.H = matchRest[4]\r\n resMaps.m = matchRest[5]\r\n resMaps.s = matchRest[6]\r\n resMaps.S = matchRest[7]\r\n resMaps.Z = matchRest[8]\r\n break\r\n }\r\n }\r\n return resMaps\r\n}\r\n\r\nvar customParseStrs = [\r\n ['yyyy', d3or4],\r\n ['yy', d2],\r\n ['MM', d2],\r\n ['M', d1or2],\r\n ['dd', d2],\r\n ['d', d1or2],\r\n ['HH', d2],\r\n ['H', d1or2],\r\n ['mm', d2],\r\n ['m', d1or2],\r\n ['ss', d2],\r\n ['s', d1or2],\r\n ['SSS', getParseRule(3)],\r\n ['S', d1or7],\r\n ['Z', dzZ]\r\n]\r\nvar parseRuleMaps = {}\r\nvar parseRuleKeys = ['\\\\[([^\\\\]]+)\\\\]']\r\n\r\nfor (var i = 0; i < customParseStrs.length; i++) {\r\n var itemRule = customParseStrs[i]\r\n parseRuleMaps[itemRule[0]] = itemRule[1] + '?'\r\n parseRuleKeys.push(itemRule[0])\r\n}\r\n\r\nvar customParseRes = new RegExp(parseRuleKeys.join('|'), 'g')\r\nvar cacheFormatMaps = {}\r\n\r\n/**\r\n * 解析自定义格式\r\n */\r\nfunction parseCustomRules (str, format) {\r\n var cacheItem = cacheFormatMaps[format]\r\n if (!cacheItem) {\r\n var posIndexs = []\r\n var re = format.replace(/([$(){}*+.?\\\\^|])/g, \"\\\\$1\").replace(customParseRes, function (text, val) {\r\n var firstChar = text.charAt(0)\r\n // 如果为转义符号:[关键字]\r\n if (firstChar === '[') {\r\n return val\r\n }\r\n posIndexs.push(firstChar)\r\n return parseRuleMaps[text]\r\n })\r\n cacheItem = cacheFormatMaps[format] = {\r\n _i: posIndexs,\r\n _r: new RegExp(re)\r\n }\r\n }\r\n var resMaps = {}\r\n var matchRest = str.match(cacheItem._r)\r\n if (matchRest) {\r\n var _i = cacheItem._i\r\n for (var i = 1, len = matchRest.length; i < len; i++) {\r\n resMaps[_i[i - 1]] = matchRest[i]\r\n }\r\n return resMaps\r\n }\r\n return resMaps\r\n}\r\n\r\n/**\r\n * 解析时区\r\n */\r\nfunction parseTimeZone (resMaps) {\r\n // 如果为UTC 时间\r\n if (/^[zZ]/.test(resMaps.Z)) {\r\n return new Date(helperGetUTCDateTime(resMaps))\r\n } else {\r\n // 如果指定时区,时区转换\r\n var matchRest = resMaps.Z.match(/([-+])(\\d{2}):?(\\d{2})/)\r\n if (matchRest) {\r\n return new Date(helperGetUTCDateTime(resMaps) - (matchRest[1] === '-' ? -1 : 1) * staticParseInt(matchRest[2]) * 3600000 + staticParseInt(matchRest[3]) * 60000)\r\n }\r\n }\r\n return new Date('')\r\n}\r\n\r\n/**\r\n * 字符串转为日期\r\n *\r\n * @param {String/Number/Date} str 日期或数字\r\n * @param {String} format 解析日期格式(yyyy年份、MM月份、dd天、hh(12)HH(24)小时、mm分钟、ss秒、SSS毫秒、Z时区)\r\n * @return {Date}\r\n */\r\nfunction toStringDate (str, format) {\r\n if (str) {\r\n var isDType = isDate(str)\r\n if (isDType || (!format && /^[0-9]{11,15}$/.test(str))) {\r\n return new Date(isDType ? helperGetDateTime(str) : staticParseInt(str))\r\n }\r\n if (isString(str)) {\r\n var resMaps = format ? parseCustomRules(str, format) : parseDefaultRules(str)\r\n if (resMaps.y) {\r\n if (resMaps.M) {\r\n resMaps.M = toParseNum(resMaps.M) - 1\r\n }\r\n if (resMaps.S) {\r\n // 如果7位则是微秒,只精确到3位毫秒\r\n resMaps.S = toParseMs(toParseNum(resMaps.S.substring(0, 3)))\r\n }\r\n if (resMaps.Z) {\r\n return parseTimeZone(resMaps)\r\n } else {\r\n return new Date(resMaps.y, resMaps.M || 0, resMaps.d || 1, resMaps.H || 0, resMaps.m || 0, resMaps.s || 0, resMaps.S || 0)\r\n }\r\n }\r\n }\r\n }\r\n return new Date('')\r\n}\r\n\r\nexport default toStringDate\r\n","function helperNewDate () {\r\n return new Date()\r\n}\r\n\r\nexport default helperNewDate\r\n","import isDate from './isDate'\r\nimport toStringDate from './toStringDate'\r\n\r\nimport helperNewDate from './helperNewDate'\r\n\r\n/**\r\n * 判断是否闰年\r\n *\r\n * @param {Date} date 日期或数字\r\n * @return {Boolean}\r\n */\r\nfunction isLeapYear (date) {\r\n var year\r\n var currentDate = date ? toStringDate(date) : helperNewDate()\r\n if (isDate(currentDate)) {\r\n year = currentDate.getFullYear()\r\n return (year % 4 === 0) && (year % 100 !== 0 || year % 400 === 0)\r\n }\r\n return false\r\n}\r\n\r\nexport default isLeapYear\r\n","import isArray from './isArray'\r\nimport isString from './isString'\r\nimport hasOwnProp from './hasOwnProp'\r\n\r\nfunction helperCreateIndexOf (name, callback) {\r\n return function (obj, val) {\r\n if (obj) {\r\n if (obj[name]) {\r\n return obj[name](val)\r\n }\r\n if (isString(obj) || isArray(obj)) {\r\n return callback(obj, val)\r\n }\r\n for (var key in obj) {\r\n if (hasOwnProp(obj, key)) {\r\n if (val === obj[key]) {\r\n return key\r\n }\r\n }\r\n }\r\n }\r\n return -1\r\n }\r\n}\r\n\r\nexport default helperCreateIndexOf\r\n","import helperCreateIndexOf from './helperCreateIndexOf'\r\n\r\nimport arrayIndexOf from './arrayIndexOf'\r\n\r\n/**\r\n * 返回对象第一个索引值\r\n *\r\n * @param {Object} obj 对象\r\n * @param {Object} val 值\r\n * @return {Number}\r\n */\r\nvar indexOf = helperCreateIndexOf('indexOf', arrayIndexOf)\r\n\r\nexport default indexOf\r\n","import helperCreateIndexOf from './helperCreateIndexOf'\r\n\r\nimport arrayLastIndexOf from './arrayLastIndexOf'\r\n\r\n/**\r\n * 从最后开始的索引值,返回对象第一个索引值\r\n *\r\n * @param {Object} array 对象\r\n * @param {Object} val 值\r\n * @return {Number}\r\n */\r\nvar lastIndexOf = helperCreateIndexOf('lastIndexOf', arrayLastIndexOf)\r\n\r\nexport default lastIndexOf\r\n","import isArray from './isArray'\r\nimport isString from './isString'\r\nimport each from './each'\r\n\r\n/**\r\n * 返回对象的长度\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Number}\r\n */\r\nfunction getSize (obj) {\r\n var len = 0\r\n if (isString(obj) || isArray(obj)) {\r\n return obj.length\r\n }\r\n each(obj, function () {\r\n len++\r\n })\r\n return len\r\n}\r\n\r\nexport default getSize\r\n","import isArray from './isArray'\r\nimport isNull from './isNull'\r\n\r\n/**\r\n * 判断是否整数\r\n *\r\n * @param {Number, String} number 数值\r\n * @return {Boolean}\r\n */\r\nvar isInteger = function (obj) {\r\n return !isNull(obj) && !isNaN(obj) && !isArray(obj) && obj % 1 === 0\r\n}\r\n\r\nexport default isInteger\r\n","import helperCreateInTypeof from './helperCreateInTypeof'\r\n\r\n/**\r\n * 判断是否Boolean对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar isBoolean = helperCreateInTypeof('boolean')\r\n\r\nexport default isBoolean\r\n","import helperCreateInInObjectString from './helperCreateInInObjectString'\r\n\r\n/**\r\n * 判断是否RegExp对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar isRegExp = helperCreateInInObjectString('RegExp')\r\n\r\nexport default isRegExp\r\n","import helperCreateInInObjectString from './helperCreateInInObjectString'\r\n\r\n/**\r\n * 判断是否Error对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar isError = helperCreateInInObjectString('Error')\r\n\r\nexport default isError\r\n","/**\r\n * 判断是否为空对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nfunction isEmpty (obj) {\r\n for (var key in obj) {\r\n return false\r\n }\r\n return true\r\n}\r\n\r\nexport default isEmpty\r\n","/* eslint-disable valid-typeof */\r\nimport staticStrUndefined from './staticStrUndefined'\r\n\r\n/**\r\n * 判断是否Symbol对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar supportSymbol = typeof Symbol !== staticStrUndefined\r\nfunction isSymbol (obj) {\r\n return supportSymbol && Symbol.isSymbol ? Symbol.isSymbol(obj) : (typeof obj === 'symbol')\r\n}\r\n\r\nexport default isSymbol\r\n","import helperCreateInInObjectString from './helperCreateInInObjectString'\r\n\r\n/**\r\n * 判断是否Arguments对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar isArguments = helperCreateInInObjectString('Arguments')\r\n\r\nexport default isArguments\r\n","import staticStrUndefined from './staticStrUndefined'\r\n\r\n/* eslint-disable valid-typeof */\r\nvar staticDocument = typeof document === staticStrUndefined ? 0 : document\r\n\r\nexport default staticDocument\r\n","import staticStrUndefined from './staticStrUndefined'\r\n\r\n/* eslint-disable valid-typeof */\r\nvar staticWindow = typeof window === staticStrUndefined ? 0 : window\r\n\r\nexport default staticWindow\r\n","/* eslint-disable valid-typeof */\r\nimport staticStrUndefined from './staticStrUndefined'\r\n\r\n/**\r\n * 判断是否FormData对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar supportFormData = typeof FormData !== staticStrUndefined\r\nfunction isFormData (obj) {\r\n return supportFormData && obj instanceof FormData\r\n}\r\n\r\nexport default isFormData\r\n","/* eslint-disable valid-typeof */\r\nimport staticStrUndefined from './staticStrUndefined'\r\n\r\n/**\r\n * 判断是否Map对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar supportMap = typeof Map !== staticStrUndefined\r\nfunction isMap (obj) {\r\n return supportMap && obj instanceof Map\r\n}\r\n\r\nexport default isMap\r\n","/* eslint-disable valid-typeof */\r\nimport staticStrUndefined from './staticStrUndefined'\r\n\r\n/**\r\n * 判断是否WeakMap对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar supportWeakMap = typeof WeakMap !== staticStrUndefined\r\nfunction isWeakMap (obj) {\r\n return supportWeakMap && obj instanceof WeakMap\r\n}\r\n\r\nexport default isWeakMap\r\n","/* eslint-disable valid-typeof */\r\nimport staticStrUndefined from './staticStrUndefined'\r\n\r\n/**\r\n * 判断是否Set对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar supportSet = typeof Set !== staticStrUndefined\r\nfunction isSet (obj) {\r\n return supportSet && obj instanceof Set\r\n}\r\n\r\nexport default isSet\r\n","/* eslint-disable valid-typeof */\r\nimport staticStrUndefined from './staticStrUndefined'\r\n\r\n/**\r\n * 判断是否WeakSet对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nvar supportWeakSet = typeof WeakSet !== staticStrUndefined\r\nfunction isWeakSet (obj) {\r\n return supportWeakSet && obj instanceof WeakSet\r\n}\r\n\r\nexport default isWeakSet\r\n","import isFunction from './isFunction'\r\nimport isString from './isString'\r\nimport isArray from './isArray'\r\nimport hasOwnProp from './hasOwnProp'\r\n\r\nfunction helperCreateiterateIndexOf (callback) {\r\n return function (obj, iterate, context) {\r\n if (obj && isFunction(iterate)) {\r\n if (isArray(obj) || isString(obj)) {\r\n return callback(obj, iterate, context)\r\n }\r\n for (var key in obj) {\r\n if (hasOwnProp(obj, key)) {\r\n if (iterate.call(context, obj[key], key, obj)) {\r\n return key\r\n }\r\n }\r\n }\r\n }\r\n return -1\r\n }\r\n}\r\n\r\nexport default helperCreateiterateIndexOf\r\n","import helperCreateiterateIndexOf from './helperCreateiterateIndexOf'\r\n\r\n/**\r\n * 返回对象第一个索引值\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @param {Object} context 上下文\r\n * @return {Object}\r\n */\r\nvar findIndexOf = helperCreateiterateIndexOf(function (obj, iterate, context) {\r\n for (var index = 0, len = obj.length; index < len; index++) {\r\n if (iterate.call(context, obj[index], index, obj)) {\r\n return index\r\n }\r\n }\r\n return -1\r\n})\r\n\r\nexport default findIndexOf\r\n","import isNumber from './isNumber'\r\nimport isArray from './isArray'\r\nimport isString from './isString'\r\nimport isRegExp from './isRegExp'\r\nimport isDate from './isDate'\r\nimport isBoolean from './isBoolean'\r\nimport isUndefined from './isUndefined'\r\nimport keys from './keys'\r\n\r\nimport every from './every'\r\n\r\nfunction helperEqualCompare (val1, val2, compare, func, key, obj1, obj2) {\r\n if (val1 === val2) {\r\n return true\r\n }\r\n if (val1 && val2 && !isNumber(val1) && !isNumber(val2) && !isString(val1) && !isString(val2)) {\r\n if (isRegExp(val1)) {\r\n return compare('' + val1, '' + val2, key, obj1, obj2)\r\n } if (isDate(val1) || isBoolean(val1)) {\r\n return compare(+val1, +val2, key, obj1, obj2)\r\n } else {\r\n var result, val1Keys, val2Keys\r\n var isObj1Arr = isArray(val1)\r\n var isObj2Arr = isArray(val2)\r\n if (isObj1Arr || isObj2Arr ? isObj1Arr && isObj2Arr : val1.constructor === val2.constructor) {\r\n val1Keys = keys(val1)\r\n val2Keys = keys(val2)\r\n if (func) {\r\n result = func(val1, val2, key)\r\n }\r\n if (val1Keys.length === val2Keys.length) {\r\n return isUndefined(result) ? every(val1Keys, function (key, index) {\r\n return key === val2Keys[index] && helperEqualCompare(val1[key], val2[val2Keys[index]], compare, func, isObj1Arr || isObj2Arr ? index : key, val1, val2)\r\n }) : !!result\r\n }\r\n return false\r\n }\r\n }\r\n }\r\n return compare(val1, val2, key, obj1, obj2)\r\n}\r\n\r\nexport default helperEqualCompare\r\n","function helperDefaultCompare (v1, v2) {\r\n return v1 === v2\r\n}\r\n\r\nexport default helperDefaultCompare\r\n","import helperEqualCompare from './helperEqualCompare'\r\nimport helperDefaultCompare from './helperDefaultCompare'\r\n\r\n/**\r\n * 深度比较两个对象之间的值是否相等\r\n *\r\n * @param {Object} obj1 值1\r\n * @param {Object} obj2 值2\r\n * @return {Boolean}\r\n */\r\nfunction isEqual (obj1, obj2) {\r\n return helperEqualCompare(obj1, obj2, helperDefaultCompare)\r\n}\r\n\r\nexport default isEqual\r\n","import helperCreateiterateIndexOf from './helperCreateiterateIndexOf'\r\n\r\n/**\r\n * 从最后开始的索引值,返回对象第一个索引值\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @param {Object} context 上下文\r\n * @return {Object}\r\n */\r\nvar findLastIndexOf = helperCreateiterateIndexOf(function (obj, iterate, context) {\r\n for (var len = obj.length - 1; len >= 0; len--) {\r\n if (iterate.call(context, obj[len], len, obj)) {\r\n return len\r\n }\r\n }\r\n return -1\r\n})\r\n\r\nexport default findLastIndexOf\r\n","import helperCreateGetObjects from './helperCreateGetObjects'\r\n\r\n/**\r\n * 获取对象所有属性、值\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @return {Array}\r\n */\r\nvar entries = helperCreateGetObjects('entries', 2)\r\n\r\nexport default entries\r\n","import isFunction from './isFunction'\r\nimport isArray from './isArray'\r\nimport each from './each'\r\nimport findIndexOf from './findIndexOf'\r\n\r\nfunction helperCreatePickOmit (case1, case2) {\r\n return function (obj, callback) {\r\n var item, index\r\n var rest = {}\r\n var result = []\r\n var context = this\r\n var args = arguments\r\n var len = args.length\r\n if (!isFunction(callback)) {\r\n for (index = 1; index < len; index++) {\r\n item = args[index]\r\n result.push.apply(result, isArray(item) ? item : [item])\r\n }\r\n callback = 0\r\n }\r\n each(obj, function (val, key) {\r\n if ((callback ? callback.call(context, val, key, obj) : findIndexOf(result, function (name) {\r\n return name === key\r\n }) > -1) ? case1 : case2) {\r\n rest[key] = val\r\n }\r\n })\r\n return rest\r\n }\r\n}\r\n\r\nexport default helperCreatePickOmit\r\n","import helperCreatePickOmit from './helperCreatePickOmit'\r\n\r\n/**\r\n * 根据 key 过滤指定的属性值,返回一个新的对象\r\n *\r\n * @param {Object} obj 对象\r\n * @param {String/Array} key 键数组\r\n * @return {Object}\r\n */\r\nvar pick = helperCreatePickOmit(1, 0)\r\n\r\nexport default pick\r\n","import helperCreatePickOmit from './helperCreatePickOmit'\r\n\r\n/**\r\n * 根据 key 排除指定的属性值,返回一个新的对象\r\n *\r\n * @param {Object} obj 对象\r\n * @param {String/Array} key 键数组\r\n * @return {Object}\r\n */\r\nvar omit = helperCreatePickOmit(0, 1)\r\n\r\nexport default omit\r\n","import staticParseInt from './staticParseInt'\r\n\r\nimport helperGetHGSKeys from './helperGetHGSKeys'\r\nimport helperCheckCopyKey from './helperCheckCopyKey'\r\n\r\nimport hasOwnProp from './hasOwnProp'\r\n\r\nvar sKeyRE = /(.+)?\\[(\\d+)\\]$/\r\n\r\nfunction setDeepProps (obj, key, isEnd, nextKey, value) {\r\n if (obj[key]) {\r\n if (isEnd) {\r\n obj[key] = value\r\n }\r\n } else {\r\n var index\r\n var rest\r\n var currMatchs = key ? key.match(sKeyRE) : null\r\n if (isEnd) {\r\n rest = value\r\n } else {\r\n var nextMatchs = nextKey ? nextKey.match(sKeyRE) : null\r\n if (nextMatchs && !nextMatchs[1]) {\r\n // 如果下一个属性为数组类型\r\n rest = new Array(staticParseInt(nextMatchs[2]) + 1)\r\n } else {\r\n rest = {}\r\n }\r\n }\r\n if (currMatchs) {\r\n if (currMatchs[1]) {\r\n // 如果为对象中数组\r\n index = staticParseInt(currMatchs[2])\r\n if (obj[currMatchs[1]]) {\r\n if (isEnd) {\r\n obj[currMatchs[1]][index] = rest\r\n } else {\r\n if (obj[currMatchs[1]][index]) {\r\n rest = obj[currMatchs[1]][index]\r\n } else {\r\n obj[currMatchs[1]][index] = rest\r\n }\r\n }\r\n } else {\r\n obj[currMatchs[1]] = new Array(index + 1)\r\n obj[currMatchs[1]][index] = rest\r\n }\r\n } else {\r\n // 如果为数组\r\n obj[currMatchs[2]] = rest\r\n }\r\n } else {\r\n // 如果为对象\r\n obj[key] = rest\r\n }\r\n return rest\r\n }\r\n return obj[key]\r\n}\r\n\r\n/**\r\n * 设置对象属性上的值。如果属性不存在则创建它\r\n * @param {Object/Array} obj 对象\r\n * @param {String/Function} property 键、路径\r\n * @param {Object} value 值\r\n */\r\nfunction set (obj, property, value) {\r\n if (obj && helperCheckCopyKey(property)) {\r\n if ((obj[property] || hasOwnProp(obj, property)) && !isPrototypePolluted(property)) {\r\n obj[property] = value\r\n } else {\r\n var rest = obj\r\n var props = helperGetHGSKeys(property)\r\n var len = props.length\r\n for (var index = 0; index < len; index++) {\r\n if (isPrototypePolluted(props[index])) {\r\n continue\r\n }\r\n var isEnd = index === len - 1\r\n rest = setDeepProps(rest, props[index], isEnd, isEnd ? null : props[index + 1], value)\r\n }\r\n }\r\n }\r\n return obj\r\n}\r\n\r\n/**\r\n * Blacklist certain keys to prevent Prototype Pollution\r\n * @param {string} key\r\n */\r\nfunction isPrototypePolluted(key) {\r\n return key === '__proto__' || key === 'constructor' || key === 'prototype'\r\n}\r\n\r\nexport default set\r\n","import isEmpty from './isEmpty'\r\nimport isObject from './isObject'\r\nimport isFunction from './isFunction'\r\nimport property from './property'\r\nimport each from './each'\r\n\r\nfunction createiterateEmpty (iterate) {\r\n return function () {\r\n return isEmpty(iterate)\r\n }\r\n}\r\n\r\n/**\r\n * 集合分组,默认使用键值分组,如果有iterate则使用结果进行分组\r\n *\r\n * @param {Array} obj 对象\r\n * @param {Function} iterate 回调/对象属性\r\n * @param {Object} context 上下文\r\n * @return {Object}\r\n */\r\nfunction groupBy (obj, iterate, context) {\r\n var groupKey\r\n var result = {}\r\n if (obj) {\r\n if (iterate && isObject(iterate)) {\r\n iterate = createiterateEmpty(iterate)\r\n } else if (!isFunction(iterate)) {\r\n iterate = property(iterate)\r\n }\r\n each(obj, function (val, key) {\r\n groupKey = iterate ? iterate.call(context, val, key, obj) : val\r\n if (result[groupKey]) {\r\n result[groupKey].push(val)\r\n } else {\r\n result[groupKey] = [val]\r\n }\r\n })\r\n }\r\n return result\r\n}\r\n\r\nexport default groupBy\r\n","/**\r\n * 序号列表生成函数\r\n *\r\n * @param {Number} start 起始值\r\n * @param {Number} stop 结束值\r\n * @param {Number} step 自增值\r\n * @return {Array}\r\n */\r\nfunction range (start, stop, step) {\r\n var index, len\r\n var result = []\r\n var args = arguments\r\n if (args.length < 2) {\r\n stop = args[0]\r\n start = 0\r\n }\r\n index = start >> 0\r\n len = stop >> 0\r\n if (index < stop) {\r\n step = step >> 0 || 1\r\n for (; index < len; index += step) {\r\n result.push(index)\r\n }\r\n }\r\n return result\r\n}\r\n\r\nexport default range\r\n","import helperCreateMinMax from './helperCreateMinMax'\r\n\r\n/**\r\n * 获取最小值\r\n *\r\n * @param {Array} arr 数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @return {Number}\r\n */\r\nvar min = helperCreateMinMax(function (rest, itemVal) {\r\n return rest > itemVal\r\n})\r\n\r\nexport default min\r\n","function helperNumberDecimal (numStr) {\r\n return (numStr.split('.')[1] || '').length\r\n}\r\n\r\nexport default helperNumberDecimal\r\n","import staticParseInt from './staticParseInt'\r\n\r\nfunction helperStringRepeat (str, count) {\r\n if (str.repeat) {\r\n return str.repeat(count)\r\n }\r\n var list = isNaN(count) ? [] : new Array(staticParseInt(count))\r\n return list.join(str) + (list.length > 0 ? str : '')\r\n}\r\n\r\nexport default helperStringRepeat\r\n","function helperNumberOffsetPoint (str, offsetIndex) {\r\n return str.substring(0, offsetIndex) + '.' + str.substring(offsetIndex, str.length)\r\n}\r\n\r\nexport default helperNumberOffsetPoint\r\n","import helperStringRepeat from './helperStringRepeat'\r\nimport helperNumberOffsetPoint from './helperNumberOffsetPoint'\r\n\r\n/**\r\n * 数值转字符串,科学计数转字符串\r\n * @param { Number } num 数值\r\n *\r\n * @return {Number}\r\n */\r\nfunction toNumberString(num) {\r\n var rest = '' + num\r\n var scienceMatchs = rest.match(/^([-+]?)((\\d+)|((\\d+)?[.](\\d+)?))e([-+]{1})([0-9]+)$/)\r\n if (scienceMatchs) {\r\n var isNegative = num < 0\r\n var absFlag = isNegative ? '-' : ''\r\n var intNumStr = scienceMatchs[3] || ''\r\n var dIntNumStr = scienceMatchs[5] || ''\r\n var dFloatNumStr = scienceMatchs[6] || ''\r\n var sciencFlag = scienceMatchs[7]\r\n var scienceNumStr = scienceMatchs[8]\r\n var floatOffsetIndex = scienceNumStr - dFloatNumStr.length\r\n var intOffsetIndex = scienceNumStr - intNumStr.length\r\n var dIntOffsetIndex = scienceNumStr - dIntNumStr.length\r\n if (sciencFlag === '+') {\r\n if (intNumStr) {\r\n return absFlag + intNumStr + helperStringRepeat('0', scienceNumStr)\r\n }\r\n if (floatOffsetIndex > 0) {\r\n return absFlag + dIntNumStr + dFloatNumStr + helperStringRepeat('0', floatOffsetIndex)\r\n }\r\n return absFlag + dIntNumStr + helperNumberOffsetPoint(dFloatNumStr, scienceNumStr)\r\n }\r\n if (intNumStr) {\r\n if (intOffsetIndex > 0) {\r\n return absFlag + '0.' + helperStringRepeat('0', Math.abs(intOffsetIndex)) + intNumStr\r\n }\r\n return absFlag + helperNumberOffsetPoint(intNumStr, intOffsetIndex)\r\n }\r\n if (dIntOffsetIndex > 0) {\r\n return absFlag + '0.' + helperStringRepeat('0', Math.abs(dIntOffsetIndex)) + dIntNumStr + dFloatNumStr\r\n }\r\n return absFlag + helperNumberOffsetPoint(dIntNumStr, dIntOffsetIndex) + dFloatNumStr\r\n }\r\n return rest\r\n}\r\n\r\nexport default toNumberString\r\n","import helperNumberDecimal from './helperNumberDecimal'\r\nimport toNumberString from './toNumberString'\r\n\r\nfunction helperMultiply (multiplier, multiplicand) {\r\n var str1 = toNumberString(multiplier)\r\n var str2 = toNumberString(multiplicand)\r\n return parseInt(str1.replace('.', '')) * parseInt(str2.replace('.', '')) / Math.pow(10, helperNumberDecimal(str1) + helperNumberDecimal(str2))\r\n}\r\n\r\nexport default helperMultiply\r\n","import helperMultiply from './helperMultiply'\r\n\r\nimport toNumber from './toNumber'\r\nimport toNumberString from './toNumberString'\r\n\r\nfunction helperCreateMathNumber(name) {\r\n return function (num, digits) {\r\n var numRest = toNumber(num)\r\n var rest = numRest\r\n if (numRest) {\r\n digits = digits >> 0\r\n var numStr = toNumberString(numRest)\r\n var nums = numStr.split('.')\r\n var intStr = nums[0]\r\n var floatStr = nums[1] || ''\r\n var fStr = floatStr.substring(0, digits + 1)\r\n var subRest = intStr + (fStr ? ('.' + fStr) : '')\r\n if (digits >= floatStr.length) {\r\n return toNumber(subRest)\r\n }\r\n subRest = numRest\r\n if (digits > 0) {\r\n var ratio = Math.pow(10, digits)\r\n rest = Math[name](helperMultiply(subRest, ratio)) / ratio\r\n } else {\r\n rest = Math[name](subRest)\r\n }\r\n }\r\n return rest\r\n }\r\n}\r\n\r\nexport default helperCreateMathNumber\r\n","import helperCreateMathNumber from './helperCreateMathNumber'\r\n\r\n/**\r\n * 将数值四舍五入\r\n *\r\n * @param {string|number} num 数值\r\n * @param {number} digits 小数保留位数\r\n * @return {number}\r\n */\r\nvar round = helperCreateMathNumber('round')\r\n\r\nexport default round\r\n","import helperCreateMathNumber from './helperCreateMathNumber'\r\n\r\n/**\r\n * 将数值向上舍入\r\n *\r\n * @param {string|number} num 数值\r\n * @param {number} digits 小数保留位数\r\n * @return {number}\r\n */\r\nvar ceil = helperCreateMathNumber('ceil')\r\n\r\nexport default ceil\r\n","import helperCreateMathNumber from './helperCreateMathNumber'\r\n\r\n/**\r\n * 将数值向下舍入\r\n *\r\n * @param {string|number} num 数值\r\n * @param {number} digits 小数保留位数\r\n * @return {number}\r\n */\r\nvar floor = helperCreateMathNumber('floor')\r\n\r\nexport default floor\r\n","import eqNull from './eqNull'\r\nimport isNumber from './isNumber'\r\nimport toNumberString from './toNumberString'\r\n\r\nfunction toValueString (obj) {\r\n if (isNumber(obj)) {\r\n return toNumberString(obj)\r\n }\r\n return '' + (eqNull(obj) ? '' : obj)\r\n}\r\n\r\nexport default toValueString\r\n","import round from './round'\r\nimport toValueString from './toValueString'\r\n\r\nimport helperStringRepeat from './helperStringRepeat'\r\nimport helperNumberOffsetPoint from './helperNumberOffsetPoint'\r\n\r\n/**\r\n * 将数值四舍五入并格式化为固定小数位的字符串\r\n *\r\n * @param {string|number} num 数值\r\n * @param {number} digits 小数保留位数\r\n * @return {String}\r\n */\r\nfunction toFixed (num, digits) {\r\n digits = digits >> 0\r\n var str = toValueString(round(num, digits))\r\n var nums = str.split('.')\r\n var intStr = nums[0]\r\n var floatStr = nums[1] || ''\r\n var digitOffsetIndex = digits - floatStr.length\r\n if (digits) {\r\n if (digitOffsetIndex > 0) {\r\n return intStr + '.' + floatStr + helperStringRepeat('0', digitOffsetIndex)\r\n }\r\n return intStr + helperNumberOffsetPoint(floatStr, Math.abs(digitOffsetIndex))\r\n }\r\n return intStr\r\n}\r\n\r\nexport default toFixed\r\n","import staticParseInt from './staticParseInt'\r\n\r\nimport helperCreateToNumber from './helperCreateToNumber'\r\n\r\n/**\r\n * 转整数\r\n * @param { String/Number } str 数值\r\n *\r\n * @return {Number}\r\n */\r\nvar toInteger = helperCreateToNumber(staticParseInt)\r\n\r\nexport default toInteger\r\n","import helperMultiply from './helperMultiply'\r\n\r\nimport toNumber from './toNumber'\r\n\r\n/**\r\n * 乘法运算\r\n *\r\n * @param { Number } num1 数值1\r\n * @param { Number } num2 数值2\r\n * @return {Number}\r\n */\r\nfunction multiply (num1, num2) {\r\n var multiplier = toNumber(num1)\r\n var multiplicand = toNumber(num2)\r\n return helperMultiply(multiplier, multiplicand)\r\n}\r\n\r\nexport default multiply\r\n","import helperNumberDecimal from './helperNumberDecimal'\r\nimport toNumberString from './toNumberString'\r\nimport multiply from './multiply'\r\n\r\nfunction helperNumberAdd (addend, augend) {\r\n var str1 = toNumberString(addend)\r\n var str2 = toNumberString(augend)\r\n var ratio = Math.pow(10, Math.max(helperNumberDecimal(str1), helperNumberDecimal(str2)))\r\n return (multiply(addend, ratio) + multiply(augend, ratio)) / ratio\r\n}\r\n\r\nexport default helperNumberAdd\r\n","import helperNumberDecimal from './helperNumberDecimal'\r\nimport toNumberString from './toNumberString'\r\nimport multiply from './multiply'\r\n\r\nfunction helperNumberDivide (divisor, dividend) {\r\n var str1 = toNumberString(divisor)\r\n var str2 = toNumberString(dividend)\r\n var divisorDecimal = helperNumberDecimal(str1)\r\n var dividendDecimal = helperNumberDecimal(str2)\r\n var powY = dividendDecimal - divisorDecimal\r\n var isMinus = powY < 0\r\n var multiplicand = Math.pow(10, isMinus ? Math.abs(powY) : powY)\r\n return multiply(str1.replace('.', '') / str2.replace('.', ''), isMinus ? 1 / multiplicand : multiplicand)\r\n}\r\n\r\nexport default helperNumberDivide\r\n","import helperNumberAdd from './helperNumberAdd'\r\n\r\nimport isFunction from './isFunction'\r\nimport isArray from './isArray'\r\nimport each from './each'\r\nimport get from './get'\r\n\r\n/**\r\n * 求和函数,将数值相加\r\n *\r\n * @param {Array} array 数组\r\n * @param {Function/String} iterate 方法或属性\r\n * @param {Object} context 上下文\r\n * @return {Number}\r\n */\r\nfunction sum (array, iterate, context) {\r\n var result = 0\r\n each(array && array.length > 2 && isArray(array) ? array.sort() : array, iterate ? isFunction(iterate) ? function () {\r\n result = helperNumberAdd(result, iterate.apply(context, arguments))\r\n } : function (val) {\r\n result = helperNumberAdd(result, get(val, iterate))\r\n } : function (val) {\r\n result = helperNumberAdd(result, val)\r\n })\r\n return result\r\n}\r\n\r\nexport default sum\r\n","var staticStrFirst = 'first'\r\n\r\nexport default staticStrFirst\r\n","var staticStrLast = 'last'\r\n\r\nexport default staticStrLast\r\n","function helperGetDateFullYear (date) {\r\n return date.getFullYear()\r\n}\r\n\r\nexport default helperGetDateFullYear\r\n","var staticDayTime = 86400000\r\n\r\nexport default staticDayTime\r\n","function helperGetDateMonth (date) {\r\n return date.getMonth()\r\n}\r\n\r\nexport default helperGetDateMonth\r\n","import isDate from './isDate'\r\nimport helperGetDateTime from './helperGetDateTime'\r\n\r\n/**\r\n * 判断是否有效的Date对象\r\n *\r\n * @param {any} val 对象\r\n * @return {boolean}\r\n */\r\nfunction isValidDate (val) {\r\n return isDate(val) && !isNaN(helperGetDateTime(val))\r\n}\r\n\r\nexport default isValidDate\r\n","import staticStrFirst from './staticStrFirst'\r\nimport staticStrLast from './staticStrLast'\r\nimport staticDayTime from './staticDayTime'\r\n\r\nimport helperGetDateFullYear from './helperGetDateFullYear'\r\nimport helperGetDateTime from './helperGetDateTime'\r\nimport helperGetDateMonth from './helperGetDateMonth'\r\n\r\nimport toStringDate from './toStringDate'\r\nimport isValidDate from './isValidDate'\r\nimport isNumber from './isNumber'\r\n\r\n/**\r\n * 返回前几月或后几月的日期\r\n *\r\n * @param {Date} date 日期或数字\r\n * @param {Number} offsetMonth 月(默认当前月)、前几个月、后几个月\r\n * @param {Number/String} offsetDay 获取哪天:月初(first)、月末(last)、指定天数(数值),如果为空,但超过指定月份的天数时,则默认单月最后一天\r\n * @return {Date}\r\n */\r\nfunction getWhatMonth (date, offsetMonth, offsetDay) {\r\n var monthNum = offsetMonth && !isNaN(offsetMonth) ? offsetMonth : 0\r\n date = toStringDate(date)\r\n if (isValidDate(date)) {\r\n if (offsetDay === staticStrFirst) {\r\n return new Date(helperGetDateFullYear(date), helperGetDateMonth(date) + monthNum, 1)\r\n } else if (offsetDay === staticStrLast) {\r\n return new Date(helperGetDateTime(getWhatMonth(date, monthNum + 1, staticStrFirst)) - 1)\r\n } else if (isNumber(offsetDay)) {\r\n date.setDate(offsetDay)\r\n }\r\n if (monthNum) {\r\n var currDate = date.getDate()\r\n date.setMonth(helperGetDateMonth(date) + monthNum)\r\n if (currDate !== date.getDate()) {\r\n // 当为指定天数,且被跨月了,则默认单月最后一天\r\n date.setDate(1)\r\n return new Date(helperGetDateTime(date) - staticDayTime)\r\n }\r\n }\r\n }\r\n return date\r\n}\r\n\r\nexport default getWhatMonth\r\n","import staticStrFirst from './staticStrFirst'\r\nimport staticStrLast from './staticStrLast'\r\n\r\nimport helperGetDateFullYear from './helperGetDateFullYear'\r\n\r\nimport getWhatMonth from './getWhatMonth'\r\nimport toStringDate from './toStringDate'\r\nimport isValidDate from './isValidDate'\r\n\r\n/**\r\n * 返回前几年或后几年的日期\r\n *\r\n * @param {Date} date 日期或数字\r\n * @param {Number} offset 年(默认当前年)、前几个年(数值)、后几个年(数值)\r\n * @param {Number/String} month 获取哪月(null默认当前年)、年初(first)、年末(last)、指定月份(0-11)\r\n * @return {Date}\r\n */\r\nfunction getWhatYear (date, offset, month) {\r\n var number\r\n date = toStringDate(date)\r\n if (isValidDate(date)) {\r\n if (offset) {\r\n number = offset && !isNaN(offset) ? offset : 0\r\n date.setFullYear(helperGetDateFullYear(date) + number)\r\n }\r\n if (month || !isNaN(month)) {\r\n if (month === staticStrFirst) {\r\n return new Date(helperGetDateFullYear(date), 0, 1)\r\n } else if (month === staticStrLast) {\r\n date.setMonth(11)\r\n return getWhatMonth(date, 0, staticStrLast)\r\n } else {\r\n date.setMonth(month)\r\n }\r\n }\r\n }\r\n return date\r\n}\r\n\r\nexport default getWhatYear\r\n","import staticDayTime from './staticDayTime'\r\n\r\nvar staticWeekTime = staticDayTime * 7\r\n\r\nexport default staticWeekTime\r\n","import setupDefaults from './setupDefaults'\r\n\r\nimport staticDayTime from './staticDayTime'\r\nimport staticWeekTime from './staticWeekTime'\r\n\r\nimport helperGetDateTime from './helperGetDateTime'\r\n\r\nimport toStringDate from './toStringDate'\r\n\r\nimport isValidDate from './isValidDate'\r\nimport isNumber from './isNumber'\r\n\r\n/**\r\n * 返回前几周或后几周的星期几\r\n *\r\n * @param {Date} date 日期\r\n * @param {Number} offsetWeek 周(默认当前周)、前几周、后几周\r\n * @param {Number} offsetDay 星期天(默认0)、星期一(1)、星期二(2)、星期三(3)、星期四(4)、星期五(5)、星期六(6)\r\n * @param {Number} firstDay 周视图的起始天,默认星期一\r\n * @return {Date}\r\n */\r\nfunction getWhatWeek (date, offsetWeek, offsetDay, firstDay) {\r\n date = toStringDate(date)\r\n if (isValidDate(date)) {\r\n var hasCustomDay = isNumber(offsetDay)\r\n var hasStartDay = isNumber(firstDay)\r\n var whatDayTime = helperGetDateTime(date)\r\n // 如果指定了天或周视图起始天\r\n if (hasCustomDay || hasStartDay) {\r\n var viewStartDay = hasStartDay ? firstDay : setupDefaults.firstDayOfWeek\r\n var currentDay = date.getDay()\r\n var customDay = hasCustomDay ? offsetDay : currentDay\r\n if (currentDay !== customDay) {\r\n var offsetNum = 0\r\n if (viewStartDay > currentDay) {\r\n offsetNum = -(7 - viewStartDay + currentDay)\r\n } else if (viewStartDay < currentDay) {\r\n offsetNum = viewStartDay - currentDay\r\n }\r\n if (customDay > viewStartDay) {\r\n whatDayTime += ((customDay === 0 ? 7 : customDay) - viewStartDay + offsetNum) * staticDayTime\r\n } else if (customDay < viewStartDay) {\r\n whatDayTime += (7 - viewStartDay + customDay + offsetNum) * staticDayTime\r\n } else {\r\n whatDayTime += offsetNum * staticDayTime\r\n }\r\n }\r\n }\r\n if (offsetWeek && !isNaN(offsetWeek)) {\r\n whatDayTime += offsetWeek * staticWeekTime\r\n }\r\n return new Date(whatDayTime)\r\n }\r\n return date\r\n}\r\n\r\nexport default getWhatWeek\r\n","import staticStrFirst from './staticStrFirst'\r\nimport staticStrLast from './staticStrLast'\r\nimport staticParseInt from './staticParseInt'\r\n\r\nimport helperGetDateFullYear from './helperGetDateFullYear'\r\nimport helperGetDateMonth from './helperGetDateMonth'\r\nimport helperGetDateTime from './helperGetDateTime'\r\n\r\nimport toStringDate from './toStringDate'\r\nimport isValidDate from './isValidDate'\r\n\r\n/**\r\n * 返回前几天或后几天的日期\r\n *\r\n * @param {Date} date 日期或数字\r\n * @param {Number} offset 天偏移量(默认0)、前几天、后几天\r\n * @param {String} mode 指定小时(null默认当前分)、0时(first)、23时(last)\r\n * @return {Date}\r\n */\r\nfunction getWhatDay (date, offset, mode) {\r\n date = toStringDate(date)\r\n if (isValidDate(date) && !isNaN(offset)) {\r\n date.setDate(date.getDate() + staticParseInt(offset))\r\n if (mode === staticStrFirst) {\r\n return new Date(helperGetDateFullYear(date), helperGetDateMonth(date), date.getDate())\r\n } else if (mode === staticStrLast) {\r\n return new Date(helperGetDateTime(getWhatDay(date, 1, staticStrFirst)) - 1)\r\n }\r\n }\r\n return date\r\n}\r\n\r\nexport default getWhatDay\r\n","function helperStringUpperCase (str) {\r\n return str.toUpperCase()\r\n}\r\n\r\nexport default helperStringUpperCase\r\n","import setupDefaults from './setupDefaults'\r\n\r\nimport staticDayTime from './staticDayTime'\r\nimport staticWeekTime from './staticWeekTime'\r\n\r\nimport isNumber from './isNumber'\r\nimport includes from './includes'\r\nimport toStringDate from './toStringDate'\r\nimport isValidDate from './isValidDate'\r\nimport getWhatWeek from './getWhatWeek'\r\nimport range from './range'\r\nimport map from './map'\r\n\r\nimport helperGetDateTime from './helperGetDateTime'\r\n\r\nvar nextStartMaps = map(range(0, 7), function (day) {\r\n return [(day + 1) % 7, (day + 2) % 7, (day + 3) % 7]\r\n})\r\n\r\nfunction matchWeekStartDay (time, viewStartDay) {\r\n var day = new Date(time).getDay()\r\n return includes(nextStartMaps[viewStartDay], day)\r\n}\r\n\r\nfunction helperCreateGetDateWeek (getStartDate, checkCrossDate) {\r\n return function (date, firstDay) {\r\n var viewStartDay = isNumber(firstDay) ? firstDay : setupDefaults.firstDayOfWeek\r\n var targetDate = toStringDate(date)\r\n if (isValidDate(targetDate)) {\r\n var targetWeekStartDate = getWhatWeek(targetDate, 0, viewStartDay, viewStartDay)\r\n var firstDate = getStartDate(targetWeekStartDate)\r\n var firstTime = helperGetDateTime(firstDate)\r\n var targetWeekStartTime = helperGetDateTime(targetWeekStartDate)\r\n var targetWeekEndTime = targetWeekStartTime + staticDayTime * 6\r\n var targetWeekEndDate = new Date(targetWeekEndTime)\r\n var firstWeekStartDate = getWhatWeek(firstDate, 0, viewStartDay, viewStartDay)\r\n var firstWeekStartTime = helperGetDateTime(firstWeekStartDate)\r\n var tempTime\r\n if (targetWeekStartTime === firstWeekStartTime) {\r\n return 1\r\n }\r\n if (checkCrossDate(targetWeekStartDate, targetWeekEndDate)) {\r\n tempTime = helperGetDateTime(getStartDate(targetWeekEndDate))\r\n for (; tempTime < targetWeekEndTime; tempTime += staticDayTime) {\r\n if (matchWeekStartDay(tempTime, viewStartDay)) {\r\n return 1\r\n }\r\n }\r\n }\r\n var firstWeekEndTime = firstWeekStartTime + staticDayTime * 6\r\n var firstWeekEndDate = new Date(targetWeekEndTime)\r\n var offsetNum = 1\r\n if (checkCrossDate(firstWeekStartDate, firstWeekEndDate)) {\r\n offsetNum = 0\r\n tempTime = firstTime\r\n for (; tempTime < firstWeekEndTime; tempTime += staticDayTime) {\r\n if (matchWeekStartDay(tempTime, viewStartDay)) {\r\n offsetNum++\r\n break\r\n }\r\n }\r\n }\r\n return Math.floor((targetWeekStartTime - firstWeekStartTime) / staticWeekTime) + offsetNum\r\n }\r\n return NaN\r\n }\r\n}\r\n\r\nexport default helperCreateGetDateWeek\r\n","import helperCreateGetDateWeek from './helperCreateGetDateWeek'\r\n\r\n/**\r\n * 返回某个年份的第几周\r\n *\r\n * @param {Date} date 日期或数字\r\n * @param {Number} firstDay 从年初的星期几为起始开始周开始算,默认星期一\r\n * @return {Number}\r\n */\r\nvar getYearWeek = helperCreateGetDateWeek(function (targetDate) {\r\n return new Date(targetDate.getFullYear(), 0, 1)\r\n}, function (date1, date2) {\r\n return date1.getFullYear() !== date2.getFullYear()\r\n})\r\n\r\nexport default getYearWeek\r\n","import helperGetDateTime from './helperGetDateTime'\r\nimport helperGetYMD from './helperGetYMD'\r\n\r\nfunction helperGetYMDTime (date) {\r\n return helperGetDateTime(helperGetYMD(date))\r\n}\r\n\r\nexport default helperGetYMDTime\r\n","import helperGetDateFullYear from './helperGetDateFullYear'\r\nimport helperGetDateMonth from './helperGetDateMonth'\r\n\r\nfunction helperGetYMD (date) {\r\n return new Date(helperGetDateFullYear(date), helperGetDateMonth(date), date.getDate())\r\n}\r\n\r\nexport default helperGetYMD\r\n","import staticDayTime from './staticDayTime'\r\nimport staticStrFirst from './staticStrFirst'\r\n\r\nimport helperGetYMDTime from './helperGetYMDTime'\r\n\r\nimport getWhatYear from './getWhatYear'\r\nimport toStringDate from './toStringDate'\r\n\r\nimport isValidDate from './isValidDate'\r\n\r\n/**\r\n * 返回某个年份的第几天\r\n *\r\n * @param {Date} date 日期或数字\r\n * @return {Number}\r\n */\r\nfunction getYearDay (date) {\r\n date = toStringDate(date)\r\n if (isValidDate(date)) {\r\n return Math.floor((helperGetYMDTime(date) - helperGetYMDTime(getWhatYear(date, 0, staticStrFirst))) / staticDayTime) + 1\r\n }\r\n return NaN\r\n}\r\n\r\nexport default getYearDay\r\n","import toValueString from './toValueString'\r\n\r\nimport isUndefined from './isUndefined'\r\n\r\nimport helperStringRepeat from './helperStringRepeat'\r\n\r\n/**\r\n * 用指定字符从前面开始补全字符串\r\n *\r\n * @param {String} str 字符串\r\n * @param {Number} targetLength 结果长度\r\n * @param {Number} padString 补全字符\r\n * @return {String}\r\n */\r\nfunction padStart (str, targetLength, padString) {\r\n var rest = toValueString(str)\r\n targetLength = targetLength >> 0\r\n padString = isUndefined(padString) ? ' ' : '' + padString\r\n if (rest.padStart) {\r\n return rest.padStart(targetLength, padString)\r\n }\r\n if (targetLength > rest.length) {\r\n targetLength -= rest.length\r\n if (targetLength > padString.length) {\r\n padString += helperStringRepeat(padString, targetLength / padString.length)\r\n }\r\n return padString.slice(0, targetLength) + rest\r\n }\r\n return rest\r\n}\r\n\r\nexport default padStart\r\n","import setupDefaults from './setupDefaults'\r\n\r\nimport helperStringUpperCase from './helperStringUpperCase'\r\nimport helperGetDateFullYear from './helperGetDateFullYear'\r\nimport helperGetDateMonth from './helperGetDateMonth'\r\n\r\nimport toStringDate from './toStringDate'\r\nimport getYearWeek from './getYearWeek'\r\nimport getYearDay from './getYearDay'\r\n\r\nimport assign from './assign'\r\n\r\nimport isValidDate from './isValidDate'\r\nimport isFunction from './isFunction'\r\nimport eqNull from './eqNull'\r\n\r\nimport padStart from './padStart'\r\n\r\nfunction handleCustomTemplate (date, formats, match, value) {\r\n var format = formats[match]\r\n if (format) {\r\n if (isFunction(format)) {\r\n return format(value, match, date)\r\n } else {\r\n return format[value]\r\n }\r\n }\r\n return value\r\n}\r\n\r\nvar dateFormatRE = /\\[([^\\]]+)]|y{2,4}|M{1,2}|d{1,2}|H{1,2}|h{1,2}|m{1,2}|s{1,2}|S{1,3}|Z{1,2}|W{1,2}|D{1,3}|[aAeEq]/g\r\n\r\n/**\r\n * 日期格式化为字符串,转义符号 []\r\n *\r\n * @param {Date} date 日期或数字\r\n * @param {String} format 输出日期格式(年份(yy|yyyy)、月份(M|MM自动补0)、天(d|dd自动补0)、12小时制(h|hh自动补0)、24小时制(H|HH自动补0)、分钟(m|mm自动补0)、秒(s|ss自动补0)、毫秒(S|SSS自动补0)、D当年的第几天、a/A上午下午、e/E星期几、w当年的第几周、W当月的第几周、q当年第几个季度、Z时区)\r\n * @param {Object} options {formats: {q: ['日', '一', '二', '三', '四', '五', '六'], E: function (value, match, date) {return '三'}, }} 自定义格式化模板\r\n * @return {String}\r\n */\r\nfunction toDateString (date, format, options) {\r\n if (date) {\r\n date = toStringDate(date)\r\n if (isValidDate(date)) {\r\n var opts = options || {}\r\n var result = format || setupDefaults.parseDateFormat || setupDefaults.formatString\r\n var hours = date.getHours()\r\n var apm = hours < 12 ? 'am' : 'pm'\r\n var formats = assign({}, setupDefaults.parseDateRules || setupDefaults.formatStringMatchs, opts.formats)\r\n var fy = function (match, length) {\r\n return ('' + helperGetDateFullYear(date)).substring(4 - length)\r\n }\r\n var fM = function (match, length) {\r\n return padStart(helperGetDateMonth(date) + 1, length, '0')\r\n }\r\n var fd = function (match, length) {\r\n return padStart(date.getDate(), length, '0')\r\n }\r\n var fH = function (match, length) {\r\n return padStart(hours, length, '0')\r\n }\r\n var fh = function (match, length) {\r\n return padStart(hours <= 12 ? hours : hours - 12, length, '0')\r\n }\r\n var fm = function (match, length) {\r\n return padStart(date.getMinutes(), length, '0')\r\n }\r\n var fs = function (match, length) {\r\n return padStart(date.getSeconds(), length, '0')\r\n }\r\n var fS = function (match, length) {\r\n return padStart(date.getMilliseconds(), length, '0')\r\n }\r\n var fZ = function (match, length) {\r\n var zoneHours = date.getTimezoneOffset() / 60 * -1\r\n return handleCustomTemplate(date, formats, match, (zoneHours >= 0 ? '+' : '-') + padStart(zoneHours, 2, '0') + (length === 1 ? ':' : '') + '00')\r\n }\r\n var fW = function (match, length) {\r\n return padStart(handleCustomTemplate(date, formats, match, getYearWeek(date, eqNull(opts.firstDay) ? setupDefaults.firstDayOfWeek : opts.firstDay)), length, '0')\r\n }\r\n var fD = function (match, length) {\r\n return padStart(handleCustomTemplate(date, formats, match, getYearDay(date)), length, '0')\r\n }\r\n var parseDates = {\r\n yyyy: fy,\r\n yy: fy,\r\n MM: fM,\r\n M: fM,\r\n dd: fd,\r\n d: fd,\r\n HH: fH,\r\n H: fH,\r\n hh: fh,\r\n h: fh,\r\n mm: fm,\r\n m: fm,\r\n ss: fs,\r\n s: fs,\r\n SSS: fS,\r\n S: fS,\r\n ZZ: fZ,\r\n Z: fZ,\r\n WW: fW,\r\n W: fW,\r\n DDD: fD,\r\n D: fD,\r\n a: function (match) {\r\n return handleCustomTemplate(date, formats, match, apm)\r\n },\r\n A: function (match) {\r\n return handleCustomTemplate(date, formats, match, helperStringUpperCase(apm))\r\n },\r\n e: function (match) {\r\n return handleCustomTemplate(date, formats, match, date.getDay())\r\n },\r\n E: function (match) {\r\n return handleCustomTemplate(date, formats, match, date.getDay())\r\n },\r\n q: function (match) {\r\n return handleCustomTemplate(date, formats, match, Math.floor((helperGetDateMonth(date) + 3) / 3))\r\n }\r\n }\r\n return result.replace(dateFormatRE, function (match, skip) {\r\n return skip || (parseDates[match] ? parseDates[match](match, match.length) : match)\r\n })\r\n }\r\n return 'Invalid Date'\r\n }\r\n return ''\r\n}\r\n\r\nexport default toDateString\r\n","import helperGetDateTime from './helperGetDateTime'\r\nimport helperNewDate from './helperNewDate'\r\n\r\n/**\r\n * 返回当前时间戳\r\n *\r\n * @returns Number\r\n */\r\nvar now = Date.now || function () {\r\n return helperGetDateTime(helperNewDate())\r\n}\r\n\r\nexport default now\r\n","import helperCreateGetDateWeek from './helperCreateGetDateWeek'\r\n\r\n/**\r\n * 返回某个月的第几周\r\n *\r\n * @param {Date} date 日期或数字\r\n * @param {Number} firstDay 周视图的起始天,默认星期一\r\n * @return {Number}\r\n */\r\nvar getMonthWeek = helperCreateGetDateWeek(function (targetDate) {\r\n return new Date(targetDate.getFullYear(), targetDate.getMonth(), 1)\r\n}, function (date1, date2) {\r\n return date1.getMonth() !== date2.getMonth()\r\n})\r\n\r\nexport default getMonthWeek\r\n","import helperGetDateTime from './helperGetDateTime'\r\nimport helperNewDate from './helperNewDate'\r\n\r\nimport toStringDate from './toStringDate'\r\n\r\nimport isValidDate from './isValidDate'\r\n\r\nvar dateDiffRules = [\r\n ['yyyy', 31536000000],\r\n ['MM', 2592000000],\r\n ['dd', 86400000],\r\n ['HH', 3600000],\r\n ['mm', 60000],\r\n ['ss', 1000],\r\n ['S', 0]\r\n]\r\n\r\n/**\r\n * 返回两个日期之间差距,如果结束日期小于开始日期done为fasle\r\n *\r\n * @param {Date} startDate 开始日期\r\n * @param {Date} endDate 结束日期或当期日期\r\n * @return {Object}\r\n */\r\nfunction getDateDiff (startDate, endDate) {\r\n var startTime, endTime, item, diffTime, len, index\r\n var result = { done: false, status: false, time: 0 }\r\n startDate = toStringDate(startDate)\r\n endDate = endDate ? toStringDate(endDate) : helperNewDate()\r\n if (isValidDate(startDate) && isValidDate(endDate)) {\r\n startTime = helperGetDateTime(startDate)\r\n endTime = helperGetDateTime(endDate)\r\n if (startTime < endTime) {\r\n diffTime = result.time = endTime - startTime\r\n result.done = true\r\n result.status = true\r\n for (index = 0, len = dateDiffRules.length; index < len; index++) {\r\n item = dateDiffRules[index]\r\n if (diffTime >= item[1]) {\r\n if (index === len - 1) {\r\n result[item[0]] = diffTime || 0\r\n } else {\r\n result[item[0]] = Math.floor(diffTime / item[1])\r\n diffTime -= result[item[0]] * item[1]\r\n }\r\n } else {\r\n result[item[0]] = 0\r\n }\r\n }\r\n }\r\n }\r\n return result\r\n}\r\n\r\nexport default getDateDiff\r\n","import toValueString from './toValueString'\r\n\r\n/**\r\n * 去除字符串右边的空格\r\n *\r\n * @param {String} str 字符串\r\n * @return {String}\r\n */\r\nfunction trimRight (str) {\r\n return str && str.trimRight ? str.trimRight() : toValueString(str).replace(/[\\s\\uFEFF\\xA0]+$/g, '')\r\n}\r\n\r\nexport default trimRight\r\n","import toValueString from './toValueString'\r\n\r\n/**\r\n * 去除字符串左边的空格\r\n *\r\n * @param {String} str 字符串\r\n * @return {String}\r\n */\r\nfunction trimLeft (str) {\r\n return str && str.trimLeft ? str.trimLeft() : toValueString(str).replace(/^[\\s\\uFEFF\\xA0]+/g, '')\r\n}\r\n\r\nexport default trimLeft\r\n","import trimRight from './trimRight'\r\nimport trimLeft from './trimLeft'\r\n\r\n/**\r\n * 去除字符串左右两边的空格\r\n *\r\n * @param {String} str 字符串\r\n * @return {String}\r\n */\r\nfunction trim (str) {\r\n return str && str.trim ? str.trim() : trimRight(trimLeft(str))\r\n}\r\n\r\nexport default trim\r\n","var staticEscapeMap = {\r\n '&': '&',\r\n '<': '<',\r\n '>': '>',\r\n '\"': '"',\r\n \"'\": ''',\r\n '`': '`'\r\n}\r\n\r\nexport default staticEscapeMap\r\n","import toValueString from './toValueString'\r\nimport keys from './keys'\r\n\r\nfunction helperFormatEscaper (dataMap) {\r\n var replaceRegexp = new RegExp('(?:' + keys(dataMap).join('|') + ')', 'g')\r\n return function (str) {\r\n return toValueString(str).replace(replaceRegexp, function (match) {\r\n return dataMap[match]\r\n })\r\n }\r\n}\r\n\r\nexport default helperFormatEscaper\r\n","import staticEscapeMap from './staticEscapeMap'\r\n\r\nimport helperFormatEscaper from './helperFormatEscaper'\r\n\r\n/**\r\n * 转义HTML字符串,替换&, <, >, \", ', `字符\r\n *\r\n * @param {String} str 字符串\r\n * @return {String}\r\n */\r\nvar escape = helperFormatEscaper(staticEscapeMap)\r\n\r\nexport default escape\r\n","import staticEscapeMap from './staticEscapeMap'\r\n\r\nimport helperFormatEscaper from './helperFormatEscaper'\r\n\r\nimport each from './each'\r\n\r\nvar unescapeMap = {}\r\neach(staticEscapeMap, function (item, key) {\r\n unescapeMap[staticEscapeMap[key]] = key\r\n})\r\n\r\n/**\r\n * 反转escape\r\n *\r\n * @param {String} str 字符串\r\n * @return {String}\r\n */\r\nvar unescape = helperFormatEscaper(unescapeMap)\r\n\r\nexport default unescape\r\n","function helperStringSubstring (str, start, end) {\r\n return str.substring(start, end)\r\n}\r\n\r\nexport default helperStringSubstring\r\n","function helperStringLowerCase (str) {\r\n return str.toLowerCase()\r\n}\r\n\r\nexport default helperStringLowerCase\r\n","import toValueString from './toValueString'\r\nimport helperStringSubstring from './helperStringSubstring'\r\nimport helperStringUpperCase from './helperStringUpperCase'\r\nimport helperStringLowerCase from './helperStringLowerCase'\r\n\r\nvar camelCacheMaps = {}\r\n\r\n/**\r\n * 将带字符串转成驼峰字符串,例如: project-name 转为 projectName\r\n *\r\n * @param {String} str 字符串\r\n * @return {String}\r\n */\r\nfunction camelCase (str) {\r\n str = toValueString(str)\r\n if (camelCacheMaps[str]) {\r\n return camelCacheMaps[str]\r\n }\r\n var strLen = str.length\r\n var rest = str.replace(/([-]+)/g, function (text, flag, index) {\r\n return index && index + flag.length < strLen ? '-' : ''\r\n })\r\n strLen = rest.length\r\n rest = rest.replace(/([A-Z]+)/g, function (text, upper, index) {\r\n var upperLen = upper.length\r\n upper = helperStringLowerCase(upper)\r\n if (index) {\r\n if (upperLen > 2 && index + upperLen < strLen) {\r\n return helperStringUpperCase(helperStringSubstring(upper, 0, 1)) + helperStringSubstring(upper, 1, upperLen - 1) + helperStringUpperCase(helperStringSubstring(upper, upperLen - 1, upperLen))\r\n }\r\n return helperStringUpperCase(helperStringSubstring(upper, 0, 1)) + helperStringSubstring(upper, 1, upperLen)\r\n } else {\r\n if (upperLen > 1 && index + upperLen < strLen) {\r\n return helperStringSubstring(upper, 0, upperLen - 1) + helperStringUpperCase(helperStringSubstring(upper, upperLen - 1, upperLen))\r\n }\r\n }\r\n return upper\r\n }).replace(/(-[a-zA-Z])/g, function (text, upper) {\r\n return helperStringUpperCase(helperStringSubstring(upper, 1, upper.length))\r\n })\r\n camelCacheMaps[str] = rest\r\n return rest\r\n}\r\n\r\nexport default camelCase\r\n","import toValueString from './toValueString'\r\nimport helperStringSubstring from './helperStringSubstring'\r\nimport helperStringLowerCase from './helperStringLowerCase'\r\n\r\nvar kebabCacheMaps = {}\r\n\r\n/**\r\n * 将带驼峰字符串转成字符串,例如: projectName 转为 project-name\r\n *\r\n * @param {String} str 字符串\r\n * @return {String}\r\n */\r\nfunction kebabCase (str) {\r\n str = toValueString(str)\r\n if (kebabCacheMaps[str]) {\r\n return kebabCacheMaps[str]\r\n }\r\n if (/^[A-Z]+$/.test(str)) {\r\n return helperStringLowerCase(str)\r\n }\r\n var rest = str.replace(/^([a-z])([A-Z]+)([a-z]+)$/, function (text, prevLower, upper, nextLower) {\r\n var upperLen = upper.length\r\n if (upperLen > 1) {\r\n return prevLower + '-' + helperStringLowerCase(helperStringSubstring(upper, 0, upperLen - 1)) + '-' + helperStringLowerCase(helperStringSubstring(upper, upperLen - 1, upperLen)) + nextLower\r\n }\r\n return helperStringLowerCase(prevLower + '-' + upper + nextLower)\r\n }).replace(/^([A-Z]+)([a-z]+)?$/, function (text, upper, nextLower) {\r\n var upperLen = upper.length\r\n return helperStringLowerCase(helperStringSubstring(upper, 0, upperLen - 1) + '-' + helperStringSubstring(upper, upperLen - 1, upperLen) + (nextLower || ''))\r\n }).replace(/([a-z]?)([A-Z]+)([a-z]?)/g, function (text, prevLower, upper, nextLower, index) {\r\n var upperLen = upper.length\r\n if (upperLen > 1) {\r\n if (prevLower) {\r\n prevLower += '-'\r\n }\r\n if (nextLower) {\r\n return (prevLower || '') + helperStringLowerCase(helperStringSubstring(upper, 0, upperLen - 1)) + '-' + helperStringLowerCase(helperStringSubstring(upper, upperLen - 1, upperLen)) + nextLower\r\n }\r\n }\r\n return (prevLower || '') + (index ? '-' : '') + helperStringLowerCase(upper) + (nextLower || '')\r\n })\r\n rest = rest.replace(/([-]+)/g, function (text, flag, index) {\r\n return index && index + flag.length < rest.length ? '-' : ''\r\n })\r\n kebabCacheMaps[str] = rest\r\n return rest\r\n}\r\n\r\nexport default kebabCase\r\n","import setupDefaults from './setupDefaults'\r\n\r\nimport toValueString from './toValueString'\r\nimport trim from './trim'\r\n\r\nimport get from './get'\r\n\r\n/**\r\n * 解析动态字符串模板\r\n * @param {atring} str 字符串模板\r\n * @param {any | any[]} args 对象\r\n * @param {any} options \r\n */\r\nfunction template (str, args, options) {\r\n return toValueString(str).replace((options || setupDefaults).tmplRE || /\\{{2}([.\\w[\\]\\s]+)\\}{2}/g, function (match, key) {\r\n return get(args, trim(key))\r\n })\r\n}\r\n\r\nexport default template\r\n","var staticDecodeURIComponent = decodeURIComponent\r\n\r\nexport default staticDecodeURIComponent\r\n","import staticDecodeURIComponent from './staticDecodeURIComponent'\r\n\r\nimport arrayEach from './arrayEach'\r\n\r\nimport isString from './isString'\r\n\r\n/**\r\n * 反序列化查询参数\r\n * @param {String} query 字符串\r\n */\r\nfunction unserialize (str) {\r\n var items\r\n var result = {}\r\n if (str && isString(str)) {\r\n arrayEach(str.split('&'), function (param) {\r\n items = param.split('=')\r\n result[staticDecodeURIComponent(items[0])] = staticDecodeURIComponent(items[1] || '')\r\n })\r\n }\r\n return result\r\n}\r\n\r\nexport default unserialize\r\n","var staticEncodeURIComponent = encodeURIComponent\r\n\r\nexport default staticEncodeURIComponent\r\n","import staticEncodeURIComponent from './staticEncodeURIComponent'\r\n\r\nimport each from './each'\r\nimport isArray from './isArray'\r\nimport isNull from './isNull'\r\nimport isUndefined from './isUndefined'\r\nimport isPlainObject from './isPlainObject'\r\n\r\nfunction stringifyParams (resultVal, resultKey, isArr) {\r\n var _arr\r\n var result = []\r\n each(resultVal, function (item, key) {\r\n _arr = isArray(item)\r\n if (isPlainObject(item) || _arr) {\r\n result = result.concat(stringifyParams(item, resultKey + '[' + key + ']', _arr))\r\n } else {\r\n result.push(staticEncodeURIComponent(resultKey + '[' + (isArr ? '' : key) + ']') + '=' + staticEncodeURIComponent(isNull(item) ? '' : item))\r\n }\r\n })\r\n return result\r\n}\r\n\r\n/**\r\n * 序列化查询参数\r\n *\r\n * @param {Object} query 查询参数\r\n */\r\nfunction serialize (query) {\r\n var _arr\r\n var params = []\r\n each(query, function (item, key) {\r\n if (!isUndefined(item)) {\r\n _arr = isArray(item)\r\n if (isPlainObject(item) || _arr) {\r\n params = params.concat(stringifyParams(item, key, _arr))\r\n } else {\r\n params.push(staticEncodeURIComponent(key) + '=' + staticEncodeURIComponent(isNull(item) ? '' : item))\r\n }\r\n }\r\n })\r\n return params.join('&').replace(/%20/g, '+')\r\n}\r\n\r\nexport default serialize\r\n","import staticStrUndefined from './staticStrUndefined'\r\n\r\n/* eslint-disable valid-typeof */\r\nvar staticLocation = typeof location === staticStrUndefined ? 0 : location\r\n\r\nexport default staticLocation\r\n","import staticLocation from './staticLocation'\r\n\r\nfunction helperGetLocatOrigin () {\r\n return staticLocation ? (staticLocation.origin || (staticLocation.protocol + '//' + staticLocation.host)) : ''\r\n}\r\n\r\nexport default helperGetLocatOrigin\r\n","import staticLocation from './staticLocation'\r\n\r\nimport unserialize from './unserialize'\r\n\r\nimport helperGetLocatOrigin from './helperGetLocatOrigin'\r\n\r\nfunction parseURLQuery (uri) {\r\n return unserialize(uri.split('?')[1] || '')\r\n}\r\n\r\nfunction parseUrl (url) {\r\n var hashs, portText, searchs, parsed\r\n var href = '' + url\r\n if (href.indexOf('//') === 0) {\r\n href = (staticLocation ? staticLocation.protocol : '') + href\r\n } else if (href.indexOf('/') === 0) {\r\n href = helperGetLocatOrigin() + href\r\n }\r\n searchs = href.replace(/#.*/, '').match(/(\\?.*)/)\r\n parsed = {\r\n href: href,\r\n hash: '',\r\n host: '',\r\n hostname: '',\r\n protocol: '',\r\n port: '',\r\n search: searchs && searchs[1] && searchs[1].length > 1 ? searchs[1] : ''\r\n }\r\n parsed.path = href.replace(/^([a-z0-9.+-]*:)\\/\\//, function (text, protocol) {\r\n parsed.protocol = protocol\r\n return ''\r\n }).replace(/^([a-z0-9.+-]*)(:\\d+)?\\/?/, function (text, hostname, port) {\r\n portText = port || ''\r\n parsed.port = portText.replace(':', '')\r\n parsed.hostname = hostname\r\n parsed.host = hostname + portText\r\n return '/'\r\n }).replace(/(#.*)/, function (text, hash) {\r\n parsed.hash = hash.length > 1 ? hash : ''\r\n return ''\r\n })\r\n hashs = parsed.hash.match(/#((.*)\\?|(.*))/)\r\n parsed.pathname = parsed.path.replace(/(\\?|#.*).*/, '')\r\n parsed.origin = parsed.protocol + '//' + parsed.host\r\n parsed.hashKey = hashs ? (hashs[2] || hashs[1] || '') : ''\r\n parsed.hashQuery = parseURLQuery(parsed.hash)\r\n parsed.searchQuery = parseURLQuery(parsed.search)\r\n return parsed\r\n}\r\n\r\nexport default parseUrl\r\n","import setupDefaults from './setupDefaults'\r\nimport staticDocument from './staticDocument'\r\nimport staticDecodeURIComponent from './staticDecodeURIComponent'\r\nimport staticEncodeURIComponent from './staticEncodeURIComponent'\r\n\r\nimport isArray from './isArray'\r\nimport isObject from './isObject'\r\nimport isDate from './isDate'\r\nimport isUndefined from './isUndefined'\r\nimport includes from './includes'\r\nimport keys from './keys'\r\n\r\nimport assign from './assign'\r\n\r\nimport arrayEach from './arrayEach'\r\n\r\nimport helperNewDate from './helperNewDate'\r\nimport helperGetDateTime from './helperGetDateTime'\r\nimport getWhatYear from './getWhatYear'\r\nimport getWhatMonth from './getWhatMonth'\r\nimport getWhatDay from './getWhatDay'\r\n\r\nfunction toCookieUnitTime (unit, expires) {\r\n var num = parseFloat(expires)\r\n var nowdate = helperNewDate()\r\n var time = helperGetDateTime(nowdate)\r\n switch (unit) {\r\n case 'y': return helperGetDateTime(getWhatYear(nowdate, num))\r\n case 'M': return helperGetDateTime(getWhatMonth(nowdate, num))\r\n case 'd': return helperGetDateTime(getWhatDay(nowdate, num))\r\n case 'h':\r\n case 'H': return time + num * 60 * 60 * 1000\r\n case 'm': return time + num * 60 * 1000\r\n case 's': return time + num * 1000\r\n }\r\n return time\r\n}\r\n\r\nfunction toCookieUTCString (date) {\r\n return (isDate(date) ? date : new Date(date)).toUTCString()\r\n}\r\n\r\n/**\r\n * cookie操作函数\r\n * @param {String/Array/Object} name 键/数组/对象\r\n * @param {String} value 值\r\n * @param {Object} options 参数\r\n * @param {String} name: 键\r\n * @param {Object} value: 值\r\n * @param {String} path: 路径\r\n * @param {String} domain: 作用域\r\n * @param {Boolean} secure: 设置为安全的,只能用https协议\r\n * @param {Number} expires: 过期时间,可以指定日期或者字符串,默认天\r\n */\r\nfunction cookie (name, value, options) {\r\n if (staticDocument) {\r\n var opts, expires, values, result, cookies, keyIndex\r\n var inserts = []\r\n var args = arguments\r\n if (isArray(name)) {\r\n inserts = name\r\n } else if (args.length > 1) {\r\n inserts = [assign({ name: name, value: value }, options)]\r\n } else if (isObject(name)) {\r\n inserts = [name]\r\n }\r\n if (inserts.length > 0) {\r\n arrayEach(inserts, function (obj) {\r\n opts = assign({}, setupDefaults.cookies, obj)\r\n values = []\r\n if (opts.name) {\r\n expires = opts.expires\r\n values.push(staticEncodeURIComponent(opts.name) + '=' + staticEncodeURIComponent(isObject(opts.value) ? JSON.stringify(opts.value) : opts.value))\r\n if (expires) {\r\n if (isNaN(expires)) {\r\n // UTCString || Unit\r\n expires = expires.replace(/^([0-9]+)(y|M|d|H|h|m|s)$/, function (text, num, unit) {\r\n return toCookieUTCString(toCookieUnitTime(unit, num))\r\n })\r\n } else if (/^[0-9]{11,13}$/.test(expires) || isDate(expires)) {\r\n // Date || now\r\n expires = toCookieUTCString(expires)\r\n } else {\r\n // day\r\n expires = toCookieUTCString(toCookieUnitTime('d', expires))\r\n }\r\n opts.expires = expires\r\n }\r\n arrayEach(['expires', 'path', 'domain', 'secure'], function (key) {\r\n if (!isUndefined(opts[key])) {\r\n values.push(opts[key] && key === 'secure' ? key : (key + '=' + opts[key]))\r\n }\r\n })\r\n }\r\n staticDocument.cookie = values.join('; ')\r\n })\r\n return true\r\n } else {\r\n result = {}\r\n cookies = staticDocument.cookie\r\n if (cookies) {\r\n arrayEach(cookies.split('; '), function (val) {\r\n keyIndex = val.indexOf('=')\r\n result[staticDecodeURIComponent(val.substring(0, keyIndex))] = staticDecodeURIComponent(val.substring(keyIndex + 1) || '')\r\n })\r\n }\r\n return args.length === 1 ? result[name] : result\r\n }\r\n }\r\n return false\r\n}\r\n\r\nfunction hasCookieItem (value) {\r\n return includes(cookieKeys(), value)\r\n}\r\n\r\nfunction getCookieItem (name) {\r\n return cookie(name)\r\n}\r\n\r\nfunction setCookieItem (name, value, options) {\r\n cookie(name, value, options)\r\n return cookie\r\n}\r\n\r\nfunction removeCookieItem (name, options) {\r\n cookie(name, '', assign({ expires: -1 }, setupDefaults.cookies, options))\r\n}\r\n\r\nfunction cookieKeys () {\r\n return keys(cookie())\r\n}\r\n\r\nfunction cookieJson () {\r\n return cookie()\r\n}\r\n\r\nassign(cookie, {\r\n has: hasCookieItem,\r\n set: setCookieItem,\r\n setItem: setCookieItem,\r\n get: getCookieItem,\r\n getItem: getCookieItem,\r\n remove: removeCookieItem,\r\n removeItem: removeCookieItem,\r\n keys: cookieKeys,\r\n getJSON: cookieJson\r\n})\r\n\r\nexport default cookie\r\n","import staticStrUndefined from './staticStrUndefined'\r\nimport staticDocument from './staticDocument'\r\nimport staticWindow from './staticWindow'\r\n\r\nimport assign from './assign'\r\nimport arrayEach from './arrayEach'\r\n\r\n/* eslint-disable valid-typeof */\r\nfunction isBrowseStorage (storage) {\r\n try {\r\n var testKey = '__xe_t'\r\n storage.setItem(testKey, 1)\r\n storage.removeItem(testKey)\r\n return true\r\n } catch (e) {\r\n return false\r\n }\r\n}\r\n\r\nfunction isBrowseType (type) {\r\n return navigator.userAgent.indexOf(type) > -1\r\n}\r\n\r\n/**\r\n * 获取浏览器内核\r\n * @return Object\r\n */\r\nfunction browse () {\r\n var $body, isChrome, isEdge\r\n var isMobile = false\r\n var isLocalStorage = false\r\n var isSessionStorage = false\r\n var result = {\r\n isNode: false,\r\n isMobile: isMobile,\r\n isPC: false,\r\n isDoc: !!staticDocument\r\n }\r\n if (!staticWindow && typeof process !== staticStrUndefined) {\r\n result.isNode = true\r\n } else {\r\n isEdge = isBrowseType('Edge')\r\n isChrome = isBrowseType('Chrome')\r\n isMobile = /(Android|webOS|iPhone|iPad|iPod|SymbianOS|BlackBerry|Windows Phone)/.test(navigator.userAgent)\r\n if (result.isDoc) {\r\n $body = staticDocument.body || staticDocument.documentElement\r\n arrayEach(['webkit', 'khtml', 'moz', 'ms', 'o'], function (core) {\r\n result['-' + core] = !!$body[core + 'MatchesSelector']\r\n })\r\n }\r\n try {\r\n isLocalStorage = isBrowseStorage(staticWindow.localStorage)\r\n } catch(e) {}\r\n try {\r\n isSessionStorage = isBrowseStorage(staticWindow.sessionStorage)\r\n } catch(e) {}\r\n assign(result, {\r\n edge: isEdge,\r\n firefox: isBrowseType('Firefox'),\r\n msie: !isEdge && result['-ms'],\r\n safari: !isChrome && !isEdge && isBrowseType('Safari'),\r\n isMobile: isMobile,\r\n isPC: !isMobile,\r\n isLocalStorage: isLocalStorage,\r\n isSessionStorage: isSessionStorage\r\n })\r\n }\r\n return result\r\n}\r\n\r\nexport default browse\r\n","// 核心\r\nimport XEUtils from './ctor'\r\n\r\n// 对象相关的方法\r\nimport assign from './assign'\r\nimport objectEach from './objectEach'\r\nimport lastObjectEach from './lastObjectEach'\r\nimport objectMap from './objectMap'\r\nimport merge from './merge'\r\n\r\n// 数组相关的方法\r\nimport map from './map'\r\nimport some from './some'\r\nimport every from './every'\r\nimport includeArrays from './includeArrays'\r\nimport arrayEach from './arrayEach'\r\nimport lastArrayEach from './lastArrayEach'\r\nimport uniq from './uniq'\r\nimport union from './union'\r\nimport toArray from './toArray'\r\nimport sortBy from './sortBy'\r\nimport orderBy from './orderBy'\r\nimport shuffle from './shuffle'\r\nimport sample from './sample'\r\nimport slice from './slice'\r\nimport filter from './filter'\r\nimport findKey from './findKey'\r\nimport includes from './includes'\r\nimport find from './find'\r\nimport findLast from './findLast'\r\nimport reduce from './reduce'\r\nimport copyWithin from './copyWithin'\r\nimport chunk from './chunk'\r\nimport zip from './zip'\r\nimport unzip from './unzip'\r\nimport zipObject from './zipObject'\r\nimport flatten from './flatten'\r\nimport pluck from './pluck'\r\nimport invoke from './invoke'\r\nimport toArrayTree from './toArrayTree'\r\nimport toTreeArray from './toTreeArray'\r\nimport findTree from './findTree'\r\nimport eachTree from './eachTree'\r\nimport mapTree from './mapTree'\r\nimport filterTree from './filterTree'\r\nimport searchTree from './searchTree'\r\nimport arrayIndexOf from './arrayIndexOf'\r\nimport arrayLastIndexOf from './arrayLastIndexOf'\r\n\r\n// 基础方法\r\nimport hasOwnProp from './hasOwnProp'\r\nimport isArray from './isArray'\r\nimport isNull from './isNull'\r\nimport isNumberNaN from './isNaN'\r\nimport isUndefined from './isUndefined'\r\nimport isFunction from './isFunction'\r\nimport isObject from './isObject'\r\nimport isString from './isString'\r\nimport isPlainObject from './isPlainObject'\r\nimport isLeapYear from './isLeapYear'\r\nimport isDate from './isDate'\r\nimport eqNull from './eqNull'\r\nimport each from './each'\r\nimport forOf from './forOf'\r\nimport lastForOf from './lastForOf'\r\nimport indexOf from './indexOf'\r\nimport lastIndexOf from './lastIndexOf'\r\nimport keys from './keys'\r\nimport values from './values'\r\nimport clone from './clone'\r\nimport getSize from './getSize'\r\nimport lastEach from './lastEach'\r\nimport remove from './remove'\r\nimport clear from './clear'\r\nimport isNumberFinite from './isFinite'\r\nimport isFloat from './isFloat'\r\nimport isInteger from './isInteger'\r\nimport isBoolean from './isBoolean'\r\nimport isNumber from './isNumber'\r\nimport isRegExp from './isRegExp'\r\nimport isError from './isError'\r\nimport isTypeError from './isTypeError'\r\nimport isEmpty from './isEmpty'\r\nimport isSymbol from './isSymbol'\r\nimport isArguments from './isArguments'\r\nimport isElement from './isElement'\r\nimport isDocument from './isDocument'\r\nimport isWindow from './isWindow'\r\nimport isFormData from './isFormData'\r\nimport isMap from './isMap'\r\nimport isWeakMap from './isWeakMap'\r\nimport isSet from './isSet'\r\nimport isWeakSet from './isWeakSet'\r\nimport isMatch from './isMatch'\r\nimport isEqual from './isEqual'\r\nimport isEqualWith from './isEqualWith'\r\nimport getType from './getType'\r\nimport uniqueId from './uniqueId'\r\nimport findIndexOf from './findIndexOf'\r\nimport findLastIndexOf from './findLastIndexOf'\r\nimport toStringJSON from './toStringJSON'\r\nimport toJSONString from './toJSONString'\r\nimport entries from './entries'\r\nimport pick from './pick'\r\nimport omit from './omit'\r\nimport first from './first'\r\nimport last from './last'\r\nimport has from './has'\r\nimport get from './get'\r\nimport set from './set'\r\nimport groupBy from './groupBy'\r\nimport countBy from './countBy'\r\nimport range from './range'\r\nimport destructuring from './destructuring'\r\n\r\n// 数值相关方法\r\nimport random from './random'\r\nimport max from './max'\r\nimport min from './min'\r\nimport commafy from './commafy'\r\nimport round from './round'\r\nimport ceil from './ceil'\r\nimport floor from './floor'\r\nimport toFixed from './toFixed'\r\nimport toInteger from './toInteger'\r\nimport toNumber from './toNumber'\r\nimport toNumberString from './toNumberString'\r\nimport add from './add'\r\nimport subtract from './subtract'\r\nimport multiply from './multiply'\r\nimport divide from './divide'\r\nimport sum from './sum'\r\nimport mean from './mean'\r\n\r\n// 日期相关的方法\r\nimport getWhatYear from './getWhatYear'\r\nimport getWhatQuarter from './getWhatQuarter'\r\nimport getWhatMonth from './getWhatMonth'\r\nimport getWhatWeek from './getWhatWeek'\r\nimport getWhatDay from './getWhatDay'\r\nimport getWhatHours from './getWhatHours'\r\nimport getWhatMinutes from './getWhatMinutes'\r\nimport getWhatSeconds from './getWhatSeconds'\r\nimport toStringDate from './toStringDate'\r\nimport toDateString from './toDateString'\r\nimport now from './now'\r\nimport timestamp from './timestamp'\r\nimport isValidDate from './isValidDate'\r\nimport isDateSame from './isDateSame'\r\nimport getYearDay from './getYearDay'\r\nimport getYearWeek from './getYearWeek'\r\nimport getMonthWeek from './getMonthWeek'\r\nimport getDayOfYear from './getDayOfYear'\r\nimport getDayOfMonth from './getDayOfMonth'\r\nimport getDateDiff from './getDateDiff'\r\n\r\n// 字符串相关的方法\r\nimport padEnd from './padEnd'\r\nimport padStart from './padStart'\r\nimport repeat from './repeat'\r\nimport trim from './trim'\r\nimport trimRight from './trimRight'\r\nimport trimLeft from './trimLeft'\r\nimport escape from './escape'\r\nimport unescape from './unescape'\r\nimport camelCase from './camelCase'\r\nimport kebabCase from './kebabCase'\r\nimport startsWith from './startsWith'\r\nimport endsWith from './endsWith'\r\nimport template from './template'\r\nimport toFormatString from './toFormatString'\r\nimport toValueString from './toValueString'\r\n\r\n// 函数相关的方法\r\nimport noop from './noop'\r\nimport property from './property'\r\nimport bind from './bind'\r\nimport once from './once'\r\nimport after from './after'\r\nimport before from './before'\r\nimport throttle from './throttle'\r\nimport debounce from './debounce'\r\nimport delay from './delay'\r\n\r\n// 地址相关的方法\r\nimport unserialize from './unserialize'\r\nimport serialize from './serialize'\r\nimport parseUrl from './parseUrl'\r\n\r\n// 浏览器相关的方法\r\nimport getBaseURL from './getBaseURL'\r\nimport locat from './locat'\r\nimport cookie from './cookie'\r\nimport browse from './browse'\r\n\r\nassign(XEUtils, {\r\n // object\r\n assign: assign,\r\n objectEach: objectEach,\r\n lastObjectEach: lastObjectEach,\r\n objectMap: objectMap,\r\n merge: merge,\r\n\r\n // array\r\n uniq: uniq,\r\n union: union,\r\n sortBy: sortBy,\r\n orderBy: orderBy,\r\n shuffle: shuffle,\r\n sample: sample,\r\n some: some,\r\n every: every,\r\n slice: slice,\r\n filter: filter,\r\n find: find,\r\n findLast: findLast,\r\n findKey: findKey,\r\n includes: includes,\r\n arrayIndexOf: arrayIndexOf,\r\n arrayLastIndexOf: arrayLastIndexOf,\r\n map: map,\r\n reduce: reduce,\r\n copyWithin: copyWithin,\r\n chunk: chunk,\r\n zip: zip,\r\n unzip: unzip,\r\n zipObject: zipObject,\r\n flatten: flatten,\r\n toArray: toArray,\r\n includeArrays: includeArrays,\r\n pluck: pluck,\r\n invoke: invoke,\r\n arrayEach: arrayEach,\r\n lastArrayEach: lastArrayEach,\r\n toArrayTree: toArrayTree,\r\n toTreeArray: toTreeArray,\r\n findTree: findTree,\r\n eachTree: eachTree,\r\n mapTree: mapTree,\r\n filterTree: filterTree,\r\n searchTree: searchTree,\r\n\r\n // base\r\n hasOwnProp: hasOwnProp,\r\n eqNull: eqNull,\r\n isNaN: isNumberNaN,\r\n isFinite: isNumberFinite,\r\n isUndefined: isUndefined,\r\n isArray: isArray,\r\n isFloat: isFloat,\r\n isInteger: isInteger,\r\n isFunction: isFunction,\r\n isBoolean: isBoolean,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isRegExp: isRegExp,\r\n isObject: isObject,\r\n isPlainObject: isPlainObject,\r\n isDate: isDate,\r\n isError: isError,\r\n isTypeError: isTypeError,\r\n isEmpty: isEmpty,\r\n isNull: isNull,\r\n isSymbol: isSymbol,\r\n isArguments: isArguments,\r\n isElement: isElement,\r\n isDocument: isDocument,\r\n isWindow: isWindow,\r\n isFormData: isFormData,\r\n isMap: isMap,\r\n isWeakMap: isWeakMap,\r\n isSet: isSet,\r\n isWeakSet: isWeakSet,\r\n isLeapYear: isLeapYear,\r\n isMatch: isMatch,\r\n isEqual: isEqual,\r\n isEqualWith: isEqualWith,\r\n getType: getType,\r\n uniqueId: uniqueId,\r\n getSize: getSize,\r\n indexOf: indexOf,\r\n lastIndexOf: lastIndexOf,\r\n findIndexOf: findIndexOf,\r\n findLastIndexOf: findLastIndexOf,\r\n toStringJSON: toStringJSON,\r\n toJSONString: toJSONString,\r\n keys: keys,\r\n values: values,\r\n entries: entries,\r\n pick: pick,\r\n omit: omit,\r\n first: first,\r\n last: last,\r\n each: each,\r\n forOf: forOf,\r\n lastForOf: lastForOf,\r\n lastEach: lastEach,\r\n has: has,\r\n get: get,\r\n set: set,\r\n groupBy: groupBy,\r\n countBy: countBy,\r\n clone: clone,\r\n clear: clear,\r\n remove: remove,\r\n range: range,\r\n destructuring: destructuring,\r\n\r\n // number\r\n random: random,\r\n min: min,\r\n max: max,\r\n commafy: commafy,\r\n round: round,\r\n ceil: ceil,\r\n floor: floor,\r\n toFixed: toFixed,\r\n toNumber: toNumber,\r\n toNumberString: toNumberString,\r\n toInteger: toInteger,\r\n add: add,\r\n subtract: subtract,\r\n multiply: multiply,\r\n divide: divide,\r\n sum: sum,\r\n mean: mean,\r\n\r\n // date\r\n now: now,\r\n timestamp: timestamp,\r\n isValidDate: isValidDate,\r\n isDateSame: isDateSame,\r\n toStringDate: toStringDate,\r\n toDateString: toDateString,\r\n getWhatYear: getWhatYear,\r\n getWhatQuarter: getWhatQuarter,\r\n getWhatMonth: getWhatMonth,\r\n getWhatWeek: getWhatWeek,\r\n getWhatDay: getWhatDay,\r\n getWhatHours: getWhatHours,\r\n getWhatMinutes: getWhatMinutes,\r\n getWhatSeconds: getWhatSeconds,\r\n getYearDay: getYearDay,\r\n getYearWeek: getYearWeek,\r\n getMonthWeek: getMonthWeek,\r\n getDayOfYear: getDayOfYear,\r\n getDayOfMonth: getDayOfMonth,\r\n getDateDiff: getDateDiff,\r\n\r\n // string\r\n trim: trim,\r\n trimLeft: trimLeft,\r\n trimRight: trimRight,\r\n escape: escape,\r\n unescape: unescape,\r\n camelCase: camelCase,\r\n kebabCase: kebabCase,\r\n repeat: repeat,\r\n padStart: padStart,\r\n padEnd: padEnd,\r\n startsWith: startsWith,\r\n endsWith: endsWith,\r\n template: template,\r\n toFormatString: toFormatString,\r\n toString: toValueString,\r\n toValueString: toValueString,\r\n\r\n // function\r\n noop: noop,\r\n property: property,\r\n bind: bind,\r\n once: once,\r\n after: after,\r\n before: before,\r\n throttle: throttle,\r\n debounce: debounce,\r\n delay: delay,\r\n\r\n // url\r\n unserialize: unserialize,\r\n serialize: serialize,\r\n parseUrl: parseUrl,\r\n\r\n // web\r\n getBaseURL: getBaseURL,\r\n locat: locat,\r\n browse: browse,\r\n cookie: cookie\r\n})\r\n\r\nexport default XEUtils\r\n","import each from './each'\r\nimport isFunction from './isFunction'\r\nimport property from './property'\r\n\r\n/**\r\n * 指定方法后的返回值组成的新对象\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @param {Object} context 上下文\r\n * @return {Object}\r\n */\r\nfunction objectMap (obj, iterate, context) {\r\n var result = {}\r\n if (obj) {\r\n if (iterate) {\r\n if (!isFunction(iterate)) {\r\n iterate = property(iterate)\r\n }\r\n each(obj, function (val, index) {\r\n result[index] = iterate.call(context, val, index, obj)\r\n })\r\n } else {\r\n return obj\r\n }\r\n }\r\n return result\r\n}\r\n\r\nexport default objectMap\r\n","import uniq from './uniq'\r\nimport toArray from './toArray'\r\n\r\n/**\r\n * 将多个数的值返回唯一的并集数组\r\n *\r\n * @param {...Array} 数组\r\n * @return {Array}\r\n */\r\nfunction union () {\r\n var args = arguments\r\n var result = []\r\n var index = 0\r\n var len = args.length\r\n for (; index < len; index++) {\r\n result = result.concat(toArray(args[index]))\r\n }\r\n return uniq(result)\r\n}\r\n\r\nexport default union\r\n","import shuffle from './shuffle'\r\n\r\n/**\r\n * 从一个数组中随机返回几个元素\r\n *\r\n * @param {Array} array 数组\r\n * @param {Number} number 个数\r\n * @return {Array}\r\n */\r\nfunction sample (array, number) {\r\n var result = shuffle(array)\r\n if (arguments.length <= 1) {\r\n return result[0]\r\n }\r\n if (number < result.length) {\r\n result.length = number || 0\r\n }\r\n return result\r\n}\r\n\r\nexport default sample\r\n","import each from './each'\r\n\r\n/**\r\n * 根据回调过滤数据\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @param {Object} context 上下文\r\n * @return {Object}\r\n */\r\nfunction filter (obj, iterate, context) {\r\n var result = []\r\n if (obj && iterate) {\r\n if (obj.filter) {\r\n return obj.filter(iterate, context)\r\n }\r\n each(obj, function (val, key) {\r\n if (iterate.call(context, val, key, obj)) {\r\n result.push(val)\r\n }\r\n })\r\n }\r\n return result\r\n}\r\n\r\nexport default filter\r\n","import isArray from './isArray'\r\nimport values from './values'\r\n\r\n/**\r\n * 从右至左遍历,匹配最近的一条数据\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, obj) 回调\r\n * @param {Object} context 上下文\r\n * @return {Object}\r\n */\r\nfunction findLast (obj, iterate, context) {\r\n if (obj) {\r\n if (!isArray(obj)) {\r\n obj = values(obj)\r\n }\r\n for (var len = obj.length - 1; len >= 0; len--) {\r\n if (iterate.call(context, obj[len], len, obj)) {\r\n return obj[len]\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default findLast\r\n","import keys from './keys'\r\n\r\n/**\r\n * 接收一个函数作为累加器,数组中的每个值(从左到右)开始合并,最终为一个值。\r\n *\r\n * @param {Array} array 数组\r\n * @param {Function} callback 方法\r\n * @param {Object} initialValue 初始值\r\n * @return {Number}\r\n */\r\nfunction reduce (array, callback, initialValue) {\r\n if (array) {\r\n var len, reduceMethod\r\n var index = 0\r\n var context = null\r\n var previous = initialValue\r\n var isInitialVal = arguments.length > 2\r\n var keyList = keys(array)\r\n if (array.length && array.reduce) {\r\n reduceMethod = function () {\r\n return callback.apply(context, arguments)\r\n }\r\n if (isInitialVal) {\r\n return array.reduce(reduceMethod, previous)\r\n }\r\n return array.reduce(reduceMethod)\r\n }\r\n if (isInitialVal) {\r\n index = 1\r\n previous = array[keyList[0]]\r\n }\r\n for (len = keyList.length; index < len; index++) {\r\n previous = callback.call(context, previous, array[keyList[index]], index, array)\r\n }\r\n return previous\r\n }\r\n}\r\n\r\nexport default reduce\r\n","import isArray from './isArray'\r\n\r\n/**\r\n * 浅复制数组的一部分到同一数组中的另一个位置,数组大小不变\r\n *\r\n * @param {Array} array 数组\r\n * @param {Number} target 从该位置开始替换数据\r\n * @param {Number} start 从该位置开始读取数据,默认为 0 。如果为负值,表示倒数\r\n * @param {Number} end 到该位置前停止读取数据,默认等于数组长度。如果为负值,表示倒数\r\n * @return {Array}\r\n */\r\nfunction copyWithin (array, target, start, end) {\r\n if (isArray(array) && array.copyWithin) {\r\n return array.copyWithin(target, start, end)\r\n }\r\n var replaceIndex, replaceArray\r\n var targetIndex = target >> 0\r\n var startIndex = start >> 0\r\n var len = array.length\r\n var endIndex = arguments.length > 3 ? end >> 0 : len\r\n if (targetIndex < len) {\r\n targetIndex = targetIndex >= 0 ? targetIndex : len + targetIndex\r\n if (targetIndex >= 0) {\r\n startIndex = startIndex >= 0 ? startIndex : len + startIndex\r\n endIndex = endIndex >= 0 ? endIndex : len + endIndex\r\n if (startIndex < endIndex) {\r\n for (replaceIndex = 0, replaceArray = array.slice(startIndex, endIndex); targetIndex < len; targetIndex++) {\r\n if (replaceArray.length <= replaceIndex) {\r\n break\r\n }\r\n array[targetIndex] = replaceArray[replaceIndex++]\r\n }\r\n }\r\n }\r\n }\r\n return array\r\n}\r\n\r\nexport default copyWithin\r\n","import isArray from './isArray'\r\n\r\n/**\r\n * 将一个数组分割成大小的组。如果数组不能被平均分配,那么最后一块将是剩下的元素\r\n *\r\n * @param {Array} array 数组\r\n * @param {Number} size 每组大小\r\n * @return {Array}\r\n */\r\nfunction chunk (array, size) {\r\n var index\r\n var result = []\r\n var arrLen = size >> 0 || 1\r\n if (isArray(array)) {\r\n if (arrLen >= 0 && array.length > arrLen) {\r\n index = 0\r\n while (index < array.length) {\r\n result.push(array.slice(index, index + arrLen))\r\n index += arrLen\r\n }\r\n } else {\r\n result = array.length ? [array] : array\r\n }\r\n }\r\n return result\r\n}\r\n\r\nexport default chunk\r\n","import unzip from './unzip'\r\n\r\n/**\r\n * 将每个数组中相应位置的值合并在一起\r\n *\r\n * @param {Array*} array 数组\r\n */\r\nfunction zip () {\r\n return unzip(arguments)\r\n}\r\n\r\nexport default zip\r\n","import values from './values'\r\nimport each from './each'\r\n\r\n/**\r\n * 根据键数组、值数组对转换为对象\r\n *\r\n * @param {Array} props 键数组\r\n * @param {Number} arr 值数组\r\n * @return {Object}\r\n */\r\nfunction zipObject (props, arr) {\r\n var result = {}\r\n arr = arr || []\r\n each(values(props), function (val, key) {\r\n result[val] = arr[key]\r\n })\r\n return result\r\n}\r\n\r\nexport default zipObject\r\n","import map from './map'\r\n\r\nimport isArray from './isArray'\r\n\r\nfunction deepGetObj (obj, path) {\r\n var index = 0\r\n var len = path.length\r\n while (obj && index < len) {\r\n obj = obj[path[index++]]\r\n }\r\n return len && obj ? obj : 0\r\n}\r\n\r\n/**\r\n * 在list的每个元素上执行方法,任何传递的额外参数都会在调用方法的时候传递给它\r\n *\r\n * @param {Array} list\r\n * @param {Array/String/Function} path\r\n * @param {...Object} arguments\r\n * @return {Array}\r\n */\r\nfunction invoke (list, path) {\r\n var func\r\n var args = arguments\r\n var params = []\r\n var paths = []\r\n var index = 2\r\n var len = args.length\r\n for (; index < len; index++) {\r\n params.push(args[index])\r\n }\r\n if (isArray(path)) {\r\n len = path.length - 1\r\n for (index = 0; index < len; index++) {\r\n paths.push(path[index])\r\n }\r\n path = path[len]\r\n }\r\n return map(list, function (context) {\r\n if (paths.length) {\r\n context = deepGetObj(context, paths)\r\n }\r\n func = context[path] || path\r\n if (func && func.apply) {\r\n return func.apply(context, params)\r\n }\r\n })\r\n}\r\n\r\nexport default invoke\r\n","import setupDefaults from './setupDefaults'\r\nimport helperLog from './helperLog'\r\n\r\nimport orderBy from './orderBy'\r\n\r\nimport clone from './clone'\r\nimport eqNull from './eqNull'\r\nimport each from './each'\r\nimport remove from './remove'\r\n\r\nimport assign from './assign'\r\n\r\nfunction strictTree (array, optChildren) {\r\n each(array, function (item) {\r\n if (item[optChildren] && !item[optChildren].length) {\r\n remove(item, optChildren)\r\n }\r\n })\r\n}\r\n\r\n/**\r\n * 将一个带层级的数据列表转成树结构\r\n *\r\n * @param {Array} array 数组\r\n * @param {Object} options {strict: false, parentKey: 'parentId', key: 'id', children: 'children', mapChildren: 'children', data: 'data'}\r\n * @return {Array}\r\n */\r\nfunction toArrayTree (array, options) {\r\n var opts = assign({}, setupDefaults.treeOptions, options)\r\n var optStrict = opts.strict\r\n var optKey = opts.key\r\n var optParentKey = opts.parentKey\r\n var optChildren = opts.children\r\n var optMapChildren = opts.mapChildren\r\n var optSortKey = opts.sortKey\r\n var optReverse = opts.reverse\r\n var optData = opts.data\r\n var result = []\r\n var treeMaps = {}\r\n var idsMap = {}\r\n var id, treeData, parentId\r\n\r\n if (optSortKey) {\r\n array = orderBy(clone(array), optSortKey)\r\n if (optReverse) {\r\n array = array.reverse()\r\n }\r\n }\r\n\r\n each(array, function (item) {\r\n id = item[optKey]\r\n if (idsMap[id]) {\r\n helperLog('warn', 'Duplicate primary key=' + id)\r\n }\r\n idsMap[id] = true\r\n })\r\n\r\n each(array, function (item) {\r\n id = item[optKey]\r\n\r\n if (optData) {\r\n treeData = {}\r\n treeData[optData] = item\r\n } else {\r\n treeData = item\r\n }\r\n\r\n parentId = item[optParentKey]\r\n treeMaps[id] = treeMaps[id] || []\r\n treeData[optKey] = id\r\n treeData[optParentKey] = parentId\r\n\r\n if (id === parentId) {\r\n parentId = null\r\n helperLog('warn', 'Error infinite Loop. key=' + id + ' parentKey=' + id)\r\n }\r\n\r\n treeMaps[parentId] = treeMaps[parentId] || []\r\n treeMaps[parentId].push(treeData)\r\n treeData[optChildren] = treeMaps[id]\r\n if (optMapChildren) {\r\n treeData[optMapChildren] = treeMaps[id]\r\n }\r\n\r\n if (!optStrict || (optStrict && eqNull(parentId))) {\r\n if (!idsMap[parentId]) {\r\n result.push(treeData)\r\n }\r\n }\r\n })\r\n\r\n if (optStrict) {\r\n strictTree(array, optChildren)\r\n }\r\n\r\n return result\r\n}\r\n\r\nexport default toArrayTree\r\n","import eachTree from './eachTree'\r\n\r\n/**\r\n * 从树结构中根据回调过滤数据\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @param {Function} iterate(item, index, items, path, parent) 回调\r\n * @param {Object} options {children: 'children'}\r\n * @param {Object} context 上下文\r\n * @return {Array}\r\n */\r\nfunction filterTree (obj, iterate, options, context) {\r\n var result = []\r\n if (obj && iterate) {\r\n eachTree(obj, function (item, index, items, path, parent, nodes) {\r\n if (iterate.call(context, item, index, items, path, parent, nodes)) {\r\n result.push(item)\r\n }\r\n }, options)\r\n }\r\n return result\r\n}\r\n\r\nexport default filterTree\r\n","import isNumber from './isNumber'\r\n\r\n/* eslint-disable eqeqeq */\r\nfunction isNumberNaN (obj) {\r\n return isNumber(obj) && isNaN(obj)\r\n}\r\n\r\nexport default isNumberNaN\r\n","import isNumber from './isNumber'\r\n\r\nfunction isNumberFinite (obj) {\r\n return isNumber(obj) && isFinite(obj)\r\n}\r\n\r\nexport default isNumberFinite\r\n","import isArray from './isArray'\r\nimport isInteger from './isInteger'\r\nimport isNull from './isNull'\r\n\r\n/**\r\n * 判断是否小数\r\n *\r\n * @param {Number} obj 数值\r\n * @return {Boolean}\r\n */\r\nfunction isFloat (obj) {\r\n return !isNull(obj) && !isNaN(obj) && !isArray(obj) && !isInteger(obj)\r\n}\r\n\r\nexport default isFloat\r\n","/**\r\n * 判断是否TypeError对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nfunction isTypeError (obj) {\r\n return obj ? obj.constructor === TypeError : false\r\n}\r\n\r\nexport default isTypeError\r\n","import isString from './isString'\r\nimport isNumber from './isNumber'\r\n\r\n/**\r\n * 判断是否Element对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nfunction isElement (obj) {\r\n return !!(obj && isString(obj.nodeName) && isNumber(obj.nodeType))\r\n}\r\n\r\nexport default isElement\r\n","import staticDocument from './staticDocument'\r\n\r\n/**\r\n * 判断是否Document对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nfunction isDocument (obj) {\r\n return !!(obj && staticDocument && obj.nodeType === 9)\r\n}\r\n\r\nexport default isDocument\r\n","import staticWindow from './staticWindow'\r\n\r\n/**\r\n * 判断是否Window对象\r\n *\r\n * @param {Object} obj 对象\r\n * @return {Boolean}\r\n */\r\nfunction isWindow (obj) {\r\n return !!(staticWindow && !!(obj && obj === obj.window))\r\n}\r\n\r\nexport default isWindow\r\n","import keys from './keys'\r\nimport findIndexOf from './findIndexOf'\r\nimport isEqual from './isEqual'\r\n\r\nimport some from './some'\r\nimport includeArrays from './includeArrays'\r\n\r\n/**\r\n * 判断属性中的键和值是否包含在对象中\r\n *\r\n * @param {Object/Array} obj 对象\r\n * @param {Object} source 值\r\n * @return {Boolean}\r\n */\r\nfunction isMatch (obj, source) {\r\n var objKeys = keys(obj)\r\n var sourceKeys = keys(source)\r\n if (sourceKeys.length) {\r\n if (includeArrays(objKeys, sourceKeys)) {\r\n return some(sourceKeys, function (key2) {\r\n return findIndexOf(objKeys, function (key1) {\r\n return key1 === key2 && isEqual(obj[key1], source[key2])\r\n }) > -1\r\n })\r\n }\r\n } else {\r\n return true\r\n }\r\n return isEqual(obj, source)\r\n}\r\n\r\nexport default isMatch\r\n","import helperEqualCompare from './helperEqualCompare'\r\nimport helperDefaultCompare from './helperDefaultCompare'\r\n\r\nimport isFunction from './isFunction'\r\nimport isUndefined from './isUndefined'\r\n\r\n/**\r\n * 深度比较两个对象之间的值是否相等,使用自定义比较函数\r\n *\r\n * @param {Object} obj1 值1\r\n * @param {Object} obj2 值2\r\n * @param {Function} func 自定义函数\r\n * @return {Boolean}\r\n */\r\nfunction isEqualWith (obj1, obj2, func) {\r\n if (isFunction(func)) {\r\n return helperEqualCompare(obj1, obj2, function (v1, v2, key, obj1, obj2) {\r\n var result = func(v1, v2, key, obj1, obj2)\r\n return isUndefined(result) ? helperDefaultCompare(v1, v2) : !!result\r\n }, func)\r\n }\r\n return helperEqualCompare(obj1, obj2, helperDefaultCompare)\r\n}\r\n\r\nexport default isEqualWith\r\n","import isSymbol from './isSymbol'\r\nimport isDate from './isDate'\r\nimport isArray from './isArray'\r\nimport isRegExp from './isRegExp'\r\nimport isError from './isError'\r\nimport isNull from './isNull'\r\n\r\n/**\r\n * 获取对象类型\r\n *\r\n * @param {Object} obj 对象\r\n * @return {String}\r\n */\r\nfunction getType (obj) {\r\n if (isNull(obj)) {\r\n return 'null'\r\n }\r\n if (isSymbol(obj)) {\r\n return 'symbol'\r\n }\r\n if (isDate(obj)) {\r\n return 'date'\r\n }\r\n if (isArray(obj)) {\r\n return 'array'\r\n }\r\n if (isRegExp(obj)) {\r\n return 'regexp'\r\n }\r\n if (isError(obj)) {\r\n return 'error'\r\n }\r\n return typeof obj\r\n}\r\n\r\nexport default getType\r\n","import setupDefaults from './setupDefaults'\r\n\r\nimport eqNull from './eqNull'\r\n\r\n/**\r\n * 获取一个全局唯一标识\r\n *\r\n * @param {String} prefix 前缀\r\n * @return {Number}\r\n */\r\nfunction uniqueId (prefix) {\r\n return '' + (eqNull(prefix) ? '' : prefix) + (setupDefaults.keyId++)\r\n}\r\n\r\nexport default uniqueId\r\n","import isPlainObject from './isPlainObject'\r\nimport isString from './isString'\r\n\r\n/**\r\n * 字符串转JSON\r\n *\r\n * @param {String} str 字符串\r\n * @return {Object} 返回转换后对象\r\n */\r\nfunction toStringJSON (str) {\r\n if (isPlainObject(str)) {\r\n return str\r\n } else if (isString(str)) {\r\n try {\r\n return JSON.parse(str)\r\n } catch (e) {}\r\n }\r\n return {}\r\n}\r\n\r\nexport default toStringJSON\r\n","import eqNull from './eqNull'\r\n\r\n/**\r\n * JSON转字符串\r\n *\r\n * @param {Object} obj 对象\r\n * @return {String} 返回字符串\r\n */\r\nfunction toJSONString (obj) {\r\n return eqNull(obj) ? '' : JSON.stringify(obj)\r\n}\r\n\r\nexport default toJSONString\r\n","import values from './values'\r\n\r\n/**\r\n * 获取对象第一个值\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @return {Object}\r\n */\r\nfunction first (obj) {\r\n return values(obj)[0]\r\n}\r\n\r\nexport default first\r\n","import values from './values'\r\n\r\n/**\r\n * 获取对象最后一个值\r\n *\r\n * @param {Object} obj 对象/数组\r\n * @return {Object}\r\n */\r\nfunction last (obj) {\r\n var list = values(obj)\r\n return list[list.length - 1]\r\n}\r\n\r\nexport default last\r\n","import isArray from './isArray'\r\nimport hasOwnProp from './hasOwnProp'\r\n\r\n/**\r\n * 已废弃,被 some, every 替换\r\n * @deprecated\r\n */\r\nfunction forOf (obj, iterate, context) {\r\n if (obj) {\r\n if (isArray(obj)) {\r\n for (var index = 0, len = obj.length; index < len; index++) {\r\n if (iterate.call(context, obj[index], index, obj) === false) {\r\n break\r\n }\r\n }\r\n } else {\r\n for (var key in obj) {\r\n if (hasOwnProp(obj, key)) {\r\n if (iterate.call(context, obj[key], key, obj) === false) {\r\n break\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default forOf\r\n","import isArray from './isArray'\r\nimport keys from './hasOwnProp'\r\n\r\n/**\r\n * 已废弃\r\n * @deprecated\r\n */\r\nfunction lastForOf (obj, iterate, context) {\r\n if (obj) {\r\n var len, list\r\n if (isArray(obj)) {\r\n for (len = obj.length - 1; len >= 0; len--) {\r\n if (iterate.call(context, obj[len], len, obj) === false) {\r\n break\r\n }\r\n }\r\n } else {\r\n list = keys(obj)\r\n for (len = list.length - 1; len >= 0; len--) {\r\n if (iterate.call(context, obj[list[len]], list[len], obj) === false) {\r\n break\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default lastForOf\r\n","import staticHGKeyRE from './staticHGKeyRE'\r\n\r\nimport helperGetHGSKeys from './helperGetHGSKeys'\r\n\r\nimport hasOwnProp from './hasOwnProp'\r\n\r\n/**\r\n * 检查键、路径是否是该对象的属性\r\n *\r\n * @param {Object/Array} data 对象\r\n * @param {String/Function} property 键、路径\r\n * @return {Boolean}\r\n */\r\nfunction has (obj, property) {\r\n if (obj) {\r\n if (hasOwnProp(obj, property)) {\r\n return true\r\n } else {\r\n var prop, arrIndex, objProp, matchs, rest, isHas\r\n var props = helperGetHGSKeys(property)\r\n var index = 0\r\n var len = props.length\r\n for (rest = obj; index < len; index++) {\r\n isHas = false\r\n prop = props[index]\r\n matchs = prop ? prop.match(staticHGKeyRE) : ''\r\n if (matchs) {\r\n arrIndex = matchs[1]\r\n objProp = matchs[2]\r\n if (arrIndex) {\r\n if (rest[arrIndex]) {\r\n if (hasOwnProp(rest[arrIndex], objProp)) {\r\n isHas = true\r\n rest = rest[arrIndex][objProp]\r\n }\r\n }\r\n } else {\r\n if (hasOwnProp(rest, objProp)) {\r\n isHas = true\r\n rest = rest[objProp]\r\n }\r\n }\r\n } else {\r\n if (hasOwnProp(rest, prop)) {\r\n isHas = true\r\n rest = rest[prop]\r\n }\r\n }\r\n if (isHas) {\r\n if (index === len - 1) {\r\n return true\r\n }\r\n } else {\r\n break\r\n }\r\n }\r\n }\r\n }\r\n return false\r\n}\r\n\r\nexport default has\r\n","import groupBy from './groupBy'\r\n\r\nimport objectEach from './objectEach'\r\n\r\n/**\r\n * 集合分组统计,返回各组中对象的数量统计\r\n *\r\n * @param {Array} obj 对象\r\n * @param {Function} iterate 回调/对象属性\r\n * @param {Object} context 上下文\r\n * @return {Object}\r\n */\r\nfunction countBy (obj, iterate, context) {\r\n var result = groupBy(obj, iterate, context || this)\r\n objectEach(result, function (item, key) {\r\n result[key] = item.length\r\n })\r\n return result\r\n}\r\n\r\nexport default countBy\r\n","import keys from './keys'\r\n\r\nimport slice from './slice'\r\nimport includes from './includes'\r\nimport arrayEach from './arrayEach'\r\n\r\nimport assign from './assign'\r\n\r\n/**\r\n * 将一个或者多个对象值解构到目标对象\r\n *\r\n * @param {Object} destination 目标对象\r\n * @param {...Object}\r\n * @return {Boolean}\r\n */\r\nfunction destructuring (destination, sources) {\r\n if (destination && sources) {\r\n var rest = assign.apply(this, [{}].concat(slice(arguments, 1)))\r\n var restKeys = keys(rest)\r\n arrayEach(keys(destination), function (key) {\r\n if (includes(restKeys, key)) {\r\n destination[key] = rest[key]\r\n }\r\n })\r\n }\r\n return destination\r\n}\r\n\r\nexport default destructuring\r\n","import setupDefaults from './setupDefaults'\r\n\r\nimport round from './round'\r\nimport ceil from './ceil'\r\nimport floor from './floor'\r\n\r\nimport isNumber from './isNumber'\r\nimport toValueString from './toValueString'\r\nimport toFixed from './toFixed'\r\n\r\nimport toNumberString from './toNumberString'\r\nimport assign from './assign'\r\n\r\n/**\r\n * 千分位分隔符、小数点\r\n *\r\n * @param {String/Number} num 数值\r\n * @param {CommafyOptions} options 参数\r\n * @return {String}\r\n */\r\nfunction commafy(num, options) {\r\n var opts = assign({}, setupDefaults.commafyOptions, options)\r\n var optDigits = opts.digits\r\n var isNum = isNumber(num)\r\n var rest, result, isNegative, intStr, floatStr\r\n if (isNum) {\r\n rest = (opts.ceil ? ceil : (opts.floor ? floor : round))(num, optDigits)\r\n result = toNumberString(optDigits ? toFixed(rest, optDigits) : rest).split('.')\r\n intStr = result[0]\r\n floatStr = result[1]\r\n isNegative = intStr && rest < 0\r\n if (isNegative) {\r\n intStr = intStr.substring(1, intStr.length)\r\n }\r\n } else {\r\n rest = toValueString(num).replace(/,/g, '')\r\n result = rest ? [rest] : []\r\n intStr = result[0]\r\n }\r\n if (result.length) {\r\n return (isNegative ? '-' : '') + intStr.replace(new RegExp('(?=(?!(\\\\b))(.{' + (opts.spaceNumber || 3) + '})+$)', 'g'), (opts.separator || ',')) + (floatStr ? ('.' + floatStr) : '')\r\n }\r\n return rest\r\n}\r\n\r\nexport default commafy\r\n","import helperNumberAdd from './helperNumberAdd'\r\nimport toNumber from './toNumber'\r\n\r\n/**\r\n * 加法运算\r\n *\r\n * @param { Number } num1 被加数\r\n * @param { Number } num2 加数\r\n * @return {Number}\r\n */\r\nfunction add (num1, num2) {\r\n return helperNumberAdd(toNumber(num1), toNumber(num2))\r\n}\r\n\r\nexport default add\r\n","import helperNumberDecimal from './helperNumberDecimal'\r\nimport toNumberString from './toNumberString'\r\nimport toNumber from './toNumber'\r\nimport toFixed from './toFixed'\r\n\r\n/**\r\n * 减法运算\r\n *\r\n * @param { Number } num1 被减数\r\n * @param { Number } num2 减数\r\n * @return {Number}\r\n */\r\nfunction subtract (num1, num2) {\r\n var subtrahend = toNumber(num1)\r\n var minuend = toNumber(num2)\r\n var str1 = toNumberString(subtrahend)\r\n var str2 = toNumberString(minuend)\r\n var digit1 = helperNumberDecimal(str1)\r\n var digit2 = helperNumberDecimal(str2)\r\n var ratio = Math.pow(10, Math.max(digit1, digit2))\r\n var precision = (digit1 >= digit2) ? digit1 : digit2\r\n return parseFloat(toFixed((subtrahend * ratio - minuend * ratio) / ratio, precision))\r\n}\r\n\r\nexport default subtract\r\n","import helperNumberDivide from './helperNumberDivide'\r\nimport toNumber from './toNumber'\r\n\r\n/**\r\n * 除法运算\r\n *\r\n * @param { Number } num1 数值1\r\n * @param { Number } num2 数值2\r\n * @return {Number}\r\n */\r\nfunction divide (num1, num2) {\r\n return helperNumberDivide(toNumber(num1), toNumber(num2))\r\n}\r\n\r\nexport default divide\r\n","import helperNumberDivide from './helperNumberDivide'\r\n\r\nimport getSize from './getSize'\r\n\r\nimport sum from './sum'\r\n\r\n/**\r\n * 求平均值函数\r\n *\r\n * @param {Array} array 数组\r\n * @param {Function/String} iterate 方法或属性\r\n * @param {Object} context 上下文\r\n * @return {Number}\r\n */\r\nfunction mean (array, iterate, context) {\r\n return helperNumberDivide(sum(array, iterate, context), getSize(array))\r\n}\r\n\r\nexport default mean\r\n","import helperGetDateTime from './helperGetDateTime'\r\n\r\nimport now from './now'\r\nimport toStringDate from './toStringDate'\r\n\r\nimport isDate from './isDate'\r\n\r\n/**\r\n * 将日期格式化为时间戳\r\n *\r\n * @param {String/Number/Date} str 日期或数字\r\n * @param {String} format 解析日期格式\r\n * @returns Number\r\n */\r\nvar timestamp = function (str, format) {\r\n if (str) {\r\n var date = toStringDate(str, format)\r\n return isDate(date) ? helperGetDateTime(date) : date\r\n }\r\n return now()\r\n}\r\n\r\nexport default timestamp\r\n","import toDateString from './toDateString'\r\n\r\n/**\r\n * 比较两个日期\r\n *\r\n * @param {Number/String/Date} date1 日期\r\n * @param {Number/String/Date} date2 日期\r\n * @param {String} format 对比格式\r\n */\r\nfunction isDateSame (date1, date2, format) {\r\n if (date1 && date2) {\r\n date1 = toDateString(date1, format)\r\n return date1 !== 'Invalid Date' && date1 === toDateString(date2, format)\r\n }\r\n return false\r\n}\r\n\r\nexport default isDateSame\r\n","import getWhatMonth from './getWhatMonth'\r\n\r\nimport toStringDate from './toStringDate'\r\n\r\nimport isValidDate from './isValidDate'\r\n\r\nfunction getQuarterNumber (date) {\r\n var month = date.getMonth()\r\n if (month < 3) {\r\n return 1\r\n } else if (month < 6) {\r\n return 2\r\n } else if (month < 9) {\r\n return 3\r\n }\r\n return 4\r\n}\r\n\r\n/**\r\n * 返回前几季度或后几季度的日期\r\n *\r\n * @param {Date} date 日期\r\n * @param {Number} offset 季度(默认当前季度)、前几季度、后几季度\r\n * @param {Number} day 获取哪天:月初(first)、月末(last)、指定天数(数值),如果为空,但超过指定月份的天数时,则默认单月最后一天\r\n * @return {Date}\r\n */\r\nfunction getWhatQuarter (date, offset, day) {\r\n var currMonth, monthOffset = offset && !isNaN(offset) ? offset * 3 : 0\r\n date = toStringDate(date)\r\n if (isValidDate(date)) {\r\n currMonth = (getQuarterNumber(date) - 1) * 3\r\n date.setMonth(currMonth)\r\n return getWhatMonth(date, monthOffset, day)\r\n }\r\n return date\r\n}\r\n\r\nexport default getWhatQuarter\r\n","import staticStrFirst from './staticStrFirst'\r\nimport staticStrLast from './staticStrLast'\r\nimport staticParseInt from './staticParseInt'\r\n\r\nimport helperGetDateFullYear from './helperGetDateFullYear'\r\nimport helperGetDateMonth from './helperGetDateMonth'\r\nimport helperGetDateTime from './helperGetDateTime'\r\n\r\nimport toStringDate from './toStringDate'\r\nimport isValidDate from './isValidDate'\r\n\r\n/**\r\n * 返回前几小时或后几小时的日期\r\n *\r\n * @param {Date} date 日期或数字\r\n * @param {Number} offset 小时偏移量(默认0)、前几小时、后几小时\r\n * @param {String} mode 指定分钟(null默认当前分)、0分(first)、59分(last)\r\n * @return {Date}\r\n */\r\nfunction getWhatHours (date, offset, mode) {\r\n date = toStringDate(date)\r\n if (isValidDate(date) && !isNaN(offset)) {\r\n date.setHours(date.getHours() + staticParseInt(offset))\r\n if (mode === staticStrFirst) {\r\n return new Date(helperGetDateFullYear(date), helperGetDateMonth(date), date.getDate(), date.getHours())\r\n } else if (mode === staticStrLast) {\r\n return new Date(helperGetDateTime(getWhatHours(date, 1, staticStrFirst)) - 1)\r\n }\r\n }\r\n return date\r\n}\r\n\r\nexport default getWhatHours\r\n","import staticStrFirst from './staticStrFirst'\r\nimport staticStrLast from './staticStrLast'\r\nimport staticParseInt from './staticParseInt'\r\n\r\nimport helperGetDateFullYear from './helperGetDateFullYear'\r\nimport helperGetDateMonth from './helperGetDateMonth'\r\nimport helperGetDateTime from './helperGetDateTime'\r\n\r\nimport toStringDate from './toStringDate'\r\nimport isValidDate from './isValidDate'\r\n\r\n/**\r\n * 返回前几分钟或后几分钟的日期\r\n *\r\n * @param {Date} date 日期或数字\r\n * @param {Number} offset 分钟偏移量(默认0)、前几分钟、后几分钟\r\n * @param {String} mode 指定秒(null默认当前秒)、0秒(first)、59秒(last)\r\n * @return {Date}\r\n */\r\nfunction getWhatMinutes (date, offset, mode) {\r\n date = toStringDate(date)\r\n if (isValidDate(date) && !isNaN(offset)) {\r\n date.setMinutes(date.getMinutes() + staticParseInt(offset))\r\n if (mode === staticStrFirst) {\r\n return new Date(helperGetDateFullYear(date), helperGetDateMonth(date), date.getDate(), date.getHours(), date.getMinutes())\r\n } else if (mode === staticStrLast) {\r\n return new Date(helperGetDateTime(getWhatMinutes(date, 1, staticStrFirst)) - 1)\r\n }\r\n }\r\n return date\r\n}\r\n\r\nexport default getWhatMinutes\r\n","import staticStrFirst from './staticStrFirst'\r\nimport staticStrLast from './staticStrLast'\r\nimport staticParseInt from './staticParseInt'\r\n\r\nimport helperGetDateFullYear from './helperGetDateFullYear'\r\nimport helperGetDateMonth from './helperGetDateMonth'\r\nimport helperGetDateTime from './helperGetDateTime'\r\n\r\nimport toStringDate from './toStringDate'\r\nimport isValidDate from './isValidDate'\r\n\r\n/**\r\n * 返回前几秒或后几秒的日期\r\n *\r\n * @param {Date} date 日期或数字\r\n * @param {Number} offset 秒偏移量(默认0)、前几秒、后几秒\r\n * @param {String} mode 指定毫秒(null默认当前毫秒)、0毫秒(first)、59毫秒(last)\r\n * @return {Date}\r\n */\r\nfunction getWhatSeconds (date, offset, mode) {\r\n date = toStringDate(date)\r\n if (isValidDate(date) && !isNaN(offset)) {\r\n date.setSeconds(date.getSeconds() + staticParseInt(offset))\r\n if (mode === staticStrFirst) {\r\n return new Date(helperGetDateFullYear(date), helperGetDateMonth(date), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds())\r\n } else if (mode === staticStrLast) {\r\n return new Date(helperGetDateTime(getWhatSeconds(date, 1, staticStrFirst)) - 1)\r\n }\r\n }\r\n return date\r\n}\r\n\r\nexport default getWhatSeconds\r\n","import getWhatYear from './getWhatYear'\r\nimport toStringDate from './toStringDate'\r\n\r\nimport isValidDate from './isValidDate'\r\nimport isLeapYear from './isLeapYear'\r\n\r\n/**\r\n * 返回某个年份的天数\r\n *\r\n * @param {Date} date 日期或数字\r\n * @param {Number} offset 年(默认当年)、前几个年、后几个年\r\n * @return {Number}\r\n */\r\nfunction getDayOfYear (date, year) {\r\n date = toStringDate(date)\r\n if (isValidDate(date)) {\r\n return isLeapYear(getWhatYear(date, year)) ? 366 : 365\r\n }\r\n return NaN\r\n}\r\n\r\nexport default getDayOfYear\r\n","import staticDayTime from './staticDayTime'\r\nimport staticStrFirst from './staticStrFirst'\r\nimport staticStrLast from './staticStrLast'\r\n\r\nimport helperGetDateTime from './helperGetDateTime'\r\n\r\nimport getWhatMonth from './getWhatMonth'\r\nimport toStringDate from './toStringDate'\r\n\r\nimport isValidDate from './isValidDate'\r\n\r\n/**\r\n * 返回某个月份的天数\r\n *\r\n * @param {Date} date 日期或数字\r\n * @param {Number} offset 月(默认当月)、前几个月、后几个月\r\n * @return {Number}\r\n */\r\nfunction getDayOfMonth (date, month) {\r\n date = toStringDate(date)\r\n if (isValidDate(date)) {\r\n return Math.floor((helperGetDateTime(getWhatMonth(date, month, staticStrLast)) - helperGetDateTime(getWhatMonth(date, month, staticStrFirst))) / staticDayTime) + 1\r\n }\r\n return NaN\r\n}\r\n\r\nexport default getDayOfMonth\r\n","import toValueString from './toValueString'\r\n\r\nimport helperStringRepeat from './helperStringRepeat'\r\n\r\n/**\r\n * 将字符串重复 n 次\r\n *\r\n * @param {String} str 字符串\r\n * @param {Number} count 次数\r\n * @return {String}\r\n */\r\nfunction repeat (str, count) {\r\n return helperStringRepeat(toValueString(str), count)\r\n}\r\n\r\nexport default repeat\r\n","import toValueString from './toValueString'\r\n\r\nimport isUndefined from './isUndefined'\r\n\r\nimport helperStringRepeat from './helperStringRepeat'\r\n\r\n/**\r\n * 用指定字符从后面开始补全字符串\r\n *\r\n * @param {String} str 字符串\r\n * @param {Number} targetLength 结果长度\r\n * @param {Number} padString 补全字符\r\n * @return {String}\r\n */\r\nfunction padEnd (str, targetLength, padString) {\r\n var rest = toValueString(str)\r\n targetLength = targetLength >> 0\r\n padString = isUndefined(padString) ? ' ' : '' + padString\r\n if (rest.padEnd) {\r\n return rest.padEnd(targetLength, padString)\r\n }\r\n if (targetLength > rest.length) {\r\n targetLength -= rest.length\r\n if (targetLength > padString.length) {\r\n padString += helperStringRepeat(padString, targetLength / padString.length)\r\n }\r\n return rest + padString.slice(0, targetLength)\r\n }\r\n return rest\r\n}\r\n\r\nexport default padEnd\r\n","import toValueString from './toValueString'\r\n\r\n/**\r\n * 判断字符串是否在源字符串的头部\r\n *\r\n * @param {String} str 字符串\r\n * @param {String/Number} val 值\r\n * @param {Number} startIndex 开始索引\r\n * @return {String}\r\n */\r\nfunction startsWith (str, val, startIndex) {\r\n var rest = toValueString(str)\r\n return (arguments.length === 1 ? rest : rest.substring(startIndex)).indexOf(val) === 0\r\n}\r\n\r\nexport default startsWith\r\n","import toValueString from './toValueString'\r\n\r\n/**\r\n * 判断字符串是否在源字符串的尾部\r\n *\r\n * @param {String} str 字符串\r\n * @param {String/Number} val 值\r\n * @param {Number} startIndex 开始索引\r\n * @return {String}\r\n */\r\nfunction endsWith (str, val, startIndex) {\r\n var rest = toValueString(str)\r\n var argsLen = arguments.length\r\n return argsLen > 1 && (argsLen > 2 ? rest.substring(0, startIndex).indexOf(val) === startIndex - 1 : rest.indexOf(val) === rest.length - 1)\r\n}\r\n\r\nexport default endsWith\r\n","import template from './template'\r\n\r\n/**\r\n * 字符串格式化占位符\r\n * @param { string } str \r\n * @param { object | any[] } obj \r\n */\r\nfunction toFormatString (str, obj) {\r\n return template(str, obj,{ tmplRE: /\\{([.\\w[\\]\\s]+)\\}/g })\r\n}\r\n\r\nexport default toFormatString\r\n","/**\r\n * 一个空的方法,始终返回 undefined,可用于初始化值\r\n */\r\nfunction noop () {}\r\n\r\nexport default noop\r\n","import slice from './slice'\r\n\r\n/**\r\n * 创建一个绑定上下文的函数\r\n *\r\n * @param {Function} callback 函数\r\n * @param {Object} context 上下文\r\n * @param {*} args 额外的参数\r\n * @return {Object}\r\n */\r\nfunction bind (callback, context) {\r\n var args = slice(arguments, 2)\r\n return function () {\r\n return callback.apply(context, slice(arguments).concat(args))\r\n }\r\n}\r\n\r\nexport default bind\r\n","import slice from './slice'\r\n\r\n/**\r\n * 创建一个只能调用一次的函数,只会返回第一次执行后的结果\r\n *\r\n * @param {Function} callback 函数\r\n * @param {Object} context 上下文\r\n * @param {*} args 额外的参数\r\n * @return {Object}\r\n */\r\nfunction once (callback, context) {\r\n var done = false\r\n var rest = null\r\n var args = slice(arguments, 2)\r\n return function () {\r\n if (done) {\r\n return rest\r\n }\r\n rest = callback.apply(context, slice(arguments).concat(args))\r\n done = true\r\n return rest\r\n }\r\n}\r\n\r\nexport default once\r\n","import slice from './slice'\r\n\r\n/**\r\n * 创建一个函数, 调用次数超过 count 次之后执行回调并将所有结果记住后返回\r\n *\r\n * @param {Number} count 调用次数\r\n * @param {Function} callback 完成回调\r\n * @return {Object}\r\n */\r\nfunction after (count, callback, context) {\r\n var runCount = 0\r\n var rests = []\r\n return function () {\r\n var args = arguments\r\n runCount++\r\n if (runCount <= count) {\r\n rests.push(args[0])\r\n }\r\n if (runCount >= count) {\r\n callback.apply(context, [rests].concat(slice(args)))\r\n }\r\n }\r\n}\r\n\r\nexport default after\r\n","import slice from './slice'\r\n\r\n/**\r\n * 创建一个函数, 调用次数不超过 count 次之前执行回调并将所有结果记住后返回\r\n *\r\n * @param {Number} count 调用次数\r\n * @param {Function} callback 完成回调\r\n * @return {Object}\r\n */\r\nfunction before (count, callback, context) {\r\n var runCount = 0\r\n var rests = []\r\n context = context || this\r\n return function () {\r\n var args = arguments\r\n runCount++\r\n if (runCount < count) {\r\n rests.push(args[0])\r\n callback.apply(context, [rests].concat(slice(args)))\r\n }\r\n }\r\n}\r\n\r\nexport default before\r\n","import assign from './assign'\r\n\r\n/**\r\n * 节流函数;当被调用 n 毫秒后才会执行,如果在这时间内又被调用则至少每隔 n 秒毫秒调用一次该函数\r\n *\r\n * @param {Function} callback 回调\r\n * @param {Number} wait 多少秒毫\r\n * @param {Object} options 参数{leading: 是否在之前执行, trailing: 是否在之后执行}\r\n * @return {Function}\r\n */\r\nfunction throttle (callback, wait, options) {\r\n var args = null\r\n var context = null\r\n var runFlag = false\r\n var timeout = null\r\n var opts = assign({ leading: true, trailing: true }, options)\r\n var optLeading = opts.leading\r\n var optTrailing = opts.trailing\r\n\r\n var gcFn = function () {\r\n args = null\r\n context = null\r\n }\r\n\r\n var runFn = function () {\r\n runFlag = true\r\n callback.apply(context, args)\r\n timeout = setTimeout(endFn, wait)\r\n gcFn()\r\n }\r\n\r\n var endFn = function () {\r\n timeout = null\r\n if (runFlag) {\r\n gcFn()\r\n return\r\n }\r\n if (optTrailing === true) {\r\n runFn()\r\n return\r\n }\r\n gcFn()\r\n }\r\n\r\n var cancelFn = function () {\r\n var rest = timeout !== null\r\n if (rest) {\r\n clearTimeout(timeout)\r\n }\r\n gcFn()\r\n timeout = null\r\n runFlag = false\r\n return rest\r\n }\r\n\r\n var throttled = function () {\r\n args = arguments\r\n context = this\r\n runFlag = false\r\n if (timeout === null && optLeading === true) {\r\n runFn()\r\n return\r\n }\r\n if (optTrailing === true) {\r\n timeout = setTimeout(endFn, wait)\r\n }\r\n }\r\n\r\n throttled.cancel = cancelFn\r\n\r\n return throttled\r\n}\r\n\r\nexport default throttle\r\n","import assign from './assign'\r\n\r\n/**\r\n * 函数去抖;当被调用 n 毫秒后才会执行,如果在这时间内又被调用则将重新计算执行时间\r\n *\r\n * @param {Function} callback 回调\r\n * @param {Number} wait 多少秒毫\r\n * @param {Object} options 参数{leading: 是否在之前执行, trailing: 是否在之后执行}\r\n * @return {Function}\r\n */\r\nfunction debounce (callback, wait, options) {\r\n var args = null\r\n var context = null\r\n var opts = typeof options === 'boolean' ? { leading: options, trailing: !options } : assign({ leading: false, trailing: true }, options)\r\n var runFlag = false\r\n var timeout = null\r\n var optLeading = opts.leading\r\n var optTrailing = opts.trailing\r\n\r\n var gcFn = function () {\r\n args = null\r\n context = null\r\n }\r\n\r\n var runFn = function () {\r\n runFlag = true\r\n callback.apply(context, args)\r\n gcFn()\r\n }\r\n\r\n var endFn = function () {\r\n if (optLeading === true) {\r\n timeout = null\r\n }\r\n if (runFlag) {\r\n gcFn()\r\n return\r\n }\r\n if (optTrailing === true) {\r\n runFn()\r\n return\r\n }\r\n gcFn()\r\n }\r\n\r\n var cancelFn = function () {\r\n var rest = timeout !== null\r\n if (rest) {\r\n clearTimeout(timeout)\r\n }\r\n gcFn()\r\n timeout = null\r\n runFlag = false\r\n return rest\r\n }\r\n\r\n var debounced = function () {\r\n runFlag = false\r\n args = arguments\r\n context = this\r\n if (timeout === null) {\r\n if (optLeading === true) {\r\n runFn()\r\n }\r\n } else {\r\n clearTimeout(timeout)\r\n }\r\n timeout = setTimeout(endFn, wait)\r\n }\r\n\r\n debounced.cancel = cancelFn\r\n\r\n return debounced\r\n}\r\n\r\nexport default debounce\r\n","import slice from './slice'\r\n\r\n/**\r\n * 该方法和 setTimeout 一样的效果,区别就是支持上下文和额外参数\r\n *\r\n * @param {Function} callback 函数\r\n * @param {Number} wait 延迟毫秒\r\n * @param {*} args 额外的参数\r\n * @return {Number}\r\n */\r\nfunction delay (callback, wait) {\r\n var args = slice(arguments, 2)\r\n var context = this\r\n return setTimeout(function () {\r\n callback.apply(context, args)\r\n }, wait)\r\n}\r\n\r\nexport default delay\r\n","import staticLocation from './staticLocation'\r\n\r\nimport helperGetLocatOrigin from './helperGetLocatOrigin'\r\n\r\nimport lastIndexOf from './lastIndexOf'\r\n\r\nfunction getBaseURL () {\r\n if (staticLocation) {\r\n var pathname = staticLocation.pathname\r\n var lastIndex = lastIndexOf(pathname, '/') + 1\r\n return helperGetLocatOrigin() + (lastIndex === pathname.length ? pathname : pathname.substring(0, lastIndex))\r\n }\r\n return ''\r\n}\r\n\r\nexport default getBaseURL\r\n","import staticLocation from './staticLocation'\r\n\r\nimport parseUrl from './parseUrl'\r\n\r\n/**\r\n * 获取地址栏信息\r\n *\r\n * @return Object\r\n */\r\nfunction locat () {\r\n return staticLocation ? parseUrl(staticLocation.href) : {}\r\n}\r\n\r\nexport default locat\r\n","import type { WritableComputedRef } from \"vue\";\r\nimport { isArray, isObject } from \"./is\";\r\nimport { computed } from \"vue\";\r\nimport XEUtils from \"xe-utils\";\r\nimport { twMerge } from \"tailwind-merge\";\r\nimport type { ClassValue } from \"clsx\";\r\nimport { clsx } from \"clsx\";\r\nimport { klona } from \"klona/full\";\r\nimport dayjs from \"dayjs\";\r\nimport utc from \"dayjs/plugin/utc\";\r\nimport timezone from \"dayjs/plugin/timezone\";\r\n\r\nlet isExtendDayjs = false;\r\n\r\nexport type DebounceSettings = {\r\n /**\r\n * 前沿触发\r\n */\r\n leading?: boolean | undefined;\r\n /**\r\n * 最大等待时间\r\n */\r\n maxWait?: number | undefined;\r\n /**\r\n * 尾部触发\r\n */\r\n trailing?: boolean | undefined;\r\n};\r\n\r\n/**\r\n * 获取localStorage数据,item值非json对象,请直接localStorage.setItem\r\n * @param item 键名\r\n */\r\nexport function getStorage<T = any>(item: string): T | string | null {\r\n if (!item) return null;\r\n const localdata = localStorage.getItem(item);\r\n if (!localdata) return null;\r\n\r\n try {\r\n return JSON.parse(localdata, (_key, value) => {\r\n if (value && typeof value === \"string\") {\r\n const fn = function () {\r\n return value.replace(\"TT_FUNCTION\", \"\");\r\n };\r\n return value.includes(\"TT_FUNCTION\") ? fn() : value;\r\n }\r\n return value;\r\n });\r\n } catch {\r\n // console.log(error)\r\n return localdata;\r\n }\r\n}\r\n\r\n/**\r\n * @description 计算文字宽度\r\n */\r\nexport function calcWordsWidth(\r\n words: string,\r\n fontSize = \"12\",\r\n fontFamily = \"Microsoft YaHei,Arial,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue','Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji'\",\r\n): number {\r\n let wordsWidth = 0;\r\n const canvas = document.createElement(\"canvas\");\r\n const ctx = canvas.getContext(\"2d\");\r\n if (ctx) {\r\n ctx.font = `${fontSize} ${fontFamily}`;\r\n wordsWidth = ctx.measureText(words).width;\r\n }\r\n return wordsWidth;\r\n}\r\n\r\n/**\r\n * @description 脏数据检测方法\r\n * @param newObj 新对象\r\n * @param oldObj 原始对象\r\n * @param keyObj 对象中数组的唯一key e: { list: { key: 'id' }, list2: { key: 'id' }, }\r\n */\r\nexport function getDifference(\r\n newObj: { [key: string]: any },\r\n oldObj: { [key: string]: any },\r\n keyObj?: any,\r\n): {\r\n [k: string]: any;\r\n} {\r\n const excludeAll = keyObj?.excludeAll || [];\r\n const excludeItem = keyObj?.exclude || [];\r\n if (!excludeAll.includes(\"Id\")) excludeAll.push(\"Id\");\r\n if (!excludeAll.includes(\"rowId\")) excludeAll.push(\"rowId\");\r\n return Object.fromEntries(\r\n Object.entries(newObj).reduce((r: any, [k, v]) => {\r\n if (excludeAll.includes(k) || excludeItem.includes(k)) return r;\r\n else if (v && isObject(v)) setDifferenceObj(keyObj, oldObj, v, k, r);\r\n else if (v && isArray(v)) setDifferenceArr(keyObj, oldObj, v, k, r);\r\n else setDifferenceField(keyObj, oldObj, v, k, r);\r\n\r\n return r;\r\n }, []),\r\n );\r\n}\r\n/** 脏数据检测方法--设置对象 */\r\nexport function setDifferenceObj(keyObj: any, oldObj: any, v: any, k: any, r: any): void {\r\n const temp = getDifference(v, oldObj[k] || {}, {\r\n excludeAll: keyObj?.excludeAll,\r\n ...keyObj,\r\n });\r\n if (Object.keys(temp).length) r.push([k, temp]);\r\n}\r\n/** 脏数据检测方法--设置数组 */\r\nexport function setDifferenceArr(keyObj: any, oldObj: any, v: any[], k: any, r: any): void {\r\n const arr: any[] = [];\r\n const arrKey = (keyObj || {})[k]?.key;\r\n if (oldObj[k]) {\r\n const len: any[] = v?.length >= oldObj[k]?.length ? v : oldObj[k];\r\n const min: any[] = v?.length < oldObj[k]?.length ? v : oldObj[k];\r\n if (arrKey) {\r\n len.forEach(e => {\r\n const o = min.find((i: any) => i[arrKey] === e[arrKey]);\r\n if (o) {\r\n const t = getDifference(e, o, {\r\n excludeAll: keyObj?.excludeAll,\r\n ...keyObj[k],\r\n });\r\n if (Object.keys(t).length) arr.push({ [arrKey]: o[arrKey], ...t });\r\n } else {\r\n arr.push(e);\r\n }\r\n });\r\n } else {\r\n len.forEach((e, index) => {\r\n const o = min[index];\r\n if ((isObject(e) && !isObject(o)) || (isArray(e) && !isArray(o)) || typeof e !== typeof o || !o) {\r\n arr.push(e);\r\n } else if (isObject(e) || isArray(e)) {\r\n const t = getDifference(e, o, { excludeAll: keyObj?.excludeAll });\r\n if (Object.keys(t).length) arr.push({ ...t });\r\n } else if (e !== o) {\r\n arr.push(e);\r\n }\r\n });\r\n }\r\n } else {\r\n arr.push(...v);\r\n }\r\n\r\n if (arr.length) r.push([k, arr]);\r\n}\r\n/** 脏数据检测方法--设置普通字段 */\r\nexport function setDifferenceField(keyObj: any, oldObj: any, v: any[], k: any, r: any): void {\r\n const notNullToFalse = keyObj?.notNullToFalse || [];\r\n if (\r\n (typeof v === \"string\" && typeof oldObj[k] === \"number\") ||\r\n (typeof v === \"number\" && typeof oldObj[k] === \"string\")\r\n ) {\r\n if (Number(v) !== Number(oldObj[k])) r.push([k, v]);\r\n } else if ([undefined, null, \"\"].includes(v as any)) {\r\n if (![undefined, null, \"\"].includes(oldObj[k] as any)) r.push([k, v]);\r\n } else if (v !== oldObj[k]) {\r\n if ((v as any) === false && [undefined, null, \"\"].includes(oldObj[k] as any) && !notNullToFalse.includes(k)) {\r\n return;\r\n }\r\n r.push([k, v]);\r\n }\r\n}\r\n\r\nexport function deepMerge<T = any>(src: any = {}, target: any = {}): T {\r\n let key: string;\r\n for (key in target) src[key] = isObject(src[key]) ? deepMerge(src[key], target[key]) : (src[key] = target[key]);\r\n\r\n return src;\r\n}\r\n\r\nexport function toCssUnit(val?: number | string, unit = \"px\"): string {\r\n if (XEUtils.isNumber(val) || /^\\d+$/.test(`${val}`)) {\r\n return `${val}${unit}`;\r\n }\r\n return `${val || \"\"}`;\r\n}\r\n/** 响应式绑定 */\r\nexport function useVModel(props: Record<string, any>, propName: string, emit: any): WritableComputedRef<any, any> {\r\n // console.log(props[propName], '------------')\r\n return computed({\r\n get() {\r\n return new Proxy(props[propName], {\r\n set(obj, name, val) {\r\n emit(`update:${propName}`, {\r\n ...obj,\r\n [name]: val,\r\n });\r\n return true;\r\n },\r\n });\r\n },\r\n set(value) {\r\n emit(`update:${propName}`, value);\r\n },\r\n });\r\n}\r\n\r\nexport function bindMethods<T extends object>(instance: T): T {\r\n const proto = Object.getPrototypeOf(instance);\r\n if (!proto || proto === Object.prototype) {\r\n return instance;\r\n }\r\n\r\n const propertyNames = Object.getOwnPropertyNames(proto);\r\n for (const name of propertyNames) {\r\n const value = (instance as any)[name];\r\n if (name !== \"constructor\" && typeof value === \"function\") {\r\n (instance as any)[name] = value.bind(instance);\r\n }\r\n }\r\n\r\n return instance;\r\n}\r\n\r\nexport function deepCopy<T>(obj: T): T {\r\n if (obj === null || typeof obj !== \"object\") {\r\n return obj;\r\n }\r\n\r\n if (obj instanceof Date) {\r\n return new Date(obj.getTime()) as any;\r\n }\r\n\r\n if (obj instanceof RegExp) {\r\n return new RegExp(obj) as any;\r\n }\r\n\r\n if (Array.isArray(obj)) {\r\n return obj.map(item => deepCopy(item)) as any;\r\n }\r\n\r\n const result: any = {};\r\n Object.keys(obj).forEach(key => {\r\n result[key] = deepCopy((obj as any)[key]);\r\n });\r\n\r\n return result;\r\n}\r\n\r\nexport function arrayToTree(items: any[], id = \"id\", parentId = \"parentId\", children = \"children\"): any[] {\r\n const itemMap = new Map();\r\n const result: any[] = [];\r\n\r\n items.forEach(item => {\r\n itemMap.set(item[id], { ...item, [children]: [] });\r\n });\r\n\r\n items.forEach(item => {\r\n const currentItem = itemMap.get(item[id]);\r\n if (item[parentId]) {\r\n const parentItem = itemMap.get(item[parentId]);\r\n if (parentItem) parentItem[children].push(currentItem);\r\n } else {\r\n result.push(currentItem);\r\n }\r\n });\r\n\r\n return result;\r\n}\r\n\r\nexport function getFirstNonNullOrUndefined(...args: any[]): any {\r\n for (const arg of args) {\r\n if (arg !== undefined && arg !== null) {\r\n return arg;\r\n }\r\n }\r\n return undefined;\r\n}\r\n\r\n/** className 合并 */\r\nexport function clnm(...inputs: ClassValue[]): string {\r\n return twMerge(clsx(inputs));\r\n}\r\n\r\n/**\r\n * 触发窗口的 resize 事件\r\n * @description 手动触发浏览器窗口的 resize 事件,用于强制更新依赖窗口大小的组件或布局\r\n *\r\n * @example\r\n * // 在DOM更新后触发重新布局\r\n * updateDOM()\r\n * triggerWindowResize()\r\n *\r\n * // 在组件挂载后强制更新响应式布局\r\n * onMounted(() => {\r\n * triggerWindowResize()\r\n * })\r\n */\r\nexport function triggerWindowResize(): void {\r\n // 创建一个新的 resize 事件\r\n const resizeEvent = new Event(\"resize\");\r\n\r\n // 触发 window 的 resize 事件\r\n window.dispatchEvent(resizeEvent);\r\n}\r\n\r\n/**\r\n * 遍历目标数组 从源对象获取数据并赋值。\r\n * @param targrt array 目标对象\r\n * @param sources {} 源对象\r\n * @param key 关联字段key\r\n * @param content 要修改的字段 字段名string 或数组\r\n */\r\nexport function arrGive(targrt: any, sources: any, key: any = \"prop\", content: any = \"content\"): void {\r\n targrt.forEach((element: any) => {\r\n if (Object.prototype.hasOwnProperty.call(element, key)) {\r\n if (isArray(content)) {\r\n content.forEach((contentItem: any) => {\r\n if (Object.prototype.hasOwnProperty.call(element, contentItem)) element[contentItem] = sources[element[key]];\r\n });\r\n } else {\r\n if (Object.prototype.hasOwnProperty.call(element, content)) element[content] = sources[element[key]];\r\n }\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * 时间转换过滤器 依赖dayjs 默认UTC时间\r\n * @param value key 时间戳接收毫秒\r\n * @param format 格式化样式YYYY-MM-DD HH:mm:ss.SSS A (dayjs的format)\r\n * @param tz 默认时区 Asia/Shanghai\r\n */\r\nexport const dateFormat = function (\r\n value: string | number | Date,\r\n format = \"YYYY-MM-DD HH:mm:ss\",\r\n tz: string = \"Asia/Shanghai\",\r\n): string {\r\n if (value === \"\" || value === null || value === undefined || value === 0 || value === \"0\") return \"\";\r\n\r\n if (!dayjs(value).isValid()) return \"\";\r\n\r\n if (!isExtendDayjs) {\r\n dayjs.extend(utc);\r\n dayjs.extend(timezone);\r\n isExtendDayjs = true;\r\n }\r\n\r\n return dayjs(value).tz(tz).format(format);\r\n};\r\n\r\n/**\r\n * 深度克隆对象或数组 禁止循环引用对象\r\n * @description 使用 klona 库进行深度克隆,支持所有类型的数据结构 https://www.npmjs.com/package/klona\r\n * @template T 要克隆的数据类型 (默认: any)\r\n * @param source 源数据\r\n * @returns 深度克隆后的新数据\r\n *\r\n * @examples\r\n * // 克隆对象\r\n * const obj = { a: 1, b: { c: 2 } }\r\n * const clonedObj = cloneDeep(obj)\r\n *\r\n * // 克隆数组\r\n * const arr = [1, { b: 2 }]\r\n * const clonedArr = cloneDeep(arr)\r\n *\r\n * // 克隆 Date 对象\r\n * const date = new Date()\r\n * const clonedDate = cloneDeep(date)\r\n */\r\nexport function cloneDeep<T = any>(source: T): T {\r\n return klona(source);\r\n}\r\n\r\n/**\r\n * 从对象中排除指定的属性\r\n * 返回一个新对象,不包含指定的属性\r\n */\r\nexport function omit<T, TKeys extends keyof T>(obj: T, keys: TKeys[]): Omit<T, TKeys> {\r\n if (!obj) return {} as Omit<T, TKeys>;\r\n if (!keys || keys.length === 0) return obj as Omit<T, TKeys>;\r\n return keys.reduce(\r\n (acc, key) => {\r\n // 这里确实很粗暴,我知道,它在修改对象\r\n // 但在这个非常有限的范围内,我们允许这样做\r\n // 因为这涉及到 omit 函数的性能问题\r\n // 这不是一个应该在其他地方使用的模式或实践\r\n delete acc[key];\r\n return acc;\r\n },\r\n { ...obj },\r\n );\r\n}\r\n\r\n/**\r\n * 防抖函数\r\n * @param func 实际要执行的函数\r\n * @param delay 延迟时间,单位是毫秒(ms)\r\n * @param options 配置选项\r\n * @return 返回一个防抖函数\r\n */\r\nexport function debounce<TArgs extends any[], TReturn = any>(\r\n func: (...args: TArgs) => TReturn,\r\n delay: number = 200,\r\n options: DebounceSettings = {},\r\n): DebounceFunction<TArgs, TReturn> {\r\n const { leading = false, trailing = true, maxWait } = options;\r\n\r\n // 状态变量\r\n let timer: number | undefined;\r\n let maxTimer: number | undefined;\r\n let lastCallTime: number | undefined;\r\n let lastInvokeTime = 0;\r\n let lastArgs: TArgs | undefined;\r\n let result: any;\r\n\r\n // 执行原函数\r\n function invokeFunc(time: number): TReturn {\r\n const args = lastArgs;\r\n lastArgs = undefined; // 立即清理引用\r\n lastInvokeTime = time;\r\n result = func(...args);\r\n return result;\r\n }\r\n\r\n // 安全的定时器清理\r\n function clearAllTimers(): void {\r\n if (timer !== undefined) {\r\n window.clearTimeout(timer);\r\n timer = undefined;\r\n }\r\n if (maxTimer !== undefined) {\r\n window.clearTimeout(maxTimer);\r\n maxTimer = undefined;\r\n }\r\n }\r\n\r\n // 完整的状态重置\r\n function resetState(): void {\r\n clearAllTimers();\r\n lastInvokeTime = 0;\r\n lastArgs = undefined;\r\n lastCallTime = undefined;\r\n result = undefined; // 清理结果引用\r\n }\r\n\r\n // 计算剩余等待时间\r\n function remainingWait(time: number): number {\r\n const timeSinceLastCall = time - lastCallTime!;\r\n const timeSinceLastInvoke = time - lastInvokeTime;\r\n const timeWaiting = delay - timeSinceLastCall;\r\n\r\n return maxWait !== undefined ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;\r\n }\r\n\r\n // 判断是否应该立即执行\r\n function shouldInvoke(time: number): boolean {\r\n if (lastCallTime === undefined) return true;\r\n\r\n const timeSinceLastCall = time - lastCallTime;\r\n const timeSinceLastInvoke = time - lastInvokeTime;\r\n\r\n return (\r\n timeSinceLastCall >= delay || timeSinceLastCall < 0 || (maxWait !== undefined && timeSinceLastInvoke >= maxWait)\r\n );\r\n }\r\n\r\n // leading edge 处理\r\n function leadingEdge(time: number): TReturn | undefined {\r\n lastInvokeTime = time;\r\n\r\n // 确保旧定时器被清理\r\n clearAllTimers();\r\n\r\n timer = window.setTimeout(timerExpired, delay);\r\n\r\n if (maxWait !== undefined) {\r\n maxTimer = window.setTimeout(maxTimerExpired, maxWait);\r\n }\r\n\r\n return leading ? invokeFunc(time) : result;\r\n }\r\n\r\n // trailing edge 处理\r\n function trailingEdge(time: number): TReturn | undefined {\r\n timer = undefined;\r\n\r\n if (trailing && lastArgs !== undefined) {\r\n return invokeFunc(time);\r\n }\r\n\r\n lastArgs = undefined; // 清理参数引用\r\n return result;\r\n }\r\n\r\n // 普通定时器到期处理\r\n function timerExpired(): void {\r\n const time = Date.now();\r\n\r\n if (shouldInvoke(time)) {\r\n trailingEdge(time);\r\n return;\r\n }\r\n\r\n // 重新计算等待时间并启动定时器\r\n const remaining = remainingWait(time);\r\n if (remaining > 0) {\r\n timer = window.setTimeout(timerExpired, remaining);\r\n } else {\r\n timer = undefined;\r\n }\r\n }\r\n\r\n // maxWait 定时器到期处理\r\n function maxTimerExpired(): void {\r\n const time = Date.now();\r\n\r\n // 清理所有定时器\r\n clearAllTimers();\r\n\r\n if (lastArgs !== undefined) {\r\n invokeFunc(time);\r\n }\r\n }\r\n\r\n // 主防抖函数\r\n const debounced: DebounceFunction<TArgs, TReturn> = (...args: TArgs): TReturn | undefined => {\r\n const time = Date.now();\r\n const isInvoking = shouldInvoke(time);\r\n\r\n // 保存参数,即使没有参数也要保存空数组\r\n lastArgs = args || ([] as TArgs);\r\n lastCallTime = time;\r\n\r\n if (isInvoking) {\r\n if (timer === undefined) {\r\n return leadingEdge(time);\r\n }\r\n\r\n if (maxWait !== undefined) {\r\n clearAllTimers();\r\n\r\n timer = window.setTimeout(timerExpired, delay);\r\n maxTimer = window.setTimeout(maxTimerExpired, maxWait);\r\n\r\n return leading ? invokeFunc(time) : result;\r\n }\r\n }\r\n\r\n if (timer === undefined) {\r\n timer = window.setTimeout(timerExpired, delay);\r\n\r\n if (maxWait !== undefined) {\r\n maxTimer = window.setTimeout(maxTimerExpired, maxWait);\r\n }\r\n }\r\n\r\n return result;\r\n };\r\n\r\n // 检查是否有待执行的调用\r\n debounced.isPending = (): boolean => {\r\n return timer !== undefined || maxTimer !== undefined;\r\n };\r\n\r\n // 取消所有待执行的调用\r\n debounced.cancel = (): void => {\r\n resetState();\r\n };\r\n\r\n // 立即执行待执行的函数\r\n debounced.flush = (...args: TArgs): TReturn | undefined => {\r\n if (!debounced.isPending()) {\r\n if (args.length > 0) {\r\n return func(...args);\r\n }\r\n return result;\r\n }\r\n\r\n const argsToUse = lastArgs !== undefined ? lastArgs : args;\r\n\r\n resetState();\r\n\r\n return func(...argsToUse);\r\n };\r\n\r\n return debounced;\r\n}\r\n\r\nexport type DebounceFunction<TArgs extends any[], TReturn = any> = {\r\n (...args: TArgs): TReturn;\r\n /**\r\n * Cancels the debounced function\r\n */\r\n cancel: () => void;\r\n /**\r\n * Checks if there is any invocation debounced\r\n */\r\n isPending: () => boolean;\r\n /**\r\n * Runs the debounced function immediately\r\n */\r\n flush: (...args: TArgs) => TReturn;\r\n};\r\n","import type { Defu } from 'defu'\r\nimport { createDefu } from 'defu'\r\n\r\nexport {\r\n /** 定制合并 createMerge=createDefu https://www.npmjs.com/package/defu */\r\n createDefu as createMerge,\r\n /** 对象合并 merge=defu https://www.npmjs.com/package/defu */\r\n defu as merge,\r\n /** 过滤 mergFn=defuFn https://www.npmjs.com/package/defu */\r\n defuFn as mergFn,\r\n} from 'defu'\r\n\r\n/**\r\n * 对象合并函数,支持指定字段直接覆盖和数组类型直接替换\r\n * @param source 源对象,将被合并的目标对象\r\n * @param defaultsAndOptions 其他默认对象,最后一项可为 Source 的 key 数组,指定需要覆盖的 key\r\n * @returns 合并后的对象\r\n */\r\nexport function mergeWithArrayOverride<\r\n Source extends Record<string, any>,\r\n Defaults extends Array<Record<string, any>>,\r\n>(source: Source, ...defaultsAndOptions: [...Defaults]): Defu<Source, Defaults>\r\nexport function mergeWithArrayOverride<\r\n Source extends Record<string, any>,\r\n Defaults extends Array<Record<string, any>>,\r\n>(source: Source, ...defaultsAndOptions: [...Defaults, Array<keyof Source>]): Defu<Source, Defaults>\r\nexport function mergeWithArrayOverride<\r\n Source extends Record<string, any>,\r\n Defaults extends Array<Record<string, any>>,\r\n>(source: Source, ...defaultsAndOptions: [...Defaults, Array<keyof Source>]) {\r\n // 初始化需要覆盖的key数组\r\n let overrideKeys: Array<keyof Source> = []\r\n const lastItem = defaultsAndOptions[defaultsAndOptions.length - 1]\r\n // 检查最后一个参数是否是覆盖key数组\r\n if (\r\n defaultsAndOptions.length > 0 &&\r\n Array.isArray(lastItem) &&\r\n lastItem.every(item => ['string', 'number', 'symbol'].includes(typeof item))\r\n ) {\r\n overrideKeys = defaultsAndOptions.pop() as Array<keyof Source>\r\n }\r\n\r\n // 使用defu创建自定义合并函数\r\n return createDefu((originObj, key, updates) => {\r\n // 如果key在覆盖列表中,直接替换值\r\n if (overrideKeys.includes(key as keyof Source)) {\r\n originObj[key] = updates\r\n return true\r\n }\r\n // 如果原值和更新值都是数组,直接替换数组\r\n if (Array.isArray(originObj[key]) && Array.isArray(updates)) {\r\n originObj[key] = updates\r\n return true\r\n }\r\n })(source, ...defaultsAndOptions)\r\n}\r\n\r\n// https://www.npmjs.com/package/defu\r\n","import Decimal from 'decimal.js'\r\n\r\ntype Recordable<T = any> = Record<string, T>\r\n\r\n/**\r\n * 加法运算\r\n * @param args 运算数\r\n */\r\nexport function add(...args: (number | string)[]): number {\r\n let result = new Decimal(args[0])\r\n for (let i = 1; i < args.length; i++) result = result.add(new Decimal(args[i]))\r\n\r\n return result.toNumber()\r\n}\r\n\r\n/**\r\n * 减法运算\r\n * @param args 运算数\r\n */\r\nexport function subtract(...args: (number | string)[]): number {\r\n let result = new Decimal(args[0])\r\n for (let i = 1; i < args.length; i++) result = result.sub(new Decimal(args[i]))\r\n\r\n return result.toNumber()\r\n}\r\n\r\n/**\r\n * 乘法运算\r\n * @param args 运算数\r\n */\r\nexport function multiply(...args: (number | string)[]): number {\r\n let result = new Decimal(args[0])\r\n for (let i = 1; i < args.length; i++) result = result.mul(new Decimal(args[i]))\r\n\r\n return result.toNumber()\r\n}\r\n\r\n/**\r\n * 除法运算\r\n * @param args 运算数\r\n */\r\nexport function divide(...args: (number | string)[]): number {\r\n let result = new Decimal(args[0])\r\n for (let i = 1; i < args.length; i++) result = result.div(new Decimal(args[i]))\r\n\r\n return result.toNumber()\r\n}\r\n\r\n/**\r\n * 合计数组中所有数值\r\n * @param datas 需要计算的数组,可以是数字数组或字符串数组(字符串会被转换为数字)\r\n * @returns {number} 返回数组中所有数值的总和\r\n */\r\nexport function sumTotal(...args: (number | string)[]) {\r\n return args.reduce((total, item) => calc(total).add(item).toNumber(), 0)\r\n}\r\n\r\n/**\r\n * 数组对象合计\r\n * @param datas 需要计算的数组对象\r\n * @param iteratee 迭代函数,用于从每个对象中提取需要计算的数值\r\n * @returns {number} 返回所有对象中提取数值的总和\r\n */\r\nexport function sumTotalBy(datas: Recordable[], iteratee: (item: Recordable) => number | string) {\r\n return datas.reduce((total, item) => calc(total).add(iteratee(item)).toNumber(), 0)\r\n}\r\n\r\n/**\r\n * 分类合计\r\n * @param datas 需要计算的数组对象\r\n * @param keyIteratee 键提取函数\r\n * @param valueIteratee 值提取函数\r\n */\r\nexport function clsSumTotalBy(\r\n datas: Recordable[],\r\n keyIteratee: (item: Recordable) => string | number,\r\n valueIteratee: (item: Recordable) => number | string\r\n) {\r\n const result: { [key: string]: number } = {}\r\n const getValue = valueIteratee\r\n\r\n datas.forEach(item => {\r\n const key = keyIteratee(item)\r\n if (key) {\r\n const value = getValue(item)\r\n result[key] = calc(result[key] || 0)\r\n .add(value)\r\n .toNumber()\r\n }\r\n })\r\n\r\n return result\r\n}\r\n\r\n/** 计算封装 */\r\nexport function calc(value: number | string): Decimal {\r\n const bool1 = Number(value) || value === 0\r\n const bool2 = Number.isNaN(Number(value))\r\n const decimal = new Decimal(value)\r\n if (bool1 && !bool2) {\r\n return decimal\r\n } else {\r\n console.error('请输入合理数字!')\r\n const decimal = new Decimal(Number.NaN)\r\n return decimal\r\n }\r\n}\r\n\r\nexport default {\r\n add,\r\n subtract,\r\n multiply,\r\n divide,\r\n sumTotal,\r\n sumTotalBy,\r\n clsSumTotalBy,\r\n calc,\r\n}\r\n","export class StateHandler {\r\n private condition: boolean = false\r\n private promiseResolvers: {\r\n resolve: (value: void | PromiseLike<void>) => void\r\n reject: (reason?: any) => void\r\n } | null = null\r\n\r\n isConditionTrue(): boolean {\r\n return this.condition\r\n }\r\n\r\n reset(): void {\r\n this.condition = false\r\n this.clearPromises()\r\n }\r\n\r\n setConditionFalse(): void {\r\n this.condition = false\r\n if (this.promiseResolvers) {\r\n this.promiseResolvers.reject()\r\n this.clearPromises()\r\n }\r\n }\r\n\r\n setConditionTrue(): void {\r\n this.condition = true\r\n if (this.promiseResolvers) {\r\n this.promiseResolvers.resolve()\r\n this.clearPromises()\r\n }\r\n }\r\n\r\n waitForCondition(): Promise<void> {\r\n if (this.condition) {\r\n return Promise.resolve()\r\n }\r\n const { promise, resolve, reject } = Promise.withResolvers<void>()\r\n this.promiseResolvers = { resolve, reject }\r\n return promise\r\n }\r\n\r\n private clearPromises() {\r\n this.promiseResolvers = null\r\n }\r\n}\r\n\r\nexport class StateHandlerOld {\r\n private condition: boolean = false\r\n private rejectCondition: (() => void) | null = null\r\n private resolveCondition: (() => void) | null = null\r\n\r\n isConditionTrue(): boolean {\r\n return this.condition\r\n }\r\n\r\n reset(): void {\r\n this.condition = false\r\n this.clearPromises()\r\n }\r\n\r\n // 触发状态为 false 时,reject\r\n setConditionFalse(): void {\r\n this.condition = false\r\n if (this.rejectCondition) {\r\n this.rejectCondition()\r\n this.clearPromises()\r\n }\r\n }\r\n\r\n // 触发状态为 true 时,resolve\r\n setConditionTrue(): void {\r\n this.condition = true\r\n if (this.resolveCondition) {\r\n this.resolveCondition()\r\n this.clearPromises()\r\n }\r\n }\r\n\r\n // 返回一个 Promise,等待 condition 变为 true\r\n waitForCondition(): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n if (this.condition) {\r\n resolve() // 如果 condition 已经为 true,立即 resolve\r\n } else {\r\n this.resolveCondition = resolve\r\n this.rejectCondition = reject\r\n }\r\n })\r\n }\r\n\r\n // 清理 resolve/reject 函数\r\n private clearPromises() {\r\n this.resolveCondition = null\r\n this.rejectCondition = null\r\n }\r\n}\r\n","import { isNullOrUnDef } from \"./is\";\r\nimport { decrypt, encrypt } from \"crypto-js/aes\";\r\nimport UTF8, { parse } from \"crypto-js/enc-utf8\";\r\nimport ECB from \"crypto-js/mode-ecb\";\r\nimport pkcs7 from \"crypto-js/pad-pkcs7\";\r\n\r\nexport type Options = Partial<CreateStorageParams>;\r\n\r\nexport const enableStorageEncryption = true;\r\n\r\nexport const DEFAULT_CACHE_TIME: number = 60 * 60 * 7;\r\n\r\nexport type CreateStorageParams = {\r\n prefixKey: string;\r\n storage: Storage;\r\n hasEncrypt: boolean;\r\n timeout?: number | null;\r\n} & EncryptionParams;\r\n\r\nexport type EncryptionParams = {\r\n key: string;\r\n iv: string;\r\n};\r\n\r\ntype CipherOption = {\r\n iv?: CryptoJS.lib.WordArray | undefined;\r\n [key: string]: any;\r\n};\r\n\r\nexport const cacheCipher = {\r\n key: \"_11111000001111@\",\r\n iv: \"@11111000001111_\",\r\n};\r\n\r\nclass AesEncryption {\r\n private key;\r\n private iv;\r\n\r\n constructor(opt: Partial<EncryptionParams> = {}) {\r\n const { key, iv } = opt;\r\n if (key) this.key = parse?.(key);\r\n\r\n if (iv) this.iv = parse?.(iv);\r\n }\r\n\r\n get getOptions() {\r\n return {\r\n mode: ECB,\r\n padding: pkcs7,\r\n iv: this.iv,\r\n } as CipherOption;\r\n }\r\n\r\n encryptByAES(cipherText: string): string {\r\n return encrypt(cipherText, this.key!, this.getOptions).toString();\r\n }\r\n\r\n decryptByAES(cipherText: string): string {\r\n return decrypt(cipherText, this.key!, this.getOptions).toString(UTF8);\r\n }\r\n}\r\n\r\nexport function create({\r\n prefixKey = \"\",\r\n storage = sessionStorage,\r\n key = cacheCipher.key,\r\n iv = cacheCipher.iv,\r\n timeout = null,\r\n hasEncrypt = true,\r\n}: Partial<CreateStorageParams> = {}): {\r\n storage: Storage;\r\n prefixKey?: string;\r\n encryption: AesEncryption;\r\n hasEncrypt: boolean;\r\n getKey: (key: string) => string;\r\n set: (key: string, value: any, expire?: number | null) => void;\r\n get: (key: string, def?: any) => any;\r\n remove: (key: string) => void;\r\n clear: () => void;\r\n} {\r\n if (hasEncrypt && [key.length, iv.length].some(item => item !== 16))\r\n throw new Error(\"When hasEncrypt is true, the key or iv must be 16 bits!\");\r\n\r\n const encryption = new AesEncryption({ key, iv });\r\n\r\n /**\r\n *Cache class\r\n *Construction parameters can be passed into sessionStorage, localStorage,\r\n * @class Cache\r\n * @example\r\n */\r\n const WebStorage = class WebStorage {\r\n storage: Storage;\r\n prefixKey?: string;\r\n encryption: AesEncryption;\r\n hasEncrypt: boolean;\r\n constructor() {\r\n this.storage = storage;\r\n this.prefixKey = prefixKey;\r\n this.encryption = encryption;\r\n this.hasEncrypt = hasEncrypt;\r\n }\r\n\r\n getKey(key: string) {\r\n // console.log(this.prefixKey, key);\r\n return `${this.prefixKey}${key}`.toUpperCase();\r\n }\r\n\r\n /**\r\n *\r\n * Set cache\r\n * @param {string} key\r\n * @param {*} value\r\n * @expire Expiration time in seconds\r\n * @memberof Cache\r\n */\r\n set(key: string, value: any, expire: number | null = timeout) {\r\n const stringData = JSON.stringify({\r\n value,\r\n time: Date.now(),\r\n expire: !isNullOrUnDef(expire) ? new Date().getTime() + expire * 1000 : null,\r\n });\r\n const stringifyValue = this.hasEncrypt ? this.encryption.encryptByAES(stringData) : stringData;\r\n this.storage.setItem(this.getKey(key), stringifyValue);\r\n }\r\n\r\n /**\r\n *Read cache\r\n * @param {string} key\r\n * @memberof Cache\r\n */\r\n get(key: string, def: any = null): any {\r\n const val = this.storage.getItem(this.getKey(key));\r\n if (!val) return def;\r\n\r\n try {\r\n const decVal = this.hasEncrypt ? this.encryption.decryptByAES(val) : val;\r\n const data = JSON.parse(decVal);\r\n const { value, expire } = data;\r\n if (isNullOrUnDef(expire) || expire >= new Date().getTime()) return value;\r\n\r\n this.remove(key);\r\n } catch (e) {\r\n console.error(`get erroe:${e}`);\r\n return def;\r\n }\r\n }\r\n\r\n /**\r\n * Delete cache based on key\r\n * @param {string} key\r\n * @memberof Cache\r\n */\r\n remove(key: string) {\r\n this.storage.removeItem(this.getKey(key));\r\n }\r\n\r\n /**\r\n * 根据选项删除缓存\r\n * @param options - 清除选项\r\n * @param options.keys - 要清除的特定键数组(如果提供,只清除这些键)\r\n * @param options.exclude - 清除时要排除的键数组(如果提供,清除除这些键之外的所有键)\r\n * @example\r\n * // 清除所有缓存\r\n * clear()\r\n *\r\n * // 清除指定键\r\n * clear({ keys: ['user', 'token'] })\r\n *\r\n * // 清除所有但排除指定键\r\n * clear({ exclude: ['settings', 'theme'] })\r\n */\r\n /**\r\n * 收集所有匹配前缀的存储键\r\n */\r\n private getKeysWithPrefix(prefixKeyUpper: string): string[] {\r\n const keysToRemove: string[] = [];\r\n for (let i = 0; i < this.storage.length; i++) {\r\n const storageKey = this.storage.key(i);\r\n if (storageKey && storageKey.startsWith(prefixKeyUpper)) {\r\n keysToRemove.push(storageKey);\r\n }\r\n }\r\n return keysToRemove;\r\n }\r\n\r\n /**\r\n * 收集所有匹配前缀但不在排除列表中的存储键\r\n */\r\n private getKeysWithPrefixExcluding(prefixKeyUpper: string, excludeSet: Set<string>): string[] {\r\n const keysToRemove: string[] = [];\r\n for (let i = 0; i < this.storage.length; i++) {\r\n const storageKey = this.storage.key(i);\r\n if (storageKey && storageKey.startsWith(prefixKeyUpper) && !excludeSet.has(storageKey)) {\r\n keysToRemove.push(storageKey);\r\n }\r\n }\r\n return keysToRemove;\r\n }\r\n\r\n /**\r\n * 删除指定的存储键\r\n */\r\n private removeKeys(keys: string[]): void {\r\n keys.forEach(storageKey => {\r\n this.storage.removeItem(storageKey);\r\n });\r\n }\r\n\r\n clear(options?: { keys?: string[]; exclude?: string[] }): void {\r\n const prefixKeyUpper = (this.prefixKey || \"\").toUpperCase();\r\n\r\n if (!options) {\r\n // 未提供选项,清除所有带前缀的缓存\r\n this.removeKeys(this.getKeysWithPrefix(prefixKeyUpper));\r\n return;\r\n }\r\n\r\n const { keys, exclude } = options;\r\n\r\n if (keys && keys.length > 0) {\r\n // 只清除指定的键\r\n keys.forEach(key => {\r\n this.remove(key);\r\n });\r\n return;\r\n }\r\n\r\n if (exclude && exclude.length > 0) {\r\n // 清除所有但排除指定的键\r\n const excludeSet = new Set(exclude.map(key => this.getKey(key)));\r\n this.removeKeys(this.getKeysWithPrefixExcluding(prefixKeyUpper, excludeSet));\r\n return;\r\n }\r\n\r\n // 如果提供了选项但都是空的,清除所有带前缀的缓存\r\n this.removeKeys(this.getKeysWithPrefix(prefixKeyUpper));\r\n }\r\n };\r\n return new WebStorage();\r\n}\r\n\r\nfunction createOptions(storage: Storage, options: Options = {}): Options {\r\n return {\r\n // No encryption in debug mode\r\n hasEncrypt: enableStorageEncryption,\r\n storage,\r\n prefixKey: \"tt-admin\",\r\n ...options,\r\n };\r\n}\r\n\r\nexport function createStorage(\r\n storage: Storage = sessionStorage,\r\n options: Options = {},\r\n): {\r\n storage: Storage;\r\n prefixKey?: string;\r\n encryption: AesEncryption;\r\n hasEncrypt: boolean;\r\n getKey: (key: string) => string;\r\n set: (key: string, value: any, expire?: number | null) => void;\r\n get: (key: string, def?: any) => any;\r\n remove: (key: string) => void;\r\n clear: (options?: { keys?: string[]; exclude?: string[] }) => void;\r\n} {\r\n return create(createOptions(storage, options));\r\n}\r\n\r\nexport function createSessionStorage(options: Options = {}): {\r\n storage: Storage;\r\n prefixKey?: string;\r\n encryption: AesEncryption;\r\n hasEncrypt: boolean;\r\n getKey: (key: string) => string;\r\n set: (key: string, value: any, expire?: number | null) => void;\r\n get: (key: string, def?: any) => any;\r\n remove: (key: string) => void;\r\n clear: (options?: { keys?: string[]; exclude?: string[] }) => void;\r\n} {\r\n return createStorage(sessionStorage, { ...options, timeout: DEFAULT_CACHE_TIME });\r\n}\r\n\r\nexport function createLocalStorage(options: Options = {}): {\r\n storage: Storage;\r\n prefixKey?: string;\r\n encryption: AesEncryption;\r\n hasEncrypt: boolean;\r\n getKey: (key: string) => string;\r\n set: (key: string, value: any, expire?: number | null) => void;\r\n get: (key: string, def?: any) => any;\r\n remove: (key: string) => void;\r\n clear: (options?: { keys?: string[]; exclude?: string[] }) => void;\r\n} {\r\n return createStorage(localStorage, { ...options, timeout: DEFAULT_CACHE_TIME });\r\n}\r\n","/**\r\n * 检查当前版本是否满足最低版本要求\r\n * @param currentVersion 当前版本号,格式为 'x.y.z'\r\n * @param major 要求的主版本号\r\n * @param minor 要求的次版本号\r\n * @param patch 可选的补丁版本号\r\n * @returns 是否满足版本要求\r\n */\r\nexport function checkVersion(currentVersion: string, major: number, minor: number, patch?: number): boolean {\r\n if (!currentVersion) return false;\r\n\r\n const versions = currentVersion.split(\".\").map(Number);\r\n if (versions.length < 2) return false;\r\n\r\n // 检查主版本号\r\n if (versions[0] > major) return true;\r\n if (versions[0] < major) return false;\r\n\r\n // 检查次版本号\r\n if (versions[1] > minor) return true;\r\n if (versions[1] < minor) return false;\r\n\r\n // 如果有补丁版本号要求,则检查\r\n if (patch !== undefined) {\r\n const currentPatch = versions[2] || 0;\r\n return currentPatch >= patch;\r\n }\r\n\r\n return true;\r\n}\r\n"],"names":["capitalize","str","charAt","toUpperCase","slice","trim","kebabToCamelCase","replace","_","c","downloadFile","res","type","blob","Blob","data","a","document","createElement","herf","window","URL","webkitURL","createObjectURL","href","fileName","headers","split","at","decodeURI","decodedParts","download","style","display","body","appendChild","click","removeChild","revokeObjectURL","error","console","log","ApiStatus","HttpMsg","HttpError","Error","code","timestamp","url","method","constructor","message","options","super","this","name","Date","toISOString","toLogData","stack","handleError","warn","requestCancelled","statusCode","response","status","errorMessage","msg","requestConfig","config","networkError","unauthorized","forbidden","notFound","methodNotAllowed","requestTimeout","internalServerError","badGateway","serviceUnavailable","gatewayTimeout","requestFailed","showError","showMessage","ElMessage","getLoadingBackground","documentElement","classList","contains","DEFAULT_LOADING_CONFIG","lock","background","svg","svgViewBox","customClass","loadingInstance","loadingService","showLoading","ElLoading","service","hideLoading","close","TtHttp","router","useUserStore","VITE_API_URL","VITE_WITH_CREDENTIALS","pendingLoading","FILE_TYPES","activeRequests","debuncesLoading","setTimeout","nextTick","isUnauthorizedErrorShown","unauthorizedTimer","axiosInstance","axios","create","timeout","baseURL","withCredentials","validateStatus","transformResponse","contentType","includes","JSON","parse","createHttpError","handleUnauthorizedError","logOut","resetUnauthorizedError","clearTimeout","interceptors","request","use","accessToken","info","set","userId","currentRoute","value","meta","permissionOnlyCode","FormData","stringify","requestConfigError","Promise","reject","success","success1","INVALID_TOKEN","async","retryRequest","retries","params","undefined","showSuccessMessage","showSuccess","excludeError","NEED_REFRESH_TOKEN","showErrorMessage","refreshTokenFunc","delay","ms","resolve","api","get","post","put","del","setBaseUrl","defaults","withInstall","main","extra","install","app","comp","Object","values","component","key","entries","toString","prototype","is","val","call","isDef","isUndefined","isNull","isNullOrUnDef","isObject","isEmpty","isArray","isString","length","Map","Set","size","keys","isEmptyZero","isDate","isNumber","isPromise","isFunction","then","catch","isBoolean","isRegExp","Array","isWindow","isElement","e","Element","isMap","isServer","isClient","isUrl","path","test","isStringNumber","Number","isNaN","isPrimitive","isError","isSymbol","isSet","isFalse","isTrue","getDeviceType","u","navigator","userAgent","getBrowserType","isOpera","isIE","reIE","match","fIEVersion","parseFloat","getIEVersion","isIE11","isEdge","isFF","isSafari","isChrome","isIos","isAndroid","isPC","userAgentInfo","Agents","flag","v","agent","indexOf","isExternal","isJson","obj","isDayjsObject","dayjs","isDayjs","extractResourceFromApi","generateTestId","parts","filter","part","join","toKebabCase","toLowerCase","generateFormName","fieldNames","maxLength","validFieldNames","extractIdFromTitle","title","isValidTestId","testid","setupDefaults","keyId","cookies","treeOptions","parentKey","children","parseDateFormat","firstDayOfWeek","arrayEach","list","iterate","context","forEach","index","len","objectToString","helperCreateInInObjectString","hasOwnProp","hasOwnProperty","objectEach","each","helperCreateInTypeof","helperCreateGetObjects","getIndex","proMethod","result","push","arguments","getCativeCtor","args","Ctor","__proto__","handleValueClone","item","isDeep","copyValue","restObj","getPrototypeOf","valueOf","restArr","restSet","add","restMap","clone","deep","objectAssignFns","assign","handleAssign","destination","isClone","source","target","apply","XEUtils","setConfig","version","lastArrayEach","lastObjectEach","property","defs","isPlainObject","helperCheckCopyKey","handleMerge","VERSION","mixin","methods","fn","$context","setup","getConfig","map","helperCreateIterateHandle","prop","useArray","restIndex","matchValue","defaultValue","some","every","includeArrays","array1","array2","uniq","array","valMap","toArray","staticStrUndefined","eqNull","staticHGKeyRE","helperGetHGSKeys","splice","rest","props","getDeepProps","getValueByPath","matchs","handleSort","v1","v2","localeCompare","buildMultiOrders","confs","compares","item1","item2","order","orderBy","arr","fieldConfs","sort","sortConfs","handle","field","getSortConfs","sortBy","random","minVal","maxVal","Math","round","shuffle","helperCreateToNumber","num","toNumber","startIndex","endIndex","argsSize","findKey","find","pluck","helperCreateMinMax","itemIndex","itemVal","max","unzip","arrays","maxItem","flattenDeep","vals","concat","helperLog","helperDeleteProperty","lastEach","clear","assigns","isDefs","extds","remove","removeKeys","unTreeList","parentItem","opts","optKey","optParentKey","optChildren","optData","optUpdated","updated","optClear","childList","helperCreateTreeFunc","findTree","findTreeItem","parent","node","parseChildren","paths","nodes","items","eachTree","eachTreeItem","mapTree","mapTreeItem","mapChildren","searchTreeItem","matchParent","isMatch","hasChild","rests","hasOriginal","original","sourceData","isEvery","searchTree","arrayIndexOf","arrayLastIndexOf","lastIndexOf","staticParseInt","parseInt","helperGetUTCDateTime","resMaps","UTC","y","M","d","H","m","s","S","helperGetDateTime","date","getTime","getParseRule","txt","toParseNum","d2","d1or2","d1or7","d3or4","place","d1Or2RE","dzZ","defaulParseStrs","defaulParseREs","rule","i","RegExp","customParseStrs","parseRuleMaps","parseRuleKeys","itemRule","customParseRes","cacheFormatMaps","toStringDate","format","isDType","cacheItem","posIndexs","re","text","firstChar","_i","_r","matchRest","parseCustomRules","dfrLen","Z","parseDefaultRules","substring","parseTimeZone","helperNewDate","isLeapYear","year","currentDate","getFullYear","helperCreateIndexOf","callback","getSize","isInteger","supportSymbol","Symbol","isArguments","staticDocument","staticWindow","supportFormData","supportMap","supportWeakMap","WeakMap","supportSet","supportWeakSet","WeakSet","helperCreateiterateIndexOf","findIndexOf","helperEqualCompare","val1","val2","compare","func","obj1","obj2","val1Keys","val2Keys","isObj1Arr","isObj2Arr","helperDefaultCompare","isEqual","findLastIndexOf","helperCreatePickOmit","case1","case2","pick","omit","sKeyRE","setDeepProps","isEnd","nextKey","currMatchs","nextMatchs","isPrototypePolluted","groupBy","groupKey","createiterateEmpty","range","start","stop","step","min","helperNumberDecimal","numStr","helperStringRepeat","count","repeat","helperNumberOffsetPoint","offsetIndex","toNumberString","scienceMatchs","absFlag","intNumStr","dIntNumStr","dFloatNumStr","sciencFlag","scienceNumStr","floatOffsetIndex","intOffsetIndex","dIntOffsetIndex","abs","helperMultiply","multiplier","multiplicand","str1","str2","pow","helperCreateMathNumber","digits","numRest","nums","intStr","floatStr","fStr","subRest","ratio","ceil","floor","toValueString","toFixed","digitOffsetIndex","toInteger","multiply","num1","num2","helperNumberAdd","addend","augend","helperNumberDivide","divisor","dividend","divisorDecimal","powY","isMinus","sum","staticStrFirst","staticStrLast","helperGetDateFullYear","staticDayTime","helperGetDateMonth","getMonth","isValidDate","getWhatMonth","offsetMonth","offsetDay","monthNum","setDate","currDate","getDate","setMonth","getWhatYear","offset","month","number","setFullYear","staticWeekTime","getWhatWeek","offsetWeek","firstDay","hasCustomDay","hasStartDay","whatDayTime","viewStartDay","currentDay","getDay","customDay","offsetNum","getWhatDay","mode","helperStringUpperCase","nextStartMaps","day","matchWeekStartDay","time","helperCreateGetDateWeek","getStartDate","checkCrossDate","targetDate","tempTime","targetWeekStartDate","firstDate","firstTime","targetWeekStartTime","targetWeekEndTime","targetWeekEndDate","firstWeekStartDate","firstWeekStartTime","firstWeekEndTime","firstWeekEndDate","NaN","getYearWeek","date1","date2","helperGetYMDTime","helperGetYMD","getYearDay","padStart","targetLength","padString","handleCustomTemplate","formats","dateFormatRE","toDateString","formatString","hours","getHours","apm","parseDateRules","formatStringMatchs","fy","fM","fd","fH","fh","fm","getMinutes","fs","getSeconds","fS","getMilliseconds","fZ","zoneHours","getTimezoneOffset","fW","fD","parseDates","yyyy","yy","MM","dd","HH","hh","h","mm","ss","SSS","ZZ","WW","W","DDD","D","A","E","q","skip","now","getMonthWeek","dateDiffRules","trimRight","trimLeft","staticEscapeMap","helperFormatEscaper","dataMap","replaceRegexp","escape","unescapeMap","unescape","helperStringSubstring","end","helperStringLowerCase","camelCacheMaps","kebabCacheMaps","template","tmplRE","staticDecodeURIComponent","decodeURIComponent","unserialize","param","staticEncodeURIComponent","encodeURIComponent","stringifyParams","resultVal","resultKey","isArr","_arr","staticLocation","location","helperGetLocatOrigin","origin","protocol","host","parseURLQuery","uri","parseUrl","hashs","portText","searchs","parsed","hash","hostname","port","search","pathname","hashKey","hashQuery","searchQuery","toCookieUnitTime","unit","expires","nowdate","toCookieUTCString","toUTCString","cookie","keyIndex","inserts","getCookieItem","setCookieItem","removeCookieItem","cookieKeys","isBrowseStorage","storage","testKey","setItem","removeItem","isBrowseType","has","getItem","getJSON","objectMap","merge","union","sample","findLast","reduce","initialValue","reduceMethod","previous","isInitialVal","keyList","copyWithin","replaceIndex","replaceArray","targetIndex","chunk","arrLen","zip","zipObject","flatten","invoke","deepGetObj","toArrayTree","id","treeData","parentId","optStrict","strict","optMapChildren","optSortKey","sortKey","optReverse","reverse","treeMaps","idsMap","strictTree","toTreeArray","filterTree","isFinite","isFloat","isTypeError","TypeError","nodeName","nodeType","isDocument","isFormData","isWeakMap","isWeakSet","objKeys","sourceKeys","key2","key1","isEqualWith","getType","uniqueId","prefix","toStringJSON","toJSONString","first","last","forOf","lastForOf","arrIndex","objProp","isHas","countBy","destructuring","sources","restKeys","commafy","isNegative","commafyOptions","optDigits","spaceNumber","separator","subtract","subtrahend","minuend","digit1","digit2","divide","mean","isDateSame","getWhatQuarter","currMonth","monthOffset","getQuarterNumber","getWhatHours","setHours","getWhatMinutes","setMinutes","getWhatSeconds","setSeconds","getDayOfYear","getDayOfMonth","getDateDiff","startDate","endDate","startTime","endTime","diffTime","done","camelCase","strLen","upper","upperLen","kebabCase","prevLower","nextLower","padEnd","startsWith","endsWith","argsLen","toFormatString","noop","bind","once","after","runCount","before","throttle","wait","runFlag","leading","trailing","optLeading","optTrailing","gcFn","runFn","endFn","throttled","cancel","debounce","debounced","serialize","query","getBaseURL","lastIndex","locat","browse","$body","isMobile","isLocalStorage","isSessionStorage","isNode","isDoc","process","core","localStorage","sessionStorage","edge","firefox","msie","safari","isExtendDayjs","getStorage","localdata","_key","calcWordsWidth","words","fontSize","fontFamily","wordsWidth","ctx","getContext","font","measureText","width","getDifference","newObj","oldObj","keyObj","excludeAll","excludeItem","exclude","fromEntries","r","k","setDifferenceObj","setDifferenceArr","setDifferenceField","temp","arrKey","o","t","notNullToFalse","deepMerge","src","toCssUnit","useVModel","propName","emit","computed","Proxy","bindMethods","instance","proto","propertyNames","getOwnPropertyNames","deepCopy","arrayToTree","itemMap","currentItem","getFirstNonNullOrUndefined","arg","clnm","inputs","twMerge","clsx","triggerWindowResize","resizeEvent","Event","dispatchEvent","arrGive","targrt","content","element","contentItem","dateFormat","tz","isValid","extend","utc","timezone","cloneDeep","klona","acc","maxWait","timer","maxTimer","lastCallTime","lastArgs","lastInvokeTime","invokeFunc","clearAllTimers","resetState","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","remaining","timeSinceLastInvoke","timeWaiting","remainingWait","maxTimerExpired","isInvoking","leadingEdge","isPending","flush","argsToUse","mergeWithArrayOverride","defaultsAndOptions","overrideKeys","lastItem","pop","createDefu","originObj","updates","Decimal","sub","mul","div","sumTotal","total","calc","sumTotalBy","datas","iteratee","clsSumTotalBy","keyIteratee","valueIteratee","getValue","bool1","bool2","decimal","StateHandler","condition","promiseResolvers","isConditionTrue","reset","clearPromises","setConditionFalse","setConditionTrue","waitForCondition","promise","withResolvers","StateHandlerOld","rejectCondition","resolveCondition","enableStorageEncryption","DEFAULT_CACHE_TIME","cacheCipher","iv","AesEncryption","opt","getOptions","ECB","padding","pkcs7","encryptByAES","cipherText","encrypt","decryptByAES","decrypt","UTF8","prefixKey","hasEncrypt","encryption","getKey","expire","stringData","stringifyValue","def","decVal","getKeysWithPrefix","prefixKeyUpper","keysToRemove","storageKey","getKeysWithPrefixExcluding","excludeSet","createStorage","createOptions","createSessionStorage","createLocalStorage","checkVersion","currentVersion","major","minor","patch","versions"],"mappings":"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","x_google_ignoreList":[10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236]}
|