eoss 0.1.0-alpha.20 → 0.1.0-alpha.21
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/lib/account-login.js +1943 -1890
- package/lib/alert.js +4 -4
- package/lib/aside.js +4 -4
- package/lib/autocomplete.js +4936 -4834
- package/lib/avatar.js +4 -4
- package/lib/backtop.js +4 -4
- package/lib/badge.js +4 -4
- package/lib/breadcrumb-item.js +6 -6
- package/lib/breadcrumb.js +7 -7
- package/lib/button-group.js +11 -14
- package/lib/button.js +6 -6
- package/lib/ca-login.js +2480 -2382
- package/lib/calendar.js +798 -798
- package/lib/card.js +4 -4
- package/lib/carousel-item.js +911 -813
- package/lib/carousel.js +1646 -1548
- package/lib/cascader-panel.js +2556 -2458
- package/lib/cascader.js +4546 -4444
- package/lib/checkbox-button.js +4 -4
- package/lib/checkbox-group.js +2894 -2841
- package/lib/checkbox.js +4 -4
- package/lib/col.js +2 -2
- package/lib/collapse-item.js +35159 -2572
- package/lib/collapse.js +35410 -2762
- package/lib/color-picker.js +494 -490
- package/lib/config/api.js +15 -1
- package/lib/container.js +4 -4
- package/lib/cron.js +4 -4
- package/lib/data-table.js +1895 -1842
- package/lib/date-picker.js +6422 -6320
- package/lib/dialog.js +2912 -2806
- package/lib/divider.js +4 -4
- package/lib/drawer.js +311 -299
- package/lib/dropdown-item.js +6 -6
- package/lib/dropdown-menu.js +539 -535
- package/lib/dropdown.js +2270 -2172
- package/lib/email-login.js +1783 -1730
- package/lib/empty.js +723 -0
- package/lib/eoss.common.js +63680 -56193
- package/lib/flip.js +4 -4
- package/lib/flow-group.js +2985 -2887
- package/lib/flow.js +28067 -28022
- package/lib/footer.js +4 -4
- package/lib/form-item.js +1935 -1837
- package/lib/form.js +9230 -9092
- package/lib/header.js +4 -4
- package/lib/icon.js +1708 -1590
- package/lib/icons.js +4 -4
- package/lib/image-viewer.js +1660 -1562
- package/lib/image.js +162 -162
- package/lib/index.js +1 -1
- package/lib/infinite-scroll.js +76 -76
- package/lib/input-number.js +172 -172
- package/lib/input.js +1362 -1264
- package/lib/link.js +4 -4
- package/lib/loading.js +321 -317
- package/lib/login.js +3306 -3300
- package/lib/lowcode.js +13320 -0
- package/lib/main.js +14465 -14339
- package/lib/marquee.js +1237 -1139
- package/lib/menu-item-group.js +119 -119
- package/lib/menu-item.js +114 -114
- package/lib/menu.js +6193 -6091
- package/lib/message-box.js +3582 -3480
- package/lib/message.js +2265 -2163
- package/lib/notification.js +2430 -2328
- package/lib/option-group.js +4 -4
- package/lib/option.js +842 -744
- package/lib/page-header.js +4 -4
- package/lib/pagination.js +1916 -1815
- package/lib/phone-login.js +1788 -1735
- package/lib/popconfirm.js +8 -8
- package/lib/popover.js +4559 -4457
- package/lib/progress.js +4 -4
- package/lib/qr-code.js +9 -9
- package/lib/qrcode-login.js +1600 -1543
- package/lib/radio-button.js +6 -6
- package/lib/radio-group.js +2142 -2089
- package/lib/radio.js +6 -6
- package/lib/rate.js +1226 -1128
- package/lib/row.js +2 -2
- package/lib/scrollbar.js +2695 -2597
- package/lib/select.js +5985 -5961
- package/lib/selector-panel.js +5239 -5186
- package/lib/selector.js +1712 -1659
- package/lib/slider.js +16 -16
- package/lib/step.js +35836 -2736
- package/lib/steps.js +1281 -1183
- package/lib/submenu.js +461 -457
- package/lib/switch.js +1010 -912
- package/lib/tab-pane.js +4 -4
- package/lib/table-column.js +2595 -2497
- package/lib/table.js +9225 -9239
- package/lib/tabs.js +2414 -2320
- package/lib/tag.js +4 -4
- package/lib/theme-chalk/account-login.css +1 -1
- package/lib/theme-chalk/autocomplete.css +1 -1
- package/lib/theme-chalk/base.css +1 -1
- package/lib/theme-chalk/cascader.css +1 -1
- package/lib/theme-chalk/date-picker.css +1 -1
- package/lib/theme-chalk/empty.css +1 -0
- package/lib/theme-chalk/fonts/iconfont.ttf +0 -0
- package/lib/theme-chalk/fonts/iconfont.woff +0 -0
- package/lib/theme-chalk/form.css +1 -1
- package/lib/theme-chalk/icon.css +1 -1
- package/lib/theme-chalk/index.css +1 -1
- package/lib/theme-chalk/input-number.css +1 -1
- package/lib/theme-chalk/input.css +1 -1
- package/lib/theme-chalk/login.css +1 -1
- package/lib/theme-chalk/lowcode.css +1 -0
- package/lib/theme-chalk/main.css +1 -1
- package/lib/theme-chalk/message-box.css +1 -1
- package/lib/theme-chalk/pagination.css +1 -1
- package/lib/theme-chalk/qrcode-login.css +1 -1
- package/lib/theme-chalk/select.css +1 -1
- package/lib/theme-chalk/slider.css +1 -1
- package/lib/theme-chalk/tabs.css +1 -1
- package/lib/theme-chalk/time-picker.css +1 -1
- package/lib/theme-chalk/transfer.css +1 -1
- package/lib/time-picker.js +5823 -5819
- package/lib/time-select.js +3578 -3574
- package/lib/timeline-item.js +4 -4
- package/lib/timeline.js +4 -4
- package/lib/tips.js +1633 -1580
- package/lib/toolbar.js +213 -213
- package/lib/tooltip.js +4441 -4339
- package/lib/transfer.js +938 -840
- package/lib/tree-group.js +1875 -1757
- package/lib/tree.js +2626 -2573
- package/lib/upload.js +7209 -7156
- package/lib/utils/ajax.js +185 -243
- package/lib/utils/bus.js +2 -2
- package/lib/utils/popup/index.js +5 -1
- package/lib/utils/util.js +108 -11
- package/package.json +2 -2
- package/packages/button/src/button-group.vue +1 -4
- package/packages/collapse/src/collapse-item.vue +47 -33
- package/packages/dialog/src/dialog.vue +4 -1
- package/packages/drawer/src/drawer.vue +12 -4
- package/packages/empty/index.js +7 -0
- package/packages/empty/src/img-empty.vue +132 -0
- package/packages/empty/src/index.vue +49 -0
- package/packages/form/src/form-item-render.vue +16 -18
- package/packages/form/src/form.vue +27 -5
- package/packages/icons/src/icon.json +1 -1
- package/packages/login/src/login.vue +19 -21
- package/packages/login/src/mixins.js +2 -1
- package/packages/lowcode/index.js +5 -0
- package/packages/lowcode/src/aside.vue +331 -0
- package/packages/lowcode/src/attribute/bind.vue +441 -0
- package/packages/lowcode/src/attribute/dependency.vue +325 -0
- package/packages/lowcode/src/attribute/function.vue +112 -0
- package/packages/lowcode/src/attribute/property.vue +331 -0
- package/packages/lowcode/src/attribute/styles.vue +318 -0
- package/packages/lowcode/src/attribute.vue +135 -0
- package/packages/lowcode/src/canvas.vue +296 -0
- package/packages/lowcode/src/json.vue +32 -0
- package/packages/lowcode/src/lowcode.vue +539 -0
- package/packages/lowcode/src/modules.vue +93 -0
- package/packages/lowcode/src/pages.vue +91 -0
- package/packages/lowcode/src/render.vue +247 -0
- package/packages/lowcode/src/source.vue +32 -0
- package/packages/lowcode/src/toolbar.vue +162 -0
- package/packages/main/src/components/pages.vue +28 -2
- package/packages/main/src/components/set-menus.vue +3 -3
- package/packages/main/src/components/user.vue +6 -1
- package/packages/main/src/early.vue +2 -2
- package/packages/main/src/gzw.vue +55 -61
- package/packages/main/src/minxs.js +113 -36
- package/packages/pagination/src/pager.vue +2 -2
- package/packages/pagination/src/pagination.js +4 -1
- package/packages/qrcode-login/src/qrcode-login.vue +6 -2
- package/packages/select/src/select.vue +28 -6
- package/packages/steps/src/step.vue +7 -5
- package/packages/tabs/src/tab-nav.vue +1 -0
- package/packages/tabs/src/tabs.vue +0 -2
- package/packages/theme-chalk/dist/fonts/iconfont.ttf +0 -0
- package/packages/theme-chalk/dist/fonts/iconfont.woff +0 -0
- package/packages/theme-chalk/gulpfile.js +3 -0
- package/packages/theme-chalk/src/account-login.scss +1 -0
- package/packages/theme-chalk/src/base.scss +1 -1
- package/packages/theme-chalk/src/common/var.scss +16 -0
- package/packages/theme-chalk/src/empty.scss +45 -0
- package/packages/theme-chalk/src/fonts/iconfont.ttf +0 -0
- package/packages/theme-chalk/src/fonts/iconfont.woff +0 -0
- package/packages/theme-chalk/src/form.scss +1 -8
- package/packages/theme-chalk/src/icon.scss +30 -1
- package/packages/theme-chalk/src/index.scss +2 -0
- package/packages/theme-chalk/src/input-number.scss +0 -4
- package/packages/theme-chalk/src/input.scss +9 -0
- package/packages/theme-chalk/src/login.scss +32 -29
- package/packages/theme-chalk/src/lowcode.scss +461 -0
- package/packages/theme-chalk/src/main.scss +28 -65
- package/packages/theme-chalk/src/pagination.scss +4 -55
- package/packages/theme-chalk/src/qrcode-login.scss +3 -1
- package/packages/theme-chalk/src/tabs.scss +81 -50
- package/src/config/api.js +13 -0
- package/src/index.js +17 -4
- package/src/utils/ajax.js +61 -65
- package/src/utils/bus.js +2 -2
- package/src/utils/popup/index.js +5 -1
- package/src/utils/util.js +104 -7
- package/lib/index_/345/211/257/346/234/254.js +0 -583
- package/packages/dialog copy/index.js +0 -8
- package/packages/dialog copy/src/dialog.vue +0 -615
- package/src/index_/345/211/257/346/234/254.js +0 -359
- /package/{packages/form/src → src/components}/field-render.vue +0 -0
package/lib/tabs.js
CHANGED
|
@@ -82,7 +82,7 @@ module.exports =
|
|
|
82
82
|
/******/
|
|
83
83
|
/******/
|
|
84
84
|
/******/ // Load entry module and return exports
|
|
85
|
-
/******/ return __webpack_require__(__webpack_require__.s =
|
|
85
|
+
/******/ return __webpack_require__(__webpack_require__.s = 165);
|
|
86
86
|
/******/ })
|
|
87
87
|
/************************************************************************/
|
|
88
88
|
/******/ ({
|
|
@@ -91,13 +91,13 @@ module.exports =
|
|
|
91
91
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
92
92
|
|
|
93
93
|
"use strict";
|
|
94
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "
|
|
94
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "L", function() { return noop; });
|
|
95
95
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "x", function() { return hasOwn; });
|
|
96
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "
|
|
96
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "V", function() { return toObject; });
|
|
97
97
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "v", function() { return getValueByPath; });
|
|
98
98
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "t", function() { return getPropByPath; });
|
|
99
99
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "r", function() { return generateId; });
|
|
100
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "
|
|
100
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Z", function() { return valueEquals; });
|
|
101
101
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return escapeRegexpString; });
|
|
102
102
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return arrayFindIndex; });
|
|
103
103
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return arrayFind; });
|
|
@@ -111,12 +111,12 @@ module.exports =
|
|
|
111
111
|
/* unused harmony export looseEqual */
|
|
112
112
|
/* unused harmony export arrayEquals */
|
|
113
113
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "C", function() { return isEqual; });
|
|
114
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "
|
|
114
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "N", function() { return rafThrottle; });
|
|
115
115
|
/* unused harmony export objToArray */
|
|
116
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "
|
|
116
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "P", function() { return requestAnimationFrame; });
|
|
117
117
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return cancelAnimationFrame; });
|
|
118
118
|
/* unused harmony export debounce */
|
|
119
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "
|
|
119
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "S", function() { return throttle; });
|
|
120
120
|
/* unused harmony export guid */
|
|
121
121
|
/* unused harmony export uid */
|
|
122
122
|
/* unused harmony export get */
|
|
@@ -150,7 +150,7 @@ module.exports =
|
|
|
150
150
|
/* unused harmony export getValues */
|
|
151
151
|
/* unused harmony export getZoom */
|
|
152
152
|
/* unused harmony export getLength */
|
|
153
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "
|
|
153
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "T", function() { return timestampUrl; });
|
|
154
154
|
/* unused harmony export hasChars */
|
|
155
155
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "y", function() { return identical; });
|
|
156
156
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "z", function() { return indexOfObj; });
|
|
@@ -159,41 +159,42 @@ module.exports =
|
|
|
159
159
|
/* unused harmony export isFunction */
|
|
160
160
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "G", function() { return isObjectEqual; });
|
|
161
161
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "H", function() { return joinUrl; });
|
|
162
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "J", function() { return layoutWaterfall; });
|
|
162
163
|
/* unused harmony export loadJs */
|
|
163
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "
|
|
164
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "K", function() { return loading; });
|
|
164
165
|
/* unused harmony export lowerCase */
|
|
165
166
|
/* unused harmony export overbrim */
|
|
166
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "
|
|
167
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "M", function() { return queryParams; });
|
|
167
168
|
/* unused harmony export receiveMessage */
|
|
168
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "
|
|
169
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "O", function() { return renderIcon; });
|
|
169
170
|
/* unused harmony export replenish */
|
|
170
171
|
/* unused harmony export rmbToCapital */
|
|
171
172
|
/* unused harmony export setScale */
|
|
172
173
|
/* unused harmony export sendMessage */
|
|
173
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "
|
|
174
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Q", function() { return setFavicon; });
|
|
174
175
|
/* unused harmony export sum */
|
|
175
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "
|
|
176
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "R", function() { return startWith; });
|
|
176
177
|
/* unused harmony export takeLeft */
|
|
177
178
|
/* unused harmony export takeRight */
|
|
178
179
|
/* unused harmony export trimWhitespace */
|
|
179
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "
|
|
180
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "U", function() { return toFixed; });
|
|
180
181
|
/* unused harmony export toFunction */
|
|
181
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "
|
|
182
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "W", function() { return updateTheme; });
|
|
182
183
|
/* unused harmony export upperType */
|
|
183
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "
|
|
184
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "
|
|
185
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "
|
|
184
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "X", function() { return urlJoinParams; });
|
|
185
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Y", function() { return uuid; });
|
|
186
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bb", function() { return watermark; });
|
|
186
187
|
/* unused harmony export winTopOpen */
|
|
187
188
|
/* unused harmony export confirm */
|
|
188
189
|
/* unused harmony export success */
|
|
189
190
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return error; });
|
|
190
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "
|
|
191
|
-
/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
|
|
191
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ab", function() { return warning; });
|
|
192
|
+
/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4);
|
|
192
193
|
/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
|
|
193
|
-
/* harmony import */ var _color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
|
|
194
|
-
/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
|
|
195
|
-
/* harmony import */ var _storage__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
|
|
196
|
-
/* harmony import */ var _date__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
|
|
194
|
+
/* harmony import */ var _color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(13);
|
|
195
|
+
/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6);
|
|
196
|
+
/* harmony import */ var _storage__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2);
|
|
197
|
+
/* harmony import */ var _date__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1);
|
|
197
198
|
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
|
198
199
|
|
|
199
200
|
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
|
@@ -203,9 +204,9 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
|
|
|
203
204
|
|
|
204
205
|
|
|
205
206
|
|
|
206
|
-
var _get = __webpack_require__(
|
|
207
|
-
var _set = __webpack_require__(
|
|
208
|
-
var _cloneDeep = __webpack_require__(
|
|
207
|
+
var _get = __webpack_require__(20);
|
|
208
|
+
var _set = __webpack_require__(21);
|
|
209
|
+
var _cloneDeep = __webpack_require__(22);
|
|
209
210
|
var hasOwnProperty = Object.prototype.hasOwnProperty;
|
|
210
211
|
|
|
211
212
|
// 导入date中的formatDate函数
|
|
@@ -1404,7 +1405,9 @@ var getObjectType = function getObjectType(obj) {
|
|
|
1404
1405
|
* @return {Object|string} 参数对象或指定参数值
|
|
1405
1406
|
**/
|
|
1406
1407
|
var getParams = function getParams() {
|
|
1407
|
-
var
|
|
1408
|
+
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
1409
|
+
|
|
1410
|
+
var _ref5 = typeof options === 'string' ? { name: options } : options,
|
|
1408
1411
|
url = _ref5.url,
|
|
1409
1412
|
name = _ref5.name;
|
|
1410
1413
|
|
|
@@ -1816,10 +1819,7 @@ var indexOfObj = function indexOfObj(arry, target, key) {
|
|
|
1816
1819
|
return _i3;
|
|
1817
1820
|
}
|
|
1818
1821
|
} else if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object') {
|
|
1819
|
-
if (currentItem[currentKey] ===
|
|
1820
|
-
throw new Error('\u5C5E\u6027' + currentKey + '\u4E0D\u5B58\u5728');
|
|
1821
|
-
}
|
|
1822
|
-
if (currentItem[currentKey] === target[currentKey]) {
|
|
1822
|
+
if (currentItem[currentKey] !== undefined && currentItem[currentKey] === target[currentKey]) {
|
|
1823
1823
|
return _i3;
|
|
1824
1824
|
}
|
|
1825
1825
|
}
|
|
@@ -2014,7 +2014,105 @@ var joinUrl = function joinUrl(_ref8) {
|
|
|
2014
2014
|
// 如果前缀类型无效,直接返回URL
|
|
2015
2015
|
return url;
|
|
2016
2016
|
};
|
|
2017
|
+
/**
|
|
2018
|
+
* layoutWaterfall
|
|
2019
|
+
* @desc 布布流布局计算
|
|
2020
|
+
* @author huangbo
|
|
2021
|
+
* @date 2022年5月7日
|
|
2022
|
+
* @param {String} url - JS文件地址
|
|
2023
|
+
* @param {Function} [callback] - 回调函数
|
|
2024
|
+
**/
|
|
2025
|
+
var layoutWaterfall = function layoutWaterfall(self, container, pages, columns, gap) {
|
|
2026
|
+
if (!container) return;
|
|
2027
|
+
|
|
2028
|
+
if (pages.length === 0) return;
|
|
2029
|
+
|
|
2030
|
+
// 获取容器实际内容宽度(减去 padding)
|
|
2031
|
+
var computedStyle = getComputedStyle(container);
|
|
2032
|
+
var paddingLeft = parseFloat(computedStyle.paddingLeft) || 0;
|
|
2033
|
+
var paddingRight = parseFloat(computedStyle.paddingRight) || 0;
|
|
2034
|
+
var paddingTop = parseFloat(computedStyle.paddingTop) || 0;
|
|
2035
|
+
var containerWidth = container.clientWidth - paddingLeft - paddingRight;
|
|
2036
|
+
if (containerWidth === 0) return;
|
|
2037
|
+
|
|
2038
|
+
// 计算每列宽度
|
|
2039
|
+
var columnWidth = (containerWidth - gap * (columns - 1)) / columns;
|
|
2040
|
+
|
|
2041
|
+
// 初始化每列高度数组(以 paddingTop 为起始偏移)
|
|
2042
|
+
var columnHeights = new Array(columns).fill(paddingTop);
|
|
2043
|
+
|
|
2044
|
+
// 遍历所有元素,分配到高度最小的列
|
|
2045
|
+
pages.forEach(function (item) {
|
|
2046
|
+
// 确保span在有效范围内
|
|
2047
|
+
var span = Math.max(1, Math.min(item.style ? item.style.span || item.span || 1 : item.span || 1, columns));
|
|
2048
|
+
|
|
2049
|
+
// 找到可以容纳当前元素span宽度的最小高度起始列
|
|
2050
|
+
var minHeight = Infinity;
|
|
2051
|
+
var startColumn = 0;
|
|
2052
|
+
|
|
2053
|
+
// 遍历所有可能的起始列,找到可以放置span列元素的位置
|
|
2054
|
+
for (var i = 0; i <= columns - span; i++) {
|
|
2055
|
+
// 计算当前连续span列的最大高度
|
|
2056
|
+
var currentMaxHeight = 0;
|
|
2057
|
+
for (var j = i; j < i + span; j++) {
|
|
2058
|
+
if (columnHeights[j] > currentMaxHeight) {
|
|
2059
|
+
currentMaxHeight = columnHeights[j];
|
|
2060
|
+
}
|
|
2061
|
+
}
|
|
2062
|
+
|
|
2063
|
+
// 找到最小的最大高度
|
|
2064
|
+
if (currentMaxHeight < minHeight) {
|
|
2065
|
+
minHeight = currentMaxHeight;
|
|
2066
|
+
startColumn = i;
|
|
2067
|
+
}
|
|
2068
|
+
}
|
|
2069
|
+
|
|
2070
|
+
// 计算元素宽度和位置
|
|
2071
|
+
var existingWidth = item.style && item.style.width ? parseInt(item.style.width, 10) : null;
|
|
2072
|
+
var hasSpan = item.style && item.style.span || item.span;
|
|
2073
|
+
var calculatedWidth = columnWidth * span + gap * (span - 1);
|
|
2074
|
+
var useCustomWidth = !hasSpan && existingWidth;
|
|
2075
|
+
var elementWidth = useCustomWidth ? existingWidth : calculatedWidth;
|
|
2076
|
+
|
|
2077
|
+
// 根据是否使用自定义宽度计算 left(加上 padding 偏移)
|
|
2078
|
+
var left = void 0;
|
|
2079
|
+
if (useCustomWidth) {
|
|
2080
|
+
// 自定义宽度:在分配的列范围内居中(取整避免亚像素)
|
|
2081
|
+
var columnSpaceWidth = columnWidth * span + gap * (span - 1);
|
|
2082
|
+
left = Math.round(paddingLeft + startColumn * columnWidth + startColumn * gap + (columnSpaceWidth - elementWidth) / 2);
|
|
2083
|
+
} else {
|
|
2084
|
+
// 标准 span 宽度:正常计算位置
|
|
2085
|
+
left = paddingLeft + startColumn * columnWidth + startColumn * gap;
|
|
2086
|
+
}
|
|
2087
|
+
var top = minHeight;
|
|
2017
2088
|
|
|
2089
|
+
// 设置元素样式(使用Vue的$set确保响应式)
|
|
2090
|
+
if (!item.style) {
|
|
2091
|
+
self.$set(item, 'style', {});
|
|
2092
|
+
}
|
|
2093
|
+
var height = item.style.height ? parseInt(item.style.height, 10) : 30;
|
|
2094
|
+
self.$set(item.style, 'position', 'absolute');
|
|
2095
|
+
self.$set(item.style, 'width', elementWidth + 'px');
|
|
2096
|
+
self.$set(item.style, 'height', height + 'px');
|
|
2097
|
+
self.$set(item.style, 'left', left + 'px');
|
|
2098
|
+
self.$set(item.style, 'top', top + 'px');
|
|
2099
|
+
if (!useCustomWidth) {
|
|
2100
|
+
self.$set(item.style, 'span', span);
|
|
2101
|
+
}
|
|
2102
|
+
|
|
2103
|
+
// 更新所有被占用列的高度
|
|
2104
|
+
var newHeight = top + height + gap;
|
|
2105
|
+
for (var _i5 = startColumn; _i5 < startColumn + span; _i5++) {
|
|
2106
|
+
columnHeights[_i5] = newHeight;
|
|
2107
|
+
}
|
|
2108
|
+
});
|
|
2109
|
+
|
|
2110
|
+
// 设置容器高度
|
|
2111
|
+
var maxHeight = Math.max.apply(Math, columnHeights);
|
|
2112
|
+
container.style.position = 'relative';
|
|
2113
|
+
container.style.height = maxHeight - gap + 'px'; // 减去最后一个间隙
|
|
2114
|
+
return { columnWidth: columnWidth, width: containerWidth };
|
|
2115
|
+
};
|
|
2018
2116
|
/**
|
|
2019
2117
|
* loadJs
|
|
2020
2118
|
* @desc 加载JS文件
|
|
@@ -2045,7 +2143,7 @@ var loadJs = function loadJs(url, callback) {
|
|
|
2045
2143
|
var loading = function loading() {
|
|
2046
2144
|
var text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '请求中...';
|
|
2047
2145
|
|
|
2048
|
-
var Loading = __webpack_require__(
|
|
2146
|
+
var Loading = __webpack_require__(19).default;
|
|
2049
2147
|
return Loading.service({
|
|
2050
2148
|
text: text,
|
|
2051
2149
|
spinner: 'es-icon-jiazai',
|
|
@@ -2163,8 +2261,8 @@ var renderIcon = function renderIcon(data, node, icons) {
|
|
|
2163
2261
|
var _ref9 = data || {},
|
|
2164
2262
|
attributes = _ref9.attributes;
|
|
2165
2263
|
|
|
2166
|
-
var orgType = attributes.orgType
|
|
2167
|
-
var layerlevel = attributes.layerlevel
|
|
2264
|
+
var orgType = attributes ? attributes.orgType : data.orgType;
|
|
2265
|
+
var layerlevel = attributes ? attributes.layerlevel : data.layerlevel;
|
|
2168
2266
|
if (!orgType) return '';
|
|
2169
2267
|
var key = orgType === 'org' ? layerlevel ? 'bumen' : 'gongsi' : 'bumen';
|
|
2170
2268
|
if (node.level === 1 && (data.subNode || data.isParent || data.hasChildren)) {
|
|
@@ -2243,10 +2341,10 @@ var rmbToCapital = function rmbToCapital(num) {
|
|
|
2243
2341
|
// 处理小数部分
|
|
2244
2342
|
var decimalCapital = '';
|
|
2245
2343
|
if (parseInt(decimalPart, 10) > 0) {
|
|
2246
|
-
for (var
|
|
2247
|
-
var _digit = parseInt(decimalPart[
|
|
2344
|
+
for (var _i6 = 0; _i6 < decimalPart.length; _i6++) {
|
|
2345
|
+
var _digit = parseInt(decimalPart[_i6], 10);
|
|
2248
2346
|
if (_digit > 0) {
|
|
2249
|
-
decimalCapital += chineseNumbers[_digit] + decimalUnits[
|
|
2347
|
+
decimalCapital += chineseNumbers[_digit] + decimalUnits[_i6];
|
|
2250
2348
|
} else if (decimalCapital[decimalCapital.length - 1] !== chineseNumbers[0]) {
|
|
2251
2349
|
decimalCapital += chineseNumbers[_digit];
|
|
2252
2350
|
}
|
|
@@ -2912,2094 +3010,6 @@ var warning = function warning(content, _callback3) {
|
|
|
2912
3010
|
/***/ 1:
|
|
2913
3011
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
2914
3012
|
|
|
2915
|
-
"use strict";
|
|
2916
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return setStorage; });
|
|
2917
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return getStorage; });
|
|
2918
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return removeStorage; });
|
|
2919
|
-
/* unused harmony export setCookie */
|
|
2920
|
-
/* unused harmony export getCookie */
|
|
2921
|
-
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
|
2922
|
-
|
|
2923
|
-
/**
|
|
2924
|
-
* setStorage
|
|
2925
|
-
* @desc:设置本地储存数据
|
|
2926
|
-
* @author huangbo
|
|
2927
|
-
* @date 2022年5月7日
|
|
2928
|
-
* @param {String|Object} [key] - 数据的名称或包含type、key、value的对象
|
|
2929
|
-
* @param {String} [value] - 数据的值(当第一个参数为字符串时使用)
|
|
2930
|
-
**/
|
|
2931
|
-
var setStorage = function setStorage(key, value) {
|
|
2932
|
-
// 解析参数,支持两种调用方式:setStorage(key, value) 和 setStorage({type, key, value})
|
|
2933
|
-
var type = void 0,
|
|
2934
|
-
finalKey = void 0,
|
|
2935
|
-
finalValue = void 0;
|
|
2936
|
-
|
|
2937
|
-
if ((typeof key === 'undefined' ? 'undefined' : _typeof(key)) === 'object' && key !== null) {
|
|
2938
|
-
// 对象调用方式:setStorage({type, key, value})
|
|
2939
|
-
type = key.type;
|
|
2940
|
-
finalKey = key.key;
|
|
2941
|
-
finalValue = key.value;
|
|
2942
|
-
} else {
|
|
2943
|
-
// 字符串调用方式:setStorage(key, value)
|
|
2944
|
-
type = getStorage('storageType');
|
|
2945
|
-
finalKey = key;
|
|
2946
|
-
finalValue = value;
|
|
2947
|
-
}
|
|
2948
|
-
|
|
2949
|
-
// 使用默认存储类型如果未指定
|
|
2950
|
-
type = type || getStorage('storageType');
|
|
2951
|
-
|
|
2952
|
-
// 获取存储对象
|
|
2953
|
-
var storage = type === 'localStorage' ? localStorage : sessionStorage;
|
|
2954
|
-
|
|
2955
|
-
// 处理不同类型的key
|
|
2956
|
-
if (typeof finalKey === 'string') {
|
|
2957
|
-
// 单个字符串key
|
|
2958
|
-
var storedValue = (typeof finalValue === 'undefined' ? 'undefined' : _typeof(finalValue)) === 'object' ? JSON.stringify(finalValue) : finalValue;
|
|
2959
|
-
storage.setItem(finalKey, storedValue);
|
|
2960
|
-
if (finalKey === 'token') {
|
|
2961
|
-
setCookie('token', storedValue);
|
|
2962
|
-
}
|
|
2963
|
-
} else if (Array.isArray(finalKey)) {
|
|
2964
|
-
// 数组key,为多个key设置同一个value
|
|
2965
|
-
var _storedValue = (typeof finalValue === 'undefined' ? 'undefined' : _typeof(finalValue)) === 'object' ? JSON.stringify(finalValue) : finalValue;
|
|
2966
|
-
for (var i = 0; i < finalKey.length; i++) {
|
|
2967
|
-
storage.setItem(finalKey[i], _storedValue);
|
|
2968
|
-
if (finalKey[i] === 'token') {
|
|
2969
|
-
setCookie('token', _storedValue);
|
|
2970
|
-
}
|
|
2971
|
-
}
|
|
2972
|
-
} else if ((typeof finalKey === 'undefined' ? 'undefined' : _typeof(finalKey)) === 'object' && finalKey !== null) {
|
|
2973
|
-
// 对象key,对象的属性名称作为key,属性值作为value
|
|
2974
|
-
for (var k in finalKey) {
|
|
2975
|
-
if (Object.prototype.hasOwnProperty.call(finalKey, k)) {
|
|
2976
|
-
var _storedValue2 = _typeof(finalKey[k]) === 'object' ? JSON.stringify(finalKey[k]) : finalKey[k];
|
|
2977
|
-
storage.setItem(k, _storedValue2);
|
|
2978
|
-
if (k === 'token') {
|
|
2979
|
-
setCookie('token', _storedValue2);
|
|
2980
|
-
}
|
|
2981
|
-
}
|
|
2982
|
-
}
|
|
2983
|
-
}
|
|
2984
|
-
};
|
|
2985
|
-
|
|
2986
|
-
/**
|
|
2987
|
-
* getStorage
|
|
2988
|
-
* @desc:获取本地储存数据
|
|
2989
|
-
* @author huangbo
|
|
2990
|
-
* @date 2022年5月7日
|
|
2991
|
-
* @param {String} [key] - 获取的名称
|
|
2992
|
-
**/
|
|
2993
|
-
var getStorage = function getStorage(key) {
|
|
2994
|
-
if (key) {
|
|
2995
|
-
var res = sessionStorage.getItem(key) || localStorage.getItem(key);
|
|
2996
|
-
if (!res && key === 'token') {
|
|
2997
|
-
res = getCookie('token');
|
|
2998
|
-
}
|
|
2999
|
-
if (key === 'host' && !res) {
|
|
3000
|
-
res = '';
|
|
3001
|
-
}
|
|
3002
|
-
return res;
|
|
3003
|
-
}
|
|
3004
|
-
var defaults = {};
|
|
3005
|
-
var token = sessionStorage.getItem('token') || localStorage.getItem('token') || getCookie('token');
|
|
3006
|
-
var ssId = sessionStorage.getItem('ssId') || localStorage.getItem('ssId') || getCookie('ssId');
|
|
3007
|
-
|
|
3008
|
-
var deviceUnique = sessionStorage.getItem('deviceUnique') || localStorage.getItem('deviceUnique') || getCookie('deviceUnique');
|
|
3009
|
-
if (token) {
|
|
3010
|
-
defaults.Authorization = token;
|
|
3011
|
-
}
|
|
3012
|
-
if (ssId) {
|
|
3013
|
-
defaults.ssId = ssId;
|
|
3014
|
-
}
|
|
3015
|
-
if (deviceUnique) {
|
|
3016
|
-
defaults.deviceUnique = deviceUnique;
|
|
3017
|
-
}
|
|
3018
|
-
return defaults;
|
|
3019
|
-
};
|
|
3020
|
-
|
|
3021
|
-
/**
|
|
3022
|
-
* removeStorage
|
|
3023
|
-
* @desc:删除本地储存数据
|
|
3024
|
-
* @author huangbo
|
|
3025
|
-
* @date 2022年5月7日
|
|
3026
|
-
* @param {String, Array} [key] - 获取的名称
|
|
3027
|
-
**/
|
|
3028
|
-
var removeStorage = function removeStorage(key) {
|
|
3029
|
-
if (Array.isArray(key)) {
|
|
3030
|
-
for (var i = 0; i < key.length; i++) {
|
|
3031
|
-
sessionStorage.removeItem(key[i]);
|
|
3032
|
-
localStorage.removeItem(key[i]);
|
|
3033
|
-
if (key[i] === 'token') {
|
|
3034
|
-
removeCookie('token');
|
|
3035
|
-
}
|
|
3036
|
-
}
|
|
3037
|
-
} else if (key) {
|
|
3038
|
-
sessionStorage.removeItem(key);
|
|
3039
|
-
localStorage.removeItem(key);
|
|
3040
|
-
if (key === 'token') {
|
|
3041
|
-
removeCookie('token');
|
|
3042
|
-
}
|
|
3043
|
-
} else {
|
|
3044
|
-
sessionStorage.clear();
|
|
3045
|
-
localStorage.clear();
|
|
3046
|
-
removeCookie('token');
|
|
3047
|
-
}
|
|
3048
|
-
};
|
|
3049
|
-
|
|
3050
|
-
/**
|
|
3051
|
-
* setCookie
|
|
3052
|
-
* @desc 设置cookie
|
|
3053
|
-
* @author huangbo
|
|
3054
|
-
* @param {string} [name] cookie名称
|
|
3055
|
-
* @param {string} [value] cookie值
|
|
3056
|
-
* @param {boolean} [isSession] 是否是会话cookie
|
|
3057
|
-
**/
|
|
3058
|
-
var setCookie = function setCookie(name, value) {
|
|
3059
|
-
var isSession = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
|
3060
|
-
var time = arguments[3];
|
|
3061
|
-
|
|
3062
|
-
try {
|
|
3063
|
-
var cookieParts = [encodeURIComponent(name) + '=' + encodeURIComponent(value), 'path=/' // 仅保留path设置,确保全站访问
|
|
3064
|
-
];
|
|
3065
|
-
// 会话/持久Cookie设置
|
|
3066
|
-
if (!isSession) {
|
|
3067
|
-
if (/MSIE|Trident/.test(navigator.userAgent)) {
|
|
3068
|
-
// IE使用expires
|
|
3069
|
-
var date = new Date();
|
|
3070
|
-
date.setTime(date.getTime() + (time || 7 * 24 * 60 * 60 * 1000));
|
|
3071
|
-
cookieParts.push('expires=' + date.toUTCString());
|
|
3072
|
-
} else {
|
|
3073
|
-
// 其他浏览器使用max-age
|
|
3074
|
-
cookieParts.push('max-age=' + (time || 7 * 24 * 60 * 60));
|
|
3075
|
-
}
|
|
3076
|
-
}
|
|
3077
|
-
// 内核兼容处理
|
|
3078
|
-
if (/MSIE|Trident/.test(navigator.userAgent)) {
|
|
3079
|
-
// IE特殊处理:添加P3P协议头
|
|
3080
|
-
cookieParts.push('P3P=CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
|
|
3081
|
-
} else {
|
|
3082
|
-
// 现代浏览器设置
|
|
3083
|
-
cookieParts.push('samesite=lax');
|
|
3084
|
-
if (window.location.protocol === 'https:') {
|
|
3085
|
-
cookieParts.push('secure');
|
|
3086
|
-
}
|
|
3087
|
-
}
|
|
3088
|
-
|
|
3089
|
-
// 设置Cookie
|
|
3090
|
-
document.cookie = cookieParts.join('; ');
|
|
3091
|
-
return true;
|
|
3092
|
-
} catch (e) {
|
|
3093
|
-
console.error('Cookie设置失败:', e);
|
|
3094
|
-
return false;
|
|
3095
|
-
}
|
|
3096
|
-
};
|
|
3097
|
-
|
|
3098
|
-
/**
|
|
3099
|
-
* getCookie
|
|
3100
|
-
* @desc 获取cookie中指定名称的值
|
|
3101
|
-
* @author huangbo
|
|
3102
|
-
* @param {string} [name] cookie名称
|
|
3103
|
-
**/
|
|
3104
|
-
var getCookie = function getCookie(name) {
|
|
3105
|
-
var cookies = document.cookie.split(';');
|
|
3106
|
-
for (var _iterator = cookies, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
|
|
3107
|
-
var _ref;
|
|
3108
|
-
|
|
3109
|
-
if (_isArray) {
|
|
3110
|
-
if (_i >= _iterator.length) break;
|
|
3111
|
-
_ref = _iterator[_i++];
|
|
3112
|
-
} else {
|
|
3113
|
-
_i = _iterator.next();
|
|
3114
|
-
if (_i.done) break;
|
|
3115
|
-
_ref = _i.value;
|
|
3116
|
-
}
|
|
3117
|
-
|
|
3118
|
-
var cookie = _ref;
|
|
3119
|
-
|
|
3120
|
-
var _cookie$trim$split = cookie.trim().split('='),
|
|
3121
|
-
cookieName = _cookie$trim$split[0],
|
|
3122
|
-
cookieValue = _cookie$trim$split[1];
|
|
3123
|
-
|
|
3124
|
-
if (decodeURIComponent(cookieName) === name) {
|
|
3125
|
-
return decodeURIComponent(cookieValue);
|
|
3126
|
-
}
|
|
3127
|
-
}
|
|
3128
|
-
return null;
|
|
3129
|
-
};
|
|
3130
|
-
|
|
3131
|
-
/**
|
|
3132
|
-
* removeCookie
|
|
3133
|
-
* @desc:删除cookie
|
|
3134
|
-
* @author huangbo
|
|
3135
|
-
* @date 2022年5月7日
|
|
3136
|
-
* @param {String, Array} [key] - 获取的名称
|
|
3137
|
-
**/
|
|
3138
|
-
var removeCookie = function removeCookie(key) {
|
|
3139
|
-
if (Array.isArray(key)) {
|
|
3140
|
-
for (var i = 0; i < key.length; i++) {
|
|
3141
|
-
document.cookie = encodeURIComponent(key[i]) + '=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;';
|
|
3142
|
-
}
|
|
3143
|
-
} else {
|
|
3144
|
-
document.cookie = encodeURIComponent(key) + '=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;';
|
|
3145
|
-
}
|
|
3146
|
-
};
|
|
3147
|
-
|
|
3148
|
-
/***/ }),
|
|
3149
|
-
|
|
3150
|
-
/***/ 12:
|
|
3151
|
-
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
3152
|
-
|
|
3153
|
-
"use strict";
|
|
3154
|
-
/* unused harmony export getHue */
|
|
3155
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return getColor; });
|
|
3156
|
-
/* unused harmony export getLightness */
|
|
3157
|
-
/* unused harmony export getSaturation */
|
|
3158
|
-
/* unused harmony export rgbToHsv */
|
|
3159
|
-
/* unused harmony export hsvTorgb */
|
|
3160
|
-
/* unused harmony export mixColor */
|
|
3161
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return getRgb; });
|
|
3162
|
-
/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);
|
|
3163
|
-
|
|
3164
|
-
var $hueStep = 2;
|
|
3165
|
-
var $saturationStep1 = 0.16;
|
|
3166
|
-
var $saturationStep2 = 0.05;
|
|
3167
|
-
var $brightnessStep1 = 0.05;
|
|
3168
|
-
var $brightnessStep2 = 0.15;
|
|
3169
|
-
var $lightColorCount = 5;
|
|
3170
|
-
var $darkColorCount = 4;
|
|
3171
|
-
/**
|
|
3172
|
-
* getHue
|
|
3173
|
-
* @desc:转换色相
|
|
3174
|
-
* @author huangbo
|
|
3175
|
-
* @date 2022年5月7日
|
|
3176
|
-
**/
|
|
3177
|
-
var getHue = function getHue($h, $i, $isLight) {
|
|
3178
|
-
var $hue = void 0;
|
|
3179
|
-
if ($h >= 60 && $h <= 240) {
|
|
3180
|
-
$hue = $isLight ? $h - $hueStep * $i : $h + $hueStep * $i;
|
|
3181
|
-
} else {
|
|
3182
|
-
$hue = $isLight ? $h + $hueStep * $i : $h - $hueStep * $i;
|
|
3183
|
-
}
|
|
3184
|
-
$hue = ($hue + 360) % 360;
|
|
3185
|
-
return Math.round($hue);
|
|
3186
|
-
};
|
|
3187
|
-
|
|
3188
|
-
/**
|
|
3189
|
-
* getColor
|
|
3190
|
-
* @desc:根据颜色和对应的色板位置,计算出对应的色板颜色
|
|
3191
|
-
* @author huangbo
|
|
3192
|
-
* @date 2022年5月7日
|
|
3193
|
-
**/
|
|
3194
|
-
var getColor = function getColor($color, $n) {
|
|
3195
|
-
var $isLight = $n < 7;
|
|
3196
|
-
var $hsv = rgbToHsv($color);
|
|
3197
|
-
// 这里将i转换成以主色为中心,两侧的i值逐渐增大
|
|
3198
|
-
var $i = $isLight ? $lightColorCount + 1 - $n : $n - $lightColorCount - 1;
|
|
3199
|
-
var color = hsvTorgb(getHue($hsv[0], $i, $isLight), getSaturation($hsv[1], $i, $isLight), getLightness($hsv[2], $i, $isLight));
|
|
3200
|
-
return color;
|
|
3201
|
-
};
|
|
3202
|
-
|
|
3203
|
-
/**
|
|
3204
|
-
* getLightness
|
|
3205
|
-
* @desc:转换明度
|
|
3206
|
-
* @author huangbo
|
|
3207
|
-
* @date 2022年5月7日
|
|
3208
|
-
* @return {string,array} 元素类名或者id
|
|
3209
|
-
**/
|
|
3210
|
-
var getLightness = function getLightness($v, $i, $isLight) {
|
|
3211
|
-
var $value = $isLight ? $v + $brightnessStep1 * $i : $v - $brightnessStep2 * $i;
|
|
3212
|
-
$value = $value < 1 ? $value : 1;
|
|
3213
|
-
return Object(_util__WEBPACK_IMPORTED_MODULE_0__[/* toFixed */ "T"])($value, 2);
|
|
3214
|
-
};
|
|
3215
|
-
|
|
3216
|
-
/**
|
|
3217
|
-
* getSaturation
|
|
3218
|
-
* @desc:转换饱和度
|
|
3219
|
-
* @author huangbo
|
|
3220
|
-
* @date 2022年5月7日
|
|
3221
|
-
**/
|
|
3222
|
-
var getSaturation = function getSaturation($s, $i, $isLight) {
|
|
3223
|
-
var $saturation = void 0;
|
|
3224
|
-
if ($isLight) {
|
|
3225
|
-
$saturation = $s - $saturationStep1 * $i;
|
|
3226
|
-
} else if ($i === $darkColorCount) {
|
|
3227
|
-
$saturation = $s + $saturationStep1;
|
|
3228
|
-
} else {
|
|
3229
|
-
$saturation = $s + $saturationStep2 * $i;
|
|
3230
|
-
}
|
|
3231
|
-
$saturation = $saturation < 1 ? $saturation : 1;
|
|
3232
|
-
|
|
3233
|
-
if ($isLight && $i === $lightColorCount && $saturation > 0.1) {
|
|
3234
|
-
$saturation = 0.1;
|
|
3235
|
-
}
|
|
3236
|
-
$saturation = $saturation > 0.06 ? $saturation : 0.06;
|
|
3237
|
-
return Object(_util__WEBPACK_IMPORTED_MODULE_0__[/* toFixed */ "T"])($saturation, 2);
|
|
3238
|
-
};
|
|
3239
|
-
|
|
3240
|
-
/**
|
|
3241
|
-
* rgbToHsv
|
|
3242
|
-
* @desc:rgb转化成hsv
|
|
3243
|
-
* @author huangbo
|
|
3244
|
-
* @date 2022年5月7日
|
|
3245
|
-
* @param {string} [$color] - 颜色值
|
|
3246
|
-
**/
|
|
3247
|
-
var rgbToHsv = function rgbToHsv($color) {
|
|
3248
|
-
var rgb = getRgb($color);
|
|
3249
|
-
var $red = rgb[0];
|
|
3250
|
-
var $green = rgb[1];
|
|
3251
|
-
var $blue = rgb[2];
|
|
3252
|
-
var $max = Math.max($red, $green, $blue);
|
|
3253
|
-
var $min = Math.min($red, $green, $blue);
|
|
3254
|
-
var $diff = $max - $min;
|
|
3255
|
-
var $h = 0;
|
|
3256
|
-
if ($max === $min) {
|
|
3257
|
-
$h = 0;
|
|
3258
|
-
} else if ($max === $red) {
|
|
3259
|
-
$h = 60 * ($green - $blue) / $diff + ($green > $blue - 1 ? 0 : 360);
|
|
3260
|
-
} else if ($max === $green) {
|
|
3261
|
-
$h = 60 * ($blue - $red) / $diff + 120;
|
|
3262
|
-
} else if ($max === $blue) {
|
|
3263
|
-
$h = 60 * ($red - $green) / $diff + 240;
|
|
3264
|
-
}
|
|
3265
|
-
var $s = $max === 0 ? 0 : $diff / $max;
|
|
3266
|
-
var $v = $max / 255;
|
|
3267
|
-
return [$h, $s, $v];
|
|
3268
|
-
};
|
|
3269
|
-
|
|
3270
|
-
/**
|
|
3271
|
-
* hsvTorgb
|
|
3272
|
-
* @desc:hsv转化成rgb
|
|
3273
|
-
* @author huangbo
|
|
3274
|
-
* @date 2022年5月7日
|
|
3275
|
-
* @param {string} [$color] - 颜色值
|
|
3276
|
-
**/
|
|
3277
|
-
var hsvTorgb = function hsvTorgb($h, $s, $v) {
|
|
3278
|
-
var $th = Math.floor($h / 60);
|
|
3279
|
-
var $t1 = $h / 60 - $th;
|
|
3280
|
-
var $t2 = $v * (1 - $s);
|
|
3281
|
-
var $t3 = $v * (1 - $t1 * $s);
|
|
3282
|
-
var $t4 = $v * (1 - (1 - $t1) * $s);
|
|
3283
|
-
var $r = [$v, $t3, $t2, $t2, $t4, $v][$th % 6];
|
|
3284
|
-
var $g = [$t4, $v, $v, $t3, $t2, $t2][$th % 6];
|
|
3285
|
-
var $b = [$t2, $t2, $t4, $v, $v, $t3][$th % 6];
|
|
3286
|
-
// return `rgb(${Math.round($r * 255)}, ${Math.round($g * 255)}, ${Math.round($b * 255)})`;
|
|
3287
|
-
var red = Math.round($r * 255);
|
|
3288
|
-
var green = Math.round($g * 255);
|
|
3289
|
-
var blue = Math.round($b * 255);
|
|
3290
|
-
red = red.toString(16);
|
|
3291
|
-
green = green.toString(16);
|
|
3292
|
-
blue = blue.toString(16);
|
|
3293
|
-
red = red.length === 1 ? '0' + red : red;
|
|
3294
|
-
green = green.length === 1 ? '0' + green : green;
|
|
3295
|
-
blue = blue.length === 1 ? '0' + blue : blue;
|
|
3296
|
-
return '#' + red + green + blue;
|
|
3297
|
-
};
|
|
3298
|
-
|
|
3299
|
-
/**
|
|
3300
|
-
* mixColor
|
|
3301
|
-
* @desc:生成混合色
|
|
3302
|
-
* @author huangbo
|
|
3303
|
-
* @date 2022年5月7日
|
|
3304
|
-
* @param {string} [$color1] - 颜色值
|
|
3305
|
-
* @param {string} [$color2] - 颜色值
|
|
3306
|
-
* @param {string} [$n] - 百分比 0~1
|
|
3307
|
-
**/
|
|
3308
|
-
var mixColor = function mixColor($color1, $color2, $n) {
|
|
3309
|
-
var rgb1 = getRgb($color1);
|
|
3310
|
-
var rgb2 = getRgb($color2);
|
|
3311
|
-
var r = rgb1[0] * $n + rgb2[0] * (1 - $n);
|
|
3312
|
-
var g = rgb1[1] * $n + rgb2[1] * (1 - $n);
|
|
3313
|
-
var b = rgb1[2] * $n + rgb2[2] * (1 - $n);
|
|
3314
|
-
return '#' + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
|
|
3315
|
-
};
|
|
3316
|
-
|
|
3317
|
-
/**
|
|
3318
|
-
* getRgb
|
|
3319
|
-
* @desc:获取颜色值的rgb值
|
|
3320
|
-
* @author huangbo
|
|
3321
|
-
* @date 2022年5月7日
|
|
3322
|
-
* @param {string} [$color] - 颜色值
|
|
3323
|
-
**/
|
|
3324
|
-
var getRgb = function getRgb($color) {
|
|
3325
|
-
var rgb = [];
|
|
3326
|
-
// 16进制颜色值的正则
|
|
3327
|
-
var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
|
|
3328
|
-
// 把颜色值变成小写
|
|
3329
|
-
$color = $color.toLowerCase();
|
|
3330
|
-
if (reg.test($color)) {
|
|
3331
|
-
// 如果只有三位的值,需变成六位,如:#fff => #ffffff
|
|
3332
|
-
if ($color.length === 4) {
|
|
3333
|
-
var colorNew = '#';
|
|
3334
|
-
for (var i = 1; i < 4; i++) {
|
|
3335
|
-
colorNew += $color.slice(i, i + 1).concat($color.slice(i, i + 1));
|
|
3336
|
-
}
|
|
3337
|
-
$color = colorNew;
|
|
3338
|
-
}
|
|
3339
|
-
// 处理六位的颜色值,转为RGB
|
|
3340
|
-
for (var _i = 1; _i < 7; _i += 2) {
|
|
3341
|
-
rgb.push(parseInt('0x' + $color.slice(_i, _i + 2), 16));
|
|
3342
|
-
}
|
|
3343
|
-
} else {
|
|
3344
|
-
rgb = $color.replace(/(?:\(|\)|rgb|RGB)*/g, '').split(',');
|
|
3345
|
-
}
|
|
3346
|
-
return rgb;
|
|
3347
|
-
};
|
|
3348
|
-
|
|
3349
|
-
/***/ }),
|
|
3350
|
-
|
|
3351
|
-
/***/ 13:
|
|
3352
|
-
/***/ (function(module, exports) {
|
|
3353
|
-
|
|
3354
|
-
module.exports = require("eoss/lib/loading");
|
|
3355
|
-
|
|
3356
|
-
/***/ }),
|
|
3357
|
-
|
|
3358
|
-
/***/ 15:
|
|
3359
|
-
/***/ (function(module, exports) {
|
|
3360
|
-
|
|
3361
|
-
module.exports = require("lodash/get");
|
|
3362
|
-
|
|
3363
|
-
/***/ }),
|
|
3364
|
-
|
|
3365
|
-
/***/ 16:
|
|
3366
|
-
/***/ (function(module, exports) {
|
|
3367
|
-
|
|
3368
|
-
module.exports = require("lodash/set");
|
|
3369
|
-
|
|
3370
|
-
/***/ }),
|
|
3371
|
-
|
|
3372
|
-
/***/ 162:
|
|
3373
|
-
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
3374
|
-
|
|
3375
|
-
"use strict";
|
|
3376
|
-
// ESM COMPAT FLAG
|
|
3377
|
-
__webpack_require__.r(__webpack_exports__);
|
|
3378
|
-
|
|
3379
|
-
// EXTERNAL MODULE: external "babel-helper-vue-jsx-merge-props"
|
|
3380
|
-
var external_babel_helper_vue_jsx_merge_props_ = __webpack_require__(88);
|
|
3381
|
-
var external_babel_helper_vue_jsx_merge_props_default = /*#__PURE__*/__webpack_require__.n(external_babel_helper_vue_jsx_merge_props_);
|
|
3382
|
-
|
|
3383
|
-
// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/tabs/src/tab-bar.vue?vue&type=template&id=61310203&
|
|
3384
|
-
var tab_barvue_type_template_id_61310203_render = function () {
|
|
3385
|
-
var _vm = this
|
|
3386
|
-
var _h = _vm.$createElement
|
|
3387
|
-
var _c = _vm._self._c || _h
|
|
3388
|
-
return _c("div", {
|
|
3389
|
-
staticClass: "es-tabs__active-bar",
|
|
3390
|
-
class: "is-" + _vm.computedTabPosition,
|
|
3391
|
-
style: _vm.barStyle,
|
|
3392
|
-
})
|
|
3393
|
-
}
|
|
3394
|
-
var staticRenderFns = []
|
|
3395
|
-
tab_barvue_type_template_id_61310203_render._withStripped = true
|
|
3396
|
-
|
|
3397
|
-
|
|
3398
|
-
// CONCATENATED MODULE: ./packages/tabs/src/tab-bar.vue?vue&type=template&id=61310203&
|
|
3399
|
-
|
|
3400
|
-
// EXTERNAL MODULE: ./src/utils/util.js
|
|
3401
|
-
var util = __webpack_require__(0);
|
|
3402
|
-
|
|
3403
|
-
// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tabs/src/tab-bar.vue?vue&type=script&lang=js&
|
|
3404
|
-
//
|
|
3405
|
-
//
|
|
3406
|
-
//
|
|
3407
|
-
//
|
|
3408
|
-
//
|
|
3409
|
-
//
|
|
3410
|
-
//
|
|
3411
|
-
|
|
3412
|
-
|
|
3413
|
-
|
|
3414
|
-
/**
|
|
3415
|
-
* TabBar 组件 - 标签页活动状态指示器
|
|
3416
|
-
* 负责显示当前选中标签页的下划线/指示器样式和位置
|
|
3417
|
-
*/
|
|
3418
|
-
/* harmony default export */ var tab_barvue_type_script_lang_js_ = ({
|
|
3419
|
-
name: 'TabBar',
|
|
3420
|
-
|
|
3421
|
-
props: {
|
|
3422
|
-
tabs: {
|
|
3423
|
-
type: Array,
|
|
3424
|
-
default: function _default() {
|
|
3425
|
-
return [];
|
|
3426
|
-
}
|
|
3427
|
-
}
|
|
3428
|
-
},
|
|
3429
|
-
|
|
3430
|
-
inject: {
|
|
3431
|
-
rootTabs: {
|
|
3432
|
-
default: function _default() {
|
|
3433
|
-
return {
|
|
3434
|
-
tabPosition: 'top'
|
|
3435
|
-
};
|
|
3436
|
-
}
|
|
3437
|
-
}
|
|
3438
|
-
},
|
|
3439
|
-
|
|
3440
|
-
computed: {
|
|
3441
|
-
/**
|
|
3442
|
-
* 计算活动标签栏的样式
|
|
3443
|
-
* @returns {Object} 样式对象
|
|
3444
|
-
*/
|
|
3445
|
-
barStyle: function barStyle() {
|
|
3446
|
-
try {
|
|
3447
|
-
var _ref2;
|
|
3448
|
-
|
|
3449
|
-
// 安全获取tabPosition并提供默认值
|
|
3450
|
-
var tabPosition = (this.rootTabs || {}).tabPosition || 'top';
|
|
3451
|
-
var sizeName = ['top', 'bottom'].indexOf(tabPosition) !== -1 ? 'width' : 'height';
|
|
3452
|
-
var sizeDir = sizeName === 'width' ? 'x' : 'y';
|
|
3453
|
-
|
|
3454
|
-
var _getActiveTabSizeInfo = this.getActiveTabSizeInfo(),
|
|
3455
|
-
offset = _getActiveTabSizeInfo.offset,
|
|
3456
|
-
tabSize = _getActiveTabSizeInfo.tabSize;
|
|
3457
|
-
|
|
3458
|
-
var transform = 'translate' + this.firstUpperCase(sizeDir) + '(' + offset + 'px)';
|
|
3459
|
-
|
|
3460
|
-
// 只有在找到活动标签时才应用样式
|
|
3461
|
-
if (tabSize > 0) {
|
|
3462
|
-
var _ref;
|
|
3463
|
-
|
|
3464
|
-
return _ref = {}, _ref[sizeName] = tabSize + 'px', _ref.transform = transform, _ref.msTransform = transform, _ref.webkitTransform = transform, _ref;
|
|
3465
|
-
}
|
|
3466
|
-
|
|
3467
|
-
// 如果没有找到活动标签,返回基本样式避免闪烁
|
|
3468
|
-
return _ref2 = {}, _ref2[sizeName] = '0px', _ref2.transform = 'translate' + this.firstUpperCase(sizeDir) + '(0px)', _ref2.msTransform = 'translate' + this.firstUpperCase(sizeDir) + '(0px)', _ref2.webkitTransform = 'translate' + this.firstUpperCase(sizeDir) + '(0px)', _ref2;
|
|
3469
|
-
} catch (error) {
|
|
3470
|
-
// 捕获所有可能的错误,确保组件不会崩溃
|
|
3471
|
-
console.warn('Error in barStyle calculation:', error);
|
|
3472
|
-
return {};
|
|
3473
|
-
}
|
|
3474
|
-
},
|
|
3475
|
-
|
|
3476
|
-
|
|
3477
|
-
/**
|
|
3478
|
-
* 安全获取tabPosition,提供默认值防止渲染错误
|
|
3479
|
-
* @returns {string} tabPosition值
|
|
3480
|
-
*/
|
|
3481
|
-
computedTabPosition: function computedTabPosition() {
|
|
3482
|
-
return (this.rootTabs || {}).tabPosition || 'top';
|
|
3483
|
-
}
|
|
3484
|
-
},
|
|
3485
|
-
|
|
3486
|
-
methods: {
|
|
3487
|
-
/**
|
|
3488
|
-
* 将字符串首字母大写
|
|
3489
|
-
* @param {string} str - 输入字符串
|
|
3490
|
-
* @returns {string} 首字母大写后的字符串
|
|
3491
|
-
*/
|
|
3492
|
-
firstUpperCase: function firstUpperCase(str) {
|
|
3493
|
-
return str.toLowerCase().replace(/( |^)[a-z]/g, function (L) {
|
|
3494
|
-
return L.toUpperCase();
|
|
3495
|
-
});
|
|
3496
|
-
},
|
|
3497
|
-
|
|
3498
|
-
|
|
3499
|
-
/**
|
|
3500
|
-
* 获取活动标签的尺寸信息
|
|
3501
|
-
* @returns {Object} 包含offset和tabSize的对象
|
|
3502
|
-
*/
|
|
3503
|
-
getActiveTabSizeInfo: function getActiveTabSizeInfo() {
|
|
3504
|
-
var _this = this;
|
|
3505
|
-
|
|
3506
|
-
// 安全获取tabPosition并提供默认值
|
|
3507
|
-
var tabPosition = (this.rootTabs || {}).tabPosition || 'top';
|
|
3508
|
-
var sizeName = ['top', 'bottom'].indexOf(tabPosition) !== -1 ? 'width' : 'height';
|
|
3509
|
-
var sizeProp = 'client' + this.firstUpperCase(sizeName);
|
|
3510
|
-
var offset = 0;
|
|
3511
|
-
var tabSize = 0;
|
|
3512
|
-
|
|
3513
|
-
try {
|
|
3514
|
-
// 确保tabs和父组件存在
|
|
3515
|
-
if (!this.tabs || !Array.isArray(this.tabs) || !(this.$parent && this.$parent.$refs && this.$parent.$refs.tabs) || !Array.isArray(this.$parent.$refs.tabs)) {
|
|
3516
|
-
return { offset: offset, tabSize: tabSize };
|
|
3517
|
-
}
|
|
3518
|
-
|
|
3519
|
-
// 过滤有效的tab项
|
|
3520
|
-
var validTabs = this.tabs.filter(function (tab) {
|
|
3521
|
-
return tab && typeof tab.paneName === 'string' && tab.paneName.trim();
|
|
3522
|
-
});
|
|
3523
|
-
|
|
3524
|
-
validTabs.every(function (tab) {
|
|
3525
|
-
try {
|
|
3526
|
-
var $el = Object(util["b" /* arrayFind */])(_this.$parent.$refs.tabs, function (t) {
|
|
3527
|
-
return t && t.id && typeof t.id === 'string' && t.id.replace('tab-', '') === tab.paneName;
|
|
3528
|
-
});
|
|
3529
|
-
|
|
3530
|
-
// 如果找不到元素或元素属性无效,则跳过
|
|
3531
|
-
if (!$el || typeof $el[sizeProp] !== 'number' || isNaN($el[sizeProp])) {
|
|
3532
|
-
return true; // 继续查找下一个tab
|
|
3533
|
-
}
|
|
3534
|
-
|
|
3535
|
-
if (!tab.active) {
|
|
3536
|
-
offset += $el[sizeProp];
|
|
3537
|
-
return true;
|
|
3538
|
-
} else {
|
|
3539
|
-
tabSize = $el[sizeProp];
|
|
3540
|
-
return false;
|
|
3541
|
-
}
|
|
3542
|
-
} catch (e) {
|
|
3543
|
-
// 忽略单个tab处理中的错误,继续处理其他tab
|
|
3544
|
-
console.warn('Error processing tab:', e);
|
|
3545
|
-
return true;
|
|
3546
|
-
}
|
|
3547
|
-
});
|
|
3548
|
-
|
|
3549
|
-
return { offset: offset, tabSize: tabSize };
|
|
3550
|
-
} catch (error) {
|
|
3551
|
-
// 捕获所有可能的错误,确保组件不会崩溃
|
|
3552
|
-
console.warn('Error in getActiveTabSizeInfo:', error);
|
|
3553
|
-
return { offset: offset, tabSize: tabSize };
|
|
3554
|
-
}
|
|
3555
|
-
}
|
|
3556
|
-
}
|
|
3557
|
-
});
|
|
3558
|
-
// CONCATENATED MODULE: ./packages/tabs/src/tab-bar.vue?vue&type=script&lang=js&
|
|
3559
|
-
/* harmony default export */ var src_tab_barvue_type_script_lang_js_ = (tab_barvue_type_script_lang_js_);
|
|
3560
|
-
// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
|
|
3561
|
-
var componentNormalizer = __webpack_require__(5);
|
|
3562
|
-
|
|
3563
|
-
// CONCATENATED MODULE: ./packages/tabs/src/tab-bar.vue
|
|
3564
|
-
|
|
3565
|
-
|
|
3566
|
-
|
|
3567
|
-
|
|
3568
|
-
|
|
3569
|
-
/* normalize component */
|
|
3570
|
-
|
|
3571
|
-
var component = Object(componentNormalizer["a" /* default */])(
|
|
3572
|
-
src_tab_barvue_type_script_lang_js_,
|
|
3573
|
-
tab_barvue_type_template_id_61310203_render,
|
|
3574
|
-
staticRenderFns,
|
|
3575
|
-
false,
|
|
3576
|
-
null,
|
|
3577
|
-
null,
|
|
3578
|
-
null
|
|
3579
|
-
|
|
3580
|
-
)
|
|
3581
|
-
|
|
3582
|
-
/* harmony default export */ var tab_bar = (component.exports);
|
|
3583
|
-
// EXTERNAL MODULE: ./src/utils/resize-event.js
|
|
3584
|
-
var resize_event = __webpack_require__(31);
|
|
3585
|
-
|
|
3586
|
-
// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tabs/src/tab-nav.vue?vue&type=script&lang=js&
|
|
3587
|
-
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
|
3588
|
-
|
|
3589
|
-
//
|
|
3590
|
-
|
|
3591
|
-
|
|
3592
|
-
|
|
3593
|
-
|
|
3594
|
-
// 空函数,用作默认回调
|
|
3595
|
-
function noop() {}
|
|
3596
|
-
/**
|
|
3597
|
-
* 将字符串首字母大写
|
|
3598
|
-
* @param {string} str - 输入字符串
|
|
3599
|
-
* @returns {string} 首字母大写后的字符串
|
|
3600
|
-
*/
|
|
3601
|
-
var firstUpperCase = function firstUpperCase(str) {
|
|
3602
|
-
if (!str || typeof str !== 'string') return str;
|
|
3603
|
-
return str.toLowerCase().replace(/( |^)[a-z]/g, function (L) {
|
|
3604
|
-
return L.toUpperCase();
|
|
3605
|
-
});
|
|
3606
|
-
};
|
|
3607
|
-
|
|
3608
|
-
/* harmony default export */ var tab_navvue_type_script_lang_js_ = ({
|
|
3609
|
-
name: 'TabNav',
|
|
3610
|
-
|
|
3611
|
-
/**
|
|
3612
|
-
* 组件描述
|
|
3613
|
-
* 标签页导航组件,管理标签的显示、滚动和交互
|
|
3614
|
-
*/
|
|
3615
|
-
description: '标签页导航组件',
|
|
3616
|
-
|
|
3617
|
-
components: {
|
|
3618
|
-
TabBar: tab_bar
|
|
3619
|
-
},
|
|
3620
|
-
|
|
3621
|
-
inject: {
|
|
3622
|
-
rootTabs: {
|
|
3623
|
-
default: function _default() {
|
|
3624
|
-
return {
|
|
3625
|
-
tabPosition: 'top'
|
|
3626
|
-
};
|
|
3627
|
-
}
|
|
3628
|
-
}
|
|
3629
|
-
},
|
|
3630
|
-
|
|
3631
|
-
props: {
|
|
3632
|
-
panes: {
|
|
3633
|
-
type: Array,
|
|
3634
|
-
default: function _default() {
|
|
3635
|
-
return [];
|
|
3636
|
-
}
|
|
3637
|
-
},
|
|
3638
|
-
currentName: {
|
|
3639
|
-
type: String,
|
|
3640
|
-
default: ''
|
|
3641
|
-
},
|
|
3642
|
-
editable: {
|
|
3643
|
-
type: Boolean,
|
|
3644
|
-
default: false
|
|
3645
|
-
},
|
|
3646
|
-
onTabClick: {
|
|
3647
|
-
type: Function,
|
|
3648
|
-
default: noop
|
|
3649
|
-
},
|
|
3650
|
-
onTabRemove: {
|
|
3651
|
-
type: Function,
|
|
3652
|
-
default: noop
|
|
3653
|
-
},
|
|
3654
|
-
onContextmenu: {
|
|
3655
|
-
type: Function,
|
|
3656
|
-
default: noop
|
|
3657
|
-
},
|
|
3658
|
-
type: {
|
|
3659
|
-
type: String,
|
|
3660
|
-
default: ''
|
|
3661
|
-
},
|
|
3662
|
-
stretch: {
|
|
3663
|
-
type: Boolean,
|
|
3664
|
-
default: false
|
|
3665
|
-
},
|
|
3666
|
-
hideAfter: {
|
|
3667
|
-
type: Boolean,
|
|
3668
|
-
default: false
|
|
3669
|
-
},
|
|
3670
|
-
hideBar: {
|
|
3671
|
-
type: Boolean,
|
|
3672
|
-
default: false
|
|
3673
|
-
},
|
|
3674
|
-
fullBar: {
|
|
3675
|
-
type: Boolean,
|
|
3676
|
-
default: false
|
|
3677
|
-
}
|
|
3678
|
-
},
|
|
3679
|
-
|
|
3680
|
-
data: function data() {
|
|
3681
|
-
return {
|
|
3682
|
-
scrollable: false,
|
|
3683
|
-
navOffset: 0,
|
|
3684
|
-
isFocus: false,
|
|
3685
|
-
focusable: true,
|
|
3686
|
-
// 定时器ID,用于清理资源
|
|
3687
|
-
visibilityTimeout: null,
|
|
3688
|
-
focusTimeout: null
|
|
3689
|
-
};
|
|
3690
|
-
},
|
|
3691
|
-
|
|
3692
|
-
|
|
3693
|
-
// 计算属性
|
|
3694
|
-
computed: {
|
|
3695
|
-
/**
|
|
3696
|
-
* 安全获取tabPosition,提供默认值防止渲染错误
|
|
3697
|
-
*/
|
|
3698
|
-
computedTabPosition: function computedTabPosition() {
|
|
3699
|
-
return (this.rootTabs || {}).tabPosition || 'top';
|
|
3700
|
-
},
|
|
3701
|
-
|
|
3702
|
-
|
|
3703
|
-
/**
|
|
3704
|
-
* 计算导航容器的位移样式
|
|
3705
|
-
*/
|
|
3706
|
-
navStyle: function navStyle() {
|
|
3707
|
-
try {
|
|
3708
|
-
var tabPosition = this.computedTabPosition;
|
|
3709
|
-
var dir = ['top', 'bottom'].indexOf(tabPosition) !== -1 ? 'X' : 'Y';
|
|
3710
|
-
var offset = typeof this.navOffset === 'number' && !isNaN(this.navOffset) ? this.navOffset : 0;
|
|
3711
|
-
return {
|
|
3712
|
-
transform: 'translate' + dir + '(-' + offset + 'px)',
|
|
3713
|
-
msTransform: 'translate' + dir + '(-' + offset + 'px)',
|
|
3714
|
-
webkitTransform: 'translate' + dir + '(-' + offset + 'px)'
|
|
3715
|
-
};
|
|
3716
|
-
} catch (error) {
|
|
3717
|
-
console.warn('Error in navStyle calculation:', error);
|
|
3718
|
-
return {};
|
|
3719
|
-
}
|
|
3720
|
-
},
|
|
3721
|
-
|
|
3722
|
-
|
|
3723
|
-
/**
|
|
3724
|
-
* 根据标签页位置确定尺寸属性名
|
|
3725
|
-
*/
|
|
3726
|
-
sizeName: function sizeName() {
|
|
3727
|
-
try {
|
|
3728
|
-
var tabPosition = this.computedTabPosition;
|
|
3729
|
-
return ['top', 'bottom'].indexOf(tabPosition) !== -1 ? 'width' : 'height';
|
|
3730
|
-
} catch (error) {
|
|
3731
|
-
console.warn('Error in sizeName calculation:', error);
|
|
3732
|
-
return 'width';
|
|
3733
|
-
}
|
|
3734
|
-
}
|
|
3735
|
-
},
|
|
3736
|
-
|
|
3737
|
-
// 方法
|
|
3738
|
-
methods: {
|
|
3739
|
-
/**
|
|
3740
|
-
* 获取元素的尺寸信息
|
|
3741
|
-
* @param {HTMLElement} element - DOM元素
|
|
3742
|
-
* @param {string} sizeName - 尺寸类型(width/height)
|
|
3743
|
-
* @returns {number} 元素尺寸
|
|
3744
|
-
*/
|
|
3745
|
-
getElementSize: function getElementSize(element, sizeName) {
|
|
3746
|
-
try {
|
|
3747
|
-
if (!element || !sizeName) return 0;
|
|
3748
|
-
var propName = 'offset' + firstUpperCase(sizeName);
|
|
3749
|
-
var size = element[propName];
|
|
3750
|
-
return typeof size === 'number' && !isNaN(size) ? size : 0;
|
|
3751
|
-
} catch (error) {
|
|
3752
|
-
console.warn('Error getting element size:', error);
|
|
3753
|
-
return 0;
|
|
3754
|
-
}
|
|
3755
|
-
},
|
|
3756
|
-
scrollPrev: function scrollPrev() {
|
|
3757
|
-
try {
|
|
3758
|
-
var containerSize = this.getElementSize(this.$refs.navScroll, this.sizeName);
|
|
3759
|
-
var currentOffset = typeof this.navOffset === 'number' && !isNaN(this.navOffset) ? this.navOffset : 0;
|
|
3760
|
-
|
|
3761
|
-
if (!currentOffset) return;
|
|
3762
|
-
|
|
3763
|
-
var newOffset = currentOffset > containerSize ? currentOffset - containerSize : 0;
|
|
3764
|
-
|
|
3765
|
-
this.navOffset = newOffset;
|
|
3766
|
-
} catch (error) {
|
|
3767
|
-
console.warn('Error in scrollPrev:', error);
|
|
3768
|
-
}
|
|
3769
|
-
},
|
|
3770
|
-
scrollNext: function scrollNext() {
|
|
3771
|
-
try {
|
|
3772
|
-
var navSize = this.getElementSize(this.$refs.nav, this.sizeName);
|
|
3773
|
-
var containerSize = this.getElementSize(this.$refs.navScroll, this.sizeName);
|
|
3774
|
-
var currentOffset = typeof this.navOffset === 'number' && !isNaN(this.navOffset) ? this.navOffset : 0;
|
|
3775
|
-
|
|
3776
|
-
if (navSize - currentOffset <= containerSize) return;
|
|
3777
|
-
|
|
3778
|
-
var newOffset = navSize - currentOffset > containerSize * 2 ? currentOffset + containerSize : navSize - containerSize;
|
|
3779
|
-
|
|
3780
|
-
this.navOffset = newOffset;
|
|
3781
|
-
} catch (error) {
|
|
3782
|
-
console.warn('Error in scrollNext:', error);
|
|
3783
|
-
}
|
|
3784
|
-
},
|
|
3785
|
-
|
|
3786
|
-
/**
|
|
3787
|
-
* 检查是否为水平方向布局
|
|
3788
|
-
* @returns {boolean} 是否为水平布局
|
|
3789
|
-
*/
|
|
3790
|
-
isHorizontalLayout: function isHorizontalLayout() {
|
|
3791
|
-
try {
|
|
3792
|
-
var tabPosition = this.computedTabPosition;
|
|
3793
|
-
return ['top', 'bottom'].indexOf(tabPosition) !== -1;
|
|
3794
|
-
} catch (error) {
|
|
3795
|
-
console.warn('Error checking layout direction:', error);
|
|
3796
|
-
return true; // 默认水平布局作为安全起见
|
|
3797
|
-
}
|
|
3798
|
-
},
|
|
3799
|
-
|
|
3800
|
-
|
|
3801
|
-
/**
|
|
3802
|
-
* 计算最大可滚动偏移量
|
|
3803
|
-
* @returns {number} 最大偏移量
|
|
3804
|
-
*/
|
|
3805
|
-
getMaxOffset: function getMaxOffset() {
|
|
3806
|
-
try {
|
|
3807
|
-
var nav = this.$refs.nav;
|
|
3808
|
-
var navScroll = this.$refs.navScroll;
|
|
3809
|
-
if (!nav || !navScroll) return 0;
|
|
3810
|
-
|
|
3811
|
-
var navBounding = nav.getBoundingClientRect();
|
|
3812
|
-
var navScrollBounding = navScroll.getBoundingClientRect();
|
|
3813
|
-
|
|
3814
|
-
if (this.isHorizontalLayout()) {
|
|
3815
|
-
return navBounding.width - navScrollBounding.width;
|
|
3816
|
-
} else {
|
|
3817
|
-
return navBounding.height - navScrollBounding.height;
|
|
3818
|
-
}
|
|
3819
|
-
} catch (error) {
|
|
3820
|
-
console.warn('Error calculating max offset:', error);
|
|
3821
|
-
return 0;
|
|
3822
|
-
}
|
|
3823
|
-
},
|
|
3824
|
-
scrollToActiveTab: function scrollToActiveTab() {
|
|
3825
|
-
try {
|
|
3826
|
-
if (!this.scrollable) return;
|
|
3827
|
-
|
|
3828
|
-
var activeTab = this.$el ? this.$el.querySelector('.is-active') : null;
|
|
3829
|
-
if (!activeTab) return;
|
|
3830
|
-
|
|
3831
|
-
var navScroll = this.$refs.navScroll;
|
|
3832
|
-
if (!navScroll) return;
|
|
3833
|
-
|
|
3834
|
-
var activeTabBounding = activeTab.getBoundingClientRect();
|
|
3835
|
-
var navScrollBounding = navScroll.getBoundingClientRect();
|
|
3836
|
-
var maxOffset = this.getMaxOffset();
|
|
3837
|
-
var currentOffset = typeof this.navOffset === 'number' && !isNaN(this.navOffset) ? this.navOffset : 0;
|
|
3838
|
-
var newOffset = currentOffset;
|
|
3839
|
-
|
|
3840
|
-
if (this.isHorizontalLayout()) {
|
|
3841
|
-
if (activeTabBounding.left < navScrollBounding.left) {
|
|
3842
|
-
newOffset = currentOffset - (navScrollBounding.left - activeTabBounding.left);
|
|
3843
|
-
}
|
|
3844
|
-
if (activeTabBounding.right > navScrollBounding.right) {
|
|
3845
|
-
newOffset = currentOffset + activeTabBounding.right - navScrollBounding.right;
|
|
3846
|
-
}
|
|
3847
|
-
} else {
|
|
3848
|
-
if (activeTabBounding.top < navScrollBounding.top) {
|
|
3849
|
-
newOffset = currentOffset - (navScrollBounding.top - activeTabBounding.top);
|
|
3850
|
-
}
|
|
3851
|
-
if (activeTabBounding.bottom > navScrollBounding.bottom) {
|
|
3852
|
-
newOffset = currentOffset + (activeTabBounding.bottom - navScrollBounding.bottom);
|
|
3853
|
-
}
|
|
3854
|
-
}
|
|
3855
|
-
|
|
3856
|
-
// 确保偏移量在有效范围内
|
|
3857
|
-
newOffset = Math.max(newOffset, 0);
|
|
3858
|
-
this.navOffset = Math.min(newOffset, maxOffset);
|
|
3859
|
-
} catch (error) {
|
|
3860
|
-
console.warn('Error in scrollToActiveTab:', error);
|
|
3861
|
-
}
|
|
3862
|
-
},
|
|
3863
|
-
update: function update() {
|
|
3864
|
-
try {
|
|
3865
|
-
if (!this.$refs.nav || !this.$refs.navScroll) return;
|
|
3866
|
-
|
|
3867
|
-
var navSize = this.getElementSize(this.$refs.nav, this.sizeName);
|
|
3868
|
-
var containerSize = this.getElementSize(this.$refs.navScroll, this.sizeName);
|
|
3869
|
-
var currentOffset = typeof this.navOffset === 'number' && !isNaN(this.navOffset) ? this.navOffset : 0;
|
|
3870
|
-
|
|
3871
|
-
if (containerSize < navSize) {
|
|
3872
|
-
// 确保scrollable对象存在
|
|
3873
|
-
if (!this.scrollable || _typeof(this.scrollable) !== 'object') {
|
|
3874
|
-
this.scrollable = {};
|
|
3875
|
-
}
|
|
3876
|
-
this.scrollable.prev = currentOffset > 0;
|
|
3877
|
-
this.scrollable.next = currentOffset + containerSize < navSize;
|
|
3878
|
-
|
|
3879
|
-
// 防止滚动过度,确保能看到最后一个标签
|
|
3880
|
-
if (navSize - currentOffset < containerSize) {
|
|
3881
|
-
this.navOffset = navSize - containerSize;
|
|
3882
|
-
}
|
|
3883
|
-
} else {
|
|
3884
|
-
this.scrollable = false;
|
|
3885
|
-
if (currentOffset > 0) {
|
|
3886
|
-
this.navOffset = 0;
|
|
3887
|
-
}
|
|
3888
|
-
}
|
|
3889
|
-
} catch (error) {
|
|
3890
|
-
console.warn('Error in update method:', error);
|
|
3891
|
-
}
|
|
3892
|
-
},
|
|
3893
|
-
|
|
3894
|
-
/**
|
|
3895
|
-
* 键盘导航事件处理
|
|
3896
|
-
* @param {KeyboardEvent} e - 键盘事件对象
|
|
3897
|
-
*/
|
|
3898
|
-
changeTab: function changeTab(e) {
|
|
3899
|
-
try {
|
|
3900
|
-
var keyCode = e ? e.keyCode : undefined;
|
|
3901
|
-
if (!keyCode || [37, 38, 39, 40].indexOf(keyCode) === -1) {
|
|
3902
|
-
return;
|
|
3903
|
-
}
|
|
3904
|
-
|
|
3905
|
-
var tabList = e.currentTarget ? e.currentTarget.querySelectorAll('[role=tab]') : [];
|
|
3906
|
-
if (!tabList || tabList.length === 0) {
|
|
3907
|
-
return;
|
|
3908
|
-
}
|
|
3909
|
-
|
|
3910
|
-
var currentIndex = Array.prototype.indexOf.call(tabList, e.target);
|
|
3911
|
-
if (currentIndex === -1) {
|
|
3912
|
-
return;
|
|
3913
|
-
}
|
|
3914
|
-
|
|
3915
|
-
var nextIndex = void 0;
|
|
3916
|
-
if (keyCode === 37 || keyCode === 38) {
|
|
3917
|
-
// 左/上键 - 上一个标签
|
|
3918
|
-
nextIndex = currentIndex === 0 ? tabList.length - 1 : currentIndex - 1;
|
|
3919
|
-
} else {
|
|
3920
|
-
// 右/下键 - 下一个标签
|
|
3921
|
-
nextIndex = currentIndex < tabList.length - 1 ? currentIndex + 1 : 0;
|
|
3922
|
-
}
|
|
3923
|
-
|
|
3924
|
-
// 安全地设置焦点和触发点击
|
|
3925
|
-
if (tabList[nextIndex]) {
|
|
3926
|
-
tabList[nextIndex].focus();
|
|
3927
|
-
tabList[nextIndex].click();
|
|
3928
|
-
this.setFocus();
|
|
3929
|
-
}
|
|
3930
|
-
} catch (error) {
|
|
3931
|
-
console.warn('Error in changeTab handler:', error);
|
|
3932
|
-
}
|
|
3933
|
-
},
|
|
3934
|
-
|
|
3935
|
-
/**
|
|
3936
|
-
* 设置焦点状态
|
|
3937
|
-
*/
|
|
3938
|
-
setFocus: function setFocus() {
|
|
3939
|
-
try {
|
|
3940
|
-
if (this.focusable) {
|
|
3941
|
-
this.isFocus = true;
|
|
3942
|
-
}
|
|
3943
|
-
} catch (error) {
|
|
3944
|
-
console.warn('Error in setFocus:', error);
|
|
3945
|
-
}
|
|
3946
|
-
},
|
|
3947
|
-
|
|
3948
|
-
|
|
3949
|
-
/**
|
|
3950
|
-
* 移除焦点状态
|
|
3951
|
-
*/
|
|
3952
|
-
removeFocus: function removeFocus() {
|
|
3953
|
-
try {
|
|
3954
|
-
this.isFocus = false;
|
|
3955
|
-
} catch (error) {
|
|
3956
|
-
console.warn('Error in removeFocus:', error);
|
|
3957
|
-
}
|
|
3958
|
-
},
|
|
3959
|
-
|
|
3960
|
-
/**
|
|
3961
|
-
* 页面可见性变化处理
|
|
3962
|
-
*/
|
|
3963
|
-
visibilityChangeHandler: function visibilityChangeHandler() {
|
|
3964
|
-
var _this = this;
|
|
3965
|
-
|
|
3966
|
-
try {
|
|
3967
|
-
var visibility = document ? document.visibilityState : 'visible';
|
|
3968
|
-
if (visibility === 'hidden') {
|
|
3969
|
-
this.focusable = false;
|
|
3970
|
-
} else if (visibility === 'visible') {
|
|
3971
|
-
// 使用防抖处理可见性变化
|
|
3972
|
-
clearTimeout(this.visibilityTimeout);
|
|
3973
|
-
this.visibilityTimeout = setTimeout(function () {
|
|
3974
|
-
_this.focusable = true;
|
|
3975
|
-
}, 50);
|
|
3976
|
-
}
|
|
3977
|
-
} catch (error) {
|
|
3978
|
-
console.warn('Error in visibilityChangeHandler:', error);
|
|
3979
|
-
}
|
|
3980
|
-
},
|
|
3981
|
-
|
|
3982
|
-
|
|
3983
|
-
/**
|
|
3984
|
-
* 窗口失焦处理
|
|
3985
|
-
*/
|
|
3986
|
-
windowBlurHandler: function windowBlurHandler() {
|
|
3987
|
-
try {
|
|
3988
|
-
this.focusable = false;
|
|
3989
|
-
} catch (error) {
|
|
3990
|
-
console.warn('Error in windowBlurHandler:', error);
|
|
3991
|
-
}
|
|
3992
|
-
},
|
|
3993
|
-
|
|
3994
|
-
|
|
3995
|
-
/**
|
|
3996
|
-
* 窗口聚焦处理
|
|
3997
|
-
*/
|
|
3998
|
-
windowFocusHandler: function windowFocusHandler() {
|
|
3999
|
-
var _this2 = this;
|
|
4000
|
-
|
|
4001
|
-
try {
|
|
4002
|
-
// 使用防抖处理窗口聚焦
|
|
4003
|
-
clearTimeout(this.focusTimeout);
|
|
4004
|
-
this.focusTimeout = setTimeout(function () {
|
|
4005
|
-
_this2.focusable = true;
|
|
4006
|
-
}, 50);
|
|
4007
|
-
} catch (error) {
|
|
4008
|
-
console.warn('Error in windowFocusHandler:', error);
|
|
4009
|
-
}
|
|
4010
|
-
}
|
|
4011
|
-
},
|
|
4012
|
-
|
|
4013
|
-
updated: function updated() {
|
|
4014
|
-
this.update();
|
|
4015
|
-
},
|
|
4016
|
-
render: function render(h) {
|
|
4017
|
-
var _this3 = this;
|
|
4018
|
-
|
|
4019
|
-
var type = this.type,
|
|
4020
|
-
panes = this.panes,
|
|
4021
|
-
editable = this.editable,
|
|
4022
|
-
stretch = this.stretch,
|
|
4023
|
-
hideAfter = this.hideAfter,
|
|
4024
|
-
onTabClick = this.onTabClick,
|
|
4025
|
-
onTabRemove = this.onTabRemove,
|
|
4026
|
-
onContextmenu = this.onContextmenu,
|
|
4027
|
-
navStyle = this.navStyle,
|
|
4028
|
-
scrollable = this.scrollable,
|
|
4029
|
-
scrollNext = this.scrollNext,
|
|
4030
|
-
scrollPrev = this.scrollPrev,
|
|
4031
|
-
changeTab = this.changeTab,
|
|
4032
|
-
setFocus = this.setFocus,
|
|
4033
|
-
removeFocus = this.removeFocus;
|
|
4034
|
-
|
|
4035
|
-
var scrollBtn = scrollable ? [h(
|
|
4036
|
-
'span',
|
|
4037
|
-
{
|
|
4038
|
-
'class': ['es-tabs__nav-prev', scrollable.prev ? '' : 'is-disabled'],
|
|
4039
|
-
on: {
|
|
4040
|
-
'click': scrollPrev
|
|
4041
|
-
}
|
|
4042
|
-
},
|
|
4043
|
-
[h('i', { 'class': 'es-icon-zuo' })]
|
|
4044
|
-
), h(
|
|
4045
|
-
'span',
|
|
4046
|
-
{
|
|
4047
|
-
'class': ['es-tabs__nav-next', scrollable.next ? '' : 'is-disabled'],
|
|
4048
|
-
on: {
|
|
4049
|
-
'click': scrollNext
|
|
4050
|
-
}
|
|
4051
|
-
},
|
|
4052
|
-
[h('i', { 'class': 'es-icon-you' })]
|
|
4053
|
-
)] : null;
|
|
4054
|
-
|
|
4055
|
-
var tabs = this._l(panes, function (pane, index) {
|
|
4056
|
-
var _ref;
|
|
4057
|
-
|
|
4058
|
-
var tabName = pane.name || pane.index || index;
|
|
4059
|
-
var closable = pane.isClosable || editable;
|
|
4060
|
-
|
|
4061
|
-
pane.index = '' + index;
|
|
4062
|
-
|
|
4063
|
-
var btnClose = closable ? h('span', {
|
|
4064
|
-
'class': 'es-icon-guanbi',
|
|
4065
|
-
on: {
|
|
4066
|
-
'click': function click(ev) {
|
|
4067
|
-
onTabRemove(pane, ev);
|
|
4068
|
-
}
|
|
4069
|
-
}
|
|
4070
|
-
}) : null;
|
|
4071
|
-
var tabLabelContent = pane.badge ? [h('es-badge', {
|
|
4072
|
-
props: pane.badge
|
|
4073
|
-
}, [pane.$slots.label || pane.label])] : pane.$slots.label || pane.label;
|
|
4074
|
-
|
|
4075
|
-
var tabindex = pane.active ? 0 : -1;
|
|
4076
|
-
return h(
|
|
4077
|
-
'div',
|
|
4078
|
-
{
|
|
4079
|
-
'class': (_ref = {
|
|
4080
|
-
'es-tabs__item': true
|
|
4081
|
-
}, _ref['is-' + _this3.rootTabs.tabPosition] = true, _ref['is-active'] = pane.active, _ref['is-disabled'] = pane.disabled, _ref['is-closable'] = closable, _ref['is-focus'] = _this3.isFocus, _ref),
|
|
4082
|
-
attrs: { id: 'tab-' + tabName,
|
|
4083
|
-
|
|
4084
|
-
'aria-controls': 'pane-' + tabName,
|
|
4085
|
-
role: 'tab',
|
|
4086
|
-
'aria-selected': pane.active,
|
|
4087
|
-
|
|
4088
|
-
tabindex: tabindex
|
|
4089
|
-
},
|
|
4090
|
-
key: 'tab-' + tabName, ref: 'tabs', refInFor: true,
|
|
4091
|
-
on: {
|
|
4092
|
-
'focus': function focus() {
|
|
4093
|
-
setFocus();
|
|
4094
|
-
},
|
|
4095
|
-
'blur': function blur() {
|
|
4096
|
-
removeFocus();
|
|
4097
|
-
},
|
|
4098
|
-
'click': function click(ev) {
|
|
4099
|
-
removeFocus();
|
|
4100
|
-
onTabClick(pane, tabName, ev);
|
|
4101
|
-
},
|
|
4102
|
-
'keydown': function keydown(ev) {
|
|
4103
|
-
if (closable && (ev.keyCode === 46 || ev.keyCode === 8)) {
|
|
4104
|
-
onTabRemove(pane, ev);
|
|
4105
|
-
}
|
|
4106
|
-
},
|
|
4107
|
-
'contextmenu': function contextmenu(ev) {
|
|
4108
|
-
if (onContextmenu) {
|
|
4109
|
-
ev.preventDefault();
|
|
4110
|
-
onContextmenu(pane, ev);
|
|
4111
|
-
}
|
|
4112
|
-
}
|
|
4113
|
-
}
|
|
4114
|
-
},
|
|
4115
|
-
[tabLabelContent, btnClose]
|
|
4116
|
-
);
|
|
4117
|
-
});
|
|
4118
|
-
return h(
|
|
4119
|
-
'div',
|
|
4120
|
-
{
|
|
4121
|
-
'class': ['es-tabs__nav-wrap', hideAfter ? 'is-hide' : '', 'is-' + this.rootTabs.tabPosition]
|
|
4122
|
-
},
|
|
4123
|
-
[scrollBtn, h(
|
|
4124
|
-
'div',
|
|
4125
|
-
{ 'class': ['es-tabs__nav-scroll'], ref: 'navScroll' },
|
|
4126
|
-
[h(
|
|
4127
|
-
'div',
|
|
4128
|
-
{
|
|
4129
|
-
'class': ['es-tabs__nav', 'is-' + this.rootTabs.tabPosition, stretch && ['top', 'bottom'].indexOf(this.rootTabs.tabPosition) !== -1 ? 'is-stretch' : ''],
|
|
4130
|
-
ref: 'nav',
|
|
4131
|
-
style: navStyle,
|
|
4132
|
-
attrs: { role: 'tablist'
|
|
4133
|
-
},
|
|
4134
|
-
on: {
|
|
4135
|
-
'keydown': changeTab
|
|
4136
|
-
}
|
|
4137
|
-
},
|
|
4138
|
-
[!type ? h('tab-bar', {
|
|
4139
|
-
attrs: {
|
|
4140
|
-
tabs: panes,
|
|
4141
|
-
|
|
4142
|
-
full: this.fullBar
|
|
4143
|
-
},
|
|
4144
|
-
directives: [{
|
|
4145
|
-
name: 'show',
|
|
4146
|
-
value: !this.hideBar
|
|
4147
|
-
}]
|
|
4148
|
-
}) : null, tabs]
|
|
4149
|
-
)]
|
|
4150
|
-
)]
|
|
4151
|
-
);
|
|
4152
|
-
},
|
|
4153
|
-
mounted: function mounted() {
|
|
4154
|
-
var _this4 = this;
|
|
4155
|
-
|
|
4156
|
-
try {
|
|
4157
|
-
this.$nextTick(function () {
|
|
4158
|
-
_this4.update();
|
|
4159
|
-
});
|
|
4160
|
-
if (this.$el) {
|
|
4161
|
-
Object(resize_event["a" /* addResizeListener */])(this.$el, this.update);
|
|
4162
|
-
}
|
|
4163
|
-
|
|
4164
|
-
// 添加事件监听器
|
|
4165
|
-
document.addEventListener('visibilitychange', this.visibilityChangeHandler);
|
|
4166
|
-
window.addEventListener('blur', this.windowBlurHandler);
|
|
4167
|
-
window.addEventListener('focus', this.windowFocusHandler);
|
|
4168
|
-
} catch (error) {
|
|
4169
|
-
console.warn('Error in mounted:', error);
|
|
4170
|
-
}
|
|
4171
|
-
},
|
|
4172
|
-
beforeDestroy: function beforeDestroy() {
|
|
4173
|
-
try {
|
|
4174
|
-
// 清理事件监听器
|
|
4175
|
-
if (this.$el && this.update) {
|
|
4176
|
-
Object(resize_event["b" /* removeResizeListener */])(this.$el, this.update);
|
|
4177
|
-
}
|
|
4178
|
-
|
|
4179
|
-
// 移除DOM事件监听器
|
|
4180
|
-
document.removeEventListener('visibilitychange', this.visibilityChangeHandler);
|
|
4181
|
-
window.removeEventListener('blur', this.windowBlurHandler);
|
|
4182
|
-
window.removeEventListener('focus', this.windowFocusHandler);
|
|
4183
|
-
|
|
4184
|
-
// 清理定时器,防止内存泄漏
|
|
4185
|
-
if (this.visibilityTimeout) {
|
|
4186
|
-
clearTimeout(this.visibilityTimeout);
|
|
4187
|
-
}
|
|
4188
|
-
if (this.focusTimeout) {
|
|
4189
|
-
clearTimeout(this.focusTimeout);
|
|
4190
|
-
}
|
|
4191
|
-
} catch (error) {
|
|
4192
|
-
console.warn('Error in beforeDestroy:', error);
|
|
4193
|
-
}
|
|
4194
|
-
}
|
|
4195
|
-
});
|
|
4196
|
-
// CONCATENATED MODULE: ./packages/tabs/src/tab-nav.vue?vue&type=script&lang=js&
|
|
4197
|
-
/* harmony default export */ var src_tab_navvue_type_script_lang_js_ = (tab_navvue_type_script_lang_js_);
|
|
4198
|
-
// CONCATENATED MODULE: ./packages/tabs/src/tab-nav.vue
|
|
4199
|
-
var tab_nav_render, tab_nav_staticRenderFns
|
|
4200
|
-
|
|
4201
|
-
|
|
4202
|
-
|
|
4203
|
-
|
|
4204
|
-
/* normalize component */
|
|
4205
|
-
|
|
4206
|
-
var tab_nav_component = Object(componentNormalizer["a" /* default */])(
|
|
4207
|
-
src_tab_navvue_type_script_lang_js_,
|
|
4208
|
-
tab_nav_render,
|
|
4209
|
-
tab_nav_staticRenderFns,
|
|
4210
|
-
false,
|
|
4211
|
-
null,
|
|
4212
|
-
null,
|
|
4213
|
-
null
|
|
4214
|
-
|
|
4215
|
-
)
|
|
4216
|
-
|
|
4217
|
-
/* harmony default export */ var tab_nav = (tab_nav_component.exports);
|
|
4218
|
-
// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tabs/src/tabs.vue?vue&type=script&lang=js&
|
|
4219
|
-
|
|
4220
|
-
|
|
4221
|
-
|
|
4222
|
-
|
|
4223
|
-
/**
|
|
4224
|
-
* Tabs 标签页组件
|
|
4225
|
-
* 用于分隔内容上有关联但属于不同类别的数据集合
|
|
4226
|
-
*/
|
|
4227
|
-
/* harmony default export */ var tabsvue_type_script_lang_js_ = ({
|
|
4228
|
-
name: 'EsTabs',
|
|
4229
|
-
|
|
4230
|
-
components: {
|
|
4231
|
-
TabNav: tab_nav
|
|
4232
|
-
},
|
|
4233
|
-
|
|
4234
|
-
props: {
|
|
4235
|
-
/**
|
|
4236
|
-
* 风格类型
|
|
4237
|
-
*/
|
|
4238
|
-
type: String,
|
|
4239
|
-
/**
|
|
4240
|
-
* 选中选项卡的 name
|
|
4241
|
-
*/
|
|
4242
|
-
activeName: String,
|
|
4243
|
-
/**
|
|
4244
|
-
* 标签是否可关闭
|
|
4245
|
-
*/
|
|
4246
|
-
closable: Boolean,
|
|
4247
|
-
/**
|
|
4248
|
-
* 是否使用透明度过渡
|
|
4249
|
-
*/
|
|
4250
|
-
opacity: Boolean,
|
|
4251
|
-
/**
|
|
4252
|
-
* 标签是否可增加
|
|
4253
|
-
*/
|
|
4254
|
-
addable: Boolean,
|
|
4255
|
-
/**
|
|
4256
|
-
* 绑定值,选中选项卡的 name
|
|
4257
|
-
*/
|
|
4258
|
-
value: {},
|
|
4259
|
-
/**
|
|
4260
|
-
* 标签是否同时可增加和关闭
|
|
4261
|
-
*/
|
|
4262
|
-
editable: Boolean,
|
|
4263
|
-
/**
|
|
4264
|
-
* 选项卡所在位置
|
|
4265
|
-
*/
|
|
4266
|
-
tabPosition: {
|
|
4267
|
-
type: String,
|
|
4268
|
-
default: 'top'
|
|
4269
|
-
},
|
|
4270
|
-
/**
|
|
4271
|
-
* 切换标签页之前的钩子函数
|
|
4272
|
-
*/
|
|
4273
|
-
beforeLeave: Function,
|
|
4274
|
-
/**
|
|
4275
|
-
* 标签的宽度是否自撑开
|
|
4276
|
-
*/
|
|
4277
|
-
stretch: Boolean,
|
|
4278
|
-
/**
|
|
4279
|
-
* 是否隐藏标签内容
|
|
4280
|
-
*/
|
|
4281
|
-
hideAfter: Boolean,
|
|
4282
|
-
/**
|
|
4283
|
-
* 是否隐藏标签选中后的指示条
|
|
4284
|
-
*/
|
|
4285
|
-
hideBar: Boolean,
|
|
4286
|
-
/**
|
|
4287
|
-
* 标签选中后的指示条的宽度是否包含 padding
|
|
4288
|
-
*/
|
|
4289
|
-
fullBar: Boolean
|
|
4290
|
-
},
|
|
4291
|
-
computed: {
|
|
4292
|
-
/**
|
|
4293
|
-
* 判断是否可编辑(可添加或关闭)
|
|
4294
|
-
*/
|
|
4295
|
-
isEditable: function isEditable() {
|
|
4296
|
-
return this.editable || this.addable || this.closable;
|
|
4297
|
-
},
|
|
4298
|
-
|
|
4299
|
-
/**
|
|
4300
|
-
* 计算tabs容器的CSS类名
|
|
4301
|
-
*/
|
|
4302
|
-
tabsClasses: function tabsClasses() {
|
|
4303
|
-
var _ref;
|
|
4304
|
-
|
|
4305
|
-
return _ref = {
|
|
4306
|
-
'es-tabs': true,
|
|
4307
|
-
'es-tabs--card': this.type === 'card'
|
|
4308
|
-
}, _ref['es-tabs--' + this.tabPosition] = true, _ref['es-tabs--border-card'] = this.type === 'border-card', _ref;
|
|
4309
|
-
}
|
|
4310
|
-
},
|
|
4311
|
-
provide: function provide() {
|
|
4312
|
-
return {
|
|
4313
|
-
rootTabs: this
|
|
4314
|
-
};
|
|
4315
|
-
},
|
|
4316
|
-
data: function data() {
|
|
4317
|
-
return {
|
|
4318
|
-
currentName: this.value !== undefined ? this.value : this.activeName !== undefined ? this.activeName : null,
|
|
4319
|
-
panes: []
|
|
4320
|
-
};
|
|
4321
|
-
},
|
|
4322
|
-
|
|
4323
|
-
|
|
4324
|
-
watch: {
|
|
4325
|
-
activeName: function activeName(value) {
|
|
4326
|
-
this.setCurrentName(value);
|
|
4327
|
-
},
|
|
4328
|
-
value: function value(_value) {
|
|
4329
|
-
this.setCurrentName(_value);
|
|
4330
|
-
},
|
|
4331
|
-
currentName: function currentName() {
|
|
4332
|
-
var _this = this;
|
|
4333
|
-
|
|
4334
|
-
if (this.$refs.nav) {
|
|
4335
|
-
this.$nextTick(function () {
|
|
4336
|
-
_this.$refs.nav.$nextTick(function (_) {
|
|
4337
|
-
_this.$refs.nav.scrollToActiveTab();
|
|
4338
|
-
});
|
|
4339
|
-
});
|
|
4340
|
-
}
|
|
4341
|
-
}
|
|
4342
|
-
},
|
|
4343
|
-
|
|
4344
|
-
methods: {
|
|
4345
|
-
/**
|
|
4346
|
-
* 计算面板实例
|
|
4347
|
-
* @param {boolean} isForceUpdate - 是否强制更新
|
|
4348
|
-
*/
|
|
4349
|
-
calcPaneInstances: function calcPaneInstances() {
|
|
4350
|
-
var _this2 = this;
|
|
4351
|
-
|
|
4352
|
-
var isForceUpdate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
4353
|
-
|
|
4354
|
-
if (this.$slots.default) {
|
|
4355
|
-
var paneSlots = this.$slots.default.filter(function (vnode) {
|
|
4356
|
-
return vnode.tag && vnode.componentOptions && vnode.componentOptions.Ctor.options.name === 'EsTabPane';
|
|
4357
|
-
});
|
|
4358
|
-
// update indeed
|
|
4359
|
-
var panes = paneSlots.map(function (_ref2) {
|
|
4360
|
-
var componentInstance = _ref2.componentInstance;
|
|
4361
|
-
return componentInstance;
|
|
4362
|
-
});
|
|
4363
|
-
var panesChanged = !(panes.length === this.panes.length && panes.every(function (pane, index) {
|
|
4364
|
-
return pane === _this2.panes[index];
|
|
4365
|
-
}));
|
|
4366
|
-
if (isForceUpdate || panesChanged) {
|
|
4367
|
-
this.panes = panes;
|
|
4368
|
-
}
|
|
4369
|
-
} else if (this.panes.length !== 0) {
|
|
4370
|
-
this.panes = [];
|
|
4371
|
-
}
|
|
4372
|
-
if (this.$slots.prepend) {
|
|
4373
|
-
this.$nextTick(function () {
|
|
4374
|
-
_this2.width = _this2.$refs.prepend.getBoundingClientRect().width;
|
|
4375
|
-
});
|
|
4376
|
-
}
|
|
4377
|
-
},
|
|
4378
|
-
|
|
4379
|
-
/**
|
|
4380
|
-
* 处理标签点击事件
|
|
4381
|
-
* @param {Object} tab - 被点击的标签对象
|
|
4382
|
-
* @param {string} tabName - 被点击的标签名称
|
|
4383
|
-
* @param {Event} event - 点击事件对象
|
|
4384
|
-
*/
|
|
4385
|
-
handleTabClick: function handleTabClick(tab, tabName, event) {
|
|
4386
|
-
// 添加类型检查和空值检查
|
|
4387
|
-
if (!tab || tab.disabled) {
|
|
4388
|
-
return;
|
|
4389
|
-
}
|
|
4390
|
-
this.setCurrentName(tabName, tab);
|
|
4391
|
-
this.$emit('tab-click', tab, event);
|
|
4392
|
-
},
|
|
4393
|
-
|
|
4394
|
-
/**
|
|
4395
|
-
* 处理标签移除事件
|
|
4396
|
-
* @param {Object} pane - 要移除的标签面板对象
|
|
4397
|
-
* @param {Event} ev - 移除事件对象
|
|
4398
|
-
*/
|
|
4399
|
-
handleTabRemove: function handleTabRemove(pane, ev) {
|
|
4400
|
-
// 添加类型检查和空值检查
|
|
4401
|
-
if (!pane || pane.disabled) {
|
|
4402
|
-
return;
|
|
4403
|
-
}
|
|
4404
|
-
if (ev) {
|
|
4405
|
-
ev.stopPropagation();
|
|
4406
|
-
}
|
|
4407
|
-
this.$emit('edit', pane.name, 'remove');
|
|
4408
|
-
this.$emit('tab-remove', pane.name);
|
|
4409
|
-
},
|
|
4410
|
-
|
|
4411
|
-
/**
|
|
4412
|
-
* 处理标签右键菜单事件
|
|
4413
|
-
* @param {Object} pane - 右键点击的标签面板对象
|
|
4414
|
-
* @param {Event} ev - 右键菜单事件对象
|
|
4415
|
-
*/
|
|
4416
|
-
handleContextmenu: function handleContextmenu(pane, ev) {
|
|
4417
|
-
this.$emit('tab-contextmenu', pane, ev);
|
|
4418
|
-
},
|
|
4419
|
-
|
|
4420
|
-
/**
|
|
4421
|
-
* 处理标签添加事件
|
|
4422
|
-
*/
|
|
4423
|
-
handleTabAdd: function handleTabAdd() {
|
|
4424
|
-
this.$emit('edit', null, 'add');
|
|
4425
|
-
this.$emit('tab-add');
|
|
4426
|
-
},
|
|
4427
|
-
|
|
4428
|
-
/**
|
|
4429
|
-
* 设置当前选中的标签
|
|
4430
|
-
* @param {string} value - 要选中的标签名称
|
|
4431
|
-
* @param {Object} tab - 要选中的标签对象
|
|
4432
|
-
*/
|
|
4433
|
-
setCurrentName: function setCurrentName(value, tab) {
|
|
4434
|
-
var _this3 = this;
|
|
4435
|
-
|
|
4436
|
-
// 如果值没有变化,直接返回
|
|
4437
|
-
if (this.currentName === value) {
|
|
4438
|
-
return;
|
|
4439
|
-
}
|
|
4440
|
-
|
|
4441
|
-
// 执行切换逻辑
|
|
4442
|
-
var performChange = function performChange() {
|
|
4443
|
-
_this3.currentName = value;
|
|
4444
|
-
_this3.$emit('input', value);
|
|
4445
|
-
return true;
|
|
4446
|
-
};
|
|
4447
|
-
|
|
4448
|
-
// 处理beforeLeave钩子
|
|
4449
|
-
if (this.beforeLeave) {
|
|
4450
|
-
var beforeResult = this.beforeLeave(value, this.currentName, tab);
|
|
4451
|
-
|
|
4452
|
-
// 处理Promise返回值
|
|
4453
|
-
if (beforeResult && typeof beforeResult.then === 'function') {
|
|
4454
|
-
beforeResult.then(function () {
|
|
4455
|
-
performChange();
|
|
4456
|
-
if (_this3.$refs.nav) {
|
|
4457
|
-
_this3.$refs.nav.removeFocus();
|
|
4458
|
-
}
|
|
4459
|
-
}).catch(function () {});
|
|
4460
|
-
return;
|
|
4461
|
-
}
|
|
4462
|
-
|
|
4463
|
-
// 处理非Promise返回值
|
|
4464
|
-
if (beforeResult === false) {
|
|
4465
|
-
return;
|
|
4466
|
-
}
|
|
4467
|
-
}
|
|
4468
|
-
|
|
4469
|
-
// 默认情况,直接执行切换
|
|
4470
|
-
performChange();
|
|
4471
|
-
}
|
|
4472
|
-
},
|
|
4473
|
-
|
|
4474
|
-
render: function render() {
|
|
4475
|
-
var h = arguments[0];
|
|
4476
|
-
var type = this.type,
|
|
4477
|
-
handleTabClick = this.handleTabClick,
|
|
4478
|
-
handleTabRemove = this.handleTabRemove,
|
|
4479
|
-
handleContextmenu = this.handleContextmenu,
|
|
4480
|
-
handleTabAdd = this.handleTabAdd,
|
|
4481
|
-
currentName = this.currentName,
|
|
4482
|
-
panes = this.panes,
|
|
4483
|
-
editable = this.editable,
|
|
4484
|
-
tabPosition = this.tabPosition,
|
|
4485
|
-
stretch = this.stretch,
|
|
4486
|
-
hideAfter = this.hideAfter,
|
|
4487
|
-
hideBar = this.hideBar,
|
|
4488
|
-
fullBar = this.fullBar;
|
|
4489
|
-
|
|
4490
|
-
|
|
4491
|
-
var newButton = this.isEditable && (this.editable || this.addable) ? h(
|
|
4492
|
-
'span',
|
|
4493
|
-
{
|
|
4494
|
-
'class': 'es-tabs__new-tab',
|
|
4495
|
-
on: {
|
|
4496
|
-
'click': handleTabAdd,
|
|
4497
|
-
'keydown': function keydown(ev) {
|
|
4498
|
-
if (ev.key === 'Enter') {
|
|
4499
|
-
handleTabAdd();
|
|
4500
|
-
}
|
|
4501
|
-
}
|
|
4502
|
-
},
|
|
4503
|
-
attrs: {
|
|
4504
|
-
tabindex: '0'
|
|
4505
|
-
}
|
|
4506
|
-
},
|
|
4507
|
-
[h('i', { 'class': 'es-icon-plus' })]
|
|
4508
|
-
) : null;
|
|
4509
|
-
var navData = {
|
|
4510
|
-
props: {
|
|
4511
|
-
currentName: currentName,
|
|
4512
|
-
onTabClick: handleTabClick,
|
|
4513
|
-
onTabRemove: handleTabRemove,
|
|
4514
|
-
onContextmenu: handleContextmenu,
|
|
4515
|
-
editable: editable,
|
|
4516
|
-
type: type,
|
|
4517
|
-
panes: panes,
|
|
4518
|
-
stretch: stretch,
|
|
4519
|
-
hideAfter: hideAfter,
|
|
4520
|
-
hideBar: hideBar,
|
|
4521
|
-
fullBar: fullBar
|
|
4522
|
-
},
|
|
4523
|
-
ref: 'nav'
|
|
4524
|
-
};
|
|
4525
|
-
var header = h(
|
|
4526
|
-
'div',
|
|
4527
|
-
{ 'class': ['es-tabs__header', 'is-' + tabPosition] },
|
|
4528
|
-
[this.$slots.prepend ? h(
|
|
4529
|
-
'div',
|
|
4530
|
-
{
|
|
4531
|
-
ref: 'prepend',
|
|
4532
|
-
'class': ['es-tabs__prepend', hideBar ? 'is-hide' : '']
|
|
4533
|
-
},
|
|
4534
|
-
[this.$slots.prepend]
|
|
4535
|
-
) : '', newButton, h(
|
|
4536
|
-
'div',
|
|
4537
|
-
{ 'class': ['es-tabs__nav-main', 'is-' + tabPosition] },
|
|
4538
|
-
[h('tab-nav', external_babel_helper_vue_jsx_merge_props_default()([navData, { 'class': [hideBar ? 'is-hide' : ''] }]))]
|
|
4539
|
-
), this.$slots.append ? h(
|
|
4540
|
-
'div',
|
|
4541
|
-
{
|
|
4542
|
-
ref: 'append',
|
|
4543
|
-
'class': ['es-tabs__append', hideBar ? 'is-hide' : '']
|
|
4544
|
-
},
|
|
4545
|
-
[this.$slots.append]
|
|
4546
|
-
) : '']
|
|
4547
|
-
);
|
|
4548
|
-
var panels = h(
|
|
4549
|
-
'div',
|
|
4550
|
-
{ 'class': 'es-tabs__content' },
|
|
4551
|
-
[this.$slots.default]
|
|
4552
|
-
);
|
|
4553
|
-
|
|
4554
|
-
return h(
|
|
4555
|
-
'div',
|
|
4556
|
-
{ 'class': this.tabsClasses },
|
|
4557
|
-
[tabPosition !== 'bottom' ? [header, panels] : [panels, header]]
|
|
4558
|
-
);
|
|
4559
|
-
},
|
|
4560
|
-
created: function created() {
|
|
4561
|
-
var _this4 = this;
|
|
4562
|
-
|
|
4563
|
-
// 只在没有设置currentName且有面板时才设置默认值
|
|
4564
|
-
if (this.currentName === null) {
|
|
4565
|
-
this.$nextTick(function () {
|
|
4566
|
-
if (_this4.panes.length > 0 && !_this4.currentName) {
|
|
4567
|
-
_this4.setCurrentName(_this4.panes[0].name || '0');
|
|
4568
|
-
}
|
|
4569
|
-
});
|
|
4570
|
-
}
|
|
4571
|
-
|
|
4572
|
-
this.$on('tab-nav-update', this.calcPaneInstances.bind(null, true));
|
|
4573
|
-
},
|
|
4574
|
-
mounted: function mounted() {
|
|
4575
|
-
this.calcPaneInstances();
|
|
4576
|
-
},
|
|
4577
|
-
updated: function updated() {
|
|
4578
|
-
this.calcPaneInstances();
|
|
4579
|
-
}
|
|
4580
|
-
});
|
|
4581
|
-
// CONCATENATED MODULE: ./packages/tabs/src/tabs.vue?vue&type=script&lang=js&
|
|
4582
|
-
/* harmony default export */ var src_tabsvue_type_script_lang_js_ = (tabsvue_type_script_lang_js_);
|
|
4583
|
-
// CONCATENATED MODULE: ./packages/tabs/src/tabs.vue
|
|
4584
|
-
var tabs_render, tabs_staticRenderFns
|
|
4585
|
-
|
|
4586
|
-
|
|
4587
|
-
|
|
4588
|
-
|
|
4589
|
-
/* normalize component */
|
|
4590
|
-
|
|
4591
|
-
var tabs_component = Object(componentNormalizer["a" /* default */])(
|
|
4592
|
-
src_tabsvue_type_script_lang_js_,
|
|
4593
|
-
tabs_render,
|
|
4594
|
-
tabs_staticRenderFns,
|
|
4595
|
-
false,
|
|
4596
|
-
null,
|
|
4597
|
-
null,
|
|
4598
|
-
null
|
|
4599
|
-
|
|
4600
|
-
)
|
|
4601
|
-
|
|
4602
|
-
/* harmony default export */ var tabs = (tabs_component.exports);
|
|
4603
|
-
// CONCATENATED MODULE: ./packages/tabs/index.js
|
|
4604
|
-
|
|
4605
|
-
|
|
4606
|
-
/* istanbul ignore next */
|
|
4607
|
-
tabs.install = function (Vue) {
|
|
4608
|
-
Vue.component(tabs.name, tabs);
|
|
4609
|
-
};
|
|
4610
|
-
|
|
4611
|
-
/* harmony default export */ var packages_tabs = __webpack_exports__["default"] = (tabs);
|
|
4612
|
-
|
|
4613
|
-
/***/ }),
|
|
4614
|
-
|
|
4615
|
-
/***/ 17:
|
|
4616
|
-
/***/ (function(module, exports) {
|
|
4617
|
-
|
|
4618
|
-
module.exports = require("lodash/cloneDeep");
|
|
4619
|
-
|
|
4620
|
-
/***/ }),
|
|
4621
|
-
|
|
4622
|
-
/***/ 2:
|
|
4623
|
-
/***/ (function(module, exports) {
|
|
4624
|
-
|
|
4625
|
-
module.exports = require("vue");
|
|
4626
|
-
|
|
4627
|
-
/***/ }),
|
|
4628
|
-
|
|
4629
|
-
/***/ 3:
|
|
4630
|
-
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
4631
|
-
|
|
4632
|
-
"use strict";
|
|
4633
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return isString; });
|
|
4634
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return isObject; });
|
|
4635
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return isHtmlElement; });
|
|
4636
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return isFunction; });
|
|
4637
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return isUndefined; });
|
|
4638
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return isDefined; });
|
|
4639
|
-
/**
|
|
4640
|
-
* 检查一个值是否为字符串类型
|
|
4641
|
-
* @param {*} obj 要检查的值
|
|
4642
|
-
* @returns {boolean} 如果值为字符串则返回true,否则返回false
|
|
4643
|
-
*/
|
|
4644
|
-
function isString(obj) {
|
|
4645
|
-
return Object.prototype.toString.call(obj) === '[object String]';
|
|
4646
|
-
}
|
|
4647
|
-
|
|
4648
|
-
/**
|
|
4649
|
-
* 检查一个值是否为对象类型
|
|
4650
|
-
* @param {*} obj 要检查的值
|
|
4651
|
-
* @returns {boolean} 如果值为对象则返回true,否则返回false
|
|
4652
|
-
*/
|
|
4653
|
-
function isObject(obj) {
|
|
4654
|
-
return Object.prototype.toString.call(obj) === '[object Object]';
|
|
4655
|
-
}
|
|
4656
|
-
|
|
4657
|
-
/**
|
|
4658
|
-
* 检查一个节点是否为HTML元素
|
|
4659
|
-
* @param {Node} node 要检查的节点
|
|
4660
|
-
* @returns {boolean} 如果节点为HTML元素则返回true,否则返回false
|
|
4661
|
-
*/
|
|
4662
|
-
function isHtmlElement(node) {
|
|
4663
|
-
return node && node.nodeType === Node.ELEMENT_NODE;
|
|
4664
|
-
}
|
|
4665
|
-
|
|
4666
|
-
/**
|
|
4667
|
-
* 检查一个值是否为函数类型
|
|
4668
|
-
* @param {*} functionToCheck 要检查的值
|
|
4669
|
-
* @returns {boolean} 如果值为函数则返回true,否则返回false
|
|
4670
|
-
*/
|
|
4671
|
-
function isFunction(functionToCheck) {
|
|
4672
|
-
var getType = {};
|
|
4673
|
-
return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
|
|
4674
|
-
}
|
|
4675
|
-
|
|
4676
|
-
/**
|
|
4677
|
-
* 检查一个值是否为undefined
|
|
4678
|
-
* @param {*} val 要检查的值
|
|
4679
|
-
* @returns {boolean} 如果值为undefined则返回true,否则返回false
|
|
4680
|
-
*/
|
|
4681
|
-
function isUndefined(val) {
|
|
4682
|
-
return val === void 0;
|
|
4683
|
-
}
|
|
4684
|
-
|
|
4685
|
-
/**
|
|
4686
|
-
* 检查一个值是否已定义(不是undefined或null)
|
|
4687
|
-
* @param {*} val 要检查的值
|
|
4688
|
-
* @returns {boolean} 如果值已定义则返回true,否则返回false
|
|
4689
|
-
*/
|
|
4690
|
-
function isDefined(val) {
|
|
4691
|
-
return val !== undefined && val !== null;
|
|
4692
|
-
}
|
|
4693
|
-
|
|
4694
|
-
/***/ }),
|
|
4695
|
-
|
|
4696
|
-
/***/ 31:
|
|
4697
|
-
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
4698
|
-
|
|
4699
|
-
"use strict";
|
|
4700
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return addResizeListener; });
|
|
4701
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return removeResizeListener; });
|
|
4702
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
4703
|
-
|
|
4704
|
-
// 注意:此文件完全重写以解决 ResizeObserver 循环错误
|
|
4705
|
-
|
|
4706
|
-
var isServer = typeof window === 'undefined';
|
|
4707
|
-
|
|
4708
|
-
// 使用 WeakMap 存储:
|
|
4709
|
-
// 1. 每个元素的监听器列表
|
|
4710
|
-
// 2. 每个元素的最后处理时间
|
|
4711
|
-
// 3. 每个元素的动画帧ID(用于requestAnimationFrame)
|
|
4712
|
-
var listenersMap = new WeakMap();
|
|
4713
|
-
var lastProcessedMap = new WeakMap();
|
|
4714
|
-
var animationFrameMap = new WeakMap();
|
|
4715
|
-
var PROCESSING_DELAY = 100; // 增加处理延迟到100ms
|
|
4716
|
-
|
|
4717
|
-
// 更安全的resize处理器,使用requestAnimationFrame和严格的频率控制
|
|
4718
|
-
function safeResizeHandler(element) {
|
|
4719
|
-
var now = Date.now();
|
|
4720
|
-
var lastTime = lastProcessedMap.get(element) || 0;
|
|
4721
|
-
var listeners = listenersMap.get(element) || [];
|
|
4722
|
-
|
|
4723
|
-
// 如果距离上次处理不足 PROCESSING_DELAY 毫秒,则跳过
|
|
4724
|
-
if (now - lastTime < PROCESSING_DELAY) {
|
|
4725
|
-
return;
|
|
4726
|
-
}
|
|
4727
|
-
|
|
4728
|
-
// 取消任何待处理的动画帧
|
|
4729
|
-
var existingFrameId = animationFrameMap.get(element);
|
|
4730
|
-
if (existingFrameId) {
|
|
4731
|
-
cancelAnimationFrame(existingFrameId);
|
|
4732
|
-
}
|
|
4733
|
-
|
|
4734
|
-
// 使用requestAnimationFrame来处理大小变化,这样可以防止循环
|
|
4735
|
-
var frameId = requestAnimationFrame(function () {
|
|
4736
|
-
// 再次检查时间,确保在动画帧执行时不会太频繁
|
|
4737
|
-
var frameNow = Date.now();
|
|
4738
|
-
if (frameNow - lastTime < PROCESSING_DELAY) {
|
|
4739
|
-
animationFrameMap.delete(element);
|
|
4740
|
-
return;
|
|
4741
|
-
}
|
|
4742
|
-
|
|
4743
|
-
lastProcessedMap.set(element, frameNow);
|
|
4744
|
-
|
|
4745
|
-
if (listeners.length) {
|
|
4746
|
-
// 创建监听器副本以防止在迭代过程中修改
|
|
4747
|
-
var listenersCopy = [].concat(listeners);
|
|
4748
|
-
listenersCopy.forEach(function (listener) {
|
|
4749
|
-
try {
|
|
4750
|
-
// 使用setTimeout来彻底分离调用栈
|
|
4751
|
-
setTimeout(function () {
|
|
4752
|
-
try {
|
|
4753
|
-
listener();
|
|
4754
|
-
} catch (e) {
|
|
4755
|
-
console.error('Resize listener error:', e);
|
|
4756
|
-
}
|
|
4757
|
-
}, 0);
|
|
4758
|
-
} catch (e) {
|
|
4759
|
-
console.error('Resize handler error:', e);
|
|
4760
|
-
}
|
|
4761
|
-
});
|
|
4762
|
-
}
|
|
4763
|
-
|
|
4764
|
-
animationFrameMap.delete(element);
|
|
4765
|
-
});
|
|
4766
|
-
|
|
4767
|
-
animationFrameMap.set(element, frameId);
|
|
4768
|
-
}
|
|
4769
|
-
|
|
4770
|
-
// 模拟ResizeObserver的自定义实现,不使用resize-observer-polyfill
|
|
4771
|
-
|
|
4772
|
-
var CustomResizeObserver = function () {
|
|
4773
|
-
function CustomResizeObserver(callback) {
|
|
4774
|
-
_classCallCheck(this, CustomResizeObserver);
|
|
4775
|
-
|
|
4776
|
-
this.callback = callback;
|
|
4777
|
-
this.elements = new Set();
|
|
4778
|
-
this.throttleTimer = null;
|
|
4779
|
-
}
|
|
4780
|
-
|
|
4781
|
-
CustomResizeObserver.prototype.observe = function observe(element) {
|
|
4782
|
-
var _this = this;
|
|
4783
|
-
|
|
4784
|
-
if (!element || !element.nodeType) return;
|
|
4785
|
-
|
|
4786
|
-
this.elements.add(element);
|
|
4787
|
-
|
|
4788
|
-
// 使用ResizeObserver的降级实现,结合setTimeout
|
|
4789
|
-
var checkSize = function checkSize() {
|
|
4790
|
-
var rect = element.getBoundingClientRect();
|
|
4791
|
-
var currentSize = { width: rect.width, height: rect.height };
|
|
4792
|
-
var lastSize = element.__lastSize || currentSize;
|
|
4793
|
-
|
|
4794
|
-
// 检查尺寸是否真的改变了
|
|
4795
|
-
if (Math.abs(currentSize.width - lastSize.width) > 1 || Math.abs(currentSize.height - lastSize.height) > 1) {
|
|
4796
|
-
element.__lastSize = currentSize;
|
|
4797
|
-
|
|
4798
|
-
// 调用原始回调,但在更安全的上下文中
|
|
4799
|
-
safeResizeHandler(element);
|
|
4800
|
-
}
|
|
4801
|
-
|
|
4802
|
-
// 继续下一次检查,但增加延迟
|
|
4803
|
-
_this.throttleTimer = setTimeout(checkSize, 100);
|
|
4804
|
-
};
|
|
4805
|
-
|
|
4806
|
-
// 开始检查
|
|
4807
|
-
checkSize();
|
|
4808
|
-
|
|
4809
|
-
// 存储timer引用以便disconnect时清除
|
|
4810
|
-
element.__resizeTimer = this.throttleTimer;
|
|
4811
|
-
};
|
|
4812
|
-
|
|
4813
|
-
CustomResizeObserver.prototype.disconnect = function disconnect() {
|
|
4814
|
-
// 清除所有定时器
|
|
4815
|
-
this.elements.forEach(function (element) {
|
|
4816
|
-
if (element.__resizeTimer) {
|
|
4817
|
-
clearTimeout(element.__resizeTimer);
|
|
4818
|
-
delete element.__resizeTimer;
|
|
4819
|
-
}
|
|
4820
|
-
});
|
|
4821
|
-
|
|
4822
|
-
if (this.throttleTimer) {
|
|
4823
|
-
clearTimeout(this.throttleTimer);
|
|
4824
|
-
this.throttleTimer = null;
|
|
4825
|
-
}
|
|
4826
|
-
|
|
4827
|
-
this.elements.clear();
|
|
4828
|
-
};
|
|
4829
|
-
|
|
4830
|
-
return CustomResizeObserver;
|
|
4831
|
-
}();
|
|
4832
|
-
|
|
4833
|
-
/* istanbul ignore next */
|
|
4834
|
-
|
|
4835
|
-
|
|
4836
|
-
var addResizeListener = function addResizeListener(element, fn) {
|
|
4837
|
-
if (isServer) return;
|
|
4838
|
-
|
|
4839
|
-
// 初始化元素的监听器列表
|
|
4840
|
-
if (!listenersMap.has(element)) {
|
|
4841
|
-
listenersMap.set(element, []);
|
|
4842
|
-
|
|
4843
|
-
// 使用我们的自定义ResizeObserver,而不是官方的polyfill
|
|
4844
|
-
try {
|
|
4845
|
-
var observer = new CustomResizeObserver(function () {
|
|
4846
|
-
safeResizeHandler(element);
|
|
4847
|
-
});
|
|
4848
|
-
observer.observe(element);
|
|
4849
|
-
element.__customResizeObserver = observer;
|
|
4850
|
-
} catch (e) {
|
|
4851
|
-
console.error('Failed to create CustomResizeObserver:', e);
|
|
4852
|
-
}
|
|
4853
|
-
}
|
|
4854
|
-
|
|
4855
|
-
var listeners = listenersMap.get(element);
|
|
4856
|
-
if (!listeners.includes(fn)) {
|
|
4857
|
-
listeners.push(fn);
|
|
4858
|
-
}
|
|
4859
|
-
};
|
|
4860
|
-
|
|
4861
|
-
/* istanbul ignore next */
|
|
4862
|
-
var removeResizeListener = function removeResizeListener(element, fn) {
|
|
4863
|
-
if (!element || !listenersMap.has(element)) return;
|
|
4864
|
-
|
|
4865
|
-
var listeners = listenersMap.get(element);
|
|
4866
|
-
var index = listeners.indexOf(fn);
|
|
4867
|
-
|
|
4868
|
-
if (index !== -1) {
|
|
4869
|
-
listeners.splice(index, 1);
|
|
4870
|
-
|
|
4871
|
-
// 如果没有监听器了,清理资源
|
|
4872
|
-
if (listeners.length === 0) {
|
|
4873
|
-
// 清除自定义ResizeObserver
|
|
4874
|
-
if (element.__customResizeObserver) {
|
|
4875
|
-
element.__customResizeObserver.disconnect();
|
|
4876
|
-
delete element.__customResizeObserver;
|
|
4877
|
-
}
|
|
4878
|
-
|
|
4879
|
-
// 清除存储的数据
|
|
4880
|
-
listenersMap.delete(element);
|
|
4881
|
-
lastProcessedMap.delete(element);
|
|
4882
|
-
|
|
4883
|
-
// 清除任何待处理的动画帧
|
|
4884
|
-
var frameId = animationFrameMap.get(element);
|
|
4885
|
-
if (frameId) {
|
|
4886
|
-
cancelAnimationFrame(frameId);
|
|
4887
|
-
animationFrameMap.delete(element);
|
|
4888
|
-
}
|
|
4889
|
-
}
|
|
4890
|
-
}
|
|
4891
|
-
};
|
|
4892
|
-
|
|
4893
|
-
/***/ }),
|
|
4894
|
-
|
|
4895
|
-
/***/ 5:
|
|
4896
|
-
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
4897
|
-
|
|
4898
|
-
"use strict";
|
|
4899
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return normalizeComponent; });
|
|
4900
|
-
/* globals __VUE_SSR_CONTEXT__ */
|
|
4901
|
-
|
|
4902
|
-
// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
|
|
4903
|
-
// This module is a runtime utility for cleaner component module output and will
|
|
4904
|
-
// be included in the final webpack user bundle.
|
|
4905
|
-
|
|
4906
|
-
function normalizeComponent(
|
|
4907
|
-
scriptExports,
|
|
4908
|
-
render,
|
|
4909
|
-
staticRenderFns,
|
|
4910
|
-
functionalTemplate,
|
|
4911
|
-
injectStyles,
|
|
4912
|
-
scopeId,
|
|
4913
|
-
moduleIdentifier /* server only */,
|
|
4914
|
-
shadowMode /* vue-cli only */
|
|
4915
|
-
) {
|
|
4916
|
-
// Vue.extend constructor export interop
|
|
4917
|
-
var options =
|
|
4918
|
-
typeof scriptExports === 'function' ? scriptExports.options : scriptExports
|
|
4919
|
-
|
|
4920
|
-
// render functions
|
|
4921
|
-
if (render) {
|
|
4922
|
-
options.render = render
|
|
4923
|
-
options.staticRenderFns = staticRenderFns
|
|
4924
|
-
options._compiled = true
|
|
4925
|
-
}
|
|
4926
|
-
|
|
4927
|
-
// functional template
|
|
4928
|
-
if (functionalTemplate) {
|
|
4929
|
-
options.functional = true
|
|
4930
|
-
}
|
|
4931
|
-
|
|
4932
|
-
// scopedId
|
|
4933
|
-
if (scopeId) {
|
|
4934
|
-
options._scopeId = 'data-v-' + scopeId
|
|
4935
|
-
}
|
|
4936
|
-
|
|
4937
|
-
var hook
|
|
4938
|
-
if (moduleIdentifier) {
|
|
4939
|
-
// server build
|
|
4940
|
-
hook = function (context) {
|
|
4941
|
-
// 2.3 injection
|
|
4942
|
-
context =
|
|
4943
|
-
context || // cached call
|
|
4944
|
-
(this.$vnode && this.$vnode.ssrContext) || // stateful
|
|
4945
|
-
(this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
|
|
4946
|
-
// 2.2 with runInNewContext: true
|
|
4947
|
-
if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
|
|
4948
|
-
context = __VUE_SSR_CONTEXT__
|
|
4949
|
-
}
|
|
4950
|
-
// inject component styles
|
|
4951
|
-
if (injectStyles) {
|
|
4952
|
-
injectStyles.call(this, context)
|
|
4953
|
-
}
|
|
4954
|
-
// register component module identifier for async chunk inferrence
|
|
4955
|
-
if (context && context._registeredComponents) {
|
|
4956
|
-
context._registeredComponents.add(moduleIdentifier)
|
|
4957
|
-
}
|
|
4958
|
-
}
|
|
4959
|
-
// used by ssr in case component is cached and beforeCreate
|
|
4960
|
-
// never gets called
|
|
4961
|
-
options._ssrRegister = hook
|
|
4962
|
-
} else if (injectStyles) {
|
|
4963
|
-
hook = shadowMode
|
|
4964
|
-
? function () {
|
|
4965
|
-
injectStyles.call(
|
|
4966
|
-
this,
|
|
4967
|
-
(options.functional ? this.parent : this).$root.$options.shadowRoot
|
|
4968
|
-
)
|
|
4969
|
-
}
|
|
4970
|
-
: injectStyles
|
|
4971
|
-
}
|
|
4972
|
-
|
|
4973
|
-
if (hook) {
|
|
4974
|
-
if (options.functional) {
|
|
4975
|
-
// for template-only hot-reload because in that case the render fn doesn't
|
|
4976
|
-
// go through the normalizer
|
|
4977
|
-
options._injectStyles = hook
|
|
4978
|
-
// register for functional component in vue file
|
|
4979
|
-
var originalRender = options.render
|
|
4980
|
-
options.render = function renderWithStyleInjection(h, context) {
|
|
4981
|
-
hook.call(context)
|
|
4982
|
-
return originalRender(h, context)
|
|
4983
|
-
}
|
|
4984
|
-
} else {
|
|
4985
|
-
// inject component registration as beforeCreate hook
|
|
4986
|
-
var existing = options.beforeCreate
|
|
4987
|
-
options.beforeCreate = existing ? [].concat(existing, hook) : [hook]
|
|
4988
|
-
}
|
|
4989
|
-
}
|
|
4990
|
-
|
|
4991
|
-
return {
|
|
4992
|
-
exports: scriptExports,
|
|
4993
|
-
options: options
|
|
4994
|
-
}
|
|
4995
|
-
}
|
|
4996
|
-
|
|
4997
|
-
|
|
4998
|
-
/***/ }),
|
|
4999
|
-
|
|
5000
|
-
/***/ 6:
|
|
5001
|
-
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
5002
|
-
|
|
5003
3013
|
"use strict";
|
|
5004
3014
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return fecha; });
|
|
5005
3015
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return getSettings; });
|
|
@@ -5771,219 +3781,2303 @@ const calculateNetworkDays = function (start_date, end_date, holidays = []) {
|
|
|
5771
3781
|
};
|
|
5772
3782
|
|
|
5773
3783
|
/**
|
|
5774
|
-
* 日期加减天数
|
|
5775
|
-
* @param {string} start_date - 起始日期字符串,格式为 "YYYY-MM-DD"
|
|
5776
|
-
* @param {number} days - 要加上或减去的天数,正数表示加,负数表示减
|
|
5777
|
-
* @returns {string} 结果日期,格式为 "YYYY-MM-DD"
|
|
3784
|
+
* 日期加减天数
|
|
3785
|
+
* @param {string} start_date - 起始日期字符串,格式为 "YYYY-MM-DD"
|
|
3786
|
+
* @param {number} days - 要加上或减去的天数,正数表示加,负数表示减
|
|
3787
|
+
* @returns {string} 结果日期,格式为 "YYYY-MM-DD"
|
|
3788
|
+
*/
|
|
3789
|
+
const dateAddDays = function (start_date, days) {
|
|
3790
|
+
if (typeof start_date !== 'string' || !Number.isInteger(days)) {
|
|
3791
|
+
throw new Error(
|
|
3792
|
+
"Invalid input. Please provide a valid date string in the format 'YYYY-MM-DD' and a valid integer for the number of days."
|
|
3793
|
+
);
|
|
3794
|
+
}
|
|
3795
|
+
|
|
3796
|
+
const startDateObj = new Date(start_date);
|
|
3797
|
+
if (isNaN(startDateObj.getTime())) {
|
|
3798
|
+
throw new Error(
|
|
3799
|
+
"Invalid date format. Please provide a valid date string in the format 'YYYY-MM-DD'."
|
|
3800
|
+
);
|
|
3801
|
+
}
|
|
3802
|
+
|
|
3803
|
+
const resultDateObj = new Date(startDateObj);
|
|
3804
|
+
resultDateObj.setDate(resultDateObj.getDate() + days);
|
|
3805
|
+
|
|
3806
|
+
const resultYear = resultDateObj.getFullYear();
|
|
3807
|
+
const resultMonth = String(resultDateObj.getMonth() + 1).padStart(2, '0');
|
|
3808
|
+
const resultDay = String(resultDateObj.getDate()).padStart(2, '0');
|
|
3809
|
+
|
|
3810
|
+
return `${resultYear}-${resultMonth}-${resultDay}`;
|
|
3811
|
+
};
|
|
3812
|
+
|
|
3813
|
+
/**
|
|
3814
|
+
* 计算两个日期之间的差值
|
|
3815
|
+
* @date 2023年12月14日
|
|
3816
|
+
* @param {String} start_date - 起始日期字符串
|
|
3817
|
+
* @param {String} end_date - 结束日期字符串
|
|
3818
|
+
* @param {String} unit - 单位:year/month/day
|
|
3819
|
+
* @returns {Number} 差值
|
|
3820
|
+
*/
|
|
3821
|
+
const dateDiff = function (start_date, end_date, unit = 'day') {
|
|
3822
|
+
// Assuming date strings are in "YYYY-MM-DD" format
|
|
3823
|
+
var startDate = new Date(start_date);
|
|
3824
|
+
var endDate = new Date(end_date);
|
|
3825
|
+
|
|
3826
|
+
// If the date is invalid, return 0
|
|
3827
|
+
if (isNaN(startDate.getTime()) || isNaN(endDate.getTime())) {
|
|
3828
|
+
return 0;
|
|
3829
|
+
}
|
|
3830
|
+
|
|
3831
|
+
if (unit === 'year') {
|
|
3832
|
+
return endDate.getFullYear() - startDate.getFullYear();
|
|
3833
|
+
} else if (unit === 'month') {
|
|
3834
|
+
return (
|
|
3835
|
+
(endDate.getFullYear() - startDate.getFullYear()) * 12 +
|
|
3836
|
+
(endDate.getMonth() - startDate.getMonth())
|
|
3837
|
+
);
|
|
3838
|
+
} else {
|
|
3839
|
+
// Default to day
|
|
3840
|
+
var timeDifference = endDate - startDate;
|
|
3841
|
+
// Calculate days (86400000 milliseconds per day)
|
|
3842
|
+
return Math.floor(timeDifference / 86400000);
|
|
3843
|
+
}
|
|
3844
|
+
};
|
|
3845
|
+
|
|
3846
|
+
/**
|
|
3847
|
+
* 获取月份中的日期
|
|
3848
|
+
* @param {string} date - 日期字符串,格式为 "YYYY-MM-DD"
|
|
3849
|
+
* @returns {number} 月份中的日期(1-31)
|
|
3850
|
+
*/
|
|
3851
|
+
const dayOfMonth = function (date) {
|
|
3852
|
+
if (typeof date !== 'string') {
|
|
3853
|
+
throw new Error(
|
|
3854
|
+
"Invalid input. Please provide a valid date string in the format 'YYYY-MM-DD'."
|
|
3855
|
+
);
|
|
3856
|
+
}
|
|
3857
|
+
|
|
3858
|
+
const dateObj = new Date(date);
|
|
3859
|
+
if (isNaN(dateObj.getTime())) {
|
|
3860
|
+
throw new Error(
|
|
3861
|
+
"Invalid date format. Please provide a valid date string in the format 'YYYY-MM-DD'."
|
|
3862
|
+
);
|
|
3863
|
+
}
|
|
3864
|
+
|
|
3865
|
+
return dateObj.getDate();
|
|
3866
|
+
};
|
|
3867
|
+
|
|
3868
|
+
/**
|
|
3869
|
+
* 获取当前日期
|
|
3870
|
+
* @date 2022年5月7日
|
|
3871
|
+
* @param {string} format - 日期格式,默认为'YYYY-MM-DD'
|
|
3872
|
+
* @returns {string} 当前日期的格式化字符串
|
|
3873
|
+
*/
|
|
3874
|
+
const getCurrentDate = function (format = 'YYYY-MM-DD') {
|
|
3875
|
+
return formatDate(new Date(), format);
|
|
3876
|
+
};
|
|
3877
|
+
|
|
3878
|
+
/**
|
|
3879
|
+
* 获取当前日期时间
|
|
3880
|
+
* @date 2022年5月7日
|
|
3881
|
+
* @param {string} format - 日期时间格式,默认为'YYYY-MM-DD HH:mm:ss'
|
|
3882
|
+
* @returns {string} 当前日期时间的格式化字符串
|
|
3883
|
+
*/
|
|
3884
|
+
const getCurrentDateTime = function (format = 'YYYY-MM-DD HH:mm:ss') {
|
|
3885
|
+
return formatDate(new Date(), format);
|
|
3886
|
+
};
|
|
3887
|
+
|
|
3888
|
+
/**
|
|
3889
|
+
* 获取小时
|
|
3890
|
+
* @date 2022年5月7日
|
|
3891
|
+
* @param {Date|string} [date] - 日期对象或日期字符串
|
|
3892
|
+
* @returns {number} 小时数(0-23)
|
|
3893
|
+
*/
|
|
3894
|
+
const getHour = function (date) {
|
|
3895
|
+
if (!date) {
|
|
3896
|
+
return new Date().getHours();
|
|
3897
|
+
}
|
|
3898
|
+
if (typeof date === 'string') {
|
|
3899
|
+
date = new Date(date);
|
|
3900
|
+
}
|
|
3901
|
+
return date.getHours();
|
|
3902
|
+
};
|
|
3903
|
+
|
|
3904
|
+
/**
|
|
3905
|
+
* 获取分钟
|
|
3906
|
+
* @date 2022年5月7日
|
|
3907
|
+
* @param {Date|string} [date] - 日期对象或日期字符串
|
|
3908
|
+
* @returns {number} 分钟数(0-59)
|
|
3909
|
+
*/
|
|
3910
|
+
const getMinute = function (date) {
|
|
3911
|
+
if (!date) {
|
|
3912
|
+
return new Date().getMinutes();
|
|
3913
|
+
}
|
|
3914
|
+
if (typeof date === 'string') {
|
|
3915
|
+
date = new Date(date);
|
|
3916
|
+
}
|
|
3917
|
+
return date.getMinutes();
|
|
3918
|
+
};
|
|
3919
|
+
|
|
3920
|
+
/**
|
|
3921
|
+
* 获取月份
|
|
3922
|
+
* @date 2022年5月7日
|
|
3923
|
+
* @param {Date|string} [date] - 日期对象或日期字符串
|
|
3924
|
+
* @returns {number} 月份数(1-12)
|
|
3925
|
+
*/
|
|
3926
|
+
const getMonth = function (date) {
|
|
3927
|
+
if (!date) {
|
|
3928
|
+
return new Date().getMonth() + 1;
|
|
3929
|
+
}
|
|
3930
|
+
if (typeof date === 'string') {
|
|
3931
|
+
date = new Date(date);
|
|
3932
|
+
}
|
|
3933
|
+
return date.getMonth() + 1;
|
|
3934
|
+
};
|
|
3935
|
+
|
|
3936
|
+
/**
|
|
3937
|
+
* 获取秒
|
|
3938
|
+
* @date 2022年5月7日
|
|
3939
|
+
* @param {Date|string} [date] - 日期对象或日期字符串
|
|
3940
|
+
* @returns {number} 秒数(0-59)
|
|
5778
3941
|
*/
|
|
5779
|
-
const
|
|
5780
|
-
if (
|
|
5781
|
-
|
|
5782
|
-
"Invalid input. Please provide a valid date string in the format 'YYYY-MM-DD' and a valid integer for the number of days."
|
|
5783
|
-
);
|
|
3942
|
+
const getSecond = function (date) {
|
|
3943
|
+
if (!date) {
|
|
3944
|
+
return new Date().getSeconds();
|
|
5784
3945
|
}
|
|
5785
|
-
|
|
5786
|
-
|
|
5787
|
-
if (isNaN(startDateObj.getTime())) {
|
|
5788
|
-
throw new Error(
|
|
5789
|
-
"Invalid date format. Please provide a valid date string in the format 'YYYY-MM-DD'."
|
|
5790
|
-
);
|
|
3946
|
+
if (typeof date === 'string') {
|
|
3947
|
+
date = new Date(date);
|
|
5791
3948
|
}
|
|
5792
|
-
|
|
5793
|
-
const resultDateObj = new Date(startDateObj);
|
|
5794
|
-
resultDateObj.setDate(resultDateObj.getDate() + days);
|
|
5795
|
-
|
|
5796
|
-
const resultYear = resultDateObj.getFullYear();
|
|
5797
|
-
const resultMonth = String(resultDateObj.getMonth() + 1).padStart(2, '0');
|
|
5798
|
-
const resultDay = String(resultDateObj.getDate()).padStart(2, '0');
|
|
5799
|
-
|
|
5800
|
-
return `${resultYear}-${resultMonth}-${resultDay}`;
|
|
3949
|
+
return date.getSeconds();
|
|
5801
3950
|
};
|
|
5802
3951
|
|
|
5803
3952
|
/**
|
|
5804
|
-
*
|
|
5805
|
-
* @date
|
|
5806
|
-
* @param {
|
|
5807
|
-
* @
|
|
5808
|
-
* @param {String} unit - 单位:year/month/day
|
|
5809
|
-
* @returns {Number} 差值
|
|
3953
|
+
* 获取星期几
|
|
3954
|
+
* @date 2022年5月7日
|
|
3955
|
+
* @param {Date|string} [date] - 日期对象或日期字符串
|
|
3956
|
+
* @returns {number} 星期几(0-6,0表示星期日)
|
|
5810
3957
|
*/
|
|
5811
|
-
const
|
|
5812
|
-
|
|
5813
|
-
|
|
5814
|
-
var endDate = new Date(end_date);
|
|
5815
|
-
|
|
5816
|
-
// If the date is invalid, return 0
|
|
5817
|
-
if (isNaN(startDate.getTime()) || isNaN(endDate.getTime())) {
|
|
5818
|
-
return 0;
|
|
3958
|
+
const getWeekday = function (date) {
|
|
3959
|
+
if (!date) {
|
|
3960
|
+
return new Date().getDay();
|
|
5819
3961
|
}
|
|
5820
|
-
|
|
5821
|
-
|
|
5822
|
-
return endDate.getFullYear() - startDate.getFullYear();
|
|
5823
|
-
} else if (unit === 'month') {
|
|
5824
|
-
return (
|
|
5825
|
-
(endDate.getFullYear() - startDate.getFullYear()) * 12 +
|
|
5826
|
-
(endDate.getMonth() - startDate.getMonth())
|
|
5827
|
-
);
|
|
5828
|
-
} else {
|
|
5829
|
-
// Default to day
|
|
5830
|
-
var timeDifference = endDate - startDate;
|
|
5831
|
-
// Calculate days (86400000 milliseconds per day)
|
|
5832
|
-
return Math.floor(timeDifference / 86400000);
|
|
3962
|
+
if (typeof date === 'string') {
|
|
3963
|
+
date = new Date(date);
|
|
5833
3964
|
}
|
|
3965
|
+
return date.getDay();
|
|
5834
3966
|
};
|
|
5835
3967
|
|
|
3968
|
+
|
|
3969
|
+
/**
|
|
3970
|
+
* @desc 获取上午/下午/晚上
|
|
3971
|
+
* @author huangbo
|
|
3972
|
+
* @date 2022年5月7日
|
|
3973
|
+
* @param {String} [time] - 时间
|
|
3974
|
+
**/
|
|
3975
|
+
const timeCycle = function (time) {
|
|
3976
|
+
let hour = 0;
|
|
3977
|
+
if (!time) {
|
|
3978
|
+
hour = new Date().getHours();
|
|
3979
|
+
} else if (typeof time === 'string') {
|
|
3980
|
+
// 从时间字符串中提取小时
|
|
3981
|
+
const match = time.match(/^(\d{1,2})/);
|
|
3982
|
+
if (match) {
|
|
3983
|
+
hour = parseInt(match[1], 10);
|
|
3984
|
+
}
|
|
3985
|
+
} else if (typeof time === 'number') {
|
|
3986
|
+
hour = time;
|
|
3987
|
+
}
|
|
3988
|
+
// 判断时间段
|
|
3989
|
+
if (hour >= 5 && hour < 12) {
|
|
3990
|
+
return '上午';
|
|
3991
|
+
} else if (hour >= 12 && hour < 18) {
|
|
3992
|
+
return '下午';
|
|
3993
|
+
} else {
|
|
3994
|
+
return '晚上';
|
|
3995
|
+
}
|
|
3996
|
+
};
|
|
3997
|
+
|
|
3998
|
+
/***/ }),
|
|
3999
|
+
|
|
4000
|
+
/***/ 13:
|
|
4001
|
+
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
4002
|
+
|
|
4003
|
+
"use strict";
|
|
4004
|
+
/* unused harmony export getHue */
|
|
4005
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return getColor; });
|
|
4006
|
+
/* unused harmony export getLightness */
|
|
4007
|
+
/* unused harmony export getSaturation */
|
|
4008
|
+
/* unused harmony export rgbToHsv */
|
|
4009
|
+
/* unused harmony export hsvTorgb */
|
|
4010
|
+
/* unused harmony export mixColor */
|
|
4011
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return getRgb; });
|
|
4012
|
+
/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);
|
|
4013
|
+
|
|
4014
|
+
var $hueStep = 2;
|
|
4015
|
+
var $saturationStep1 = 0.16;
|
|
4016
|
+
var $saturationStep2 = 0.05;
|
|
4017
|
+
var $brightnessStep1 = 0.05;
|
|
4018
|
+
var $brightnessStep2 = 0.15;
|
|
4019
|
+
var $lightColorCount = 5;
|
|
4020
|
+
var $darkColorCount = 4;
|
|
4021
|
+
/**
|
|
4022
|
+
* getHue
|
|
4023
|
+
* @desc:转换色相
|
|
4024
|
+
* @author huangbo
|
|
4025
|
+
* @date 2022年5月7日
|
|
4026
|
+
**/
|
|
4027
|
+
var getHue = function getHue($h, $i, $isLight) {
|
|
4028
|
+
var $hue = void 0;
|
|
4029
|
+
if ($h >= 60 && $h <= 240) {
|
|
4030
|
+
$hue = $isLight ? $h - $hueStep * $i : $h + $hueStep * $i;
|
|
4031
|
+
} else {
|
|
4032
|
+
$hue = $isLight ? $h + $hueStep * $i : $h - $hueStep * $i;
|
|
4033
|
+
}
|
|
4034
|
+
$hue = ($hue + 360) % 360;
|
|
4035
|
+
return Math.round($hue);
|
|
4036
|
+
};
|
|
4037
|
+
|
|
4038
|
+
/**
|
|
4039
|
+
* getColor
|
|
4040
|
+
* @desc:根据颜色和对应的色板位置,计算出对应的色板颜色
|
|
4041
|
+
* @author huangbo
|
|
4042
|
+
* @date 2022年5月7日
|
|
4043
|
+
**/
|
|
4044
|
+
var getColor = function getColor($color, $n) {
|
|
4045
|
+
var $isLight = $n < 7;
|
|
4046
|
+
var $hsv = rgbToHsv($color);
|
|
4047
|
+
// 这里将i转换成以主色为中心,两侧的i值逐渐增大
|
|
4048
|
+
var $i = $isLight ? $lightColorCount + 1 - $n : $n - $lightColorCount - 1;
|
|
4049
|
+
var color = hsvTorgb(getHue($hsv[0], $i, $isLight), getSaturation($hsv[1], $i, $isLight), getLightness($hsv[2], $i, $isLight));
|
|
4050
|
+
return color;
|
|
4051
|
+
};
|
|
4052
|
+
|
|
4053
|
+
/**
|
|
4054
|
+
* getLightness
|
|
4055
|
+
* @desc:转换明度
|
|
4056
|
+
* @author huangbo
|
|
4057
|
+
* @date 2022年5月7日
|
|
4058
|
+
* @return {string,array} 元素类名或者id
|
|
4059
|
+
**/
|
|
4060
|
+
var getLightness = function getLightness($v, $i, $isLight) {
|
|
4061
|
+
var $value = $isLight ? $v + $brightnessStep1 * $i : $v - $brightnessStep2 * $i;
|
|
4062
|
+
$value = $value < 1 ? $value : 1;
|
|
4063
|
+
return Object(_util__WEBPACK_IMPORTED_MODULE_0__[/* toFixed */ "U"])($value, 2);
|
|
4064
|
+
};
|
|
4065
|
+
|
|
4066
|
+
/**
|
|
4067
|
+
* getSaturation
|
|
4068
|
+
* @desc:转换饱和度
|
|
4069
|
+
* @author huangbo
|
|
4070
|
+
* @date 2022年5月7日
|
|
4071
|
+
**/
|
|
4072
|
+
var getSaturation = function getSaturation($s, $i, $isLight) {
|
|
4073
|
+
var $saturation = void 0;
|
|
4074
|
+
if ($isLight) {
|
|
4075
|
+
$saturation = $s - $saturationStep1 * $i;
|
|
4076
|
+
} else if ($i === $darkColorCount) {
|
|
4077
|
+
$saturation = $s + $saturationStep1;
|
|
4078
|
+
} else {
|
|
4079
|
+
$saturation = $s + $saturationStep2 * $i;
|
|
4080
|
+
}
|
|
4081
|
+
$saturation = $saturation < 1 ? $saturation : 1;
|
|
4082
|
+
|
|
4083
|
+
if ($isLight && $i === $lightColorCount && $saturation > 0.1) {
|
|
4084
|
+
$saturation = 0.1;
|
|
4085
|
+
}
|
|
4086
|
+
$saturation = $saturation > 0.06 ? $saturation : 0.06;
|
|
4087
|
+
return Object(_util__WEBPACK_IMPORTED_MODULE_0__[/* toFixed */ "U"])($saturation, 2);
|
|
4088
|
+
};
|
|
4089
|
+
|
|
4090
|
+
/**
|
|
4091
|
+
* rgbToHsv
|
|
4092
|
+
* @desc:rgb转化成hsv
|
|
4093
|
+
* @author huangbo
|
|
4094
|
+
* @date 2022年5月7日
|
|
4095
|
+
* @param {string} [$color] - 颜色值
|
|
4096
|
+
**/
|
|
4097
|
+
var rgbToHsv = function rgbToHsv($color) {
|
|
4098
|
+
var rgb = getRgb($color);
|
|
4099
|
+
var $red = rgb[0];
|
|
4100
|
+
var $green = rgb[1];
|
|
4101
|
+
var $blue = rgb[2];
|
|
4102
|
+
var $max = Math.max($red, $green, $blue);
|
|
4103
|
+
var $min = Math.min($red, $green, $blue);
|
|
4104
|
+
var $diff = $max - $min;
|
|
4105
|
+
var $h = 0;
|
|
4106
|
+
if ($max === $min) {
|
|
4107
|
+
$h = 0;
|
|
4108
|
+
} else if ($max === $red) {
|
|
4109
|
+
$h = 60 * ($green - $blue) / $diff + ($green > $blue - 1 ? 0 : 360);
|
|
4110
|
+
} else if ($max === $green) {
|
|
4111
|
+
$h = 60 * ($blue - $red) / $diff + 120;
|
|
4112
|
+
} else if ($max === $blue) {
|
|
4113
|
+
$h = 60 * ($red - $green) / $diff + 240;
|
|
4114
|
+
}
|
|
4115
|
+
var $s = $max === 0 ? 0 : $diff / $max;
|
|
4116
|
+
var $v = $max / 255;
|
|
4117
|
+
return [$h, $s, $v];
|
|
4118
|
+
};
|
|
4119
|
+
|
|
4120
|
+
/**
|
|
4121
|
+
* hsvTorgb
|
|
4122
|
+
* @desc:hsv转化成rgb
|
|
4123
|
+
* @author huangbo
|
|
4124
|
+
* @date 2022年5月7日
|
|
4125
|
+
* @param {string} [$color] - 颜色值
|
|
4126
|
+
**/
|
|
4127
|
+
var hsvTorgb = function hsvTorgb($h, $s, $v) {
|
|
4128
|
+
var $th = Math.floor($h / 60);
|
|
4129
|
+
var $t1 = $h / 60 - $th;
|
|
4130
|
+
var $t2 = $v * (1 - $s);
|
|
4131
|
+
var $t3 = $v * (1 - $t1 * $s);
|
|
4132
|
+
var $t4 = $v * (1 - (1 - $t1) * $s);
|
|
4133
|
+
var $r = [$v, $t3, $t2, $t2, $t4, $v][$th % 6];
|
|
4134
|
+
var $g = [$t4, $v, $v, $t3, $t2, $t2][$th % 6];
|
|
4135
|
+
var $b = [$t2, $t2, $t4, $v, $v, $t3][$th % 6];
|
|
4136
|
+
// return `rgb(${Math.round($r * 255)}, ${Math.round($g * 255)}, ${Math.round($b * 255)})`;
|
|
4137
|
+
var red = Math.round($r * 255);
|
|
4138
|
+
var green = Math.round($g * 255);
|
|
4139
|
+
var blue = Math.round($b * 255);
|
|
4140
|
+
red = red.toString(16);
|
|
4141
|
+
green = green.toString(16);
|
|
4142
|
+
blue = blue.toString(16);
|
|
4143
|
+
red = red.length === 1 ? '0' + red : red;
|
|
4144
|
+
green = green.length === 1 ? '0' + green : green;
|
|
4145
|
+
blue = blue.length === 1 ? '0' + blue : blue;
|
|
4146
|
+
return '#' + red + green + blue;
|
|
4147
|
+
};
|
|
4148
|
+
|
|
4149
|
+
/**
|
|
4150
|
+
* mixColor
|
|
4151
|
+
* @desc:生成混合色
|
|
4152
|
+
* @author huangbo
|
|
4153
|
+
* @date 2022年5月7日
|
|
4154
|
+
* @param {string} [$color1] - 颜色值
|
|
4155
|
+
* @param {string} [$color2] - 颜色值
|
|
4156
|
+
* @param {string} [$n] - 百分比 0~1
|
|
4157
|
+
**/
|
|
4158
|
+
var mixColor = function mixColor($color1, $color2, $n) {
|
|
4159
|
+
var rgb1 = getRgb($color1);
|
|
4160
|
+
var rgb2 = getRgb($color2);
|
|
4161
|
+
var r = rgb1[0] * $n + rgb2[0] * (1 - $n);
|
|
4162
|
+
var g = rgb1[1] * $n + rgb2[1] * (1 - $n);
|
|
4163
|
+
var b = rgb1[2] * $n + rgb2[2] * (1 - $n);
|
|
4164
|
+
return '#' + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
|
|
4165
|
+
};
|
|
4166
|
+
|
|
4167
|
+
/**
|
|
4168
|
+
* getRgb
|
|
4169
|
+
* @desc:获取颜色值的rgb值
|
|
4170
|
+
* @author huangbo
|
|
4171
|
+
* @date 2022年5月7日
|
|
4172
|
+
* @param {string} [$color] - 颜色值
|
|
4173
|
+
**/
|
|
4174
|
+
var getRgb = function getRgb($color) {
|
|
4175
|
+
var rgb = [];
|
|
4176
|
+
// 16进制颜色值的正则
|
|
4177
|
+
var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
|
|
4178
|
+
// 把颜色值变成小写
|
|
4179
|
+
$color = $color.toLowerCase();
|
|
4180
|
+
if (reg.test($color)) {
|
|
4181
|
+
// 如果只有三位的值,需变成六位,如:#fff => #ffffff
|
|
4182
|
+
if ($color.length === 4) {
|
|
4183
|
+
var colorNew = '#';
|
|
4184
|
+
for (var i = 1; i < 4; i++) {
|
|
4185
|
+
colorNew += $color.slice(i, i + 1).concat($color.slice(i, i + 1));
|
|
4186
|
+
}
|
|
4187
|
+
$color = colorNew;
|
|
4188
|
+
}
|
|
4189
|
+
// 处理六位的颜色值,转为RGB
|
|
4190
|
+
for (var _i = 1; _i < 7; _i += 2) {
|
|
4191
|
+
rgb.push(parseInt('0x' + $color.slice(_i, _i + 2), 16));
|
|
4192
|
+
}
|
|
4193
|
+
} else {
|
|
4194
|
+
rgb = $color.replace(/(?:\(|\)|rgb|RGB)*/g, '').split(',');
|
|
4195
|
+
}
|
|
4196
|
+
return rgb;
|
|
4197
|
+
};
|
|
4198
|
+
|
|
4199
|
+
/***/ }),
|
|
4200
|
+
|
|
4201
|
+
/***/ 165:
|
|
4202
|
+
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
4203
|
+
|
|
4204
|
+
"use strict";
|
|
4205
|
+
// ESM COMPAT FLAG
|
|
4206
|
+
__webpack_require__.r(__webpack_exports__);
|
|
4207
|
+
|
|
4208
|
+
// EXTERNAL MODULE: external "babel-helper-vue-jsx-merge-props"
|
|
4209
|
+
var external_babel_helper_vue_jsx_merge_props_ = __webpack_require__(92);
|
|
4210
|
+
var external_babel_helper_vue_jsx_merge_props_default = /*#__PURE__*/__webpack_require__.n(external_babel_helper_vue_jsx_merge_props_);
|
|
4211
|
+
|
|
4212
|
+
// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/tabs/src/tab-bar.vue?vue&type=template&id=61310203&
|
|
4213
|
+
var tab_barvue_type_template_id_61310203_render = function () {
|
|
4214
|
+
var _vm = this
|
|
4215
|
+
var _h = _vm.$createElement
|
|
4216
|
+
var _c = _vm._self._c || _h
|
|
4217
|
+
return _c("div", {
|
|
4218
|
+
staticClass: "es-tabs__active-bar",
|
|
4219
|
+
class: "is-" + _vm.computedTabPosition,
|
|
4220
|
+
style: _vm.barStyle,
|
|
4221
|
+
})
|
|
4222
|
+
}
|
|
4223
|
+
var staticRenderFns = []
|
|
4224
|
+
tab_barvue_type_template_id_61310203_render._withStripped = true
|
|
4225
|
+
|
|
4226
|
+
|
|
4227
|
+
// CONCATENATED MODULE: ./packages/tabs/src/tab-bar.vue?vue&type=template&id=61310203&
|
|
4228
|
+
|
|
4229
|
+
// EXTERNAL MODULE: ./src/utils/util.js
|
|
4230
|
+
var util = __webpack_require__(0);
|
|
4231
|
+
|
|
4232
|
+
// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tabs/src/tab-bar.vue?vue&type=script&lang=js&
|
|
4233
|
+
//
|
|
4234
|
+
//
|
|
4235
|
+
//
|
|
4236
|
+
//
|
|
4237
|
+
//
|
|
4238
|
+
//
|
|
4239
|
+
//
|
|
4240
|
+
|
|
4241
|
+
|
|
4242
|
+
|
|
5836
4243
|
/**
|
|
5837
|
-
*
|
|
5838
|
-
*
|
|
5839
|
-
|
|
5840
|
-
*/
|
|
5841
|
-
|
|
5842
|
-
|
|
5843
|
-
|
|
5844
|
-
|
|
5845
|
-
|
|
5846
|
-
|
|
5847
|
-
|
|
5848
|
-
|
|
5849
|
-
|
|
5850
|
-
|
|
5851
|
-
|
|
5852
|
-
|
|
5853
|
-
|
|
5854
|
-
|
|
5855
|
-
|
|
5856
|
-
|
|
5857
|
-
|
|
4244
|
+
* TabBar 组件 - 标签页活动状态指示器
|
|
4245
|
+
* 负责显示当前选中标签页的下划线/指示器样式和位置
|
|
4246
|
+
*/
|
|
4247
|
+
/* harmony default export */ var tab_barvue_type_script_lang_js_ = ({
|
|
4248
|
+
name: 'TabBar',
|
|
4249
|
+
|
|
4250
|
+
props: {
|
|
4251
|
+
tabs: {
|
|
4252
|
+
type: Array,
|
|
4253
|
+
default: function _default() {
|
|
4254
|
+
return [];
|
|
4255
|
+
}
|
|
4256
|
+
}
|
|
4257
|
+
},
|
|
4258
|
+
|
|
4259
|
+
inject: {
|
|
4260
|
+
rootTabs: {
|
|
4261
|
+
default: function _default() {
|
|
4262
|
+
return {
|
|
4263
|
+
tabPosition: 'top'
|
|
4264
|
+
};
|
|
4265
|
+
}
|
|
4266
|
+
}
|
|
4267
|
+
},
|
|
4268
|
+
|
|
4269
|
+
computed: {
|
|
4270
|
+
/**
|
|
4271
|
+
* 计算活动标签栏的样式
|
|
4272
|
+
* @returns {Object} 样式对象
|
|
4273
|
+
*/
|
|
4274
|
+
barStyle: function barStyle() {
|
|
4275
|
+
try {
|
|
4276
|
+
var _ref2;
|
|
4277
|
+
|
|
4278
|
+
// 安全获取tabPosition并提供默认值
|
|
4279
|
+
var tabPosition = (this.rootTabs || {}).tabPosition || 'top';
|
|
4280
|
+
var sizeName = ['top', 'bottom'].indexOf(tabPosition) !== -1 ? 'width' : 'height';
|
|
4281
|
+
var sizeDir = sizeName === 'width' ? 'x' : 'y';
|
|
4282
|
+
|
|
4283
|
+
var _getActiveTabSizeInfo = this.getActiveTabSizeInfo(),
|
|
4284
|
+
offset = _getActiveTabSizeInfo.offset,
|
|
4285
|
+
tabSize = _getActiveTabSizeInfo.tabSize;
|
|
4286
|
+
|
|
4287
|
+
var transform = 'translate' + this.firstUpperCase(sizeDir) + '(' + offset + 'px)';
|
|
4288
|
+
|
|
4289
|
+
// 只有在找到活动标签时才应用样式
|
|
4290
|
+
if (tabSize > 0) {
|
|
4291
|
+
var _ref;
|
|
4292
|
+
|
|
4293
|
+
return _ref = {}, _ref[sizeName] = tabSize + 'px', _ref.transform = transform, _ref.msTransform = transform, _ref.webkitTransform = transform, _ref;
|
|
4294
|
+
}
|
|
4295
|
+
|
|
4296
|
+
// 如果没有找到活动标签,返回基本样式避免闪烁
|
|
4297
|
+
return _ref2 = {}, _ref2[sizeName] = '0px', _ref2.transform = 'translate' + this.firstUpperCase(sizeDir) + '(0px)', _ref2.msTransform = 'translate' + this.firstUpperCase(sizeDir) + '(0px)', _ref2.webkitTransform = 'translate' + this.firstUpperCase(sizeDir) + '(0px)', _ref2;
|
|
4298
|
+
} catch (error) {
|
|
4299
|
+
// 捕获所有可能的错误,确保组件不会崩溃
|
|
4300
|
+
console.warn('Error in barStyle calculation:', error);
|
|
4301
|
+
return {};
|
|
4302
|
+
}
|
|
4303
|
+
},
|
|
4304
|
+
|
|
4305
|
+
|
|
4306
|
+
/**
|
|
4307
|
+
* 安全获取tabPosition,提供默认值防止渲染错误
|
|
4308
|
+
* @returns {string} tabPosition值
|
|
4309
|
+
*/
|
|
4310
|
+
computedTabPosition: function computedTabPosition() {
|
|
4311
|
+
return (this.rootTabs || {}).tabPosition || 'top';
|
|
4312
|
+
}
|
|
4313
|
+
},
|
|
4314
|
+
|
|
4315
|
+
methods: {
|
|
4316
|
+
/**
|
|
4317
|
+
* 将字符串首字母大写
|
|
4318
|
+
* @param {string} str - 输入字符串
|
|
4319
|
+
* @returns {string} 首字母大写后的字符串
|
|
4320
|
+
*/
|
|
4321
|
+
firstUpperCase: function firstUpperCase(str) {
|
|
4322
|
+
return str.toLowerCase().replace(/( |^)[a-z]/g, function (L) {
|
|
4323
|
+
return L.toUpperCase();
|
|
4324
|
+
});
|
|
4325
|
+
},
|
|
4326
|
+
|
|
4327
|
+
|
|
4328
|
+
/**
|
|
4329
|
+
* 获取活动标签的尺寸信息
|
|
4330
|
+
* @returns {Object} 包含offset和tabSize的对象
|
|
4331
|
+
*/
|
|
4332
|
+
getActiveTabSizeInfo: function getActiveTabSizeInfo() {
|
|
4333
|
+
var _this = this;
|
|
4334
|
+
|
|
4335
|
+
// 安全获取tabPosition并提供默认值
|
|
4336
|
+
var tabPosition = (this.rootTabs || {}).tabPosition || 'top';
|
|
4337
|
+
var sizeName = ['top', 'bottom'].indexOf(tabPosition) !== -1 ? 'width' : 'height';
|
|
4338
|
+
var sizeProp = 'client' + this.firstUpperCase(sizeName);
|
|
4339
|
+
var offset = 0;
|
|
4340
|
+
var tabSize = 0;
|
|
4341
|
+
|
|
4342
|
+
try {
|
|
4343
|
+
// 确保tabs和父组件存在
|
|
4344
|
+
if (!this.tabs || !Array.isArray(this.tabs) || !(this.$parent && this.$parent.$refs && this.$parent.$refs.tabs) || !Array.isArray(this.$parent.$refs.tabs)) {
|
|
4345
|
+
return { offset: offset, tabSize: tabSize };
|
|
4346
|
+
}
|
|
4347
|
+
|
|
4348
|
+
// 过滤有效的tab项
|
|
4349
|
+
var validTabs = this.tabs.filter(function (tab) {
|
|
4350
|
+
return tab && typeof tab.paneName === 'string' && tab.paneName.trim();
|
|
4351
|
+
});
|
|
4352
|
+
|
|
4353
|
+
validTabs.every(function (tab) {
|
|
4354
|
+
try {
|
|
4355
|
+
var $el = Object(util["b" /* arrayFind */])(_this.$parent.$refs.tabs, function (t) {
|
|
4356
|
+
return t && t.id && typeof t.id === 'string' && t.id.replace('tab-', '') === tab.paneName;
|
|
4357
|
+
});
|
|
4358
|
+
|
|
4359
|
+
// 如果找不到元素或元素属性无效,则跳过
|
|
4360
|
+
if (!$el || typeof $el[sizeProp] !== 'number' || isNaN($el[sizeProp])) {
|
|
4361
|
+
return true; // 继续查找下一个tab
|
|
4362
|
+
}
|
|
4363
|
+
|
|
4364
|
+
if (!tab.active) {
|
|
4365
|
+
offset += $el[sizeProp];
|
|
4366
|
+
return true;
|
|
4367
|
+
} else {
|
|
4368
|
+
tabSize = $el[sizeProp];
|
|
4369
|
+
return false;
|
|
4370
|
+
}
|
|
4371
|
+
} catch (e) {
|
|
4372
|
+
// 忽略单个tab处理中的错误,继续处理其他tab
|
|
4373
|
+
console.warn('Error processing tab:', e);
|
|
4374
|
+
return true;
|
|
4375
|
+
}
|
|
4376
|
+
});
|
|
4377
|
+
|
|
4378
|
+
return { offset: offset, tabSize: tabSize };
|
|
4379
|
+
} catch (error) {
|
|
4380
|
+
// 捕获所有可能的错误,确保组件不会崩溃
|
|
4381
|
+
console.warn('Error in getActiveTabSizeInfo:', error);
|
|
4382
|
+
return { offset: offset, tabSize: tabSize };
|
|
4383
|
+
}
|
|
4384
|
+
}
|
|
4385
|
+
}
|
|
4386
|
+
});
|
|
4387
|
+
// CONCATENATED MODULE: ./packages/tabs/src/tab-bar.vue?vue&type=script&lang=js&
|
|
4388
|
+
/* harmony default export */ var src_tab_barvue_type_script_lang_js_ = (tab_barvue_type_script_lang_js_);
|
|
4389
|
+
// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
|
|
4390
|
+
var componentNormalizer = __webpack_require__(3);
|
|
4391
|
+
|
|
4392
|
+
// CONCATENATED MODULE: ./packages/tabs/src/tab-bar.vue
|
|
4393
|
+
|
|
4394
|
+
|
|
4395
|
+
|
|
4396
|
+
|
|
4397
|
+
|
|
4398
|
+
/* normalize component */
|
|
4399
|
+
|
|
4400
|
+
var component = Object(componentNormalizer["a" /* default */])(
|
|
4401
|
+
src_tab_barvue_type_script_lang_js_,
|
|
4402
|
+
tab_barvue_type_template_id_61310203_render,
|
|
4403
|
+
staticRenderFns,
|
|
4404
|
+
false,
|
|
4405
|
+
null,
|
|
4406
|
+
null,
|
|
4407
|
+
null
|
|
4408
|
+
|
|
4409
|
+
)
|
|
4410
|
+
|
|
4411
|
+
/* harmony default export */ var tab_bar = (component.exports);
|
|
4412
|
+
// EXTERNAL MODULE: ./src/utils/resize-event.js
|
|
4413
|
+
var resize_event = __webpack_require__(26);
|
|
4414
|
+
|
|
4415
|
+
// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tabs/src/tab-nav.vue?vue&type=script&lang=js&
|
|
4416
|
+
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
|
4417
|
+
|
|
4418
|
+
//
|
|
4419
|
+
|
|
4420
|
+
|
|
4421
|
+
|
|
4422
|
+
|
|
4423
|
+
// 空函数,用作默认回调
|
|
4424
|
+
function noop() {}
|
|
5858
4425
|
/**
|
|
5859
|
-
*
|
|
5860
|
-
* @
|
|
5861
|
-
* @
|
|
5862
|
-
|
|
5863
|
-
|
|
5864
|
-
|
|
5865
|
-
return
|
|
5866
|
-
|
|
5867
|
-
|
|
4426
|
+
* 将字符串首字母大写
|
|
4427
|
+
* @param {string} str - 输入字符串
|
|
4428
|
+
* @returns {string} 首字母大写后的字符串
|
|
4429
|
+
*/
|
|
4430
|
+
var firstUpperCase = function firstUpperCase(str) {
|
|
4431
|
+
if (!str || typeof str !== 'string') return str;
|
|
4432
|
+
return str.toLowerCase().replace(/( |^)[a-z]/g, function (L) {
|
|
4433
|
+
return L.toUpperCase();
|
|
4434
|
+
});
|
|
4435
|
+
};
|
|
4436
|
+
|
|
4437
|
+
/* harmony default export */ var tab_navvue_type_script_lang_js_ = ({
|
|
4438
|
+
name: 'TabNav',
|
|
4439
|
+
|
|
4440
|
+
/**
|
|
4441
|
+
* 组件描述
|
|
4442
|
+
* 标签页导航组件,管理标签的显示、滚动和交互
|
|
4443
|
+
*/
|
|
4444
|
+
description: '标签页导航组件',
|
|
4445
|
+
|
|
4446
|
+
components: {
|
|
4447
|
+
TabBar: tab_bar
|
|
4448
|
+
},
|
|
4449
|
+
|
|
4450
|
+
inject: {
|
|
4451
|
+
rootTabs: {
|
|
4452
|
+
default: function _default() {
|
|
4453
|
+
return {
|
|
4454
|
+
tabPosition: 'top'
|
|
4455
|
+
};
|
|
4456
|
+
}
|
|
4457
|
+
}
|
|
4458
|
+
},
|
|
4459
|
+
|
|
4460
|
+
props: {
|
|
4461
|
+
panes: {
|
|
4462
|
+
type: Array,
|
|
4463
|
+
default: function _default() {
|
|
4464
|
+
return [];
|
|
4465
|
+
}
|
|
4466
|
+
},
|
|
4467
|
+
currentName: {
|
|
4468
|
+
type: String,
|
|
4469
|
+
default: ''
|
|
4470
|
+
},
|
|
4471
|
+
editable: {
|
|
4472
|
+
type: Boolean,
|
|
4473
|
+
default: false
|
|
4474
|
+
},
|
|
4475
|
+
onTabClick: {
|
|
4476
|
+
type: Function,
|
|
4477
|
+
default: noop
|
|
4478
|
+
},
|
|
4479
|
+
onTabRemove: {
|
|
4480
|
+
type: Function,
|
|
4481
|
+
default: noop
|
|
4482
|
+
},
|
|
4483
|
+
onContextmenu: {
|
|
4484
|
+
type: Function,
|
|
4485
|
+
default: noop
|
|
4486
|
+
},
|
|
4487
|
+
type: {
|
|
4488
|
+
type: String,
|
|
4489
|
+
default: ''
|
|
4490
|
+
},
|
|
4491
|
+
stretch: {
|
|
4492
|
+
type: Boolean,
|
|
4493
|
+
default: false
|
|
4494
|
+
},
|
|
4495
|
+
hideAfter: {
|
|
4496
|
+
type: Boolean,
|
|
4497
|
+
default: false
|
|
4498
|
+
},
|
|
4499
|
+
hideBar: {
|
|
4500
|
+
type: Boolean,
|
|
4501
|
+
default: false
|
|
4502
|
+
},
|
|
4503
|
+
fullBar: {
|
|
4504
|
+
type: Boolean,
|
|
4505
|
+
default: false
|
|
4506
|
+
}
|
|
4507
|
+
},
|
|
4508
|
+
|
|
4509
|
+
data: function data() {
|
|
4510
|
+
return {
|
|
4511
|
+
scrollable: false,
|
|
4512
|
+
navOffset: 0,
|
|
4513
|
+
isFocus: false,
|
|
4514
|
+
focusable: true,
|
|
4515
|
+
// 定时器ID,用于清理资源
|
|
4516
|
+
visibilityTimeout: null,
|
|
4517
|
+
focusTimeout: null
|
|
4518
|
+
};
|
|
4519
|
+
},
|
|
4520
|
+
|
|
4521
|
+
|
|
4522
|
+
// 计算属性
|
|
4523
|
+
computed: {
|
|
4524
|
+
/**
|
|
4525
|
+
* 安全获取tabPosition,提供默认值防止渲染错误
|
|
4526
|
+
*/
|
|
4527
|
+
computedTabPosition: function computedTabPosition() {
|
|
4528
|
+
return (this.rootTabs || {}).tabPosition || 'top';
|
|
4529
|
+
},
|
|
4530
|
+
|
|
4531
|
+
|
|
4532
|
+
/**
|
|
4533
|
+
* 计算导航容器的位移样式
|
|
4534
|
+
*/
|
|
4535
|
+
navStyle: function navStyle() {
|
|
4536
|
+
try {
|
|
4537
|
+
var tabPosition = this.computedTabPosition;
|
|
4538
|
+
var dir = ['top', 'bottom'].indexOf(tabPosition) !== -1 ? 'X' : 'Y';
|
|
4539
|
+
var offset = typeof this.navOffset === 'number' && !isNaN(this.navOffset) ? this.navOffset : 0;
|
|
4540
|
+
return {
|
|
4541
|
+
transform: 'translate' + dir + '(-' + offset + 'px)',
|
|
4542
|
+
msTransform: 'translate' + dir + '(-' + offset + 'px)',
|
|
4543
|
+
webkitTransform: 'translate' + dir + '(-' + offset + 'px)'
|
|
4544
|
+
};
|
|
4545
|
+
} catch (error) {
|
|
4546
|
+
console.warn('Error in navStyle calculation:', error);
|
|
4547
|
+
return {};
|
|
4548
|
+
}
|
|
4549
|
+
},
|
|
4550
|
+
|
|
4551
|
+
|
|
4552
|
+
/**
|
|
4553
|
+
* 根据标签页位置确定尺寸属性名
|
|
4554
|
+
*/
|
|
4555
|
+
sizeName: function sizeName() {
|
|
4556
|
+
try {
|
|
4557
|
+
var tabPosition = this.computedTabPosition;
|
|
4558
|
+
return ['top', 'bottom'].indexOf(tabPosition) !== -1 ? 'width' : 'height';
|
|
4559
|
+
} catch (error) {
|
|
4560
|
+
console.warn('Error in sizeName calculation:', error);
|
|
4561
|
+
return 'width';
|
|
4562
|
+
}
|
|
4563
|
+
}
|
|
4564
|
+
},
|
|
4565
|
+
|
|
4566
|
+
// 方法
|
|
4567
|
+
methods: {
|
|
4568
|
+
/**
|
|
4569
|
+
* 获取元素的尺寸信息
|
|
4570
|
+
* @param {HTMLElement} element - DOM元素
|
|
4571
|
+
* @param {string} sizeName - 尺寸类型(width/height)
|
|
4572
|
+
* @returns {number} 元素尺寸
|
|
4573
|
+
*/
|
|
4574
|
+
getElementSize: function getElementSize(element, sizeName) {
|
|
4575
|
+
try {
|
|
4576
|
+
if (!element || !sizeName) return 0;
|
|
4577
|
+
var propName = 'offset' + firstUpperCase(sizeName);
|
|
4578
|
+
var size = element[propName];
|
|
4579
|
+
return typeof size === 'number' && !isNaN(size) ? size : 0;
|
|
4580
|
+
} catch (error) {
|
|
4581
|
+
console.warn('Error getting element size:', error);
|
|
4582
|
+
return 0;
|
|
4583
|
+
}
|
|
4584
|
+
},
|
|
4585
|
+
scrollPrev: function scrollPrev() {
|
|
4586
|
+
try {
|
|
4587
|
+
var containerSize = this.getElementSize(this.$refs.navScroll, this.sizeName);
|
|
4588
|
+
var currentOffset = typeof this.navOffset === 'number' && !isNaN(this.navOffset) ? this.navOffset : 0;
|
|
4589
|
+
|
|
4590
|
+
if (!currentOffset) return;
|
|
4591
|
+
|
|
4592
|
+
var newOffset = currentOffset > containerSize ? currentOffset - containerSize : 0;
|
|
4593
|
+
|
|
4594
|
+
this.navOffset = newOffset;
|
|
4595
|
+
} catch (error) {
|
|
4596
|
+
console.warn('Error in scrollPrev:', error);
|
|
4597
|
+
}
|
|
4598
|
+
},
|
|
4599
|
+
scrollNext: function scrollNext() {
|
|
4600
|
+
try {
|
|
4601
|
+
var navSize = this.getElementSize(this.$refs.nav, this.sizeName);
|
|
4602
|
+
var containerSize = this.getElementSize(this.$refs.navScroll, this.sizeName);
|
|
4603
|
+
var currentOffset = typeof this.navOffset === 'number' && !isNaN(this.navOffset) ? this.navOffset : 0;
|
|
4604
|
+
|
|
4605
|
+
if (navSize - currentOffset <= containerSize) return;
|
|
4606
|
+
|
|
4607
|
+
var newOffset = navSize - currentOffset > containerSize * 2 ? currentOffset + containerSize : navSize - containerSize;
|
|
4608
|
+
|
|
4609
|
+
this.navOffset = newOffset;
|
|
4610
|
+
} catch (error) {
|
|
4611
|
+
console.warn('Error in scrollNext:', error);
|
|
4612
|
+
}
|
|
4613
|
+
},
|
|
4614
|
+
|
|
4615
|
+
/**
|
|
4616
|
+
* 检查是否为水平方向布局
|
|
4617
|
+
* @returns {boolean} 是否为水平布局
|
|
4618
|
+
*/
|
|
4619
|
+
isHorizontalLayout: function isHorizontalLayout() {
|
|
4620
|
+
try {
|
|
4621
|
+
var tabPosition = this.computedTabPosition;
|
|
4622
|
+
return ['top', 'bottom'].indexOf(tabPosition) !== -1;
|
|
4623
|
+
} catch (error) {
|
|
4624
|
+
console.warn('Error checking layout direction:', error);
|
|
4625
|
+
return true; // 默认水平布局作为安全起见
|
|
4626
|
+
}
|
|
4627
|
+
},
|
|
4628
|
+
|
|
4629
|
+
|
|
4630
|
+
/**
|
|
4631
|
+
* 计算最大可滚动偏移量
|
|
4632
|
+
* @returns {number} 最大偏移量
|
|
4633
|
+
*/
|
|
4634
|
+
getMaxOffset: function getMaxOffset() {
|
|
4635
|
+
try {
|
|
4636
|
+
var nav = this.$refs.nav;
|
|
4637
|
+
var navScroll = this.$refs.navScroll;
|
|
4638
|
+
if (!nav || !navScroll) return 0;
|
|
4639
|
+
|
|
4640
|
+
var navBounding = nav.getBoundingClientRect();
|
|
4641
|
+
var navScrollBounding = navScroll.getBoundingClientRect();
|
|
4642
|
+
|
|
4643
|
+
if (this.isHorizontalLayout()) {
|
|
4644
|
+
return navBounding.width - navScrollBounding.width;
|
|
4645
|
+
} else {
|
|
4646
|
+
return navBounding.height - navScrollBounding.height;
|
|
4647
|
+
}
|
|
4648
|
+
} catch (error) {
|
|
4649
|
+
console.warn('Error calculating max offset:', error);
|
|
4650
|
+
return 0;
|
|
4651
|
+
}
|
|
4652
|
+
},
|
|
4653
|
+
scrollToActiveTab: function scrollToActiveTab() {
|
|
4654
|
+
try {
|
|
4655
|
+
if (!this.scrollable) return;
|
|
4656
|
+
|
|
4657
|
+
var activeTab = this.$el ? this.$el.querySelector('.is-active') : null;
|
|
4658
|
+
if (!activeTab) return;
|
|
4659
|
+
|
|
4660
|
+
var navScroll = this.$refs.navScroll;
|
|
4661
|
+
if (!navScroll) return;
|
|
4662
|
+
|
|
4663
|
+
var activeTabBounding = activeTab.getBoundingClientRect();
|
|
4664
|
+
var navScrollBounding = navScroll.getBoundingClientRect();
|
|
4665
|
+
var maxOffset = this.getMaxOffset();
|
|
4666
|
+
var currentOffset = typeof this.navOffset === 'number' && !isNaN(this.navOffset) ? this.navOffset : 0;
|
|
4667
|
+
var newOffset = currentOffset;
|
|
4668
|
+
|
|
4669
|
+
if (this.isHorizontalLayout()) {
|
|
4670
|
+
if (activeTabBounding.left < navScrollBounding.left) {
|
|
4671
|
+
newOffset = currentOffset - (navScrollBounding.left - activeTabBounding.left);
|
|
4672
|
+
}
|
|
4673
|
+
if (activeTabBounding.right > navScrollBounding.right) {
|
|
4674
|
+
newOffset = currentOffset + activeTabBounding.right - navScrollBounding.right;
|
|
4675
|
+
}
|
|
4676
|
+
} else {
|
|
4677
|
+
if (activeTabBounding.top < navScrollBounding.top) {
|
|
4678
|
+
newOffset = currentOffset - (navScrollBounding.top - activeTabBounding.top);
|
|
4679
|
+
}
|
|
4680
|
+
if (activeTabBounding.bottom > navScrollBounding.bottom) {
|
|
4681
|
+
newOffset = currentOffset + (activeTabBounding.bottom - navScrollBounding.bottom);
|
|
4682
|
+
}
|
|
4683
|
+
}
|
|
4684
|
+
|
|
4685
|
+
// 确保偏移量在有效范围内
|
|
4686
|
+
newOffset = Math.max(newOffset, 0);
|
|
4687
|
+
this.navOffset = Math.min(newOffset, maxOffset);
|
|
4688
|
+
} catch (error) {
|
|
4689
|
+
console.warn('Error in scrollToActiveTab:', error);
|
|
4690
|
+
}
|
|
4691
|
+
},
|
|
4692
|
+
update: function update() {
|
|
4693
|
+
try {
|
|
4694
|
+
if (!this.$refs.nav || !this.$refs.navScroll) return;
|
|
4695
|
+
|
|
4696
|
+
var navSize = this.getElementSize(this.$refs.nav, this.sizeName);
|
|
4697
|
+
var containerSize = this.getElementSize(this.$refs.navScroll, this.sizeName);
|
|
4698
|
+
var currentOffset = typeof this.navOffset === 'number' && !isNaN(this.navOffset) ? this.navOffset : 0;
|
|
4699
|
+
|
|
4700
|
+
if (containerSize < navSize) {
|
|
4701
|
+
// 确保scrollable对象存在
|
|
4702
|
+
if (!this.scrollable || _typeof(this.scrollable) !== 'object') {
|
|
4703
|
+
this.scrollable = {};
|
|
4704
|
+
}
|
|
4705
|
+
this.scrollable.prev = currentOffset > 0;
|
|
4706
|
+
this.scrollable.next = currentOffset + containerSize < navSize;
|
|
4707
|
+
|
|
4708
|
+
// 防止滚动过度,确保能看到最后一个标签
|
|
4709
|
+
if (navSize - currentOffset < containerSize) {
|
|
4710
|
+
this.navOffset = navSize - containerSize;
|
|
4711
|
+
}
|
|
4712
|
+
} else {
|
|
4713
|
+
this.scrollable = false;
|
|
4714
|
+
if (currentOffset > 0) {
|
|
4715
|
+
this.navOffset = 0;
|
|
4716
|
+
}
|
|
4717
|
+
}
|
|
4718
|
+
} catch (error) {
|
|
4719
|
+
console.warn('Error in update method:', error);
|
|
4720
|
+
}
|
|
4721
|
+
},
|
|
4722
|
+
|
|
4723
|
+
/**
|
|
4724
|
+
* 键盘导航事件处理
|
|
4725
|
+
* @param {KeyboardEvent} e - 键盘事件对象
|
|
4726
|
+
*/
|
|
4727
|
+
changeTab: function changeTab(e) {
|
|
4728
|
+
try {
|
|
4729
|
+
var keyCode = e ? e.keyCode : undefined;
|
|
4730
|
+
if (!keyCode || [37, 38, 39, 40].indexOf(keyCode) === -1) {
|
|
4731
|
+
return;
|
|
4732
|
+
}
|
|
4733
|
+
|
|
4734
|
+
var tabList = e.currentTarget ? e.currentTarget.querySelectorAll('[role=tab]') : [];
|
|
4735
|
+
if (!tabList || tabList.length === 0) {
|
|
4736
|
+
return;
|
|
4737
|
+
}
|
|
4738
|
+
|
|
4739
|
+
var currentIndex = Array.prototype.indexOf.call(tabList, e.target);
|
|
4740
|
+
if (currentIndex === -1) {
|
|
4741
|
+
return;
|
|
4742
|
+
}
|
|
4743
|
+
|
|
4744
|
+
var nextIndex = void 0;
|
|
4745
|
+
if (keyCode === 37 || keyCode === 38) {
|
|
4746
|
+
// 左/上键 - 上一个标签
|
|
4747
|
+
nextIndex = currentIndex === 0 ? tabList.length - 1 : currentIndex - 1;
|
|
4748
|
+
} else {
|
|
4749
|
+
// 右/下键 - 下一个标签
|
|
4750
|
+
nextIndex = currentIndex < tabList.length - 1 ? currentIndex + 1 : 0;
|
|
4751
|
+
}
|
|
4752
|
+
|
|
4753
|
+
// 安全地设置焦点和触发点击
|
|
4754
|
+
if (tabList[nextIndex]) {
|
|
4755
|
+
tabList[nextIndex].focus();
|
|
4756
|
+
tabList[nextIndex].click();
|
|
4757
|
+
this.setFocus();
|
|
4758
|
+
}
|
|
4759
|
+
} catch (error) {
|
|
4760
|
+
console.warn('Error in changeTab handler:', error);
|
|
4761
|
+
}
|
|
4762
|
+
},
|
|
4763
|
+
|
|
4764
|
+
/**
|
|
4765
|
+
* 设置焦点状态
|
|
4766
|
+
*/
|
|
4767
|
+
setFocus: function setFocus() {
|
|
4768
|
+
try {
|
|
4769
|
+
if (this.focusable) {
|
|
4770
|
+
this.isFocus = true;
|
|
4771
|
+
}
|
|
4772
|
+
} catch (error) {
|
|
4773
|
+
console.warn('Error in setFocus:', error);
|
|
4774
|
+
}
|
|
4775
|
+
},
|
|
4776
|
+
|
|
4777
|
+
|
|
4778
|
+
/**
|
|
4779
|
+
* 移除焦点状态
|
|
4780
|
+
*/
|
|
4781
|
+
removeFocus: function removeFocus() {
|
|
4782
|
+
try {
|
|
4783
|
+
this.isFocus = false;
|
|
4784
|
+
} catch (error) {
|
|
4785
|
+
console.warn('Error in removeFocus:', error);
|
|
4786
|
+
}
|
|
4787
|
+
},
|
|
4788
|
+
|
|
4789
|
+
/**
|
|
4790
|
+
* 页面可见性变化处理
|
|
4791
|
+
*/
|
|
4792
|
+
visibilityChangeHandler: function visibilityChangeHandler() {
|
|
4793
|
+
var _this = this;
|
|
4794
|
+
|
|
4795
|
+
try {
|
|
4796
|
+
var visibility = document ? document.visibilityState : 'visible';
|
|
4797
|
+
if (visibility === 'hidden') {
|
|
4798
|
+
this.focusable = false;
|
|
4799
|
+
} else if (visibility === 'visible') {
|
|
4800
|
+
// 使用防抖处理可见性变化
|
|
4801
|
+
clearTimeout(this.visibilityTimeout);
|
|
4802
|
+
this.visibilityTimeout = setTimeout(function () {
|
|
4803
|
+
_this.focusable = true;
|
|
4804
|
+
}, 50);
|
|
4805
|
+
}
|
|
4806
|
+
} catch (error) {
|
|
4807
|
+
console.warn('Error in visibilityChangeHandler:', error);
|
|
4808
|
+
}
|
|
4809
|
+
},
|
|
4810
|
+
|
|
4811
|
+
|
|
4812
|
+
/**
|
|
4813
|
+
* 窗口失焦处理
|
|
4814
|
+
*/
|
|
4815
|
+
windowBlurHandler: function windowBlurHandler() {
|
|
4816
|
+
try {
|
|
4817
|
+
this.focusable = false;
|
|
4818
|
+
} catch (error) {
|
|
4819
|
+
console.warn('Error in windowBlurHandler:', error);
|
|
4820
|
+
}
|
|
4821
|
+
},
|
|
4822
|
+
|
|
4823
|
+
|
|
4824
|
+
/**
|
|
4825
|
+
* 窗口聚焦处理
|
|
4826
|
+
*/
|
|
4827
|
+
windowFocusHandler: function windowFocusHandler() {
|
|
4828
|
+
var _this2 = this;
|
|
4829
|
+
|
|
4830
|
+
try {
|
|
4831
|
+
// 使用防抖处理窗口聚焦
|
|
4832
|
+
clearTimeout(this.focusTimeout);
|
|
4833
|
+
this.focusTimeout = setTimeout(function () {
|
|
4834
|
+
_this2.focusable = true;
|
|
4835
|
+
}, 50);
|
|
4836
|
+
} catch (error) {
|
|
4837
|
+
console.warn('Error in windowFocusHandler:', error);
|
|
4838
|
+
}
|
|
4839
|
+
}
|
|
4840
|
+
},
|
|
4841
|
+
|
|
4842
|
+
updated: function updated() {
|
|
4843
|
+
this.update();
|
|
4844
|
+
},
|
|
4845
|
+
render: function render(h) {
|
|
4846
|
+
var _this3 = this;
|
|
4847
|
+
|
|
4848
|
+
var type = this.type,
|
|
4849
|
+
panes = this.panes,
|
|
4850
|
+
editable = this.editable,
|
|
4851
|
+
stretch = this.stretch,
|
|
4852
|
+
hideAfter = this.hideAfter,
|
|
4853
|
+
onTabClick = this.onTabClick,
|
|
4854
|
+
onTabRemove = this.onTabRemove,
|
|
4855
|
+
onContextmenu = this.onContextmenu,
|
|
4856
|
+
navStyle = this.navStyle,
|
|
4857
|
+
scrollable = this.scrollable,
|
|
4858
|
+
scrollNext = this.scrollNext,
|
|
4859
|
+
scrollPrev = this.scrollPrev,
|
|
4860
|
+
changeTab = this.changeTab,
|
|
4861
|
+
setFocus = this.setFocus,
|
|
4862
|
+
removeFocus = this.removeFocus;
|
|
4863
|
+
|
|
4864
|
+
var scrollBtn = scrollable ? [h(
|
|
4865
|
+
'span',
|
|
4866
|
+
{
|
|
4867
|
+
'class': ['es-tabs__nav-prev', scrollable.prev ? '' : 'is-disabled'],
|
|
4868
|
+
on: {
|
|
4869
|
+
'click': scrollPrev
|
|
4870
|
+
}
|
|
4871
|
+
},
|
|
4872
|
+
[h('i', { 'class': 'es-icon-zuo' })]
|
|
4873
|
+
), h(
|
|
4874
|
+
'span',
|
|
4875
|
+
{
|
|
4876
|
+
'class': ['es-tabs__nav-next', scrollable.next ? '' : 'is-disabled'],
|
|
4877
|
+
on: {
|
|
4878
|
+
'click': scrollNext
|
|
4879
|
+
}
|
|
4880
|
+
},
|
|
4881
|
+
[h('i', { 'class': 'es-icon-you' })]
|
|
4882
|
+
)] : null;
|
|
4883
|
+
|
|
4884
|
+
var tabs = this._l(panes, function (pane, index) {
|
|
4885
|
+
var _ref;
|
|
4886
|
+
|
|
4887
|
+
var tabName = pane.name || pane.index || index;
|
|
4888
|
+
var closable = pane.isClosable || editable;
|
|
4889
|
+
|
|
4890
|
+
pane.index = '' + index;
|
|
4891
|
+
|
|
4892
|
+
var btnClose = closable ? h('span', {
|
|
4893
|
+
'class': 'es-icon-guanbi',
|
|
4894
|
+
on: {
|
|
4895
|
+
'click': function click(ev) {
|
|
4896
|
+
onTabRemove(pane, ev);
|
|
4897
|
+
}
|
|
4898
|
+
}
|
|
4899
|
+
}) : null;
|
|
4900
|
+
var tabLabelContent = pane.badge ? [h('es-badge', {
|
|
4901
|
+
props: pane.badge
|
|
4902
|
+
}, [pane.$slots.label || pane.label])] : pane.$slots.label || pane.label;
|
|
4903
|
+
|
|
4904
|
+
var tabindex = pane.active ? 0 : -1;
|
|
4905
|
+
return h(
|
|
4906
|
+
'div',
|
|
4907
|
+
{
|
|
4908
|
+
'class': (_ref = {
|
|
4909
|
+
'es-tabs__item': true
|
|
4910
|
+
}, _ref['is-' + _this3.rootTabs.tabPosition] = true, _ref['is-active'] = pane.active, _ref['is-disabled'] = pane.disabled, _ref['is-closable'] = closable, _ref['is-focus'] = _this3.isFocus, _ref),
|
|
4911
|
+
attrs: { id: 'tab-' + tabName,
|
|
4912
|
+
|
|
4913
|
+
'aria-controls': 'pane-' + tabName,
|
|
4914
|
+
role: 'tab',
|
|
4915
|
+
'aria-selected': pane.active,
|
|
4916
|
+
|
|
4917
|
+
tabindex: tabindex
|
|
4918
|
+
},
|
|
4919
|
+
key: 'tab-' + tabName, ref: 'tabs', refInFor: true,
|
|
4920
|
+
on: {
|
|
4921
|
+
'focus': function focus() {
|
|
4922
|
+
setFocus();
|
|
4923
|
+
},
|
|
4924
|
+
'blur': function blur() {
|
|
4925
|
+
removeFocus();
|
|
4926
|
+
},
|
|
4927
|
+
'click': function click(ev) {
|
|
4928
|
+
removeFocus();
|
|
4929
|
+
onTabClick(pane, tabName, ev);
|
|
4930
|
+
},
|
|
4931
|
+
'keydown': function keydown(ev) {
|
|
4932
|
+
if (closable && (ev.keyCode === 46 || ev.keyCode === 8)) {
|
|
4933
|
+
onTabRemove(pane, ev);
|
|
4934
|
+
}
|
|
4935
|
+
},
|
|
4936
|
+
'contextmenu': function contextmenu(ev) {
|
|
4937
|
+
if (onContextmenu) {
|
|
4938
|
+
ev.preventDefault();
|
|
4939
|
+
onContextmenu(pane, ev);
|
|
4940
|
+
}
|
|
4941
|
+
}
|
|
4942
|
+
}
|
|
4943
|
+
},
|
|
4944
|
+
[tabLabelContent, btnClose]
|
|
4945
|
+
);
|
|
4946
|
+
});
|
|
4947
|
+
return h(
|
|
4948
|
+
'div',
|
|
4949
|
+
{
|
|
4950
|
+
'class': ['es-tabs__nav-wrap', hideAfter ? 'is-hide' : '', scrollable ? 'is-scrollable' : '', 'is-' + this.rootTabs.tabPosition]
|
|
4951
|
+
},
|
|
4952
|
+
[scrollBtn, h(
|
|
4953
|
+
'div',
|
|
4954
|
+
{ 'class': ['es-tabs__nav-scroll'], ref: 'navScroll' },
|
|
4955
|
+
[h(
|
|
4956
|
+
'div',
|
|
4957
|
+
{
|
|
4958
|
+
'class': ['es-tabs__nav', 'is-' + this.rootTabs.tabPosition, stretch && ['top', 'bottom'].indexOf(this.rootTabs.tabPosition) !== -1 ? 'is-stretch' : ''],
|
|
4959
|
+
ref: 'nav',
|
|
4960
|
+
style: navStyle,
|
|
4961
|
+
attrs: { role: 'tablist'
|
|
4962
|
+
},
|
|
4963
|
+
on: {
|
|
4964
|
+
'keydown': changeTab
|
|
4965
|
+
}
|
|
4966
|
+
},
|
|
4967
|
+
[!type ? h('tab-bar', {
|
|
4968
|
+
attrs: {
|
|
4969
|
+
tabs: panes,
|
|
4970
|
+
|
|
4971
|
+
full: this.fullBar
|
|
4972
|
+
},
|
|
4973
|
+
directives: [{
|
|
4974
|
+
name: 'show',
|
|
4975
|
+
value: !this.hideBar
|
|
4976
|
+
}]
|
|
4977
|
+
}) : null, tabs]
|
|
4978
|
+
)]
|
|
4979
|
+
)]
|
|
4980
|
+
);
|
|
4981
|
+
},
|
|
4982
|
+
mounted: function mounted() {
|
|
4983
|
+
var _this4 = this;
|
|
4984
|
+
|
|
4985
|
+
try {
|
|
4986
|
+
this.$nextTick(function () {
|
|
4987
|
+
_this4.update();
|
|
4988
|
+
});
|
|
4989
|
+
if (this.$el) {
|
|
4990
|
+
Object(resize_event["a" /* addResizeListener */])(this.$el, this.update);
|
|
4991
|
+
}
|
|
4992
|
+
|
|
4993
|
+
// 添加事件监听器
|
|
4994
|
+
document.addEventListener('visibilitychange', this.visibilityChangeHandler);
|
|
4995
|
+
window.addEventListener('blur', this.windowBlurHandler);
|
|
4996
|
+
window.addEventListener('focus', this.windowFocusHandler);
|
|
4997
|
+
} catch (error) {
|
|
4998
|
+
console.warn('Error in mounted:', error);
|
|
4999
|
+
}
|
|
5000
|
+
},
|
|
5001
|
+
beforeDestroy: function beforeDestroy() {
|
|
5002
|
+
try {
|
|
5003
|
+
// 清理事件监听器
|
|
5004
|
+
if (this.$el && this.update) {
|
|
5005
|
+
Object(resize_event["b" /* removeResizeListener */])(this.$el, this.update);
|
|
5006
|
+
}
|
|
5007
|
+
|
|
5008
|
+
// 移除DOM事件监听器
|
|
5009
|
+
document.removeEventListener('visibilitychange', this.visibilityChangeHandler);
|
|
5010
|
+
window.removeEventListener('blur', this.windowBlurHandler);
|
|
5011
|
+
window.removeEventListener('focus', this.windowFocusHandler);
|
|
5012
|
+
|
|
5013
|
+
// 清理定时器,防止内存泄漏
|
|
5014
|
+
if (this.visibilityTimeout) {
|
|
5015
|
+
clearTimeout(this.visibilityTimeout);
|
|
5016
|
+
}
|
|
5017
|
+
if (this.focusTimeout) {
|
|
5018
|
+
clearTimeout(this.focusTimeout);
|
|
5019
|
+
}
|
|
5020
|
+
} catch (error) {
|
|
5021
|
+
console.warn('Error in beforeDestroy:', error);
|
|
5022
|
+
}
|
|
5023
|
+
}
|
|
5024
|
+
});
|
|
5025
|
+
// CONCATENATED MODULE: ./packages/tabs/src/tab-nav.vue?vue&type=script&lang=js&
|
|
5026
|
+
/* harmony default export */ var src_tab_navvue_type_script_lang_js_ = (tab_navvue_type_script_lang_js_);
|
|
5027
|
+
// CONCATENATED MODULE: ./packages/tabs/src/tab-nav.vue
|
|
5028
|
+
var tab_nav_render, tab_nav_staticRenderFns
|
|
5029
|
+
|
|
5030
|
+
|
|
5031
|
+
|
|
5032
|
+
|
|
5033
|
+
/* normalize component */
|
|
5034
|
+
|
|
5035
|
+
var tab_nav_component = Object(componentNormalizer["a" /* default */])(
|
|
5036
|
+
src_tab_navvue_type_script_lang_js_,
|
|
5037
|
+
tab_nav_render,
|
|
5038
|
+
tab_nav_staticRenderFns,
|
|
5039
|
+
false,
|
|
5040
|
+
null,
|
|
5041
|
+
null,
|
|
5042
|
+
null
|
|
5043
|
+
|
|
5044
|
+
)
|
|
5045
|
+
|
|
5046
|
+
/* harmony default export */ var tab_nav = (tab_nav_component.exports);
|
|
5047
|
+
// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tabs/src/tabs.vue?vue&type=script&lang=js&
|
|
5048
|
+
|
|
5049
|
+
|
|
5050
|
+
|
|
5051
|
+
|
|
5868
5052
|
/**
|
|
5869
|
-
*
|
|
5870
|
-
*
|
|
5871
|
-
|
|
5872
|
-
|
|
5873
|
-
|
|
5874
|
-
|
|
5875
|
-
|
|
5876
|
-
|
|
5877
|
-
|
|
5053
|
+
* Tabs 标签页组件
|
|
5054
|
+
* 用于分隔内容上有关联但属于不同类别的数据集合
|
|
5055
|
+
*/
|
|
5056
|
+
/* harmony default export */ var tabsvue_type_script_lang_js_ = ({
|
|
5057
|
+
name: 'EsTabs',
|
|
5058
|
+
|
|
5059
|
+
components: {
|
|
5060
|
+
TabNav: tab_nav
|
|
5061
|
+
},
|
|
5062
|
+
|
|
5063
|
+
props: {
|
|
5064
|
+
/**
|
|
5065
|
+
* 风格类型
|
|
5066
|
+
*/
|
|
5067
|
+
type: String,
|
|
5068
|
+
/**
|
|
5069
|
+
* 选中选项卡的 name
|
|
5070
|
+
*/
|
|
5071
|
+
activeName: String,
|
|
5072
|
+
/**
|
|
5073
|
+
* 标签是否可关闭
|
|
5074
|
+
*/
|
|
5075
|
+
closable: Boolean,
|
|
5076
|
+
/**
|
|
5077
|
+
* 是否使用透明度过渡
|
|
5078
|
+
*/
|
|
5079
|
+
opacity: Boolean,
|
|
5080
|
+
/**
|
|
5081
|
+
* 标签是否可增加
|
|
5082
|
+
*/
|
|
5083
|
+
addable: Boolean,
|
|
5084
|
+
/**
|
|
5085
|
+
* 绑定值,选中选项卡的 name
|
|
5086
|
+
*/
|
|
5087
|
+
value: {},
|
|
5088
|
+
/**
|
|
5089
|
+
* 标签是否同时可增加和关闭
|
|
5090
|
+
*/
|
|
5091
|
+
editable: Boolean,
|
|
5092
|
+
/**
|
|
5093
|
+
* 选项卡所在位置
|
|
5094
|
+
*/
|
|
5095
|
+
tabPosition: {
|
|
5096
|
+
type: String,
|
|
5097
|
+
default: 'top'
|
|
5098
|
+
},
|
|
5099
|
+
/**
|
|
5100
|
+
* 切换标签页之前的钩子函数
|
|
5101
|
+
*/
|
|
5102
|
+
beforeLeave: Function,
|
|
5103
|
+
/**
|
|
5104
|
+
* 标签的宽度是否自撑开
|
|
5105
|
+
*/
|
|
5106
|
+
stretch: Boolean,
|
|
5107
|
+
/**
|
|
5108
|
+
* 是否隐藏标签内容
|
|
5109
|
+
*/
|
|
5110
|
+
hideAfter: Boolean,
|
|
5111
|
+
/**
|
|
5112
|
+
* 是否隐藏标签选中后的指示条
|
|
5113
|
+
*/
|
|
5114
|
+
hideBar: Boolean,
|
|
5115
|
+
/**
|
|
5116
|
+
* 标签选中后的指示条的宽度是否包含 padding
|
|
5117
|
+
*/
|
|
5118
|
+
fullBar: Boolean
|
|
5119
|
+
},
|
|
5120
|
+
computed: {
|
|
5121
|
+
/**
|
|
5122
|
+
* 判断是否可编辑(可添加或关闭)
|
|
5123
|
+
*/
|
|
5124
|
+
isEditable: function isEditable() {
|
|
5125
|
+
return this.editable || this.addable || this.closable;
|
|
5126
|
+
},
|
|
5127
|
+
|
|
5128
|
+
/**
|
|
5129
|
+
* 计算tabs容器的CSS类名
|
|
5130
|
+
*/
|
|
5131
|
+
tabsClasses: function tabsClasses() {
|
|
5132
|
+
var _ref;
|
|
5133
|
+
|
|
5134
|
+
return _ref = {
|
|
5135
|
+
'es-tabs': true,
|
|
5136
|
+
'es-tabs--card': this.type === 'card'
|
|
5137
|
+
}, _ref['es-tabs--' + this.tabPosition] = true, _ref['es-tabs--border-card'] = this.type === 'border-card', _ref;
|
|
5138
|
+
}
|
|
5139
|
+
},
|
|
5140
|
+
provide: function provide() {
|
|
5141
|
+
return {
|
|
5142
|
+
rootTabs: this
|
|
5143
|
+
};
|
|
5144
|
+
},
|
|
5145
|
+
data: function data() {
|
|
5146
|
+
return {
|
|
5147
|
+
currentName: this.value !== undefined ? this.value : this.activeName !== undefined ? this.activeName : null,
|
|
5148
|
+
panes: []
|
|
5149
|
+
};
|
|
5150
|
+
},
|
|
5151
|
+
|
|
5152
|
+
|
|
5153
|
+
watch: {
|
|
5154
|
+
activeName: function activeName(value) {
|
|
5155
|
+
this.setCurrentName(value);
|
|
5156
|
+
},
|
|
5157
|
+
value: function value(_value) {
|
|
5158
|
+
this.setCurrentName(_value);
|
|
5159
|
+
},
|
|
5160
|
+
currentName: function currentName() {
|
|
5161
|
+
var _this = this;
|
|
5162
|
+
|
|
5163
|
+
if (this.$refs.nav) {
|
|
5164
|
+
this.$nextTick(function () {
|
|
5165
|
+
_this.$refs.nav.$nextTick(function (_) {
|
|
5166
|
+
_this.$refs.nav.scrollToActiveTab();
|
|
5167
|
+
});
|
|
5168
|
+
});
|
|
5169
|
+
}
|
|
5170
|
+
}
|
|
5171
|
+
},
|
|
5172
|
+
|
|
5173
|
+
methods: {
|
|
5174
|
+
/**
|
|
5175
|
+
* 计算面板实例
|
|
5176
|
+
* @param {boolean} isForceUpdate - 是否强制更新
|
|
5177
|
+
*/
|
|
5178
|
+
calcPaneInstances: function calcPaneInstances() {
|
|
5179
|
+
var _this2 = this;
|
|
5180
|
+
|
|
5181
|
+
var isForceUpdate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
5182
|
+
|
|
5183
|
+
if (this.$slots.default) {
|
|
5184
|
+
var paneSlots = this.$slots.default.filter(function (vnode) {
|
|
5185
|
+
return vnode.tag && vnode.componentOptions && vnode.componentOptions.Ctor.options.name === 'EsTabPane';
|
|
5186
|
+
});
|
|
5187
|
+
// update indeed
|
|
5188
|
+
var panes = paneSlots.map(function (_ref2) {
|
|
5189
|
+
var componentInstance = _ref2.componentInstance;
|
|
5190
|
+
return componentInstance;
|
|
5191
|
+
});
|
|
5192
|
+
var panesChanged = !(panes.length === this.panes.length && panes.every(function (pane, index) {
|
|
5193
|
+
return pane === _this2.panes[index];
|
|
5194
|
+
}));
|
|
5195
|
+
if (isForceUpdate || panesChanged) {
|
|
5196
|
+
this.panes = panes;
|
|
5197
|
+
}
|
|
5198
|
+
} else if (this.panes.length !== 0) {
|
|
5199
|
+
this.panes = [];
|
|
5200
|
+
}
|
|
5201
|
+
if (this.$slots.prepend) {
|
|
5202
|
+
this.$nextTick(function () {
|
|
5203
|
+
_this2.width = _this2.$refs.prepend.getBoundingClientRect().width;
|
|
5204
|
+
});
|
|
5205
|
+
}
|
|
5206
|
+
},
|
|
5207
|
+
|
|
5208
|
+
/**
|
|
5209
|
+
* 处理标签点击事件
|
|
5210
|
+
* @param {Object} tab - 被点击的标签对象
|
|
5211
|
+
* @param {string} tabName - 被点击的标签名称
|
|
5212
|
+
* @param {Event} event - 点击事件对象
|
|
5213
|
+
*/
|
|
5214
|
+
handleTabClick: function handleTabClick(tab, tabName, event) {
|
|
5215
|
+
// 添加类型检查和空值检查
|
|
5216
|
+
if (!tab || tab.disabled) {
|
|
5217
|
+
return;
|
|
5218
|
+
}
|
|
5219
|
+
this.setCurrentName(tabName, tab);
|
|
5220
|
+
this.$emit('tab-click', tab, event);
|
|
5221
|
+
},
|
|
5222
|
+
|
|
5223
|
+
/**
|
|
5224
|
+
* 处理标签移除事件
|
|
5225
|
+
* @param {Object} pane - 要移除的标签面板对象
|
|
5226
|
+
* @param {Event} ev - 移除事件对象
|
|
5227
|
+
*/
|
|
5228
|
+
handleTabRemove: function handleTabRemove(pane, ev) {
|
|
5229
|
+
// 添加类型检查和空值检查
|
|
5230
|
+
if (!pane || pane.disabled) {
|
|
5231
|
+
return;
|
|
5232
|
+
}
|
|
5233
|
+
if (ev) {
|
|
5234
|
+
ev.stopPropagation();
|
|
5235
|
+
}
|
|
5236
|
+
this.$emit('edit', pane.name, 'remove');
|
|
5237
|
+
this.$emit('tab-remove', pane.name);
|
|
5238
|
+
},
|
|
5239
|
+
|
|
5240
|
+
/**
|
|
5241
|
+
* 处理标签右键菜单事件
|
|
5242
|
+
* @param {Object} pane - 右键点击的标签面板对象
|
|
5243
|
+
* @param {Event} ev - 右键菜单事件对象
|
|
5244
|
+
*/
|
|
5245
|
+
handleContextmenu: function handleContextmenu(pane, ev) {
|
|
5246
|
+
this.$emit('tab-contextmenu', pane, ev);
|
|
5247
|
+
},
|
|
5248
|
+
|
|
5249
|
+
/**
|
|
5250
|
+
* 处理标签添加事件
|
|
5251
|
+
*/
|
|
5252
|
+
handleTabAdd: function handleTabAdd() {
|
|
5253
|
+
this.$emit('edit', null, 'add');
|
|
5254
|
+
this.$emit('tab-add');
|
|
5255
|
+
},
|
|
5256
|
+
|
|
5257
|
+
/**
|
|
5258
|
+
* 设置当前选中的标签
|
|
5259
|
+
* @param {string} value - 要选中的标签名称
|
|
5260
|
+
* @param {Object} tab - 要选中的标签对象
|
|
5261
|
+
*/
|
|
5262
|
+
setCurrentName: function setCurrentName(value, tab) {
|
|
5263
|
+
var _this3 = this;
|
|
5264
|
+
|
|
5265
|
+
// 如果值没有变化,直接返回
|
|
5266
|
+
if (this.currentName === value) {
|
|
5267
|
+
return;
|
|
5268
|
+
}
|
|
5269
|
+
|
|
5270
|
+
// 执行切换逻辑
|
|
5271
|
+
var performChange = function performChange() {
|
|
5272
|
+
_this3.currentName = value;
|
|
5273
|
+
_this3.$emit('input', value);
|
|
5274
|
+
return true;
|
|
5275
|
+
};
|
|
5276
|
+
|
|
5277
|
+
// 处理beforeLeave钩子
|
|
5278
|
+
if (this.beforeLeave) {
|
|
5279
|
+
var beforeResult = this.beforeLeave(value, this.currentName, tab);
|
|
5280
|
+
|
|
5281
|
+
// 处理Promise返回值
|
|
5282
|
+
if (beforeResult && typeof beforeResult.then === 'function') {
|
|
5283
|
+
beforeResult.then(function () {
|
|
5284
|
+
performChange();
|
|
5285
|
+
if (_this3.$refs.nav) {
|
|
5286
|
+
_this3.$refs.nav.removeFocus();
|
|
5287
|
+
}
|
|
5288
|
+
}).catch(function () {});
|
|
5289
|
+
return;
|
|
5290
|
+
}
|
|
5291
|
+
|
|
5292
|
+
// 处理非Promise返回值
|
|
5293
|
+
if (beforeResult === false) {
|
|
5294
|
+
return;
|
|
5295
|
+
}
|
|
5296
|
+
}
|
|
5297
|
+
|
|
5298
|
+
// 默认情况,直接执行切换
|
|
5299
|
+
performChange();
|
|
5300
|
+
}
|
|
5301
|
+
},
|
|
5302
|
+
|
|
5303
|
+
render: function render() {
|
|
5304
|
+
var h = arguments[0];
|
|
5305
|
+
var type = this.type,
|
|
5306
|
+
handleTabClick = this.handleTabClick,
|
|
5307
|
+
handleTabRemove = this.handleTabRemove,
|
|
5308
|
+
handleContextmenu = this.handleContextmenu,
|
|
5309
|
+
handleTabAdd = this.handleTabAdd,
|
|
5310
|
+
currentName = this.currentName,
|
|
5311
|
+
panes = this.panes,
|
|
5312
|
+
editable = this.editable,
|
|
5313
|
+
tabPosition = this.tabPosition,
|
|
5314
|
+
stretch = this.stretch,
|
|
5315
|
+
hideAfter = this.hideAfter,
|
|
5316
|
+
hideBar = this.hideBar,
|
|
5317
|
+
fullBar = this.fullBar;
|
|
5318
|
+
|
|
5319
|
+
|
|
5320
|
+
var newButton = this.isEditable && (this.editable || this.addable) ? h(
|
|
5321
|
+
'span',
|
|
5322
|
+
{
|
|
5323
|
+
'class': 'es-tabs__new-tab',
|
|
5324
|
+
on: {
|
|
5325
|
+
'click': handleTabAdd,
|
|
5326
|
+
'keydown': function keydown(ev) {
|
|
5327
|
+
if (ev.key === 'Enter') {
|
|
5328
|
+
handleTabAdd();
|
|
5329
|
+
}
|
|
5330
|
+
}
|
|
5331
|
+
},
|
|
5332
|
+
attrs: {
|
|
5333
|
+
tabindex: '0'
|
|
5334
|
+
}
|
|
5335
|
+
},
|
|
5336
|
+
[h('i', { 'class': 'es-icon-plus' })]
|
|
5337
|
+
) : null;
|
|
5338
|
+
var navData = {
|
|
5339
|
+
props: {
|
|
5340
|
+
currentName: currentName,
|
|
5341
|
+
onTabClick: handleTabClick,
|
|
5342
|
+
onTabRemove: handleTabRemove,
|
|
5343
|
+
onContextmenu: handleContextmenu,
|
|
5344
|
+
editable: editable,
|
|
5345
|
+
type: type,
|
|
5346
|
+
panes: panes,
|
|
5347
|
+
stretch: stretch,
|
|
5348
|
+
hideAfter: hideAfter,
|
|
5349
|
+
hideBar: hideBar,
|
|
5350
|
+
fullBar: fullBar
|
|
5351
|
+
},
|
|
5352
|
+
ref: 'nav'
|
|
5353
|
+
};
|
|
5354
|
+
var header = h(
|
|
5355
|
+
'div',
|
|
5356
|
+
{ 'class': ['es-tabs__header', 'is-' + tabPosition] },
|
|
5357
|
+
[this.$slots.prepend ? h(
|
|
5358
|
+
'div',
|
|
5359
|
+
{
|
|
5360
|
+
ref: 'prepend',
|
|
5361
|
+
'class': ['es-tabs__prepend', hideBar ? 'is-hide' : '']
|
|
5362
|
+
},
|
|
5363
|
+
[this.$slots.prepend]
|
|
5364
|
+
) : '', newButton, h('tab-nav', external_babel_helper_vue_jsx_merge_props_default()([navData, { 'class': [hideBar ? 'is-hide' : ''] }])), this.$slots.append ? h(
|
|
5365
|
+
'div',
|
|
5366
|
+
{
|
|
5367
|
+
ref: 'append',
|
|
5368
|
+
'class': ['es-tabs__append', hideBar ? 'is-hide' : '']
|
|
5369
|
+
},
|
|
5370
|
+
[this.$slots.append]
|
|
5371
|
+
) : '']
|
|
5372
|
+
);
|
|
5373
|
+
var panels = h(
|
|
5374
|
+
'div',
|
|
5375
|
+
{ 'class': 'es-tabs__content' },
|
|
5376
|
+
[this.$slots.default]
|
|
5377
|
+
);
|
|
5378
|
+
|
|
5379
|
+
return h(
|
|
5380
|
+
'div',
|
|
5381
|
+
{ 'class': this.tabsClasses },
|
|
5382
|
+
[tabPosition !== 'bottom' ? [header, panels] : [panels, header]]
|
|
5383
|
+
);
|
|
5384
|
+
},
|
|
5385
|
+
created: function created() {
|
|
5386
|
+
var _this4 = this;
|
|
5387
|
+
|
|
5388
|
+
// 只在没有设置currentName且有面板时才设置默认值
|
|
5389
|
+
if (this.currentName === null) {
|
|
5390
|
+
this.$nextTick(function () {
|
|
5391
|
+
if (_this4.panes.length > 0 && !_this4.currentName) {
|
|
5392
|
+
_this4.setCurrentName(_this4.panes[0].name || '0');
|
|
5393
|
+
}
|
|
5394
|
+
});
|
|
5395
|
+
}
|
|
5396
|
+
|
|
5397
|
+
this.$on('tab-nav-update', this.calcPaneInstances.bind(null, true));
|
|
5398
|
+
},
|
|
5399
|
+
mounted: function mounted() {
|
|
5400
|
+
this.calcPaneInstances();
|
|
5401
|
+
},
|
|
5402
|
+
updated: function updated() {
|
|
5403
|
+
this.calcPaneInstances();
|
|
5404
|
+
}
|
|
5405
|
+
});
|
|
5406
|
+
// CONCATENATED MODULE: ./packages/tabs/src/tabs.vue?vue&type=script&lang=js&
|
|
5407
|
+
/* harmony default export */ var src_tabsvue_type_script_lang_js_ = (tabsvue_type_script_lang_js_);
|
|
5408
|
+
// CONCATENATED MODULE: ./packages/tabs/src/tabs.vue
|
|
5409
|
+
var tabs_render, tabs_staticRenderFns
|
|
5410
|
+
|
|
5411
|
+
|
|
5412
|
+
|
|
5413
|
+
|
|
5414
|
+
/* normalize component */
|
|
5415
|
+
|
|
5416
|
+
var tabs_component = Object(componentNormalizer["a" /* default */])(
|
|
5417
|
+
src_tabsvue_type_script_lang_js_,
|
|
5418
|
+
tabs_render,
|
|
5419
|
+
tabs_staticRenderFns,
|
|
5420
|
+
false,
|
|
5421
|
+
null,
|
|
5422
|
+
null,
|
|
5423
|
+
null
|
|
5424
|
+
|
|
5425
|
+
)
|
|
5426
|
+
|
|
5427
|
+
/* harmony default export */ var tabs = (tabs_component.exports);
|
|
5428
|
+
// CONCATENATED MODULE: ./packages/tabs/index.js
|
|
5429
|
+
|
|
5430
|
+
|
|
5431
|
+
/* istanbul ignore next */
|
|
5432
|
+
tabs.install = function (Vue) {
|
|
5433
|
+
Vue.component(tabs.name, tabs);
|
|
5434
|
+
};
|
|
5435
|
+
|
|
5436
|
+
/* harmony default export */ var packages_tabs = __webpack_exports__["default"] = (tabs);
|
|
5437
|
+
|
|
5438
|
+
/***/ }),
|
|
5439
|
+
|
|
5440
|
+
/***/ 19:
|
|
5441
|
+
/***/ (function(module, exports) {
|
|
5442
|
+
|
|
5443
|
+
module.exports = require("eoss/lib/loading");
|
|
5444
|
+
|
|
5445
|
+
/***/ }),
|
|
5446
|
+
|
|
5447
|
+
/***/ 2:
|
|
5448
|
+
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
5449
|
+
|
|
5450
|
+
"use strict";
|
|
5451
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return setStorage; });
|
|
5452
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return getStorage; });
|
|
5453
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return removeStorage; });
|
|
5454
|
+
/* unused harmony export setCookie */
|
|
5455
|
+
/* unused harmony export getCookie */
|
|
5456
|
+
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
|
5457
|
+
|
|
5458
|
+
/**
|
|
5459
|
+
* setStorage
|
|
5460
|
+
* @desc:设置本地储存数据
|
|
5461
|
+
* @author huangbo
|
|
5462
|
+
* @date 2022年5月7日
|
|
5463
|
+
* @param {String|Object} [key] - 数据的名称或包含type、key、value的对象
|
|
5464
|
+
* @param {String} [value] - 数据的值(当第一个参数为字符串时使用)
|
|
5465
|
+
**/
|
|
5466
|
+
var setStorage = function setStorage(key, value) {
|
|
5467
|
+
// 解析参数,支持两种调用方式:setStorage(key, value) 和 setStorage({type, key, value})
|
|
5468
|
+
var type = void 0,
|
|
5469
|
+
finalKey = void 0,
|
|
5470
|
+
finalValue = void 0;
|
|
5471
|
+
|
|
5472
|
+
if ((typeof key === 'undefined' ? 'undefined' : _typeof(key)) === 'object' && key !== null) {
|
|
5473
|
+
// 对象调用方式:setStorage({type, key, value})
|
|
5474
|
+
type = key.type;
|
|
5475
|
+
finalKey = key.key;
|
|
5476
|
+
finalValue = key.value;
|
|
5477
|
+
} else {
|
|
5478
|
+
// 字符串调用方式:setStorage(key, value)
|
|
5479
|
+
type = getStorage('storageType');
|
|
5480
|
+
finalKey = key;
|
|
5481
|
+
finalValue = value;
|
|
5482
|
+
}
|
|
5483
|
+
|
|
5484
|
+
// 使用默认存储类型如果未指定
|
|
5485
|
+
type = type || getStorage('storageType');
|
|
5486
|
+
|
|
5487
|
+
// 获取存储对象
|
|
5488
|
+
var storage = type === 'localStorage' ? localStorage : sessionStorage;
|
|
5489
|
+
|
|
5490
|
+
// 处理不同类型的key
|
|
5491
|
+
if (typeof finalKey === 'string') {
|
|
5492
|
+
// 单个字符串key
|
|
5493
|
+
var storedValue = (typeof finalValue === 'undefined' ? 'undefined' : _typeof(finalValue)) === 'object' ? JSON.stringify(finalValue) : finalValue;
|
|
5494
|
+
storage.setItem(finalKey, storedValue);
|
|
5495
|
+
if (finalKey === 'token') {
|
|
5496
|
+
setCookie('token', storedValue);
|
|
5497
|
+
}
|
|
5498
|
+
} else if (Array.isArray(finalKey)) {
|
|
5499
|
+
// 数组key,为多个key设置同一个value
|
|
5500
|
+
var _storedValue = (typeof finalValue === 'undefined' ? 'undefined' : _typeof(finalValue)) === 'object' ? JSON.stringify(finalValue) : finalValue;
|
|
5501
|
+
for (var i = 0; i < finalKey.length; i++) {
|
|
5502
|
+
storage.setItem(finalKey[i], _storedValue);
|
|
5503
|
+
if (finalKey[i] === 'token') {
|
|
5504
|
+
setCookie('token', _storedValue);
|
|
5505
|
+
}
|
|
5506
|
+
}
|
|
5507
|
+
} else if ((typeof finalKey === 'undefined' ? 'undefined' : _typeof(finalKey)) === 'object' && finalKey !== null) {
|
|
5508
|
+
// 对象key,对象的属性名称作为key,属性值作为value
|
|
5509
|
+
for (var k in finalKey) {
|
|
5510
|
+
if (Object.prototype.hasOwnProperty.call(finalKey, k)) {
|
|
5511
|
+
var _storedValue2 = _typeof(finalKey[k]) === 'object' ? JSON.stringify(finalKey[k]) : finalKey[k];
|
|
5512
|
+
storage.setItem(k, _storedValue2);
|
|
5513
|
+
if (k === 'token') {
|
|
5514
|
+
setCookie('token', _storedValue2);
|
|
5515
|
+
}
|
|
5516
|
+
}
|
|
5517
|
+
}
|
|
5518
|
+
}
|
|
5519
|
+
};
|
|
5520
|
+
|
|
5521
|
+
/**
|
|
5522
|
+
* getStorage
|
|
5523
|
+
* @desc:获取本地储存数据
|
|
5524
|
+
* @author huangbo
|
|
5525
|
+
* @date 2022年5月7日
|
|
5526
|
+
* @param {String} [key] - 获取的名称
|
|
5527
|
+
**/
|
|
5528
|
+
var getStorage = function getStorage(key) {
|
|
5529
|
+
if (key) {
|
|
5530
|
+
var res = sessionStorage.getItem(key) || localStorage.getItem(key);
|
|
5531
|
+
if (!res && key === 'token') {
|
|
5532
|
+
res = getCookie('token');
|
|
5533
|
+
}
|
|
5534
|
+
if (key === 'host' && !res) {
|
|
5535
|
+
res = '';
|
|
5536
|
+
}
|
|
5537
|
+
return res;
|
|
5538
|
+
}
|
|
5539
|
+
var defaults = {};
|
|
5540
|
+
var token = sessionStorage.getItem('token') || localStorage.getItem('token') || getCookie('token');
|
|
5541
|
+
var ssId = sessionStorage.getItem('ssId') || localStorage.getItem('ssId') || getCookie('ssId');
|
|
5542
|
+
|
|
5543
|
+
var deviceUnique = sessionStorage.getItem('deviceUnique') || localStorage.getItem('deviceUnique') || getCookie('deviceUnique');
|
|
5544
|
+
if (token) {
|
|
5545
|
+
defaults.Authorization = token;
|
|
5546
|
+
}
|
|
5547
|
+
if (ssId) {
|
|
5548
|
+
defaults.ssId = ssId;
|
|
5549
|
+
}
|
|
5550
|
+
if (deviceUnique) {
|
|
5551
|
+
defaults.deviceUnique = deviceUnique;
|
|
5552
|
+
}
|
|
5553
|
+
return defaults;
|
|
5554
|
+
};
|
|
5555
|
+
|
|
5556
|
+
/**
|
|
5557
|
+
* removeStorage
|
|
5558
|
+
* @desc:删除本地储存数据
|
|
5559
|
+
* @author huangbo
|
|
5560
|
+
* @date 2022年5月7日
|
|
5561
|
+
* @param {String, Array} [key] - 获取的名称
|
|
5562
|
+
**/
|
|
5563
|
+
var removeStorage = function removeStorage(key) {
|
|
5564
|
+
if (Array.isArray(key)) {
|
|
5565
|
+
for (var i = 0; i < key.length; i++) {
|
|
5566
|
+
sessionStorage.removeItem(key[i]);
|
|
5567
|
+
localStorage.removeItem(key[i]);
|
|
5568
|
+
if (key[i] === 'token') {
|
|
5569
|
+
removeCookie('token');
|
|
5570
|
+
}
|
|
5571
|
+
}
|
|
5572
|
+
} else if (key) {
|
|
5573
|
+
sessionStorage.removeItem(key);
|
|
5574
|
+
localStorage.removeItem(key);
|
|
5575
|
+
if (key === 'token') {
|
|
5576
|
+
removeCookie('token');
|
|
5577
|
+
}
|
|
5578
|
+
} else {
|
|
5579
|
+
sessionStorage.clear();
|
|
5580
|
+
localStorage.clear();
|
|
5581
|
+
removeCookie('token');
|
|
5582
|
+
}
|
|
5583
|
+
};
|
|
5584
|
+
|
|
5585
|
+
/**
|
|
5586
|
+
* setCookie
|
|
5587
|
+
* @desc 设置cookie
|
|
5588
|
+
* @author huangbo
|
|
5589
|
+
* @param {string} [name] cookie名称
|
|
5590
|
+
* @param {string} [value] cookie值
|
|
5591
|
+
* @param {boolean} [isSession] 是否是会话cookie
|
|
5592
|
+
**/
|
|
5593
|
+
var setCookie = function setCookie(name, value) {
|
|
5594
|
+
var isSession = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
|
5595
|
+
var time = arguments[3];
|
|
5596
|
+
|
|
5597
|
+
try {
|
|
5598
|
+
var cookieParts = [encodeURIComponent(name) + '=' + encodeURIComponent(value), 'path=/' // 仅保留path设置,确保全站访问
|
|
5599
|
+
];
|
|
5600
|
+
// 会话/持久Cookie设置
|
|
5601
|
+
if (!isSession) {
|
|
5602
|
+
if (/MSIE|Trident/.test(navigator.userAgent)) {
|
|
5603
|
+
// IE使用expires
|
|
5604
|
+
var date = new Date();
|
|
5605
|
+
date.setTime(date.getTime() + (time || 7 * 24 * 60 * 60 * 1000));
|
|
5606
|
+
cookieParts.push('expires=' + date.toUTCString());
|
|
5607
|
+
} else {
|
|
5608
|
+
// 其他浏览器使用max-age
|
|
5609
|
+
cookieParts.push('max-age=' + (time || 7 * 24 * 60 * 60));
|
|
5610
|
+
}
|
|
5611
|
+
}
|
|
5612
|
+
// 内核兼容处理
|
|
5613
|
+
if (/MSIE|Trident/.test(navigator.userAgent)) {
|
|
5614
|
+
// IE特殊处理:添加P3P协议头
|
|
5615
|
+
cookieParts.push('P3P=CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
|
|
5616
|
+
} else {
|
|
5617
|
+
// 现代浏览器设置
|
|
5618
|
+
cookieParts.push('samesite=lax');
|
|
5619
|
+
if (window.location.protocol === 'https:') {
|
|
5620
|
+
cookieParts.push('secure');
|
|
5621
|
+
}
|
|
5622
|
+
}
|
|
5623
|
+
|
|
5624
|
+
// 设置Cookie
|
|
5625
|
+
document.cookie = cookieParts.join('; ');
|
|
5626
|
+
return true;
|
|
5627
|
+
} catch (e) {
|
|
5628
|
+
console.error('Cookie设置失败:', e);
|
|
5629
|
+
return false;
|
|
5630
|
+
}
|
|
5631
|
+
};
|
|
5632
|
+
|
|
5633
|
+
/**
|
|
5634
|
+
* getCookie
|
|
5635
|
+
* @desc 获取cookie中指定名称的值
|
|
5636
|
+
* @author huangbo
|
|
5637
|
+
* @param {string} [name] cookie名称
|
|
5638
|
+
**/
|
|
5639
|
+
var getCookie = function getCookie(name) {
|
|
5640
|
+
var cookies = document.cookie.split(';');
|
|
5641
|
+
for (var _iterator = cookies, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
|
|
5642
|
+
var _ref;
|
|
5643
|
+
|
|
5644
|
+
if (_isArray) {
|
|
5645
|
+
if (_i >= _iterator.length) break;
|
|
5646
|
+
_ref = _iterator[_i++];
|
|
5647
|
+
} else {
|
|
5648
|
+
_i = _iterator.next();
|
|
5649
|
+
if (_i.done) break;
|
|
5650
|
+
_ref = _i.value;
|
|
5651
|
+
}
|
|
5652
|
+
|
|
5653
|
+
var cookie = _ref;
|
|
5654
|
+
|
|
5655
|
+
var _cookie$trim$split = cookie.trim().split('='),
|
|
5656
|
+
cookieName = _cookie$trim$split[0],
|
|
5657
|
+
cookieValue = _cookie$trim$split[1];
|
|
5658
|
+
|
|
5659
|
+
if (decodeURIComponent(cookieName) === name) {
|
|
5660
|
+
return decodeURIComponent(cookieValue);
|
|
5661
|
+
}
|
|
5662
|
+
}
|
|
5663
|
+
return null;
|
|
5664
|
+
};
|
|
5665
|
+
|
|
5666
|
+
/**
|
|
5667
|
+
* removeCookie
|
|
5668
|
+
* @desc:删除cookie
|
|
5669
|
+
* @author huangbo
|
|
5670
|
+
* @date 2022年5月7日
|
|
5671
|
+
* @param {String, Array} [key] - 获取的名称
|
|
5672
|
+
**/
|
|
5673
|
+
var removeCookie = function removeCookie(key) {
|
|
5674
|
+
if (Array.isArray(key)) {
|
|
5675
|
+
for (var i = 0; i < key.length; i++) {
|
|
5676
|
+
document.cookie = encodeURIComponent(key[i]) + '=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;';
|
|
5677
|
+
}
|
|
5678
|
+
} else {
|
|
5679
|
+
document.cookie = encodeURIComponent(key) + '=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;';
|
|
5680
|
+
}
|
|
5681
|
+
};
|
|
5682
|
+
|
|
5683
|
+
/***/ }),
|
|
5684
|
+
|
|
5685
|
+
/***/ 20:
|
|
5686
|
+
/***/ (function(module, exports) {
|
|
5687
|
+
|
|
5688
|
+
module.exports = require("lodash/get");
|
|
5689
|
+
|
|
5690
|
+
/***/ }),
|
|
5691
|
+
|
|
5692
|
+
/***/ 21:
|
|
5693
|
+
/***/ (function(module, exports) {
|
|
5694
|
+
|
|
5695
|
+
module.exports = require("lodash/set");
|
|
5696
|
+
|
|
5697
|
+
/***/ }),
|
|
5698
|
+
|
|
5699
|
+
/***/ 22:
|
|
5700
|
+
/***/ (function(module, exports) {
|
|
5701
|
+
|
|
5702
|
+
module.exports = require("lodash/cloneDeep");
|
|
5703
|
+
|
|
5704
|
+
/***/ }),
|
|
5705
|
+
|
|
5706
|
+
/***/ 26:
|
|
5707
|
+
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
5708
|
+
|
|
5709
|
+
"use strict";
|
|
5710
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return addResizeListener; });
|
|
5711
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return removeResizeListener; });
|
|
5712
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
5713
|
+
|
|
5714
|
+
// 注意:此文件完全重写以解决 ResizeObserver 循环错误
|
|
5715
|
+
|
|
5716
|
+
var isServer = typeof window === 'undefined';
|
|
5717
|
+
|
|
5718
|
+
// 使用 WeakMap 存储:
|
|
5719
|
+
// 1. 每个元素的监听器列表
|
|
5720
|
+
// 2. 每个元素的最后处理时间
|
|
5721
|
+
// 3. 每个元素的动画帧ID(用于requestAnimationFrame)
|
|
5722
|
+
var listenersMap = new WeakMap();
|
|
5723
|
+
var lastProcessedMap = new WeakMap();
|
|
5724
|
+
var animationFrameMap = new WeakMap();
|
|
5725
|
+
var PROCESSING_DELAY = 100; // 增加处理延迟到100ms
|
|
5726
|
+
|
|
5727
|
+
// 更安全的resize处理器,使用requestAnimationFrame和严格的频率控制
|
|
5728
|
+
function safeResizeHandler(element) {
|
|
5729
|
+
var now = Date.now();
|
|
5730
|
+
var lastTime = lastProcessedMap.get(element) || 0;
|
|
5731
|
+
var listeners = listenersMap.get(element) || [];
|
|
5732
|
+
|
|
5733
|
+
// 如果距离上次处理不足 PROCESSING_DELAY 毫秒,则跳过
|
|
5734
|
+
if (now - lastTime < PROCESSING_DELAY) {
|
|
5735
|
+
return;
|
|
5736
|
+
}
|
|
5737
|
+
|
|
5738
|
+
// 取消任何待处理的动画帧
|
|
5739
|
+
var existingFrameId = animationFrameMap.get(element);
|
|
5740
|
+
if (existingFrameId) {
|
|
5741
|
+
cancelAnimationFrame(existingFrameId);
|
|
5742
|
+
}
|
|
5743
|
+
|
|
5744
|
+
// 使用requestAnimationFrame来处理大小变化,这样可以防止循环
|
|
5745
|
+
var frameId = requestAnimationFrame(function () {
|
|
5746
|
+
// 再次检查时间,确保在动画帧执行时不会太频繁
|
|
5747
|
+
var frameNow = Date.now();
|
|
5748
|
+
if (frameNow - lastTime < PROCESSING_DELAY) {
|
|
5749
|
+
animationFrameMap.delete(element);
|
|
5750
|
+
return;
|
|
5751
|
+
}
|
|
5752
|
+
|
|
5753
|
+
lastProcessedMap.set(element, frameNow);
|
|
5754
|
+
|
|
5755
|
+
if (listeners.length) {
|
|
5756
|
+
// 创建监听器副本以防止在迭代过程中修改
|
|
5757
|
+
var listenersCopy = [].concat(listeners);
|
|
5758
|
+
listenersCopy.forEach(function (listener) {
|
|
5759
|
+
try {
|
|
5760
|
+
// 使用setTimeout来彻底分离调用栈
|
|
5761
|
+
setTimeout(function () {
|
|
5762
|
+
try {
|
|
5763
|
+
listener();
|
|
5764
|
+
} catch (e) {
|
|
5765
|
+
console.error('Resize listener error:', e);
|
|
5766
|
+
}
|
|
5767
|
+
}, 0);
|
|
5768
|
+
} catch (e) {
|
|
5769
|
+
console.error('Resize handler error:', e);
|
|
5770
|
+
}
|
|
5771
|
+
});
|
|
5772
|
+
}
|
|
5773
|
+
|
|
5774
|
+
animationFrameMap.delete(element);
|
|
5775
|
+
});
|
|
5776
|
+
|
|
5777
|
+
animationFrameMap.set(element, frameId);
|
|
5778
|
+
}
|
|
5779
|
+
|
|
5780
|
+
// 模拟ResizeObserver的自定义实现,不使用resize-observer-polyfill
|
|
5781
|
+
|
|
5782
|
+
var CustomResizeObserver = function () {
|
|
5783
|
+
function CustomResizeObserver(callback) {
|
|
5784
|
+
_classCallCheck(this, CustomResizeObserver);
|
|
5785
|
+
|
|
5786
|
+
this.callback = callback;
|
|
5787
|
+
this.elements = new Set();
|
|
5788
|
+
this.throttleTimer = null;
|
|
5789
|
+
}
|
|
5790
|
+
|
|
5791
|
+
CustomResizeObserver.prototype.observe = function observe(element) {
|
|
5792
|
+
var _this = this;
|
|
5793
|
+
|
|
5794
|
+
if (!element || !element.nodeType) return;
|
|
5795
|
+
|
|
5796
|
+
this.elements.add(element);
|
|
5797
|
+
|
|
5798
|
+
// 使用ResizeObserver的降级实现,结合setTimeout
|
|
5799
|
+
var checkSize = function checkSize() {
|
|
5800
|
+
var rect = element.getBoundingClientRect();
|
|
5801
|
+
var currentSize = { width: rect.width, height: rect.height };
|
|
5802
|
+
var lastSize = element.__lastSize || currentSize;
|
|
5803
|
+
|
|
5804
|
+
// 检查尺寸是否真的改变了
|
|
5805
|
+
if (Math.abs(currentSize.width - lastSize.width) > 1 || Math.abs(currentSize.height - lastSize.height) > 1) {
|
|
5806
|
+
element.__lastSize = currentSize;
|
|
5807
|
+
|
|
5808
|
+
// 调用原始回调,但在更安全的上下文中
|
|
5809
|
+
safeResizeHandler(element);
|
|
5810
|
+
}
|
|
5811
|
+
|
|
5812
|
+
// 继续下一次检查,但增加延迟
|
|
5813
|
+
_this.throttleTimer = setTimeout(checkSize, 100);
|
|
5814
|
+
};
|
|
5815
|
+
|
|
5816
|
+
// 开始检查
|
|
5817
|
+
checkSize();
|
|
5818
|
+
|
|
5819
|
+
// 存储timer引用以便disconnect时清除
|
|
5820
|
+
element.__resizeTimer = this.throttleTimer;
|
|
5821
|
+
};
|
|
5822
|
+
|
|
5823
|
+
CustomResizeObserver.prototype.disconnect = function disconnect() {
|
|
5824
|
+
// 清除所有定时器
|
|
5825
|
+
this.elements.forEach(function (element) {
|
|
5826
|
+
if (element.__resizeTimer) {
|
|
5827
|
+
clearTimeout(element.__resizeTimer);
|
|
5828
|
+
delete element.__resizeTimer;
|
|
5829
|
+
}
|
|
5830
|
+
});
|
|
5831
|
+
|
|
5832
|
+
if (this.throttleTimer) {
|
|
5833
|
+
clearTimeout(this.throttleTimer);
|
|
5834
|
+
this.throttleTimer = null;
|
|
5835
|
+
}
|
|
5836
|
+
|
|
5837
|
+
this.elements.clear();
|
|
5838
|
+
};
|
|
5839
|
+
|
|
5840
|
+
return CustomResizeObserver;
|
|
5841
|
+
}();
|
|
5842
|
+
|
|
5843
|
+
/* istanbul ignore next */
|
|
5844
|
+
|
|
5845
|
+
|
|
5846
|
+
var addResizeListener = function addResizeListener(element, fn) {
|
|
5847
|
+
if (isServer) return;
|
|
5848
|
+
|
|
5849
|
+
// 初始化元素的监听器列表
|
|
5850
|
+
if (!listenersMap.has(element)) {
|
|
5851
|
+
listenersMap.set(element, []);
|
|
5852
|
+
|
|
5853
|
+
// 使用我们的自定义ResizeObserver,而不是官方的polyfill
|
|
5854
|
+
try {
|
|
5855
|
+
var observer = new CustomResizeObserver(function () {
|
|
5856
|
+
safeResizeHandler(element);
|
|
5857
|
+
});
|
|
5858
|
+
observer.observe(element);
|
|
5859
|
+
element.__customResizeObserver = observer;
|
|
5860
|
+
} catch (e) {
|
|
5861
|
+
console.error('Failed to create CustomResizeObserver:', e);
|
|
5862
|
+
}
|
|
5863
|
+
}
|
|
5864
|
+
|
|
5865
|
+
var listeners = listenersMap.get(element);
|
|
5866
|
+
if (!listeners.includes(fn)) {
|
|
5867
|
+
listeners.push(fn);
|
|
5868
|
+
}
|
|
5869
|
+
};
|
|
5870
|
+
|
|
5871
|
+
/* istanbul ignore next */
|
|
5872
|
+
var removeResizeListener = function removeResizeListener(element, fn) {
|
|
5873
|
+
if (!element || !listenersMap.has(element)) return;
|
|
5874
|
+
|
|
5875
|
+
var listeners = listenersMap.get(element);
|
|
5876
|
+
var index = listeners.indexOf(fn);
|
|
5877
|
+
|
|
5878
|
+
if (index !== -1) {
|
|
5879
|
+
listeners.splice(index, 1);
|
|
5880
|
+
|
|
5881
|
+
// 如果没有监听器了,清理资源
|
|
5882
|
+
if (listeners.length === 0) {
|
|
5883
|
+
// 清除自定义ResizeObserver
|
|
5884
|
+
if (element.__customResizeObserver) {
|
|
5885
|
+
element.__customResizeObserver.disconnect();
|
|
5886
|
+
delete element.__customResizeObserver;
|
|
5887
|
+
}
|
|
5888
|
+
|
|
5889
|
+
// 清除存储的数据
|
|
5890
|
+
listenersMap.delete(element);
|
|
5891
|
+
lastProcessedMap.delete(element);
|
|
5892
|
+
|
|
5893
|
+
// 清除任何待处理的动画帧
|
|
5894
|
+
var frameId = animationFrameMap.get(element);
|
|
5895
|
+
if (frameId) {
|
|
5896
|
+
cancelAnimationFrame(frameId);
|
|
5897
|
+
animationFrameMap.delete(element);
|
|
5898
|
+
}
|
|
5899
|
+
}
|
|
5900
|
+
}
|
|
5901
|
+
};
|
|
5902
|
+
|
|
5903
|
+
/***/ }),
|
|
5904
|
+
|
|
5905
|
+
/***/ 3:
|
|
5906
|
+
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
5907
|
+
|
|
5908
|
+
"use strict";
|
|
5909
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return normalizeComponent; });
|
|
5910
|
+
/* globals __VUE_SSR_CONTEXT__ */
|
|
5911
|
+
|
|
5912
|
+
// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
|
|
5913
|
+
// This module is a runtime utility for cleaner component module output and will
|
|
5914
|
+
// be included in the final webpack user bundle.
|
|
5915
|
+
|
|
5916
|
+
function normalizeComponent(
|
|
5917
|
+
scriptExports,
|
|
5918
|
+
render,
|
|
5919
|
+
staticRenderFns,
|
|
5920
|
+
functionalTemplate,
|
|
5921
|
+
injectStyles,
|
|
5922
|
+
scopeId,
|
|
5923
|
+
moduleIdentifier /* server only */,
|
|
5924
|
+
shadowMode /* vue-cli only */
|
|
5925
|
+
) {
|
|
5926
|
+
// Vue.extend constructor export interop
|
|
5927
|
+
var options =
|
|
5928
|
+
typeof scriptExports === 'function' ? scriptExports.options : scriptExports
|
|
5929
|
+
|
|
5930
|
+
// render functions
|
|
5931
|
+
if (render) {
|
|
5932
|
+
options.render = render
|
|
5933
|
+
options.staticRenderFns = staticRenderFns
|
|
5934
|
+
options._compiled = true
|
|
5935
|
+
}
|
|
5936
|
+
|
|
5937
|
+
// functional template
|
|
5938
|
+
if (functionalTemplate) {
|
|
5939
|
+
options.functional = true
|
|
5940
|
+
}
|
|
5941
|
+
|
|
5942
|
+
// scopedId
|
|
5943
|
+
if (scopeId) {
|
|
5944
|
+
options._scopeId = 'data-v-' + scopeId
|
|
5945
|
+
}
|
|
5946
|
+
|
|
5947
|
+
var hook
|
|
5948
|
+
if (moduleIdentifier) {
|
|
5949
|
+
// server build
|
|
5950
|
+
hook = function (context) {
|
|
5951
|
+
// 2.3 injection
|
|
5952
|
+
context =
|
|
5953
|
+
context || // cached call
|
|
5954
|
+
(this.$vnode && this.$vnode.ssrContext) || // stateful
|
|
5955
|
+
(this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
|
|
5956
|
+
// 2.2 with runInNewContext: true
|
|
5957
|
+
if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
|
|
5958
|
+
context = __VUE_SSR_CONTEXT__
|
|
5959
|
+
}
|
|
5960
|
+
// inject component styles
|
|
5961
|
+
if (injectStyles) {
|
|
5962
|
+
injectStyles.call(this, context)
|
|
5963
|
+
}
|
|
5964
|
+
// register component module identifier for async chunk inferrence
|
|
5965
|
+
if (context && context._registeredComponents) {
|
|
5966
|
+
context._registeredComponents.add(moduleIdentifier)
|
|
5967
|
+
}
|
|
5968
|
+
}
|
|
5969
|
+
// used by ssr in case component is cached and beforeCreate
|
|
5970
|
+
// never gets called
|
|
5971
|
+
options._ssrRegister = hook
|
|
5972
|
+
} else if (injectStyles) {
|
|
5973
|
+
hook = shadowMode
|
|
5974
|
+
? function () {
|
|
5975
|
+
injectStyles.call(
|
|
5976
|
+
this,
|
|
5977
|
+
(options.functional ? this.parent : this).$root.$options.shadowRoot
|
|
5978
|
+
)
|
|
5979
|
+
}
|
|
5980
|
+
: injectStyles
|
|
5981
|
+
}
|
|
5982
|
+
|
|
5983
|
+
if (hook) {
|
|
5984
|
+
if (options.functional) {
|
|
5985
|
+
// for template-only hot-reload because in that case the render fn doesn't
|
|
5986
|
+
// go through the normalizer
|
|
5987
|
+
options._injectStyles = hook
|
|
5988
|
+
// register for functional component in vue file
|
|
5989
|
+
var originalRender = options.render
|
|
5990
|
+
options.render = function renderWithStyleInjection(h, context) {
|
|
5991
|
+
hook.call(context)
|
|
5992
|
+
return originalRender(h, context)
|
|
5993
|
+
}
|
|
5994
|
+
} else {
|
|
5995
|
+
// inject component registration as beforeCreate hook
|
|
5996
|
+
var existing = options.beforeCreate
|
|
5997
|
+
options.beforeCreate = existing ? [].concat(existing, hook) : [hook]
|
|
5998
|
+
}
|
|
5999
|
+
}
|
|
6000
|
+
|
|
6001
|
+
return {
|
|
6002
|
+
exports: scriptExports,
|
|
6003
|
+
options: options
|
|
6004
|
+
}
|
|
6005
|
+
}
|
|
6006
|
+
|
|
6007
|
+
|
|
6008
|
+
/***/ }),
|
|
6009
|
+
|
|
6010
|
+
/***/ 4:
|
|
6011
|
+
/***/ (function(module, exports) {
|
|
6012
|
+
|
|
6013
|
+
module.exports = require("vue");
|
|
6014
|
+
|
|
6015
|
+
/***/ }),
|
|
6016
|
+
|
|
6017
|
+
/***/ 6:
|
|
6018
|
+
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
6019
|
+
|
|
6020
|
+
"use strict";
|
|
6021
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return isString; });
|
|
6022
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return isObject; });
|
|
6023
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return isHtmlElement; });
|
|
6024
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return isFunction; });
|
|
6025
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return isUndefined; });
|
|
6026
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return isDefined; });
|
|
5878
6027
|
/**
|
|
5879
|
-
*
|
|
5880
|
-
* @
|
|
5881
|
-
* @
|
|
5882
|
-
|
|
5883
|
-
|
|
5884
|
-
|
|
5885
|
-
|
|
5886
|
-
|
|
5887
|
-
}
|
|
5888
|
-
if (typeof date === 'string') {
|
|
5889
|
-
date = new Date(date);
|
|
5890
|
-
}
|
|
5891
|
-
return date.getHours();
|
|
5892
|
-
};
|
|
5893
|
-
|
|
6028
|
+
* 检查一个值是否为字符串类型
|
|
6029
|
+
* @param {*} obj 要检查的值
|
|
6030
|
+
* @returns {boolean} 如果值为字符串则返回true,否则返回false
|
|
6031
|
+
*/
|
|
6032
|
+
function isString(obj) {
|
|
6033
|
+
return Object.prototype.toString.call(obj) === '[object String]';
|
|
6034
|
+
}
|
|
6035
|
+
|
|
5894
6036
|
/**
|
|
5895
|
-
*
|
|
5896
|
-
* @
|
|
5897
|
-
* @
|
|
5898
|
-
|
|
5899
|
-
|
|
5900
|
-
|
|
5901
|
-
|
|
5902
|
-
|
|
5903
|
-
}
|
|
5904
|
-
if (typeof date === 'string') {
|
|
5905
|
-
date = new Date(date);
|
|
5906
|
-
}
|
|
5907
|
-
return date.getMinutes();
|
|
5908
|
-
};
|
|
5909
|
-
|
|
6037
|
+
* 检查一个值是否为对象类型
|
|
6038
|
+
* @param {*} obj 要检查的值
|
|
6039
|
+
* @returns {boolean} 如果值为对象则返回true,否则返回false
|
|
6040
|
+
*/
|
|
6041
|
+
function isObject(obj) {
|
|
6042
|
+
return Object.prototype.toString.call(obj) === '[object Object]';
|
|
6043
|
+
}
|
|
6044
|
+
|
|
5910
6045
|
/**
|
|
5911
|
-
*
|
|
5912
|
-
* @
|
|
5913
|
-
* @
|
|
5914
|
-
|
|
5915
|
-
|
|
5916
|
-
|
|
5917
|
-
|
|
5918
|
-
|
|
5919
|
-
}
|
|
5920
|
-
if (typeof date === 'string') {
|
|
5921
|
-
date = new Date(date);
|
|
5922
|
-
}
|
|
5923
|
-
return date.getMonth() + 1;
|
|
5924
|
-
};
|
|
5925
|
-
|
|
6046
|
+
* 检查一个节点是否为HTML元素
|
|
6047
|
+
* @param {Node} node 要检查的节点
|
|
6048
|
+
* @returns {boolean} 如果节点为HTML元素则返回true,否则返回false
|
|
6049
|
+
*/
|
|
6050
|
+
function isHtmlElement(node) {
|
|
6051
|
+
return node && node.nodeType === Node.ELEMENT_NODE;
|
|
6052
|
+
}
|
|
6053
|
+
|
|
5926
6054
|
/**
|
|
5927
|
-
*
|
|
5928
|
-
* @
|
|
5929
|
-
* @
|
|
5930
|
-
|
|
5931
|
-
|
|
5932
|
-
|
|
5933
|
-
|
|
5934
|
-
|
|
5935
|
-
|
|
5936
|
-
if (typeof date === 'string') {
|
|
5937
|
-
date = new Date(date);
|
|
5938
|
-
}
|
|
5939
|
-
return date.getSeconds();
|
|
5940
|
-
};
|
|
5941
|
-
|
|
6055
|
+
* 检查一个值是否为函数类型
|
|
6056
|
+
* @param {*} functionToCheck 要检查的值
|
|
6057
|
+
* @returns {boolean} 如果值为函数则返回true,否则返回false
|
|
6058
|
+
*/
|
|
6059
|
+
function isFunction(functionToCheck) {
|
|
6060
|
+
var getType = {};
|
|
6061
|
+
return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
|
|
6062
|
+
}
|
|
6063
|
+
|
|
5942
6064
|
/**
|
|
5943
|
-
*
|
|
5944
|
-
* @
|
|
5945
|
-
* @
|
|
5946
|
-
|
|
5947
|
-
|
|
5948
|
-
|
|
5949
|
-
|
|
5950
|
-
|
|
5951
|
-
}
|
|
5952
|
-
if (typeof date === 'string') {
|
|
5953
|
-
date = new Date(date);
|
|
5954
|
-
}
|
|
5955
|
-
return date.getDay();
|
|
5956
|
-
};
|
|
5957
|
-
|
|
5958
|
-
|
|
6065
|
+
* 检查一个值是否为undefined
|
|
6066
|
+
* @param {*} val 要检查的值
|
|
6067
|
+
* @returns {boolean} 如果值为undefined则返回true,否则返回false
|
|
6068
|
+
*/
|
|
6069
|
+
function isUndefined(val) {
|
|
6070
|
+
return val === void 0;
|
|
6071
|
+
}
|
|
6072
|
+
|
|
5959
6073
|
/**
|
|
5960
|
-
*
|
|
5961
|
-
* @
|
|
5962
|
-
* @
|
|
5963
|
-
|
|
5964
|
-
|
|
5965
|
-
|
|
5966
|
-
|
|
5967
|
-
if (!time) {
|
|
5968
|
-
hour = new Date().getHours();
|
|
5969
|
-
} else if (typeof time === 'string') {
|
|
5970
|
-
// 从时间字符串中提取小时
|
|
5971
|
-
const match = time.match(/^(\d{1,2})/);
|
|
5972
|
-
if (match) {
|
|
5973
|
-
hour = parseInt(match[1], 10);
|
|
5974
|
-
}
|
|
5975
|
-
} else if (typeof time === 'number') {
|
|
5976
|
-
hour = time;
|
|
5977
|
-
}
|
|
5978
|
-
// 判断时间段
|
|
5979
|
-
if (hour >= 5 && hour < 12) {
|
|
5980
|
-
return '上午';
|
|
5981
|
-
} else if (hour >= 12 && hour < 18) {
|
|
5982
|
-
return '下午';
|
|
5983
|
-
} else {
|
|
5984
|
-
return '晚上';
|
|
5985
|
-
}
|
|
5986
|
-
};
|
|
6074
|
+
* 检查一个值是否已定义(不是undefined或null)
|
|
6075
|
+
* @param {*} val 要检查的值
|
|
6076
|
+
* @returns {boolean} 如果值已定义则返回true,否则返回false
|
|
6077
|
+
*/
|
|
6078
|
+
function isDefined(val) {
|
|
6079
|
+
return val !== undefined && val !== null;
|
|
6080
|
+
}
|
|
5987
6081
|
|
|
5988
6082
|
/***/ }),
|
|
5989
6083
|
|
|
@@ -5994,7 +6088,7 @@ module.exports = require("eoss/lib/message-box");
|
|
|
5994
6088
|
|
|
5995
6089
|
/***/ }),
|
|
5996
6090
|
|
|
5997
|
-
/***/
|
|
6091
|
+
/***/ 92:
|
|
5998
6092
|
/***/ (function(module, exports) {
|
|
5999
6093
|
|
|
6000
6094
|
module.exports = require("babel-helper-vue-jsx-merge-props");
|