@visactor/vtable-plugins 1.19.9-alpha.3 → 1.20.0-alpha.1
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/README.md +7 -4
- package/cjs/add-row-column.d.ts +2 -2
- package/cjs/add-row-column.js +3 -3
- package/cjs/add-row-column.js.map +1 -1
- package/cjs/auto-fill/auto-fill-helper.d.ts +23 -0
- package/cjs/auto-fill/auto-fill-helper.js +83 -0
- package/cjs/auto-fill/auto-fill-helper.js.map +1 -0
- package/cjs/auto-fill/auto-fill-manager.d.ts +26 -0
- package/cjs/auto-fill/auto-fill-manager.js +244 -0
- package/cjs/auto-fill/auto-fill-manager.js.map +1 -0
- package/cjs/auto-fill/auto-fill-services.d.ts +12 -0
- package/cjs/auto-fill/auto-fill-services.js +27 -0
- package/cjs/auto-fill/auto-fill-services.js.map +1 -0
- package/cjs/auto-fill/date-tools.d.ts +5 -0
- package/cjs/auto-fill/date-tools.js +37 -0
- package/cjs/auto-fill/date-tools.js.map +1 -0
- package/cjs/auto-fill/index.d.ts +21 -0
- package/cjs/auto-fill/index.js +52 -0
- package/cjs/auto-fill/index.js.map +1 -0
- package/cjs/auto-fill/rules.d.ts +10 -0
- package/cjs/auto-fill/rules.js +196 -0
- package/cjs/auto-fill/rules.js.map +1 -0
- package/cjs/auto-fill/series-converters.d.ts +27 -0
- package/cjs/auto-fill/series-converters.js +90 -0
- package/cjs/auto-fill/series-converters.js.map +1 -0
- package/cjs/auto-fill/types.d.ts +67 -0
- package/cjs/auto-fill/types.js +20 -0
- package/cjs/auto-fill/types.js.map +1 -0
- package/cjs/auto-fill/utils/date.d.ts +5 -0
- package/cjs/auto-fill/utils/date.js +76 -0
- package/cjs/auto-fill/utils/date.js.map +1 -0
- package/cjs/auto-fill/utils/fill.d.ts +82 -0
- package/cjs/auto-fill/utils/fill.js +361 -0
- package/cjs/auto-fill/utils/fill.js.map +1 -0
- package/cjs/carousel-animation.d.ts +1 -1
- package/cjs/carousel-animation.js.map +1 -1
- package/cjs/column-series.js +1 -1
- package/cjs/column-series.js.map +1 -1
- package/cjs/context-menu.d.ts +34 -0
- package/cjs/context-menu.js +157 -0
- package/cjs/context-menu.js.map +1 -0
- package/cjs/contextmenu/handle-menu-helper.d.ts +23 -0
- package/cjs/contextmenu/handle-menu-helper.js +107 -0
- package/cjs/contextmenu/handle-menu-helper.js.map +1 -0
- package/cjs/contextmenu/index.d.ts +3 -0
- package/cjs/contextmenu/index.js +22 -0
- package/cjs/contextmenu/index.js.map +1 -0
- package/cjs/contextmenu/menu-manager.d.ts +27 -0
- package/cjs/contextmenu/menu-manager.js +139 -0
- package/cjs/contextmenu/menu-manager.js.map +1 -0
- package/cjs/contextmenu/styles.d.ts +106 -0
- package/cjs/contextmenu/styles.js +195 -0
- package/cjs/contextmenu/styles.js.map +1 -0
- package/cjs/contextmenu/types.d.ts +69 -0
- package/cjs/contextmenu/types.js +123 -0
- package/cjs/contextmenu/types.js.map +1 -0
- package/cjs/excel-edit-cell-keyboard.js +2 -2
- package/cjs/excel-edit-cell-keyboard.js.map +1 -1
- package/cjs/excel-import.js +8 -8
- package/cjs/excel-import.js.map +1 -1
- package/cjs/fillHandleUtils/autoFillHandle.js.map +1 -1
- package/cjs/fillHandleUtils/translateRowObj.js.map +1 -1
- package/cjs/filter/condition-filter.d.ts +30 -0
- package/cjs/filter/condition-filter.js +271 -0
- package/cjs/filter/condition-filter.js.map +1 -0
- package/cjs/filter/filter-engine.d.ts +13 -0
- package/cjs/filter/filter-engine.js +102 -0
- package/cjs/filter/filter-engine.js.map +1 -0
- package/cjs/filter/filter-state-manager.d.ts +21 -0
- package/cjs/filter/filter-state-manager.js +101 -0
- package/cjs/filter/filter-state-manager.js.map +1 -0
- package/cjs/filter/filter-toolbar.d.ts +31 -0
- package/cjs/filter/filter-toolbar.js +98 -0
- package/cjs/filter/filter-toolbar.js.map +1 -0
- package/cjs/filter/filter.d.ts +26 -0
- package/cjs/filter/filter.js +150 -0
- package/cjs/filter/filter.js.map +1 -0
- package/cjs/filter/index.d.ts +7 -0
- package/cjs/filter/index.js +66 -0
- package/cjs/filter/index.js.map +1 -0
- package/cjs/filter/styles.d.ts +126 -0
- package/cjs/filter/styles.js +145 -0
- package/cjs/filter/styles.js.map +1 -0
- package/cjs/filter/types.d.ts +55 -0
- package/cjs/filter/types.js +18 -0
- package/cjs/filter/types.js.map +1 -0
- package/cjs/filter/value-filter.d.ts +31 -0
- package/cjs/filter/value-filter.js +280 -0
- package/cjs/filter/value-filter.js.map +1 -0
- package/cjs/focus-highlight.js +1 -1
- package/cjs/focus-highlight.js.map +1 -1
- package/cjs/gantt-export-image.js.map +1 -1
- package/cjs/header-highlight.js.map +1 -1
- package/cjs/highlight-header-when-select-cell.d.ts +1 -2
- package/cjs/highlight-header-when-select-cell.js +1 -1
- package/cjs/highlight-header-when-select-cell.js.map +1 -1
- package/cjs/index.d.ts +4 -0
- package/cjs/index.js +3 -1
- package/cjs/index.js.map +1 -1
- package/cjs/invert-highlight.js.map +1 -1
- package/cjs/paste-add-row-column.d.ts +1 -0
- package/cjs/paste-add-row-column.js +3 -2
- package/cjs/paste-add-row-column.js.map +1 -1
- package/cjs/rotate-table.js +1 -1
- package/cjs/rotate-table.js.map +1 -1
- package/cjs/row-series.js +1 -1
- package/cjs/row-series.js.map +1 -1
- package/cjs/table-carousel-animation.js +2 -3
- package/cjs/table-carousel-animation.js.map +1 -1
- package/cjs/table-export/csv/index.js +1 -1
- package/cjs/table-export/csv/index.js.map +1 -1
- package/cjs/table-export/excel/index.js.map +1 -1
- package/cjs/table-export/excel/style.js +0 -1
- package/cjs/table-export/excel/style.js.map +1 -1
- package/cjs/table-export/index.js.map +1 -1
- package/cjs/table-export/util/color.js.map +1 -1
- package/cjs/table-export/util/download.js.map +1 -1
- package/cjs/table-export/util/encode.js.map +1 -1
- package/cjs/table-export/util/indent.js.map +1 -1
- package/cjs/table-export/util/pagination.js.map +1 -1
- package/cjs/table-export/util/promise.js.map +1 -1
- package/cjs/table-export/util/type.js +1 -1
- package/cjs/table-export/util/type.js.map +1 -1
- package/cjs/table-export.js +1 -2
- package/cjs/table-export.js.map +1 -1
- package/cjs/table-series-number.d.ts +41 -0
- package/cjs/table-series-number.js +261 -0
- package/cjs/table-series-number.js.map +1 -0
- package/cjs/types.d.ts +1 -0
- package/cjs/types.js +17 -1
- package/cjs/types.js.map +1 -1
- package/cjs/wps-fill-handle.js +1 -1
- package/cjs/wps-fill-handle.js.map +1 -1
- package/dist/vtable-plugins.js +7594 -1492
- package/dist/vtable-plugins.min.js +14 -14
- package/es/add-row-column.d.ts +2 -2
- package/es/add-row-column.js +3 -3
- package/es/add-row-column.js.map +1 -1
- package/es/auto-fill/auto-fill-helper.d.ts +23 -0
- package/es/auto-fill/auto-fill-helper.js +75 -0
- package/es/auto-fill/auto-fill-helper.js.map +1 -0
- package/es/auto-fill/auto-fill-manager.d.ts +26 -0
- package/es/auto-fill/auto-fill-manager.js +218 -0
- package/es/auto-fill/auto-fill-manager.js.map +1 -0
- package/es/auto-fill/auto-fill-services.d.ts +12 -0
- package/es/auto-fill/auto-fill-services.js +19 -0
- package/es/auto-fill/auto-fill-services.js.map +1 -0
- package/es/auto-fill/date-tools.d.ts +5 -0
- package/es/auto-fill/date-tools.js +29 -0
- package/es/auto-fill/date-tools.js.map +1 -0
- package/es/auto-fill/index.d.ts +21 -0
- package/es/auto-fill/index.js +21 -0
- package/es/auto-fill/index.js.map +1 -0
- package/es/auto-fill/rules.d.ts +10 -0
- package/es/auto-fill/rules.js +203 -0
- package/es/auto-fill/rules.js.map +1 -0
- package/es/auto-fill/series-converters.d.ts +27 -0
- package/es/auto-fill/series-converters.js +83 -0
- package/es/auto-fill/series-converters.js.map +1 -0
- package/es/auto-fill/types.d.ts +67 -0
- package/es/auto-fill/types.js +27 -0
- package/es/auto-fill/types.js.map +1 -0
- package/es/auto-fill/utils/date.d.ts +5 -0
- package/es/auto-fill/utils/date.js +68 -0
- package/es/auto-fill/utils/date.js.map +1 -0
- package/es/auto-fill/utils/fill.d.ts +82 -0
- package/es/auto-fill/utils/fill.js +347 -0
- package/es/auto-fill/utils/fill.js.map +1 -0
- package/es/carousel-animation.d.ts +1 -1
- package/es/carousel-animation.js.map +1 -1
- package/es/column-series.js +1 -1
- package/es/column-series.js.map +1 -1
- package/es/context-menu.d.ts +34 -0
- package/es/context-menu.js +129 -0
- package/es/context-menu.js.map +1 -0
- package/es/contextmenu/handle-menu-helper.d.ts +23 -0
- package/es/contextmenu/handle-menu-helper.js +99 -0
- package/es/contextmenu/handle-menu-helper.js.map +1 -0
- package/es/contextmenu/index.d.ts +3 -0
- package/es/contextmenu/index.js +6 -0
- package/es/contextmenu/index.js.map +1 -0
- package/es/contextmenu/menu-manager.d.ts +27 -0
- package/es/contextmenu/menu-manager.js +130 -0
- package/es/contextmenu/menu-manager.js.map +1 -0
- package/es/contextmenu/styles.d.ts +106 -0
- package/es/contextmenu/styles.js +197 -0
- package/es/contextmenu/styles.js.map +1 -0
- package/es/contextmenu/types.d.ts +69 -0
- package/es/contextmenu/types.js +122 -0
- package/es/contextmenu/types.js.map +1 -0
- package/es/excel-edit-cell-keyboard.js +2 -2
- package/es/excel-edit-cell-keyboard.js.map +1 -1
- package/es/excel-import.js +8 -8
- package/es/excel-import.js.map +1 -1
- package/es/fillHandleUtils/autoFillHandle.js.map +1 -1
- package/es/fillHandleUtils/translateRowObj.js.map +1 -1
- package/es/filter/condition-filter.d.ts +30 -0
- package/es/filter/condition-filter.js +262 -0
- package/es/filter/condition-filter.js.map +1 -0
- package/es/filter/filter-engine.d.ts +13 -0
- package/es/filter/filter-engine.js +94 -0
- package/es/filter/filter-engine.js.map +1 -0
- package/es/filter/filter-state-manager.d.ts +21 -0
- package/es/filter/filter-state-manager.js +93 -0
- package/es/filter/filter-state-manager.js.map +1 -0
- package/es/filter/filter-toolbar.d.ts +31 -0
- package/es/filter/filter-toolbar.js +90 -0
- package/es/filter/filter-toolbar.js.map +1 -0
- package/es/filter/filter.d.ts +26 -0
- package/es/filter/filter.js +125 -0
- package/es/filter/filter.js.map +1 -0
- package/es/filter/index.d.ts +7 -0
- package/es/filter/index.js +14 -0
- package/es/filter/index.js.map +1 -0
- package/es/filter/styles.d.ts +126 -0
- package/es/filter/styles.js +140 -0
- package/es/filter/styles.js.map +1 -0
- package/es/filter/types.d.ts +55 -0
- package/es/filter/types.js +17 -0
- package/es/filter/types.js.map +1 -0
- package/es/filter/value-filter.d.ts +31 -0
- package/es/filter/value-filter.js +275 -0
- package/es/filter/value-filter.js.map +1 -0
- package/es/focus-highlight.js +1 -1
- package/es/focus-highlight.js.map +1 -1
- package/es/gantt-export-image.js.map +1 -1
- package/es/header-highlight.js.map +1 -1
- package/es/highlight-header-when-select-cell.d.ts +1 -2
- package/es/highlight-header-when-select-cell.js +1 -1
- package/es/highlight-header-when-select-cell.js.map +1 -1
- package/es/index.d.ts +4 -0
- package/es/index.js +8 -0
- package/es/index.js.map +1 -1
- package/es/invert-highlight.js.map +1 -1
- package/es/paste-add-row-column.d.ts +1 -0
- package/es/paste-add-row-column.js +3 -2
- package/es/paste-add-row-column.js.map +1 -1
- package/es/rotate-table.js +1 -1
- package/es/rotate-table.js.map +1 -1
- package/es/row-series.js +1 -1
- package/es/row-series.js.map +1 -1
- package/es/table-carousel-animation.js +3 -3
- package/es/table-carousel-animation.js.map +1 -1
- package/es/table-export/csv/index.js +1 -1
- package/es/table-export/csv/index.js.map +1 -1
- package/es/table-export/excel/index.js.map +1 -1
- package/es/table-export/excel/style.js +1 -2
- package/es/table-export/excel/style.js.map +1 -1
- package/es/table-export/index.js.map +1 -1
- package/es/table-export/util/color.js.map +1 -1
- package/es/table-export/util/download.js.map +1 -1
- package/es/table-export/util/encode.js.map +1 -1
- package/es/table-export/util/indent.js.map +1 -1
- package/es/table-export/util/pagination.js.map +1 -1
- package/es/table-export/util/promise.js.map +1 -1
- package/es/table-export/util/type.js +1 -1
- package/es/table-export/util/type.js.map +1 -1
- package/es/table-export.js +1 -2
- package/es/table-export.js.map +1 -1
- package/es/table-series-number.d.ts +41 -0
- package/es/table-series-number.js +253 -0
- package/es/table-series-number.js.map +1 -0
- package/es/types.d.ts +1 -0
- package/es/types.js +2 -1
- package/es/types.js.map +1 -1
- package/es/wps-fill-handle.js +1 -1
- package/es/wps-fill-handle.js.map +1 -1
- package/package.json +8 -8
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: !0
|
|
5
|
+
}), exports.reverseIfNeed = exports.loopSeriesRule = exports.chnWeek3Rule = exports.chnWeek2Rule = exports.chnNumberRule = exports.extendNumberRule = exports.otherRule = exports.numberRule = exports.dateRule = void 0;
|
|
6
|
+
|
|
7
|
+
const fill_1 = require("./utils/fill"), types_1 = require("./types"), series_converters_1 = require("./series-converters"), types_2 = require("./types");
|
|
8
|
+
|
|
9
|
+
function reverseIfNeed(data, reverse) {
|
|
10
|
+
return reverse ? data.reverse() : data;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
exports.dateRule = {
|
|
14
|
+
type: types_1.DATA_TYPE.DATE,
|
|
15
|
+
priority: 1100,
|
|
16
|
+
match: (cellData, accessor) => "string" == typeof (null == cellData ? void 0 : cellData.v) && series_converters_1.converterManager.getConverter(cellData.v) instanceof series_converters_1.DateConverter,
|
|
17
|
+
isContinue: (prev, cur) => prev.type === types_1.DATA_TYPE.DATE,
|
|
18
|
+
applyFunctions: {
|
|
19
|
+
[types_1.APPLY_TYPE.SERIES]: (dataWithIndex, len, direction) => {
|
|
20
|
+
var _a;
|
|
21
|
+
const {data: data} = dataWithIndex, converter = series_converters_1.converterManager.getConverter(null === (_a = data[0]) || void 0 === _a ? void 0 : _a.v);
|
|
22
|
+
return direction === types_1.Direction.LEFT || direction === types_1.Direction.UP ? (data.reverse(),
|
|
23
|
+
(0, fill_1.fillSeries)(data, len, direction, converter).reverse()) : (0, fill_1.fillSeries)(data, len, direction, converter);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}, exports.numberRule = {
|
|
27
|
+
type: types_1.DATA_TYPE.NUMBER,
|
|
28
|
+
priority: 1e3,
|
|
29
|
+
match: cellData => "number" == typeof (null == cellData ? void 0 : cellData.v) || (null == cellData ? void 0 : cellData.t) === types_2.CellValueType.NUMBER,
|
|
30
|
+
isContinue: (prev, cur) => prev.type === types_1.DATA_TYPE.NUMBER,
|
|
31
|
+
applyFunctions: {
|
|
32
|
+
[types_1.APPLY_TYPE.SERIES]: (dataWithIndex, len, direction) => {
|
|
33
|
+
const {data: data} = dataWithIndex;
|
|
34
|
+
return direction === types_1.Direction.LEFT || direction === types_1.Direction.UP ? (data.reverse(),
|
|
35
|
+
(0, fill_1.fillSeries)(data, len, direction).reverse()) : (0, fill_1.fillSeries)(data, len, direction);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}, exports.otherRule = {
|
|
39
|
+
type: types_1.DATA_TYPE.OTHER,
|
|
40
|
+
priority: 0,
|
|
41
|
+
match: () => !0,
|
|
42
|
+
isContinue: (prev, cur) => prev.type === types_1.DATA_TYPE.OTHER
|
|
43
|
+
}, exports.extendNumberRule = {
|
|
44
|
+
type: types_1.DATA_TYPE.EXTEND_NUMBER,
|
|
45
|
+
priority: 900,
|
|
46
|
+
match: cellData => (0, fill_1.matchExtendNumber)(`${null == cellData ? void 0 : cellData.v}` || "").isExtendNumber,
|
|
47
|
+
isContinue: (prev, cur) => {
|
|
48
|
+
var _a;
|
|
49
|
+
if (prev.type === types_1.DATA_TYPE.EXTEND_NUMBER) {
|
|
50
|
+
const {beforeTxt: beforeTxt, afterTxt: afterTxt} = (0, fill_1.matchExtendNumber)(`${null === (_a = prev.cellData) || void 0 === _a ? void 0 : _a.v}` || ""), {beforeTxt: curBeforeTxt, afterTxt: curAfterTxt} = (0,
|
|
51
|
+
fill_1.matchExtendNumber)(`${null == cur ? void 0 : cur.v}` || "");
|
|
52
|
+
if (beforeTxt === curBeforeTxt && afterTxt === curAfterTxt) return !0;
|
|
53
|
+
}
|
|
54
|
+
return !1;
|
|
55
|
+
},
|
|
56
|
+
applyFunctions: {
|
|
57
|
+
[types_1.APPLY_TYPE.SERIES]: (dataWithIndex, len, direction) => {
|
|
58
|
+
var _a;
|
|
59
|
+
const {data: data} = dataWithIndex, isReverse = direction === types_1.Direction.UP || direction === types_1.Direction.LEFT;
|
|
60
|
+
let step;
|
|
61
|
+
if (1 === data.length) return step = isReverse ? -1 : 1, reverseIfNeed((0, fill_1.fillExtendNumber)(data, len, step), isReverse);
|
|
62
|
+
const dataNumArr = [];
|
|
63
|
+
for (let i = 0; i < data.length; i++) {
|
|
64
|
+
const txt = `${null === (_a = data[i]) || void 0 === _a ? void 0 : _a.v}`;
|
|
65
|
+
txt && dataNumArr.push(Number((0, fill_1.matchExtendNumber)(txt).matchTxt));
|
|
66
|
+
}
|
|
67
|
+
return isReverse && (data.reverse(), dataNumArr.reverse()), (0, fill_1.isEqualDiff)(dataNumArr) ? (step = dataNumArr[1] - dataNumArr[0],
|
|
68
|
+
reverseIfNeed((0, fill_1.fillExtendNumber)(data, len, step), isReverse)) : (0, fill_1.fillCopy)(data, len);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}, exports.chnNumberRule = {
|
|
72
|
+
type: types_1.DATA_TYPE.CHN_NUMBER,
|
|
73
|
+
priority: 830,
|
|
74
|
+
match: cellData => !!(0, fill_1.isChnNumber)(`${null == cellData ? void 0 : cellData.v}` || ""),
|
|
75
|
+
isContinue: (prev, cur) => prev.type === types_1.DATA_TYPE.CHN_NUMBER,
|
|
76
|
+
applyFunctions: {
|
|
77
|
+
[types_1.APPLY_TYPE.SERIES]: (dataWithIndex, len, direction) => {
|
|
78
|
+
var _a, _b;
|
|
79
|
+
const {data: data} = dataWithIndex, isReverse = direction === types_1.Direction.LEFT || direction === types_1.Direction.UP;
|
|
80
|
+
if (1 === data.length) {
|
|
81
|
+
let step;
|
|
82
|
+
return step = isReverse ? -1 : 1, reverseIfNeed((0, fill_1.fillChnNumber)(data, len, step), isReverse);
|
|
83
|
+
}
|
|
84
|
+
let hasWeek = !1;
|
|
85
|
+
for (let i = 0; i < data.length; i++) {
|
|
86
|
+
if ("日" === (null === (_a = data[i]) || void 0 === _a ? void 0 : _a.v)) {
|
|
87
|
+
hasWeek = !0;
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
const dataNumArr = [];
|
|
92
|
+
let weekIndex = 0;
|
|
93
|
+
for (let i = 0; i < data.length; i++) {
|
|
94
|
+
const formattedValue = `${null === (_b = data[i]) || void 0 === _b ? void 0 : _b.v}`;
|
|
95
|
+
"日" === formattedValue ? 0 === i ? dataNumArr.push(0) : (weekIndex++, dataNumArr.push(7 * weekIndex)) : hasWeek && (0,
|
|
96
|
+
fill_1.chineseToNumber)(formattedValue) > 0 && (0, fill_1.chineseToNumber)(formattedValue) < 7 ? dataNumArr.push((0,
|
|
97
|
+
fill_1.chineseToNumber)(formattedValue) + 7 * weekIndex) : dataNumArr.push((0, fill_1.chineseToNumber)(formattedValue));
|
|
98
|
+
}
|
|
99
|
+
if (isReverse && (data.reverse(), dataNumArr.reverse()), (0, fill_1.isEqualDiff)(dataNumArr)) {
|
|
100
|
+
const step = dataNumArr[1] - dataNumArr[0];
|
|
101
|
+
return reverseIfNeed((0, fill_1.fillChnNumber)(data, len, step), isReverse);
|
|
102
|
+
}
|
|
103
|
+
return (0, fill_1.fillCopy)(data, len);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}, exports.chnWeek2Rule = {
|
|
107
|
+
type: types_1.DATA_TYPE.CHN_WEEK2,
|
|
108
|
+
priority: 820,
|
|
109
|
+
match: cellData => !!(0, fill_1.isChnWeek2)(`${null == cellData ? void 0 : cellData.v}` || ""),
|
|
110
|
+
isContinue: (prev, cur) => prev.type === types_1.DATA_TYPE.CHN_WEEK2,
|
|
111
|
+
applyFunctions: {
|
|
112
|
+
[types_1.APPLY_TYPE.SERIES]: (dataWithIndex, len, direction) => {
|
|
113
|
+
var _a;
|
|
114
|
+
const {data: data} = dataWithIndex, isReverse = direction === types_1.Direction.LEFT || direction === types_1.Direction.UP;
|
|
115
|
+
if (1 === data.length) {
|
|
116
|
+
let step;
|
|
117
|
+
return step = isReverse ? -1 : 1, reverseIfNeed((0, fill_1.fillChnWeek)(data, len, step, 1), isReverse);
|
|
118
|
+
}
|
|
119
|
+
const dataNumArr = [];
|
|
120
|
+
let weekIndex = 0;
|
|
121
|
+
for (let i = 0; i < data.length; i++) {
|
|
122
|
+
const formattedValue = `${null === (_a = data[i]) || void 0 === _a ? void 0 : _a.v}`, lastTxt = null == formattedValue ? void 0 : formattedValue.substr(formattedValue.length - 1, 1);
|
|
123
|
+
"周日" === formattedValue ? 0 === i ? dataNumArr.push(0) : (weekIndex++, dataNumArr.push(7 * weekIndex)) : dataNumArr.push((0,
|
|
124
|
+
fill_1.chineseToNumber)(lastTxt) + 7 * weekIndex);
|
|
125
|
+
}
|
|
126
|
+
if (isReverse && (data.reverse(), dataNumArr.reverse()), (0, fill_1.isEqualDiff)(dataNumArr)) {
|
|
127
|
+
const step = dataNumArr[1] - dataNumArr[0];
|
|
128
|
+
return reverseIfNeed((0, fill_1.fillChnWeek)(data, len, step, 1), isReverse);
|
|
129
|
+
}
|
|
130
|
+
return (0, fill_1.fillCopy)(data, len);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}, exports.chnWeek3Rule = {
|
|
134
|
+
type: types_1.DATA_TYPE.CHN_WEEK3,
|
|
135
|
+
priority: 810,
|
|
136
|
+
match: cellData => (0, fill_1.isChnWeek3)(`${null == cellData ? void 0 : cellData.v}` || ""),
|
|
137
|
+
isContinue: (prev, cur) => prev.type === types_1.DATA_TYPE.CHN_WEEK3,
|
|
138
|
+
applyFunctions: {
|
|
139
|
+
[types_1.APPLY_TYPE.SERIES]: (dataWithIndex, len, direction) => {
|
|
140
|
+
var _a;
|
|
141
|
+
const {data: data} = dataWithIndex, isReverse = direction === types_1.Direction.LEFT || direction === types_1.Direction.UP;
|
|
142
|
+
if (1 === data.length) {
|
|
143
|
+
let step;
|
|
144
|
+
return step = isReverse ? -1 : 1, reverseIfNeed((0, fill_1.fillChnWeek)(data, len, step, 2), isReverse);
|
|
145
|
+
}
|
|
146
|
+
const dataNumArr = [];
|
|
147
|
+
let weekIndex = 0;
|
|
148
|
+
for (let i = 0; i < data.length; i++) {
|
|
149
|
+
const formattedValue = `${null === (_a = data[i]) || void 0 === _a ? void 0 : _a.v}`;
|
|
150
|
+
if (formattedValue) {
|
|
151
|
+
const lastTxt = formattedValue.substr(formattedValue.length - 1, 1);
|
|
152
|
+
"星期日" === formattedValue ? 0 === i ? dataNumArr.push(0) : (weekIndex++, dataNumArr.push(7 * weekIndex)) : dataNumArr.push((0,
|
|
153
|
+
fill_1.chineseToNumber)(lastTxt) + 7 * weekIndex);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (isReverse && (data.reverse(), dataNumArr.reverse()), (0, fill_1.isEqualDiff)(dataNumArr)) {
|
|
157
|
+
const step = dataNumArr[1] - dataNumArr[0];
|
|
158
|
+
return reverseIfNeed((0, fill_1.fillChnWeek)(data, len, step, 2), isReverse);
|
|
159
|
+
}
|
|
160
|
+
return (0, fill_1.fillCopy)(data, len);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}, exports.loopSeriesRule = {
|
|
164
|
+
type: types_1.DATA_TYPE.LOOP_SERIES,
|
|
165
|
+
priority: 800,
|
|
166
|
+
match: cellData => (0, fill_1.isLoopSeries)(`${null == cellData ? void 0 : cellData.v}` || ""),
|
|
167
|
+
isContinue: (prev, cur) => {
|
|
168
|
+
var _a;
|
|
169
|
+
return prev.type === types_1.DATA_TYPE.LOOP_SERIES && (0, fill_1.getLoopSeriesInfo)(`${null === (_a = prev.cellData) || void 0 === _a ? void 0 : _a.v}` || "").name === (0,
|
|
170
|
+
fill_1.getLoopSeriesInfo)(`${null == cur ? void 0 : cur.v}` || "").name;
|
|
171
|
+
},
|
|
172
|
+
applyFunctions: {
|
|
173
|
+
[types_1.APPLY_TYPE.SERIES]: (dataWithIndex, len, direction) => {
|
|
174
|
+
var _a, _b;
|
|
175
|
+
const {data: data} = dataWithIndex, isReverse = direction === types_1.Direction.LEFT || direction === types_1.Direction.UP, {series: series} = (0,
|
|
176
|
+
fill_1.getLoopSeriesInfo)(`${null === (_a = data[0]) || void 0 === _a ? void 0 : _a.v}` || "");
|
|
177
|
+
if (1 === data.length) {
|
|
178
|
+
let step;
|
|
179
|
+
return step = isReverse ? -1 : 1, reverseIfNeed((0, fill_1.fillLoopSeries)(data, len, step, series), isReverse);
|
|
180
|
+
}
|
|
181
|
+
const dataNumArr = [];
|
|
182
|
+
let cycleIndex = 0;
|
|
183
|
+
for (let i = 0; i < data.length; i++) {
|
|
184
|
+
const formattedValue = `${null === (_b = data[i]) || void 0 === _b ? void 0 : _b.v}`;
|
|
185
|
+
formattedValue && (formattedValue === series[0] ? 0 === i ? dataNumArr.push(0) : (cycleIndex++,
|
|
186
|
+
dataNumArr.push(cycleIndex * series.length)) : dataNumArr.push(series.indexOf(formattedValue) + 7 * cycleIndex));
|
|
187
|
+
}
|
|
188
|
+
if (isReverse && (data.reverse(), dataNumArr.reverse()), (0, fill_1.isEqualDiff)(dataNumArr)) {
|
|
189
|
+
const step = dataNumArr[1] - dataNumArr[0];
|
|
190
|
+
return reverseIfNeed((0, fill_1.fillLoopSeries)(data, len, step, series), isReverse);
|
|
191
|
+
}
|
|
192
|
+
return (0, fill_1.fillCopy)(data, len);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}, exports.reverseIfNeed = reverseIfNeed;
|
|
196
|
+
//# sourceMappingURL=rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/auto-fill/rules.ts"],"names":[],"mappings":"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","file":"rules.js","sourcesContent":["/**\n * Copyright 2023-present DreamNum Co., Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { IAutoFillRule } from './types';\n\nimport {\n chineseToNumber,\n fillChnNumber,\n fillChnWeek,\n fillCopy,\n fillExtendNumber,\n fillLoopSeries,\n fillSeries,\n getLoopSeriesInfo,\n isChnNumber,\n isChnWeek2,\n isChnWeek3,\n isEqualDiff,\n isLoopSeries,\n matchExtendNumber\n} from './utils/fill';\nimport { APPLY_TYPE, DATA_TYPE, Direction } from './types';\nimport { converterManager, DateConverter } from './series-converters';\nimport { CellValueType } from './types';\nexport const dateRule: IAutoFillRule = {\n type: DATA_TYPE.DATE,\n priority: 1100,\n match: (cellData: any, accessor: any) => {\n return typeof cellData?.v === 'string' && converterManager.getConverter(cellData.v) instanceof DateConverter;\n },\n isContinue: (prev: any, cur: any) => {\n if (prev.type === DATA_TYPE.DATE) {\n return true;\n }\n return false;\n },\n applyFunctions: {\n [APPLY_TYPE.SERIES]: (dataWithIndex: any, len: any, direction: any) => {\n const { data } = dataWithIndex;\n const converter = converterManager.getConverter(data[0]?.v);\n if (direction === Direction.LEFT || direction === Direction.UP) {\n data.reverse();\n return fillSeries(data, len, direction, converter).reverse();\n }\n return fillSeries(data, len, direction, converter);\n }\n }\n};\n\nexport const numberRule: IAutoFillRule = {\n type: DATA_TYPE.NUMBER,\n priority: 1000,\n match: (cellData: any) => typeof cellData?.v === 'number' || cellData?.t === CellValueType.NUMBER,\n isContinue: (prev: any, cur: any) => {\n if (prev.type === DATA_TYPE.NUMBER) {\n return true;\n }\n return false;\n },\n applyFunctions: {\n [APPLY_TYPE.SERIES]: (dataWithIndex: any, len: any, direction: any) => {\n const { data } = dataWithIndex;\n if (direction === Direction.LEFT || direction === Direction.UP) {\n data.reverse();\n return fillSeries(data, len, direction).reverse();\n }\n return fillSeries(data, len, direction);\n }\n }\n};\n\nexport const otherRule: IAutoFillRule = {\n type: DATA_TYPE.OTHER,\n priority: 0,\n match: () => true,\n isContinue: (prev: any, cur: any) => {\n if (prev.type === DATA_TYPE.OTHER) {\n return true;\n }\n return false;\n }\n};\n\nexport const extendNumberRule: IAutoFillRule = {\n type: DATA_TYPE.EXTEND_NUMBER,\n priority: 900,\n match: cellData => matchExtendNumber(`${cellData?.v}` || '').isExtendNumber,\n isContinue: (prev: any, cur: any) => {\n if (prev.type === DATA_TYPE.EXTEND_NUMBER) {\n const { beforeTxt, afterTxt } = matchExtendNumber(`${prev.cellData?.v}` || '');\n const { beforeTxt: curBeforeTxt, afterTxt: curAfterTxt } = matchExtendNumber(`${cur?.v}` || '');\n if (beforeTxt === curBeforeTxt && afterTxt === curAfterTxt) {\n return true;\n }\n }\n return false;\n },\n applyFunctions: {\n [APPLY_TYPE.SERIES]: (dataWithIndex: any, len: any, direction: any) => {\n const { data } = dataWithIndex;\n const isReverse = direction === Direction.UP || direction === Direction.LEFT;\n\n let step;\n if (data.length === 1) {\n step = isReverse ? -1 : 1;\n return reverseIfNeed(fillExtendNumber(data, len, step), isReverse);\n }\n const dataNumArr = [];\n\n for (let i = 0; i < data.length; i++) {\n const txt = `${data[i]?.v}`;\n txt && dataNumArr.push(Number(matchExtendNumber(txt).matchTxt));\n }\n\n if (isReverse) {\n data.reverse();\n dataNumArr.reverse();\n }\n\n if (isEqualDiff(dataNumArr)) {\n step = dataNumArr[1] - dataNumArr[0];\n return reverseIfNeed(fillExtendNumber(data, len, step), isReverse);\n }\n return fillCopy(data, len);\n }\n }\n};\n\nexport const chnNumberRule: IAutoFillRule = {\n type: DATA_TYPE.CHN_NUMBER,\n priority: 830,\n match: cellData => {\n if (isChnNumber(`${cellData?.v}` || '')) {\n return true;\n }\n return false;\n },\n isContinue: (prev: any, cur: any) => {\n if (prev.type === DATA_TYPE.CHN_NUMBER) {\n return true;\n }\n return false;\n },\n applyFunctions: {\n [APPLY_TYPE.SERIES]: (dataWithIndex: any, len: any, direction: any) => {\n const { data } = dataWithIndex;\n\n const isReverse = direction === Direction.LEFT || direction === Direction.UP;\n if (data.length === 1) {\n let step;\n if (!isReverse) {\n step = 1;\n } else {\n step = -1;\n }\n return reverseIfNeed(fillChnNumber(data, len, step), isReverse);\n }\n let hasWeek = false;\n for (let i = 0; i < data.length; i++) {\n const formattedValue = data[i]?.v;\n\n if (formattedValue === '日') {\n hasWeek = true;\n break;\n }\n }\n\n const dataNumArr = [];\n let weekIndex = 0;\n for (let i = 0; i < data.length; i++) {\n const formattedValue = `${data[i]?.v}`;\n if (formattedValue === '日') {\n if (i === 0) {\n dataNumArr.push(0);\n } else {\n weekIndex++;\n dataNumArr.push(weekIndex * 7);\n }\n } else if (hasWeek && chineseToNumber(formattedValue) > 0 && chineseToNumber(formattedValue) < 7) {\n dataNumArr.push(chineseToNumber(formattedValue) + weekIndex * 7);\n } else {\n dataNumArr.push(chineseToNumber(formattedValue));\n }\n }\n\n if (isReverse) {\n data.reverse();\n dataNumArr.reverse();\n }\n\n if (isEqualDiff(dataNumArr)) {\n // Always fill with sequence of Chinese lowercase numbers\n const step = dataNumArr[1] - dataNumArr[0];\n return reverseIfNeed(fillChnNumber(data, len, step), isReverse);\n }\n // Not an arithmetic progression, copy data\n return fillCopy(data, len);\n }\n }\n};\n\nexport const chnWeek2Rule: IAutoFillRule = {\n type: DATA_TYPE.CHN_WEEK2,\n priority: 820,\n match: cellData => {\n if (isChnWeek2(`${cellData?.v}` || '')) {\n return true;\n }\n return false;\n },\n isContinue: (prev: any, cur: any) => prev.type === DATA_TYPE.CHN_WEEK2,\n applyFunctions: {\n [APPLY_TYPE.SERIES]: (dataWithIndex: any, len: any, direction: any) => {\n const { data } = dataWithIndex;\n\n const isReverse = direction === Direction.LEFT || direction === Direction.UP;\n if (data.length === 1) {\n let step;\n if (!isReverse) {\n step = 1;\n } else {\n step = -1;\n }\n\n return reverseIfNeed(fillChnWeek(data, len, step, 1), isReverse);\n }\n const dataNumArr = [];\n let weekIndex = 0;\n\n for (let i = 0; i < data.length; i++) {\n const formattedValue = `${data[i]?.v}`;\n const lastTxt = formattedValue?.substr(formattedValue.length - 1, 1);\n if (formattedValue === '周日') {\n if (i === 0) {\n dataNumArr.push(0);\n } else {\n weekIndex++;\n dataNumArr.push(weekIndex * 7);\n }\n } else {\n dataNumArr.push(chineseToNumber(lastTxt) + weekIndex * 7);\n }\n }\n\n if (isReverse) {\n data.reverse();\n dataNumArr.reverse();\n }\n\n if (isEqualDiff(dataNumArr)) {\n const step = dataNumArr[1] - dataNumArr[0];\n return reverseIfNeed(fillChnWeek(data, len, step, 1), isReverse);\n }\n return fillCopy(data, len);\n }\n }\n};\n\nexport const chnWeek3Rule: IAutoFillRule = {\n type: DATA_TYPE.CHN_WEEK3,\n priority: 810,\n match: cellData => isChnWeek3(`${cellData?.v}` || ''),\n isContinue: (prev: any, cur: any) => prev.type === DATA_TYPE.CHN_WEEK3,\n applyFunctions: {\n [APPLY_TYPE.SERIES]: (dataWithIndex: any, len: any, direction: any) => {\n const { data } = dataWithIndex;\n\n const isReverse = direction === Direction.LEFT || direction === Direction.UP;\n if (data.length === 1) {\n let step;\n if (!isReverse) {\n step = 1;\n } else {\n step = -1;\n }\n\n return reverseIfNeed(fillChnWeek(data, len, step, 2), isReverse);\n }\n const dataNumArr = [];\n let weekIndex = 0;\n\n for (let i = 0; i < data.length; i++) {\n const formattedValue = `${data[i]?.v}`;\n if (formattedValue) {\n const lastTxt = formattedValue.substr(formattedValue.length - 1, 1);\n if (formattedValue === '星期日') {\n if (i === 0) {\n dataNumArr.push(0);\n } else {\n weekIndex++;\n dataNumArr.push(weekIndex * 7);\n }\n } else {\n dataNumArr.push(chineseToNumber(lastTxt) + weekIndex * 7);\n }\n }\n }\n\n if (isReverse) {\n data.reverse();\n dataNumArr.reverse();\n }\n\n if (isEqualDiff(dataNumArr)) {\n const step = dataNumArr[1] - dataNumArr[0];\n return reverseIfNeed(fillChnWeek(data, len, step, 2), isReverse);\n }\n return fillCopy(data, len);\n }\n }\n};\n\nexport const loopSeriesRule: IAutoFillRule = {\n type: DATA_TYPE.LOOP_SERIES,\n priority: 800,\n match: cellData => isLoopSeries(`${cellData?.v}` || ''),\n isContinue: (prev: any, cur: any) => {\n if (prev.type === DATA_TYPE.LOOP_SERIES) {\n return getLoopSeriesInfo(`${prev.cellData?.v}` || '').name === getLoopSeriesInfo(`${cur?.v}` || '').name;\n }\n return false;\n },\n applyFunctions: {\n [APPLY_TYPE.SERIES]: (dataWithIndex: any, len: any, direction: any) => {\n const { data } = dataWithIndex;\n const isReverse = direction === Direction.LEFT || direction === Direction.UP;\n const { series } = getLoopSeriesInfo(`${data[0]?.v}` || '');\n if (data.length === 1) {\n let step;\n if (!isReverse) {\n step = 1;\n } else {\n step = -1;\n }\n\n return reverseIfNeed(fillLoopSeries(data, len, step, series), isReverse);\n }\n const dataNumArr = [];\n let cycleIndex = 0;\n for (let i = 0; i < data.length; i++) {\n const formattedValue = `${data[i]?.v}`;\n if (formattedValue) {\n if (formattedValue === series[0]) {\n if (i === 0) {\n dataNumArr.push(0);\n } else {\n cycleIndex++;\n dataNumArr.push(cycleIndex * series.length);\n }\n } else {\n dataNumArr.push(series.indexOf(formattedValue) + cycleIndex * 7);\n }\n }\n }\n\n if (isReverse) {\n data.reverse();\n dataNumArr.reverse();\n }\n\n if (isEqualDiff(dataNumArr)) {\n const step = dataNumArr[1] - dataNumArr[0];\n return reverseIfNeed(fillLoopSeries(data, len, step, series), isReverse);\n }\n return fillCopy(data, len);\n }\n }\n};\n\nexport function reverseIfNeed<T>(data: T[], reverse: boolean): T[] {\n return reverse ? data.reverse() : data;\n}\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface IConverter {
|
|
2
|
+
key: string;
|
|
3
|
+
detect(value: any): boolean;
|
|
4
|
+
toNumber(value: any): {
|
|
5
|
+
v: number;
|
|
6
|
+
meta?: any;
|
|
7
|
+
};
|
|
8
|
+
fromNumber(num: number, meta?: any): any;
|
|
9
|
+
}
|
|
10
|
+
export declare class DateConverter implements IConverter {
|
|
11
|
+
key: string;
|
|
12
|
+
private baseDate;
|
|
13
|
+
private dateFormats;
|
|
14
|
+
detect(value: any): boolean;
|
|
15
|
+
toNumber(value: Date | string): {
|
|
16
|
+
v: number;
|
|
17
|
+
meta?: string;
|
|
18
|
+
};
|
|
19
|
+
fromNumber(daysOffset: number, meta?: string): string;
|
|
20
|
+
}
|
|
21
|
+
export declare class ConverterManager {
|
|
22
|
+
private converters;
|
|
23
|
+
register(converter: IConverter): void;
|
|
24
|
+
getConverter(value: any): IConverter | null;
|
|
25
|
+
getConverterByKey(key: string): IConverter | null;
|
|
26
|
+
}
|
|
27
|
+
export declare const converterManager: ConverterManager;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: !0
|
|
5
|
+
}), exports.converterManager = exports.ConverterManager = exports.DateConverter = void 0;
|
|
6
|
+
|
|
7
|
+
const date_1 = require("./utils/date");
|
|
8
|
+
|
|
9
|
+
class DateConverter {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.key = "date", this.baseDate = new Date(1900, 0, 1), this.dateFormats = [ {
|
|
12
|
+
pattern: /^\d{4}-\d{2}-\d{2}$/,
|
|
13
|
+
format: "yyyy-MM-dd"
|
|
14
|
+
}, {
|
|
15
|
+
pattern: /^\d{4}-\d{1,2}-\d{1,2}$/,
|
|
16
|
+
format: "yyyy-M-d"
|
|
17
|
+
}, {
|
|
18
|
+
pattern: /^\d{4}\/\d{2}\/\d{2}$/,
|
|
19
|
+
format: "yyyy/MM/dd"
|
|
20
|
+
}, {
|
|
21
|
+
pattern: /^\d{4}\/\d{1,2}\/\d{1,2}$/,
|
|
22
|
+
format: "yyyy/M/d"
|
|
23
|
+
}, {
|
|
24
|
+
pattern: /^\d{2}\/\d{2}\/\d{4}$/,
|
|
25
|
+
format: "MM/dd/yyyy"
|
|
26
|
+
}, {
|
|
27
|
+
pattern: /^\d{4}年\d{1,2}月\d{1,2}(日)?$/,
|
|
28
|
+
format: "yyyy年M月d日",
|
|
29
|
+
parser: value => {
|
|
30
|
+
const match = value.match(/(\d{4})年(\d{1,2})月(\d{1,2})/);
|
|
31
|
+
if (!match) throw new Error("无效的中文日期格式");
|
|
32
|
+
return new Date(+match[1], +match[2] - 1, +match[3]);
|
|
33
|
+
}
|
|
34
|
+
} ];
|
|
35
|
+
}
|
|
36
|
+
detect(value) {
|
|
37
|
+
if (value instanceof Date) return !isNaN(value.getTime());
|
|
38
|
+
if ("string" != typeof value) return !1;
|
|
39
|
+
const str = value.trim(), matchedFormat = this.dateFormats.find((rule => rule.pattern.test(str)));
|
|
40
|
+
if (matchedFormat) try {
|
|
41
|
+
const date = matchedFormat.parser ? matchedFormat.parser(str) : (0, date_1.parse)(str, matchedFormat.format, new Date);
|
|
42
|
+
return (0, date_1.isValid)(date);
|
|
43
|
+
} catch (_a) {
|
|
44
|
+
return !1;
|
|
45
|
+
}
|
|
46
|
+
return !1;
|
|
47
|
+
}
|
|
48
|
+
toNumber(value) {
|
|
49
|
+
let date, formatMeta;
|
|
50
|
+
if (value instanceof Date) {
|
|
51
|
+
if (!(0, date_1.isValid)(value)) throw new Error("无效的日期对象");
|
|
52
|
+
date = value, formatMeta = "yyyy-MM-dd";
|
|
53
|
+
} else {
|
|
54
|
+
const str = value.trim(), matchedFormat = this.dateFormats.find((rule => rule.pattern.test(str)));
|
|
55
|
+
if (!matchedFormat) throw new Error(`不支持的日期格式: ${str}`);
|
|
56
|
+
if (date = matchedFormat.parser ? matchedFormat.parser(str) : (0, date_1.parse)(str, matchedFormat.format, new Date),
|
|
57
|
+
!(0, date_1.isValid)(date)) throw new Error(`无效的日期值: ${str}`);
|
|
58
|
+
formatMeta = matchedFormat.format;
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
v: (0, date_1.differenceInDays)(date, this.baseDate),
|
|
62
|
+
meta: formatMeta
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
fromNumber(daysOffset, meta) {
|
|
66
|
+
const targetDate = (0, date_1.addDays)(this.baseDate, daysOffset);
|
|
67
|
+
return targetDate.setHours(0, 0, 0, 0), (0, date_1.format)(targetDate, meta || "yyyy-MM-dd");
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
exports.DateConverter = DateConverter;
|
|
72
|
+
|
|
73
|
+
class ConverterManager {
|
|
74
|
+
constructor() {
|
|
75
|
+
this.converters = [];
|
|
76
|
+
}
|
|
77
|
+
register(converter) {
|
|
78
|
+
this.converters.push(converter);
|
|
79
|
+
}
|
|
80
|
+
getConverter(value) {
|
|
81
|
+
return this.converters.find((converter => converter.detect(value))) || null;
|
|
82
|
+
}
|
|
83
|
+
getConverterByKey(key) {
|
|
84
|
+
return this.converters.find((converter => converter.key === key)) || null;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
exports.ConverterManager = ConverterManager, exports.converterManager = new ConverterManager,
|
|
89
|
+
exports.converterManager.register(new DateConverter);
|
|
90
|
+
//# sourceMappingURL=series-converters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/auto-fill/series-converters.ts"],"names":[],"mappings":"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","file":"series-converters.js","sourcesContent":["import { parse, isValid, differenceInDays, addDays, format } from './utils/date';\n\n// 通用转换器接口\nexport interface IConverter {\n key: string; // 转换器标识\n detect(value: any): boolean; // 检测值是否可被当前转换器处理\n toNumber(value: any): { v: number; meta?: any }; // 转换为数字\n fromNumber(num: number, meta?: any): any; // 从数字转换回来\n}\n\n// 日期格式规则\ninterface DateFormatRule {\n pattern: RegExp;\n format: string;\n parser?: (value: string) => Date;\n}\n\n/**\n * 日期转换器 - 实现IConverter接口\n */\nexport class DateConverter implements IConverter {\n key = 'date'; // 标识为日期转换器\n private baseDate = new Date(1900, 0, 1);\n\n // 日期格式规则\n private dateFormats: DateFormatRule[] = [\n { pattern: /^\\d{4}-\\d{2}-\\d{2}$/, format: 'yyyy-MM-dd' },\n { pattern: /^\\d{4}-\\d{1,2}-\\d{1,2}$/, format: 'yyyy-M-d' },\n { pattern: /^\\d{4}\\/\\d{2}\\/\\d{2}$/, format: 'yyyy/MM/dd' },\n { pattern: /^\\d{4}\\/\\d{1,2}\\/\\d{1,2}$/, format: 'yyyy/M/d' },\n { pattern: /^\\d{2}\\/\\d{2}\\/\\d{4}$/, format: 'MM/dd/yyyy' },\n {\n pattern: /^\\d{4}年\\d{1,2}月\\d{1,2}(日)?$/,\n format: 'yyyy年M月d日',\n parser: (value: string) => {\n const match = value.match(/(\\d{4})年(\\d{1,2})月(\\d{1,2})/);\n if (!match) throw new Error('无效的中文日期格式');\n return new Date(+match[1], +match[2] - 1, +match[3]);\n }\n }\n ];\n\n // 检测是否为日期\n detect(value: any): boolean {\n if (value instanceof Date) {\n return !isNaN(value.getTime());\n }\n\n if (typeof value !== 'string') {\n return false;\n }\n\n const str = value.trim();\n const matchedFormat = this.dateFormats.find(rule => rule.pattern.test(str));\n\n if (matchedFormat) {\n try {\n const date = matchedFormat.parser ? matchedFormat.parser(str) : parse(str, matchedFormat.format, new Date());\n return isValid(date);\n } catch {\n return false;\n }\n }\n\n return false;\n }\n\n // 转换为数字(日偏移量)\n toNumber(value: Date | string): { v: number; meta?: string } {\n let date: Date;\n let formatMeta: string | undefined;\n\n if (value instanceof Date) {\n if (!isValid(value)) throw new Error('无效的日期对象');\n date = value;\n formatMeta = 'yyyy-MM-dd';\n } else {\n const str = value.trim();\n const matchedFormat = this.dateFormats.find(rule => rule.pattern.test(str));\n\n if (!matchedFormat) throw new Error(`不支持的日期格式: ${str}`);\n\n date = matchedFormat.parser ? matchedFormat.parser(str) : parse(str, matchedFormat.format, new Date());\n\n if (!isValid(date)) throw new Error(`无效的日期值: ${str}`);\n formatMeta = matchedFormat.format;\n }\n\n return {\n v: differenceInDays(date, this.baseDate),\n meta: formatMeta\n };\n }\n\n // 从数字转换回日期\n fromNumber(daysOffset: number, meta?: string): string {\n const targetDate = addDays(this.baseDate, daysOffset);\n targetDate.setHours(0, 0, 0, 0);\n\n return format(targetDate, meta || 'yyyy-MM-dd');\n }\n}\n\n/**\n * 转换器管理器 - 用于统一管理和获取转换器\n */\nexport class ConverterManager {\n private converters: IConverter[] = [];\n\n // 注册转换器\n register(converter: IConverter): void {\n this.converters.push(converter);\n }\n\n // 根据值自动获取合适的转换器\n getConverter(value: any): IConverter | null {\n return this.converters.find(converter => converter.detect(value)) || null;\n }\n\n // 根据key获取转换器\n getConverterByKey(key: string): IConverter | null {\n return this.converters.find(converter => converter.key === key) || null;\n }\n}\n\n// 初始化示例\nexport const converterManager = new ConverterManager();\nconverterManager.register(new DateConverter());\n"]}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export declare enum Direction {
|
|
2
|
+
UP = "top",
|
|
3
|
+
RIGHT = "right",
|
|
4
|
+
DOWN = "bottom",
|
|
5
|
+
LEFT = "left"
|
|
6
|
+
}
|
|
7
|
+
export interface IAutoFillRule {
|
|
8
|
+
type: string;
|
|
9
|
+
match: (cellData: Nullable<ICellData>, accessor: any) => boolean;
|
|
10
|
+
isContinue: (prev: IRuleConfirmedData, cur: Nullable<ICellData>) => boolean;
|
|
11
|
+
applyFunctions?: APPLY_FUNCTIONS;
|
|
12
|
+
priority: number;
|
|
13
|
+
}
|
|
14
|
+
export interface IRuleConfirmedData {
|
|
15
|
+
type?: string;
|
|
16
|
+
cellData: Nullable<ICellData>;
|
|
17
|
+
}
|
|
18
|
+
export type APPLY_FUNCTIONS = {
|
|
19
|
+
[key in APPLY_TYPE]?: (dataWithIndex: ICopyDataInType, len: number, direction: Direction, copyDataPiece: ISourceDataPiece, location?: IAutoFillLocation) => Array<Nullable<ICellData>>;
|
|
20
|
+
};
|
|
21
|
+
export declare enum APPLY_TYPE {
|
|
22
|
+
COPY = "copy",
|
|
23
|
+
SERIES = "series"
|
|
24
|
+
}
|
|
25
|
+
export interface IAutoFillLocation {
|
|
26
|
+
source: IDiscreteRange;
|
|
27
|
+
target: IDiscreteRange;
|
|
28
|
+
}
|
|
29
|
+
export interface IDiscreteRange {
|
|
30
|
+
rows: number[];
|
|
31
|
+
cols: number[];
|
|
32
|
+
}
|
|
33
|
+
export interface ISourceDataPiece {
|
|
34
|
+
[key: string]: ICopyDataInType[];
|
|
35
|
+
}
|
|
36
|
+
export interface ICopyDataInType {
|
|
37
|
+
data: Array<Nullable<ICellData>>;
|
|
38
|
+
index: ICopyDataInTypeIndexInfo;
|
|
39
|
+
}
|
|
40
|
+
export type ICopyDataInTypeIndexInfo = number[];
|
|
41
|
+
export type CellValue = string | number | boolean;
|
|
42
|
+
export interface ICellData {
|
|
43
|
+
v?: Nullable<CellValue>;
|
|
44
|
+
t?: Nullable<CellValueType>;
|
|
45
|
+
}
|
|
46
|
+
export type CustomData = Nullable<Record<string, any>>;
|
|
47
|
+
export declare enum CellValueType {
|
|
48
|
+
STRING = 1,
|
|
49
|
+
NUMBER = 2,
|
|
50
|
+
BOOLEAN = 3,
|
|
51
|
+
FORCE_STRING = 4
|
|
52
|
+
}
|
|
53
|
+
export type Nullable<T> = T | null | undefined | void;
|
|
54
|
+
export interface IKeyValue {
|
|
55
|
+
[key: string]: any;
|
|
56
|
+
}
|
|
57
|
+
export declare enum DATA_TYPE {
|
|
58
|
+
NUMBER = "number",
|
|
59
|
+
DATE = "date",
|
|
60
|
+
EXTEND_NUMBER = "extendNumber",
|
|
61
|
+
CHN_NUMBER = "chnNumber",
|
|
62
|
+
CHN_WEEK2 = "chnWeek2",
|
|
63
|
+
CHN_WEEK3 = "chnWeek3",
|
|
64
|
+
LOOP_SERIES = "loopSeries",
|
|
65
|
+
FORMULA = "formula",
|
|
66
|
+
OTHER = "other"
|
|
67
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var Direction, APPLY_TYPE, CellValueType, DATA_TYPE;
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: !0
|
|
7
|
+
}), exports.DATA_TYPE = exports.CellValueType = exports.APPLY_TYPE = exports.Direction = void 0,
|
|
8
|
+
function(Direction) {
|
|
9
|
+
Direction.UP = "top", Direction.RIGHT = "right", Direction.DOWN = "bottom", Direction.LEFT = "left";
|
|
10
|
+
}(Direction = exports.Direction || (exports.Direction = {})), function(APPLY_TYPE) {
|
|
11
|
+
APPLY_TYPE.COPY = "copy", APPLY_TYPE.SERIES = "series";
|
|
12
|
+
}(APPLY_TYPE = exports.APPLY_TYPE || (exports.APPLY_TYPE = {})), function(CellValueType) {
|
|
13
|
+
CellValueType[CellValueType.STRING = 1] = "STRING", CellValueType[CellValueType.NUMBER = 2] = "NUMBER",
|
|
14
|
+
CellValueType[CellValueType.BOOLEAN = 3] = "BOOLEAN", CellValueType[CellValueType.FORCE_STRING = 4] = "FORCE_STRING";
|
|
15
|
+
}(CellValueType = exports.CellValueType || (exports.CellValueType = {})), function(DATA_TYPE) {
|
|
16
|
+
DATA_TYPE.NUMBER = "number", DATA_TYPE.DATE = "date", DATA_TYPE.EXTEND_NUMBER = "extendNumber",
|
|
17
|
+
DATA_TYPE.CHN_NUMBER = "chnNumber", DATA_TYPE.CHN_WEEK2 = "chnWeek2", DATA_TYPE.CHN_WEEK3 = "chnWeek3",
|
|
18
|
+
DATA_TYPE.LOOP_SERIES = "loopSeries", DATA_TYPE.FORMULA = "formula", DATA_TYPE.OTHER = "other";
|
|
19
|
+
}(DATA_TYPE = exports.DATA_TYPE || (exports.DATA_TYPE = {}));
|
|
20
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/auto-fill/types.ts"],"names":[],"mappings":";;;AAeA,IAAY,SAKX;AALD,WAAY,SAAS;IACnB,uBAAU,CAAA;IACV,4BAAe,CAAA;IACf,4BAAe,CAAA;IACf,0BAAa,CAAA;AACf,CAAC,EALW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAKpB;AAyBD,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,2BAAa,CAAA;IACb,+BAAiB,CAAA;AACnB,CAAC,EAHW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAGrB;AA+CD,IAAY,aAKX;AALD,WAAY,aAAa;IACvB,qDAAU,CAAA;IACV,qDAAM,CAAA;IACN,uDAAO,CAAA;IACP,iEAAY,CAAA;AACd,CAAC,EALW,aAAa,GAAb,qBAAa,KAAb,qBAAa,QAKxB;AAaD,IAAY,SAUX;AAVD,WAAY,SAAS;IACnB,8BAAiB,CAAA;IACjB,0BAAa,CAAA;IACb,2CAA8B,CAAA;IAC9B,qCAAwB,CAAA;IACxB,mCAAsB,CAAA;IACtB,mCAAsB,CAAA;IACtB,uCAA0B,CAAA;IAC1B,gCAAmB,CAAA;IACnB,4BAAe,CAAA;AACjB,CAAC,EAVW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAUpB","file":"types.js","sourcesContent":["/**\n * Copyright 2023-present DreamNum Co., Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport enum Direction {\n UP = 'top',\n RIGHT = 'right',\n DOWN = 'bottom',\n LEFT = 'left'\n}\n// auto fill rule\nexport interface IAutoFillRule {\n type: string;\n match: (cellData: Nullable<ICellData>, accessor: any) => boolean;\n isContinue: (prev: IRuleConfirmedData, cur: Nullable<ICellData>) => boolean;\n applyFunctions?: APPLY_FUNCTIONS;\n priority: number;\n}\n\nexport interface IRuleConfirmedData {\n type?: string;\n cellData: Nullable<ICellData>;\n}\n\nexport type APPLY_FUNCTIONS = {\n [key in APPLY_TYPE]?: (\n dataWithIndex: ICopyDataInType,\n len: number,\n direction: Direction,\n copyDataPiece: ISourceDataPiece,\n location?: IAutoFillLocation\n ) => Array<Nullable<ICellData>>;\n};\n\nexport enum APPLY_TYPE {\n COPY = 'copy',\n SERIES = 'series'\n}\n\nexport interface IAutoFillLocation {\n source: IDiscreteRange;\n target: IDiscreteRange;\n}\n\nexport interface IDiscreteRange {\n rows: number[];\n cols: number[];\n}\n\n// copy data\nexport interface ISourceDataPiece {\n [key: string]: ICopyDataInType[];\n}\n\nexport interface ICopyDataInType {\n data: Array<Nullable<ICellData>>;\n index: ICopyDataInTypeIndexInfo;\n}\n\nexport type ICopyDataInTypeIndexInfo = number[];\n\n// cell data\n/**\n * Cell value type\n */\nexport type CellValue = string | number | boolean;\n/**\n * Cell data\n */\nexport interface ICellData {\n /**\n * Origin value\n */\n v?: Nullable<CellValue>;\n\n // Usually the type is automatically determined based on the data, or the user directly specifies\n t?: Nullable<CellValueType>; // 1 string, 2 number, 3 boolean, 4 force string, green icon, set null for cell clear all\n}\n\nexport type CustomData = Nullable<Record<string, any>>;\n\n/**\n * General Boolean Enum\n */\nexport enum CellValueType {\n STRING = 1,\n NUMBER,\n BOOLEAN,\n FORCE_STRING\n}\n\nexport type Nullable<T> = T | null | undefined | void;\n\n/**\n * Key value object\n *\n * @ignore\n * @deprecated As it has\n */\nexport interface IKeyValue {\n [key: string]: any;\n}\nexport enum DATA_TYPE {\n NUMBER = 'number',\n DATE = 'date',\n EXTEND_NUMBER = 'extendNumber',\n CHN_NUMBER = 'chnNumber',\n CHN_WEEK2 = 'chnWeek2',\n CHN_WEEK3 = 'chnWeek3',\n LOOP_SERIES = 'loopSeries',\n FORMULA = 'formula',\n OTHER = 'other'\n}\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function parse(dateString: string, formatString: string, referenceDate?: Date): Date;
|
|
2
|
+
export declare function isValid(date: Date): boolean;
|
|
3
|
+
export declare function differenceInDays(dateLeft: Date, dateRight: Date): number;
|
|
4
|
+
export declare function addDays(date: Date, amount: number): Date;
|
|
5
|
+
export declare function format(date: Date, formatString: string): string;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function parse(dateString, formatString, referenceDate = new Date) {
|
|
4
|
+
const str = dateString.trim();
|
|
5
|
+
if ("yyyy-MM-dd" === formatString) {
|
|
6
|
+
const [year, month, day] = str.split("-").map(Number);
|
|
7
|
+
return new Date(year, month - 1, day);
|
|
8
|
+
}
|
|
9
|
+
if ("yyyy-M-d" === formatString) {
|
|
10
|
+
const [year, month, day] = str.split("-").map(Number);
|
|
11
|
+
return new Date(year, month - 1, day);
|
|
12
|
+
}
|
|
13
|
+
if ("yyyy/MM/dd" === formatString) {
|
|
14
|
+
const [year, month, day] = str.split("/").map(Number);
|
|
15
|
+
return new Date(year, month - 1, day);
|
|
16
|
+
}
|
|
17
|
+
if ("yyyy/M/d" === formatString) {
|
|
18
|
+
const [year, month, day] = str.split("/").map(Number);
|
|
19
|
+
return new Date(year, month - 1, day);
|
|
20
|
+
}
|
|
21
|
+
if ("MM/dd/yyyy" === formatString) {
|
|
22
|
+
const [month, day, year] = str.split("/").map(Number);
|
|
23
|
+
return new Date(year, month - 1, day);
|
|
24
|
+
}
|
|
25
|
+
if ("yyyy年M月d日" === formatString) {
|
|
26
|
+
const match = str.match(/^(\d{4})年(\d{1,2})月(\d{1,2})(日)?$/);
|
|
27
|
+
if (match) return new Date(Number(match[1]), Number(match[2]) - 1, Number(match[3]));
|
|
28
|
+
}
|
|
29
|
+
const parsed = new Date(str);
|
|
30
|
+
return isNaN(parsed.getTime()) ? new Date(referenceDate) : parsed;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function isValid(date) {
|
|
34
|
+
return !isNaN(date.getTime());
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function differenceInDays(dateLeft, dateRight) {
|
|
38
|
+
const diffTime = Date.UTC(dateLeft.getFullYear(), dateLeft.getMonth(), dateLeft.getDate()) - Date.UTC(dateRight.getFullYear(), dateRight.getMonth(), dateRight.getDate());
|
|
39
|
+
return Math.floor(diffTime / 864e5);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function addDays(date, amount) {
|
|
43
|
+
const newDate = new Date(date);
|
|
44
|
+
return newDate.setDate(newDate.getDate() + amount), newDate;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function format(date, formatString) {
|
|
48
|
+
const year = date.getFullYear(), month = date.getMonth() + 1, day = date.getDate(), pad = num => num.toString().padStart(2, "0");
|
|
49
|
+
switch (formatString) {
|
|
50
|
+
case "yyyy-MM-dd":
|
|
51
|
+
default:
|
|
52
|
+
return `${year}-${pad(month)}-${pad(day)}`;
|
|
53
|
+
|
|
54
|
+
case "yyyy-M-d":
|
|
55
|
+
return `${year}-${month}-${day}`;
|
|
56
|
+
|
|
57
|
+
case "yyyy/MM/dd":
|
|
58
|
+
return `${year}/${pad(month)}/${pad(day)}`;
|
|
59
|
+
|
|
60
|
+
case "yyyy/M/d":
|
|
61
|
+
return `${year}/${month}/${day}`;
|
|
62
|
+
|
|
63
|
+
case "MM/dd/yyyy":
|
|
64
|
+
return `${pad(month)}/${pad(day)}/${year}`;
|
|
65
|
+
|
|
66
|
+
case "yyyy年M月d日":
|
|
67
|
+
return `${year}年${month}月${day}日`;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
Object.defineProperty(exports, "__esModule", {
|
|
72
|
+
value: !0
|
|
73
|
+
}), exports.format = exports.addDays = exports.differenceInDays = exports.isValid = exports.parse = void 0,
|
|
74
|
+
exports.parse = parse, exports.isValid = isValid, exports.differenceInDays = differenceInDays,
|
|
75
|
+
exports.addDays = addDays, exports.format = format;
|
|
76
|
+
//# sourceMappingURL=date.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/auto-fill/utils/date.ts"],"names":[],"mappings":"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","file":"date.js","sourcesContent":["/**\n * 解析日期字符串为Date对象\n * 支持更多日期格式,与日期转换器中的格式规则对应\n * @param dateString 日期字符串\n * @param formatString 格式字符串\n * @param referenceDate 解析失败时返回的参考日期\n * @returns 解析后的Date对象\n */\nexport function parse(dateString: string, formatString: string, referenceDate: Date = new Date()): Date {\n // 移除可能的空白字符\n const str = dateString.trim();\n\n // 处理 yyyy-MM-dd 格式 (如: 2023-12-31)\n if (formatString === 'yyyy-MM-dd') {\n const [year, month, day] = str.split('-').map(Number);\n return new Date(year, month - 1, day);\n }\n\n // 处理 yyyy-M-d 格式 (如: 2023-3-5)\n if (formatString === 'yyyy-M-d') {\n const [year, month, day] = str.split('-').map(Number);\n return new Date(year, month - 1, day);\n }\n\n // 处理 yyyy/MM/dd 格式 (如: 2023/12/31)\n if (formatString === 'yyyy/MM/dd') {\n const [year, month, day] = str.split('/').map(Number);\n return new Date(year, month - 1, day);\n }\n\n // 处理 yyyy/M/d 格式 (如: 2023/3/5)\n if (formatString === 'yyyy/M/d') {\n const [year, month, day] = str.split('/').map(Number);\n return new Date(year, month - 1, day);\n }\n\n // 处理 MM/dd/yyyy 格式 (如: 12/31/2023)\n if (formatString === 'MM/dd/yyyy') {\n const [month, day, year] = str.split('/').map(Number);\n return new Date(year, month - 1, day);\n }\n\n // 处理 yyyy年M月d日 格式 (如: 2023年3月5日 或 2023年12月31日)\n if (formatString === 'yyyy年M月d日') {\n const match = str.match(/^(\\d{4})年(\\d{1,2})月(\\d{1,2})(日)?$/);\n if (match) {\n return new Date(Number(match[1]), Number(match[2]) - 1, Number(match[3]));\n }\n }\n\n // 尝试通用解析(作为后备)\n const parsed = new Date(str);\n if (!isNaN(parsed.getTime())) {\n return parsed;\n }\n\n // 所有解析方法都失败时返回参考日期\n return new Date(referenceDate);\n}\n\n/**\n * 检查日期是否有效\n * @param date 要检查的日期\n * @returns 日期是否有效的布尔值\n */\nexport function isValid(date: Date): boolean {\n return !isNaN(date.getTime());\n}\n\n/**\n * 计算两个日期之间的天数差\n * @param dateLeft 第一个日期\n * @param dateRight 第二个日期\n * @returns 两个日期之间的天数差\n */\nexport function differenceInDays(dateLeft: Date, dateRight: Date): number {\n // 转换为UTC时间以避免时区问题\n const leftTime = Date.UTC(dateLeft.getFullYear(), dateLeft.getMonth(), dateLeft.getDate());\n const rightTime = Date.UTC(dateRight.getFullYear(), dateRight.getMonth(), dateRight.getDate());\n\n // 计算毫秒差并转换为天数\n const diffTime = leftTime - rightTime;\n return Math.floor(diffTime / (1000 * 60 * 60 * 24));\n}\n\n/**\n * 给日期增加指定天数\n * @param date 基础日期\n * @param amount 要增加的天数\n * @returns 增加天数后的新日期\n */\nexport function addDays(date: Date, amount: number): Date {\n const newDate = new Date(date);\n newDate.setDate(newDate.getDate() + amount);\n return newDate;\n}\n\n/**\n * 格式化日期为字符串\n * @param date 要格式化的日期\n * @param formatString 格式字符串\n * @returns 格式化后的日期字符串\n */\nexport function format(date: Date, formatString: string): string {\n const year = date.getFullYear();\n const month = date.getMonth() + 1;\n const day = date.getDate();\n\n // 辅助函数:数字补零\n const pad = (num: number) => num.toString().padStart(2, '0');\n\n // 处理几种常见格式\n switch (formatString) {\n case 'yyyy-MM-dd':\n return `${year}-${pad(month)}-${pad(day)}`;\n case 'yyyy-M-d':\n return `${year}-${month}-${day}`;\n case 'yyyy/MM/dd':\n return `${year}/${pad(month)}/${pad(day)}`;\n case 'yyyy/M/d':\n return `${year}/${month}/${day}`;\n case 'MM/dd/yyyy':\n return `${pad(month)}/${pad(day)}/${year}`;\n case 'yyyy年M月d日':\n return `${year}年${month}月${day}日`;\n default:\n return `${year}-${pad(month)}-${pad(day)}`;\n }\n}\n"]}
|