xt-element-ui 2.2.3 → 2.2.4

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.
Files changed (116) hide show
  1. package/README.md +140 -192
  2. package/docs/README.md +162 -88
  3. package/docs/components/base/theme.md +248 -0
  4. package/docs/components/base/xt-list.md +1 -1
  5. package/docs/components/base/xt-scroll-arrow.md +87 -1
  6. package/docs/components/base/xt-scroll.md +237 -0
  7. package/docs/components/utils/config.md +18 -4
  8. package/docs/components/utils/theme.md +280 -183
  9. package/lib/index.common.1.js +4 -26
  10. package/lib/index.common.2.js +1 -1
  11. package/lib/index.common.js +1871 -671
  12. package/lib/index.css +1 -1
  13. package/lib/index.umd.1.js +4 -26
  14. package/lib/index.umd.2.js +1 -1
  15. package/lib/index.umd.js +1871 -671
  16. package/lib/index.umd.min.1.js +1 -1
  17. package/lib/index.umd.min.js +1 -1
  18. package/lib/theme/element-overrides.css +607 -0
  19. package/lib/theme/element-vars.css +280 -0
  20. package/lib/xt-badge/xt-badge.common.js +1 -1
  21. package/lib/xt-badge/xt-badge.umd.js +1 -1
  22. package/lib/xt-button/xt-button.common.js +1 -1
  23. package/lib/xt-button/xt-button.umd.js +1 -1
  24. package/lib/xt-card/xt-card.common.js +1 -1
  25. package/lib/xt-card/xt-card.umd.js +1 -1
  26. package/lib/xt-card-item/xt-card-item.common.js +1 -1
  27. package/lib/xt-card-item/xt-card-item.umd.js +1 -1
  28. package/lib/xt-chart/xt-chart.common.js +5 -5
  29. package/lib/xt-chart/xt-chart.umd.js +5 -5
  30. package/lib/xt-config-provider/xt-config-provider.css +1 -1
  31. package/lib/xt-date-picker/xt-date-picker.common.1.js +4 -26
  32. package/lib/xt-date-picker/xt-date-picker.common.2.js +1 -1
  33. package/lib/xt-date-picker/xt-date-picker.common.js +1 -47
  34. package/lib/xt-date-picker/xt-date-picker.css +1 -1
  35. package/lib/xt-date-picker/xt-date-picker.umd.1.js +4 -26
  36. package/lib/xt-date-picker/xt-date-picker.umd.2.js +1 -1
  37. package/lib/xt-date-picker/xt-date-picker.umd.js +1 -47
  38. package/lib/xt-date-picker/xt-date-picker.umd.min.1.js +1 -1
  39. package/lib/xt-date-picker/xt-date-picker.umd.min.js +1 -1
  40. package/lib/xt-flex-box/xt-flex-box.common.js +1 -1
  41. package/lib/xt-flex-box/xt-flex-box.umd.js +1 -1
  42. package/lib/xt-flow/xt-flow.common.js +1 -1
  43. package/lib/xt-flow/xt-flow.umd.js +1 -1
  44. package/lib/xt-form-schema/xt-form-schema.common.js +1 -1
  45. package/lib/xt-form-schema/xt-form-schema.umd.js +1 -1
  46. package/lib/xt-grid-box/xt-grid-box.common.js +1 -1
  47. package/lib/xt-grid-box/xt-grid-box.umd.js +1 -1
  48. package/lib/xt-grid-item/xt-grid-item.common.js +1 -1
  49. package/lib/xt-grid-item/xt-grid-item.umd.js +1 -1
  50. package/lib/xt-icon/xt-icon.common.js +1 -1
  51. package/lib/xt-icon/xt-icon.umd.js +1 -1
  52. package/lib/xt-input/xt-input.common.js +1 -1
  53. package/lib/xt-input/xt-input.umd.js +1 -1
  54. package/lib/xt-list/xt-list.common.js +457 -118
  55. package/lib/xt-list/xt-list.css +1 -1
  56. package/lib/xt-list/xt-list.umd.js +457 -118
  57. package/lib/xt-list/xt-list.umd.min.js +1 -1
  58. package/lib/xt-map/xt-map.common.js +1 -1
  59. package/lib/xt-map/xt-map.umd.js +1 -1
  60. package/lib/xt-map-provider/xt-map-provider.common.js +1 -1
  61. package/lib/xt-map-provider/xt-map-provider.umd.js +1 -1
  62. package/lib/xt-page/xt-page.common.js +1 -1
  63. package/lib/xt-page/xt-page.umd.js +1 -1
  64. package/lib/xt-progress/xt-progress.common.js +1 -1
  65. package/lib/xt-progress/xt-progress.umd.js +1 -1
  66. package/lib/xt-scroll/demo.html +10 -0
  67. package/lib/xt-scroll/index.js +1 -0
  68. package/lib/xt-scroll/xt-scroll.common.js +551 -0
  69. package/lib/xt-scroll/xt-scroll.css +1 -0
  70. package/lib/xt-scroll/xt-scroll.umd.js +561 -0
  71. package/lib/xt-scroll/xt-scroll.umd.min.js +1 -0
  72. package/lib/xt-scroll-arrow/xt-scroll-arrow.common.js +591 -170
  73. package/lib/xt-scroll-arrow/xt-scroll-arrow.css +1 -1
  74. package/lib/xt-scroll-arrow/xt-scroll-arrow.umd.js +591 -170
  75. package/lib/xt-scroll-arrow/xt-scroll-arrow.umd.min.js +1 -1
  76. package/lib/xt-select-tree/xt-select-tree.common.js +1 -1
  77. package/lib/xt-select-tree/xt-select-tree.umd.js +1 -1
  78. package/lib/xt-step-price/xt-step-price.common.js +2 -2
  79. package/lib/xt-step-price/xt-step-price.umd.js +2 -2
  80. package/lib/xt-step-price-item/xt-step-price-item.common.js +1 -1
  81. package/lib/xt-step-price-item/xt-step-price-item.umd.js +1 -1
  82. package/lib/xt-tab-pane/xt-tab-pane.common.js +1 -1
  83. package/lib/xt-tab-pane/xt-tab-pane.umd.js +1 -1
  84. package/lib/xt-table/xt-table.common.js +2 -2
  85. package/lib/xt-table/xt-table.umd.js +2 -2
  86. package/lib/xt-tabs/xt-tabs.common.js +1 -1
  87. package/lib/xt-tabs/xt-tabs.umd.js +1 -1
  88. package/lib/xt-text/xt-text.common.js +1 -1
  89. package/lib/xt-text/xt-text.umd.js +1 -1
  90. package/lib/xt-time/xt-time.common.js +1 -1
  91. package/lib/xt-time/xt-time.umd.js +1 -1
  92. package/lib/xt-transfer-tree/xt-transfer-tree.common.js +1 -1
  93. package/lib/xt-transfer-tree/xt-transfer-tree.umd.js +1 -1
  94. package/lib/xt-upload/xt-upload.common.js +2 -2
  95. package/lib/xt-upload/xt-upload.umd.js +2 -2
  96. package/package.json +5 -3
  97. package/src/components/index.scss +3 -0
  98. package/src/components/theme/element-overrides.css +607 -0
  99. package/src/components/theme/element-vars.css +280 -0
  100. package/src/components/theme/iframe-injector.js +502 -0
  101. package/src/components/theme/index.js +64 -0
  102. package/src/components/xt-config-provider/style/index.scss +0 -11
  103. package/src/components/xt-date-picker/component/RangeDate.vue +1 -29
  104. package/src/components/xt-date-picker/style/index.scss +80 -53
  105. package/src/components/xt-list/index.vue +23 -12
  106. package/src/components/xt-scroll/index.js +9 -0
  107. package/src/components/xt-scroll/index.vue +363 -0
  108. package/src/components/xt-scroll/style/index.scss +107 -0
  109. package/src/components/xt-scroll-arrow/index.vue +200 -83
  110. package/src/components/xt-scroll-arrow/style/index.scss +16 -5
  111. package/src/index.js +9 -2
  112. package/src/utils/color.js +105 -0
  113. package/src/utils/index.js +456 -468
  114. package/src/utils/theme-vars.js +134 -0
  115. package/lib/css/1.87a493be.css +0 -1
  116. package/lib/xt-date-picker/css/1.87a493be.css +0 -1
package/lib/index.umd.js CHANGED
@@ -42,11 +42,6 @@ return /******/ (function(modules) { // webpackBootstrap
42
42
  /******/ // The module cache
43
43
  /******/ var installedModules = {};
44
44
  /******/
45
- /******/ // object to store loaded CSS chunks
46
- /******/ var installedCssChunks = {
47
- /******/ 0: 0
48
- /******/ }
49
- /******/
50
45
  /******/ // object to store loaded and loading chunks
51
46
  /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
52
47
  /******/ // Promise = chunk loading, 0 = chunk loaded
@@ -91,47 +86,6 @@ return /******/ (function(modules) { // webpackBootstrap
91
86
  /******/ var promises = [];
92
87
  /******/
93
88
  /******/
94
- /******/ // mini-css-extract-plugin CSS loading
95
- /******/ var cssChunks = {"1":1};
96
- /******/ if(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);
97
- /******/ else if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {
98
- /******/ promises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {
99
- /******/ var href = "css/" + ({}[chunkId]||chunkId) + "." + {"1":"87a493be","2":"31d6cfe0"}[chunkId] + ".css";
100
- /******/ var fullhref = __webpack_require__.p + href;
101
- /******/ var existingLinkTags = document.getElementsByTagName("link");
102
- /******/ for(var i = 0; i < existingLinkTags.length; i++) {
103
- /******/ var tag = existingLinkTags[i];
104
- /******/ var dataHref = tag.getAttribute("data-href") || tag.getAttribute("href");
105
- /******/ if(tag.rel === "stylesheet" && (dataHref === href || dataHref === fullhref)) return resolve();
106
- /******/ }
107
- /******/ var existingStyleTags = document.getElementsByTagName("style");
108
- /******/ for(var i = 0; i < existingStyleTags.length; i++) {
109
- /******/ var tag = existingStyleTags[i];
110
- /******/ var dataHref = tag.getAttribute("data-href");
111
- /******/ if(dataHref === href || dataHref === fullhref) return resolve();
112
- /******/ }
113
- /******/ var linkTag = document.createElement("link");
114
- /******/ linkTag.rel = "stylesheet";
115
- /******/ linkTag.type = "text/css";
116
- /******/ linkTag.onload = resolve;
117
- /******/ linkTag.onerror = function(event) {
118
- /******/ var request = event && event.target && event.target.src || fullhref;
119
- /******/ var err = new Error("Loading CSS chunk " + chunkId + " failed.\n(" + request + ")");
120
- /******/ err.code = "CSS_CHUNK_LOAD_FAILED";
121
- /******/ err.request = request;
122
- /******/ delete installedCssChunks[chunkId]
123
- /******/ linkTag.parentNode.removeChild(linkTag)
124
- /******/ reject(err);
125
- /******/ };
126
- /******/ linkTag.href = fullhref;
127
- /******/
128
- /******/ var head = document.getElementsByTagName("head")[0];
129
- /******/ head.appendChild(linkTag);
130
- /******/ }).then(function() {
131
- /******/ installedCssChunks[chunkId] = 0;
132
- /******/ }));
133
- /******/ }
134
- /******/
135
89
  /******/ // JSONP chunk loading for javascript
136
90
  /******/
137
91
  /******/ var installedChunkData = installedChunks[chunkId];
@@ -501,6 +455,13 @@ function normalizeComponent(
501
455
 
502
456
  /***/ }),
503
457
 
458
+ /***/ "3ae0":
459
+ /***/ (function(module, exports, __webpack_require__) {
460
+
461
+ // extracted by mini-css-extract-plugin
462
+
463
+ /***/ }),
464
+
504
465
  /***/ "3cef":
505
466
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
506
467
 
@@ -608,6 +569,17 @@ var removeResizeListener = exports.removeResizeListener = function removeResizeL
608
569
 
609
570
  // extracted by mini-css-extract-plugin
610
571
 
572
+ /***/ }),
573
+
574
+ /***/ "52fd":
575
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
576
+
577
+ "use strict";
578
+ /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_7_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_084d1476_prod_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("3ae0");
579
+ /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_7_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_084d1476_prod_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_7_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_084d1476_prod_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__);
580
+ /* unused harmony reexport * */
581
+
582
+
611
583
  /***/ }),
612
584
 
613
585
  /***/ "5820":
@@ -1697,17 +1669,6 @@ var index = (function () {
1697
1669
 
1698
1670
  // extracted by mini-css-extract-plugin
1699
1671
 
1700
- /***/ }),
1701
-
1702
- /***/ "732a":
1703
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
1704
-
1705
- "use strict";
1706
- /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_7_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_53c7db00_prod_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("e895");
1707
- /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_7_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_53c7db00_prod_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_7_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_53c7db00_prod_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__);
1708
- /* unused harmony reexport * */
1709
-
1710
-
1711
1672
  /***/ }),
1712
1673
 
1713
1674
  /***/ "76cb":
@@ -1827,6 +1788,15 @@ module.exports = {"xtColorPrimary":"#1890ff","xtColorSuccess":"#37c3a4","xtColor
1827
1788
  /* unused harmony reexport * */
1828
1789
 
1829
1790
 
1791
+ /***/ }),
1792
+
1793
+ /***/ "b85c":
1794
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1795
+
1796
+ "use strict";
1797
+ __webpack_require__.r(__webpack_exports__);
1798
+ /* harmony default export */ __webpack_exports__["default"] = ("/* ============================================================\r\n * XT-Element-UI 主题 CSS 变量定义\r\n * 用于注入到子系统 iframe 的 <head> 中\r\n * \r\n * 设计原则:\r\n * 1. 定义 Element UI 所需的全部 CSS 变量(--el-*)\r\n * 2. 亮色主题为默认值(:root)\r\n * 3. 暗色主题通过 [data-theme=\"dark\"] 切换\r\n * 4. 子系统无需任何改造,变量注入即生效\r\n * ============================================================ */\r\n\r\n/* ==================== 亮色主题(默认) ==================== */\r\n:root {\r\n /* 基础色 */\r\n --el-color-white: #ffffff;\r\n --el-color-black: #000000;\r\n\r\n /* 主色 RGB */\r\n --el-color-primary-rgb: 24, 144, 255;\r\n --el-color-success-rgb: 103, 194, 58;\r\n --el-color-warning-rgb: 230, 162, 60;\r\n --el-color-danger-rgb: 245, 108, 108;\r\n --el-color-error-rgb: 245, 108, 108;\r\n --el-color-info-rgb: 144, 147, 153;\r\n\r\n /* 主色 */\r\n --el-color-primary: #1890ff;\r\n --el-color-primary-light-3: #5db1ff;\r\n --el-color-primary-light-5: #8cc8ff;\r\n --el-color-primary-light-7: #badeff;\r\n --el-color-primary-light-8: #d1e9ff;\r\n --el-color-primary-light-9: #e8f4ff;\r\n --el-color-primary-dark-2: #1373cc;\r\n\r\n /* 成功色 */\r\n --el-color-success: #67c23a;\r\n --el-color-success-light-3: #95d475;\r\n --el-color-success-light-5: #b3e19d;\r\n --el-color-success-light-7: #d1edc4;\r\n --el-color-success-light-8: #e1f3d8;\r\n --el-color-success-light-9: #f0f9eb;\r\n --el-color-success-dark-2: #529b2e;\r\n\r\n /* 警告色 */\r\n --el-color-warning: #e6a23c;\r\n --el-color-warning-light-3: #eebe77;\r\n --el-color-warning-light-5: #f3d19e;\r\n --el-color-warning-light-7: #f8e3c5;\r\n --el-color-warning-light-8: #faecd8;\r\n --el-color-warning-light-9: #fdf6ec;\r\n --el-color-warning-dark-2: #b88230;\r\n\r\n /* 危险色 */\r\n --el-color-danger: #f56c6c;\r\n --el-color-danger-light-3: #f89898;\r\n --el-color-danger-light-5: #fab6b6;\r\n --el-color-danger-light-7: #fcd3d3;\r\n --el-color-danger-light-8: #fde2e2;\r\n --el-color-danger-light-9: #fef0f0;\r\n --el-color-danger-dark-2: #c45656;\r\n\r\n /* 错误色 */\r\n --el-color-error: #f56c6c;\r\n --el-color-error-light-3: #f89898;\r\n --el-color-error-light-5: #fab6b6;\r\n --el-color-error-light-7: #fcd3d3;\r\n --el-color-error-light-8: #fde2e2;\r\n --el-color-error-light-9: #fef0f0;\r\n --el-color-error-dark-2: #c45656;\r\n\r\n /* 信息色 */\r\n --el-color-info: #909399;\r\n --el-color-info-light-3: #b1b3b8;\r\n --el-color-info-light-5: #c8c9cc;\r\n --el-color-info-light-7: #dedfe0;\r\n --el-color-info-light-8: #e9e9eb;\r\n --el-color-info-light-9: #f4f4f5;\r\n --el-color-info-dark-2: #73767a;\r\n\r\n /* 背景色 */\r\n --el-bg-color: #ffffff;\r\n --el-bg-color-page: #f2f3f5;\r\n --el-bg-color-overlay: #ffffff;\r\n --el-bg-color-block: #ffffff;\r\n\r\n /* 文字色 */\r\n --el-text-color-primary: #303133;\r\n --el-text-color-regular: #606266;\r\n --el-text-color-secondary: #909399;\r\n --el-text-color-placeholder: #a8abb2;\r\n --el-text-color-disabled: #c0c4cc;\r\n\r\n /* 边框色 */\r\n --el-border-color: #dcdfe6;\r\n --el-border-color-light: #e4e7ed;\r\n --el-border-color-lighter: #ebeef5;\r\n --el-border-color-extra-light: #f2f6fc;\r\n --el-border-color-dark: #d4d7de;\r\n --el-border-color-darker: #cdd0d6;\r\n\r\n /* 填充色 */\r\n --el-fill-color: #f0f2f5;\r\n --el-fill-color-light: #f5f7fa;\r\n --el-fill-color-lighter: #fafafa;\r\n --el-fill-color-extra-light: #fafcff;\r\n --el-fill-color-dark: #ebedf0;\r\n --el-fill-color-darker: #e6e8eb;\r\n --el-fill-color-blank: #ffffff;\r\n\r\n /* 阴影 */\r\n --el-box-shadow: 0px 12px 32px 4px rgba(0, 0, 0, .04), 0px 8px 20px rgba(0, 0, 0, .08);\r\n --el-box-shadow-light: 0px 0px 12px rgba(0, 0, 0, .12);\r\n --el-box-shadow-lighter: 0px 0px 6px rgba(0, 0, 0, .12);\r\n --el-box-shadow-dark: 0px 16px 48px 16px rgba(0, 0, 0, .08), 0px 12px 32px rgba(0, 0, 0, .12), 0px 8px 16px -8px rgba(0, 0, 0, .16);\r\n\r\n /* 禁用状态 */\r\n --el-disabled-bg-color: var(--el-fill-color-light);\r\n --el-disabled-text-color: var(--el-text-color-placeholder);\r\n --el-disabled-border-color: var(--el-border-color-light);\r\n\r\n /* 遮罩 */\r\n --el-overlay-color: rgba(0, 0, 0, .8);\r\n --el-overlay-color-light: rgba(0, 0, 0, .7);\r\n --el-overlay-color-lighter: rgba(0, 0, 0, .5);\r\n --el-mask-color: rgba(255, 255, 255, .9);\r\n --el-mask-color-extra-light: rgba(255, 255, 255, .3);\r\n\r\n /* 边框 */\r\n --el-border-width: 1px;\r\n --el-border-style: solid;\r\n --el-border-color-hover: var(--el-text-color-disabled);\r\n --el-border: var(--el-border-width) var(--el-border-style) var(--el-border-color);\r\n\r\n /* 字体 */\r\n --el-font-size-extra-large: 20px;\r\n --el-font-size-large: 18px;\r\n --el-font-size-medium: 16px;\r\n --el-font-size-base: 14px;\r\n --el-font-size-small: 13px;\r\n --el-font-size-extra-small: 12px;\r\n --el-font-family: \"Helvetica Neue\", Helvetica, \"PingFang SC\", \"Hiragino Sans GB\", \"Microsoft YaHei\", \"微软雅黑\", Arial, sans-serif;\r\n --el-font-weight-primary: 500;\r\n\r\n /* 圆角 */\r\n --el-border-radius-base: 4px;\r\n --el-border-radius-small: 2px;\r\n --el-border-radius-round: 20px;\r\n --el-border-radius-circle: 100%;\r\n\r\n /* 过渡 */\r\n --el-transition-duration: .3s;\r\n --el-transition-duration-fast: .2s;\r\n --el-transition-function-ease-in-out-bezier: cubic-bezier(.645, .045, .355, 1);\r\n --el-transition-fast-bezier: cubic-bezier(.23, 1, .32, 1);\r\n --el-transition-all: all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);\r\n --el-transition-fade: opacity var(--el-transition-duration) var(--el-transition-fast-bezier);\r\n --el-transition-md-fade: transform var(--el-transition-duration) var(--el-transition-fast-bezier), opacity var(--el-transition-duration) var(--el-transition-fast-bezier);\r\n --el-transition-fade-linear: opacity var(--el-transition-duration-fast) linear;\r\n --el-transition-border: border-color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);\r\n --el-transition-box-shadow: box-shadow var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);\r\n --el-transition-color: color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);\r\n\r\n /* 组件尺寸 */\r\n --el-component-size-large: 40px;\r\n --el-component-size: 32px;\r\n --el-component-size-small: 24px;\r\n\r\n /* 间距 */\r\n --el-spacing-xs: 8px;\r\n --el-spacing-sm: 12px;\r\n --el-spacing-md: 16px;\r\n --el-spacing-lg: 24px;\r\n --el-spacing-xl: 32px;\r\n\r\n /* 层级 */\r\n --el-index-normal: 1;\r\n --el-index-top: 1000;\r\n --el-index-popper: 2000;\r\n}\r\n\r\n/* ==================== 暗色主题 ==================== */\r\n:root[data-theme=\"dark\"],\r\n[data-theme=\"dark\"],\r\nhtml.dark {\r\n color-scheme: dark;\r\n\r\n /* 主色 - 暗色下稍亮 */\r\n --el-color-primary: #409eff;\r\n --el-color-primary-light-3: #3375b9;\r\n --el-color-primary-light-5: #2a598a;\r\n --el-color-primary-light-7: #213d5b;\r\n --el-color-primary-light-8: #1d3043;\r\n --el-color-primary-light-9: #18222b;\r\n --el-color-primary-dark-2: #66b1ff;\r\n\r\n /* 成功色 */\r\n --el-color-success: #67c23a;\r\n --el-color-success-light-3: #4e8e2f;\r\n --el-color-success-light-5: #3e6b27;\r\n --el-color-success-light-7: #2d481f;\r\n --el-color-success-light-8: #25371c;\r\n --el-color-success-light-9: #1c2518;\r\n --el-color-success-dark-2: #85ce61;\r\n\r\n /* 警告色 */\r\n --el-color-warning: #e6a23c;\r\n --el-color-warning-light-3: #a77730;\r\n --el-color-warning-light-5: #7d5b28;\r\n --el-color-warning-light-7: #533f20;\r\n --el-color-warning-light-8: #3e301c;\r\n --el-color-warning-light-9: #292218;\r\n --el-color-warning-dark-2: #ebb563;\r\n\r\n /* 危险色 */\r\n --el-color-danger: #f56c6c;\r\n --el-color-danger-light-3: #b25252;\r\n --el-color-danger-light-5: #854040;\r\n --el-color-danger-light-7: #582e2e;\r\n --el-color-danger-light-8: #412626;\r\n --el-color-danger-light-9: #2a1d1d;\r\n --el-color-danger-dark-2: #f78989;\r\n\r\n /* 错误色 */\r\n --el-color-error: #f56c6c;\r\n --el-color-error-light-3: #b25252;\r\n --el-color-error-light-5: #854040;\r\n --el-color-error-light-7: #582e2e;\r\n --el-color-error-light-8: #412626;\r\n --el-color-error-light-9: #2a1d1d;\r\n --el-color-error-dark-2: #f78989;\r\n\r\n /* 信息色 */\r\n --el-color-info: #909399;\r\n --el-color-info-light-3: #6b6d71;\r\n --el-color-info-light-5: #525457;\r\n --el-color-info-light-7: #393a3c;\r\n --el-color-info-light-8: #2d2d2f;\r\n --el-color-info-light-9: #202121;\r\n --el-color-info-dark-2: #a6a9ad;\r\n\r\n /* 背景色 */\r\n --el-bg-color: #141414;\r\n --el-bg-color-page: #0a0a0a;\r\n --el-bg-color-overlay: #1d1e1f;\r\n --el-bg-color-block: #141414;\r\n\r\n /* 文字色 */\r\n --el-text-color-primary: #E5EAF3;\r\n --el-text-color-regular: #CFD3DC;\r\n --el-text-color-secondary: #A3A6AD;\r\n --el-text-color-placeholder: #8D9095;\r\n --el-text-color-disabled: #6C6E72;\r\n\r\n /* 边框色 */\r\n --el-border-color: #4C4D4F;\r\n --el-border-color-light: #414243;\r\n --el-border-color-lighter: #363637;\r\n --el-border-color-extra-light: #2B2B2C;\r\n --el-border-color-dark: #58585B;\r\n --el-border-color-darker: #636466;\r\n\r\n /* 填充色 */\r\n --el-fill-color: #303030;\r\n --el-fill-color-light: #262727;\r\n --el-fill-color-lighter: #1D1D1D;\r\n --el-fill-color-extra-light: #191919;\r\n --el-fill-color-dark: #39393A;\r\n --el-fill-color-darker: #424243;\r\n --el-fill-color-blank: #141414;\r\n\r\n /* 阴影 */\r\n --el-box-shadow: 0px 12px 32px 4px rgba(0, 0, 0, .36), 0px 8px 20px rgba(0, 0, 0, .72);\r\n --el-box-shadow-light: 0px 0px 12px rgba(0, 0, 0, .72);\r\n --el-box-shadow-lighter: 0px 0px 6px rgba(0, 0, 0, .72);\r\n --el-box-shadow-dark: 0px 16px 48px 16px rgba(0, 0, 0, .72), 0px 12px 32px #000000, 0px 8px 16px -8px #000000;\r\n\r\n /* 遮罩 */\r\n --el-mask-color: rgba(0, 0, 0, .8);\r\n --el-mask-color-extra-light: rgba(0, 0, 0, .3);\r\n}");
1799
+
1830
1800
  /***/ }),
1831
1801
 
1832
1802
  /***/ "b8f0":
@@ -1907,6 +1877,15 @@ try {
1907
1877
  module.exports = g;
1908
1878
 
1909
1879
 
1880
+ /***/ }),
1881
+
1882
+ /***/ "c8e4":
1883
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1884
+
1885
+ "use strict";
1886
+ __webpack_require__.r(__webpack_exports__);
1887
+ /* harmony default export */ __webpack_exports__["default"] = ("/* ============================================================\n * XT-Element-UI Element UI 组件样式覆盖\n * 用于注入到子系统 iframe 的 <head> 中\n *\n * 设计原则:\n * 1. 覆盖 Element UI 编译后的固定颜色值,使其使用 CSS 变量\n * 2. 使用 !important 确保覆盖编译后的样式\n * 3. 子系统无需任何改造,注入此 CSS 后主题变量即生效\n * 4. 覆盖范围:所有核心颜色属性(背景、文字、边框、主色)\n * ============================================================ */\n\n/* ==================== Button 按钮 ==================== */\n.el-button--primary {\n background-color: var(--el-color-primary) !important;\n border-color: var(--el-color-primary) !important;\n color: var(--el-color-white) !important;\n}\n.el-button--primary:hover,\n.el-button--primary:focus {\n background-color: var(--el-color-primary-light-3) !important;\n border-color: var(--el-color-primary-light-3) !important;\n}\n.el-button--primary:active {\n background-color: var(--el-color-primary-dark-2) !important;\n border-color: var(--el-color-primary-dark-2) !important;\n}\n.el-button--primary.is-plain {\n background-color: var(--el-color-primary-light-9) !important;\n border-color: var(--el-color-primary-light-5) !important;\n color: var(--el-color-primary) !important;\n}\n.el-button--primary.is-plain:hover,\n.el-button--primary.is-plain:focus {\n background-color: var(--el-color-primary) !important;\n border-color: var(--el-color-primary) !important;\n color: var(--el-color-white) !important;\n}\n.el-button--primary.is-disabled,\n.el-button--primary.is-disabled:hover {\n background-color: var(--el-color-primary-light-5) !important;\n border-color: var(--el-color-primary-light-5) !important;\n}\n\n/* 成功按钮 */\n.el-button--success {\n background-color: var(--el-color-success) !important;\n border-color: var(--el-color-success) !important;\n}\n.el-button--success.is-plain {\n color: var(--el-color-success) !important;\n border-color: var(--el-color-success-light-5) !important;\n background-color: var(--el-color-success-light-9) !important;\n}\n\n/* 警告按钮 */\n.el-button--warning {\n background-color: var(--el-color-warning) !important;\n border-color: var(--el-color-warning) !important;\n}\n.el-button--warning.is-plain {\n color: var(--el-color-warning) !important;\n border-color: var(--el-color-warning-light-5) !important;\n background-color: var(--el-color-warning-light-9) !important;\n}\n\n/* 危险按钮 */\n.el-button--danger {\n background-color: var(--el-color-danger) !important;\n border-color: var(--el-color-danger) !important;\n}\n.el-button--danger.is-plain {\n color: var(--el-color-danger) !important;\n border-color: var(--el-color-danger-light-5) !important;\n background-color: var(--el-color-danger-light-9) !important;\n}\n\n/* 信息按钮 */\n.el-button--info {\n background-color: var(--el-color-info) !important;\n border-color: var(--el-color-info) !important;\n}\n.el-button--info.is-plain {\n color: var(--el-color-info) !important;\n border-color: var(--el-color-info-light-5) !important;\n background-color: var(--el-color-info-light-9) !important;\n}\n\n/* 默认按钮 */\n.el-button--default {\n background-color: var(--el-bg-color) !important;\n border-color: var(--el-border-color) !important;\n color: var(--el-text-color-regular) !important;\n}\n.el-button--default:hover {\n color: var(--el-color-primary) !important;\n border-color: var(--el-color-primary-light-5) !important;\n background-color: var(--el-color-primary-light-9) !important;\n}\n\n/* 文字按钮 */\n.el-button--text {\n color: var(--el-color-primary) !important;\n}\n\n/* ==================== Input 输入框 ==================== */\n.el-input__inner {\n background-color: var(--el-bg-color) !important;\n border-color: var(--el-border-color) !important;\n color: var(--el-text-color-regular) !important;\n}\n.el-input__inner:hover {\n border-color: var(--el-border-color-dark) !important;\n}\n.el-input__inner:focus {\n border-color: var(--el-color-primary) !important;\n}\n.el-input__inner::placeholder {\n color: var(--el-text-color-placeholder) !important;\n}\n.el-input.is-disabled .el-input__inner {\n background-color: var(--el-fill-color-light) !important;\n border-color: var(--el-border-color-lighter) !important;\n color: var(--el-text-color-disabled) !important;\n}\n\n/* Textarea */\n.el-textarea__inner {\n background-color: var(--el-bg-color) !important;\n border-color: var(--el-border-color) !important;\n color: var(--el-text-color-regular) !important;\n}\n.el-textarea__inner:hover {\n border-color: var(--el-border-color-dark) !important;\n}\n.el-textarea__inner:focus {\n border-color: var(--el-color-primary) !important;\n}\n\n/* ==================== Select 选择器 ==================== */\n.el-select .el-input__inner {\n background-color: var(--el-bg-color) !important;\n border-color: var(--el-border-color) !important;\n color: var(--el-text-color-regular) !important;\n}\n.el-select-dropdown {\n background-color: var(--el-bg-color-overlay) !important;\n border-color: var(--el-border-color-light) !important;\n}\n.el-select-dropdown__item {\n color: var(--el-text-color-regular) !important;\n}\n.el-select-dropdown__item:hover {\n background-color: var(--el-fill-color-light) !important;\n}\n.el-select-dropdown__item.selected {\n color: var(--el-color-primary) !important;\n}\n.el-select-dropdown__item.is-disabled {\n color: var(--el-text-color-disabled) !important;\n}\n\n/* ==================== Table 表格 ==================== */\n.el-table {\n background-color: var(--el-bg-color) !important;\n color: var(--el-text-color-regular) !important;\n}\n.el-table th {\n background-color: var(--el-fill-color) !important;\n color: var(--el-text-color-primary) !important;\n border-color: var(--el-border-color-lighter) !important;\n}\n.el-table td {\n border-color: var(--el-border-color-lighter) !important;\n}\n.el-table--striped .el-table__body tr.el-table__row--striped td {\n background-color: var(--el-fill-color-lighter) !important;\n}\n.el-table--enable-row-hover .el-table__body tr:hover > td {\n background-color: var(--el-fill-color-light) !important;\n}\n.el-table__body tr.current-row > td {\n background-color: var(--el-color-primary-light-9) !important;\n}\n.el-table__fixed-right::before,\n.el-table__fixed::before {\n background-color: var(--el-border-color-lighter) !important;\n}\n.el-table__border::after {\n background-color: var(--el-border-color-lighter) !important;\n}\n\n/* ==================== Dialog 对话框 ==================== */\n.el-dialog {\n background-color: var(--el-bg-color-overlay) !important;\n}\n.el-dialog__title {\n color: var(--el-text-color-primary) !important;\n}\n.el-dialog__header {\n border-bottom-color: var(--el-border-color-lighter) !important;\n}\n.el-dialog__footer {\n border-top-color: var(--el-border-color-lighter) !important;\n}\n.el-dialog__body {\n color: var(--el-text-color-regular) !important;\n}\n\n/* ==================== Menu 菜单 ==================== */\n.el-menu {\n background-color: var(--el-bg-color) !important;\n border-color: var(--el-border-color-lighter) !important;\n}\n.el-menu-item {\n color: var(--el-text-color-regular) !important;\n}\n.el-menu-item:hover {\n background-color: var(--el-fill-color-light) !important;\n}\n.el-menu-item.is-active {\n color: var(--el-color-primary) !important;\n border-bottom-color: var(--el-color-primary) !important;\n}\n.el-submenu__title {\n color: var(--el-text-color-regular) !important;\n}\n.el-submenu__title:hover {\n background-color: var(--el-fill-color-light) !important;\n}\n\n/* 暗色菜单 */\n.el-menu--dark {\n background-color: var(--el-bg-color) !important;\n}\n.el-menu--dark .el-menu-item {\n color: var(--el-text-color-primary) !important;\n}\n.el-menu--dark .el-menu-item:hover {\n background-color: var(--el-fill-color) !important;\n}\n\n/* ==================== Tabs 标签页 ==================== */\n.el-tabs__header {\n border-bottom-color: var(--el-border-color-lighter) !important;\n}\n.el-tabs__item {\n color: var(--el-text-color-regular) !important;\n}\n.el-tabs__item:hover {\n color: var(--el-color-primary) !important;\n}\n.el-tabs__item.is-active {\n color: var(--el-color-primary) !important;\n}\n.el-tabs__active-bar {\n background-color: var(--el-color-primary) !important;\n}\n.el-tabs__nav-wrap::after {\n background-color: var(--el-border-color-light) !important;\n}\n\n/* ==================== Tag 标签 ==================== */\n.el-tag {\n background-color: var(--el-fill-color-light) !important;\n border-color: var(--el-border-color-lighter) !important;\n color: var(--el-text-color-primary) !important;\n}\n.el-tag--primary {\n background-color: var(--el-color-primary-light-9) !important;\n border-color: var(--el-color-primary-light-7) !important;\n color: var(--el-color-primary) !important;\n}\n.el-tag--success {\n background-color: var(--el-color-success-light-9) !important;\n border-color: var(--el-color-success-light-7) !important;\n color: var(--el-color-success) !important;\n}\n.el-tag--warning {\n background-color: var(--el-color-warning-light-9) !important;\n border-color: var(--el-color-warning-light-7) !important;\n color: var(--el-color-warning) !important;\n}\n.el-tag--danger {\n background-color: var(--el-color-danger-light-9) !important;\n border-color: var(--el-color-danger-light-7) !important;\n color: var(--el-color-danger) !important;\n}\n.el-tag--info {\n background-color: var(--el-color-info-light-9) !important;\n border-color: var(--el-color-info-light-7) !important;\n color: var(--el-color-info) !important;\n}\n\n/* ==================== Pagination 分页 ==================== */\n.el-pagination {\n color: var(--el-text-color-regular) !important;\n}\n.el-pagination button {\n background-color: var(--el-bg-color) !important;\n color: var(--el-text-color-regular) !important;\n}\n.el-pagination button:hover {\n color: var(--el-color-primary) !important;\n}\n.el-pagination .el-pager li {\n background-color: var(--el-bg-color) !important;\n color: var(--el-text-color-regular) !important;\n}\n.el-pagination .el-pager li:hover {\n color: var(--el-color-primary) !important;\n}\n.el-pagination .el-pager li.active {\n background-color: var(--el-color-primary) !important;\n color: var(--el-color-white) !important;\n}\n\n/* ==================== Form 表单 ==================== */\n.el-form-item__label {\n color: var(--el-text-color-regular) !important;\n}\n.el-form-item__error {\n color: var(--el-color-danger) !important;\n}\n\n/* ==================== Checkbox 复选框 ==================== */\n.el-checkbox__input.is-checked .el-checkbox__inner {\n background-color: var(--el-color-primary) !important;\n border-color: var(--el-color-primary) !important;\n}\n.el-checkbox__input.is-checked + .el-checkbox__label {\n color: var(--el-color-primary) !important;\n}\n.el-checkbox__label {\n color: var(--el-text-color-regular) !important;\n}\n\n/* ==================== Radio 单选框 ==================== */\n.el-radio__input.is-checked .el-radio__inner {\n background-color: var(--el-color-primary) !important;\n border-color: var(--el-color-primary) !important;\n}\n.el-radio__input.is-checked + .el-radio__label {\n color: var(--el-color-primary) !important;\n}\n.el-radio__label {\n color: var(--el-text-color-regular) !important;\n}\n\n/* ==================== Switch 开关 ==================== */\n.el-switch.is-checked .el-switch__core {\n background-color: var(--el-color-primary) !important;\n border-color: var(--el-color-primary) !important;\n}\n\n/* ==================== DatePicker 日期选择器 ==================== */\n.el-date-table td.current:not(.disabled) span {\n background-color: var(--el-color-primary) !important;\n color: var(--el-color-white) !important;\n}\n.el-date-table td.today span {\n color: var(--el-color-primary) !important;\n}\n.el-date-table td.available:hover {\n color: var(--el-color-primary) !important;\n}\n.el-picker-panel {\n background-color: var(--el-bg-color-overlay) !important;\n color: var(--el-text-color-regular) !important;\n border-color: var(--el-border-color-light) !important;\n}\n.el-picker-panel__icon-btn:hover {\n color: var(--el-color-primary) !important;\n}\n\n/* ==================== Dropdown 下拉菜单 ==================== */\n.el-dropdown-menu {\n background-color: var(--el-bg-color-overlay) !important;\n border-color: var(--el-border-color-light) !important;\n}\n.el-dropdown-menu__item {\n color: var(--el-text-color-regular) !important;\n}\n.el-dropdown-menu__item:hover {\n background-color: var(--el-fill-color-light) !important;\n color: var(--el-color-primary) !important;\n}\n\n/* ==================== Cascader 级联选择器 ==================== */\n.el-cascader-menu {\n background-color: var(--el-bg-color-overlay) !important;\n color: var(--el-text-color-regular) !important;\n border-color: var(--el-border-color-light) !important;\n}\n.el-cascader-node:not(.is-disabled):hover {\n background-color: var(--el-fill-color-light) !important;\n}\n.el-cascader-node.is-active {\n color: var(--el-color-primary) !important;\n}\n\n/* ==================== Tree 树形控件 ==================== */\n.el-tree {\n background-color: var(--el-bg-color) !important;\n color: var(--el-text-color-regular) !important;\n}\n.el-tree-node__content:hover {\n background-color: var(--el-fill-color-light) !important;\n}\n.el-tree-node:focus > .el-tree-node__content {\n background-color: var(--el-fill-color-light) !important;\n}\n.el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content {\n background-color: var(--el-color-primary-light-9) !important;\n}\n\n/* ==================== Loading / Message / Notification ==================== */\n.el-loading-mask {\n background-color: var(--el-mask-color-extra-light) !important;\n}\n\n.el-message {\n background-color: var(--el-bg-color-overlay) !important;\n border-color: var(--el-border-color-light) !important;\n}\n.el-message--success {\n background-color: var(--el-color-success-light-9) !important;\n border-color: var(--el-color-success-light-7) !important;\n}\n.el-message--warning {\n background-color: var(--el-color-warning-light-9) !important;\n border-color: var(--el-color-warning-light-7) !important;\n}\n.el-message--error {\n background-color: var(--el-color-error-light-9) !important;\n border-color: var(--el-color-error-light-7) !important;\n}\n.el-message--info {\n background-color: var(--el-color-info-light-9) !important;\n border-color: var(--el-color-info-light-7) !important;\n}\n\n.el-notification {\n background-color: var(--el-bg-color-overlay) !important;\n border-color: var(--el-border-color-light) !important;\n}\n\n/* ==================== Breadcrumb 面包屑 ==================== */\n.el-breadcrumb__inner {\n color: var(--el-text-color-regular) !important;\n}\n.el-breadcrumb__inner.is-link:hover {\n color: var(--el-color-primary) !important;\n}\n\n/* ==================== Steps 步骤条 ==================== */\n.el-step__title.is-process {\n color: var(--el-text-color-primary) !important;\n}\n.el-step__title.is-wait {\n color: var(--el-text-color-placeholder) !important;\n}\n.el-step__head.is-process {\n color: var(--el-color-primary) !important;\n border-color: var(--el-color-primary) !important;\n}\n.el-step__head.is-finish {\n color: var(--el-color-primary) !important;\n border-color: var(--el-color-primary) !important;\n}\n.el-step__line-inner {\n background-color: var(--el-border-color) !important;\n}\n\n/* ==================== Card 卡片 ==================== */\n.el-card {\n background-color: var(--el-bg-color) !important;\n border-color: var(--el-border-color-light) !important;\n color: var(--el-text-color-regular) !important;\n}\n.el-card__header {\n border-bottom-color: var(--el-border-color-lighter) !important;\n}\n\n/* ==================== Collapse 折叠面板 ==================== */\n.el-collapse {\n border-color: var(--el-border-color-light) !important;\n}\n.el-collapse-item__header {\n background-color: var(--el-bg-color) !important;\n color: var(--el-text-color-primary) !important;\n border-bottom-color: var(--el-border-color-lighter) !important;\n}\n.el-collapse-item__wrap {\n background-color: var(--el-bg-color) !important;\n border-bottom-color: var(--el-border-color-lighter) !important;\n}\n.el-collapse-item__content {\n color: var(--el-text-color-regular) !important;\n}\n\n/* ==================== Alert 警告 ==================== */\n.el-alert--success {\n background-color: var(--el-color-success-light-9) !important;\n}\n.el-alert--warning {\n background-color: var(--el-color-warning-light-9) !important;\n}\n.el-alert--error {\n background-color: var(--el-color-danger-light-9) !important;\n}\n.el-alert--info {\n background-color: var(--el-color-info-light-9) !important;\n}\n\n/* ==================== Badge 标记 ==================== */\n.el-badge__content--primary {\n background-color: var(--el-color-primary) !important;\n}\n.el-badge__content--success {\n background-color: var(--el-color-success) !important;\n}\n.el-badge__content--warning {\n background-color: var(--el-color-warning) !important;\n}\n.el-badge__content--danger {\n background-color: var(--el-color-danger) !important;\n}\n.el-badge__content--info {\n background-color: var(--el-color-info) !important;\n}\n\n/* ==================== Progress 进度条 ==================== */\n.el-progress-bar__inner {\n background-color: var(--el-color-primary) !important;\n}\n.el-progress-bar__outer {\n background-color: var(--el-fill-color) !important;\n}\n.el-progress--success .el-progress-bar__inner {\n background-color: var(--el-color-success) !important;\n}\n.el-progress--exception .el-progress-bar__inner {\n background-color: var(--el-color-danger) !important;\n}\n\n/* ==================== Slider 滑块 ==================== */\n.el-slider__bar {\n background-color: var(--el-color-primary) !important;\n}\n.el-slider__button {\n border-color: var(--el-color-primary) !important;\n}\n\n/* ==================== Transfer 穿梭框 ==================== */\n.el-transfer-panel {\n background-color: var(--el-bg-color) !important;\n border-color: var(--el-border-color-light) !important;\n}\n.el-transfer-panel__header {\n background-color: var(--el-fill-color-light) !important;\n border-bottom-color: var(--el-border-color-lighter) !important;\n color: var(--el-text-color-primary) !important;\n}\n.el-transfer-panel__item.el-checkbox {\n color: var(--el-text-color-regular) !important;\n}\n\n/* ==================== Drawer 抽屉 ==================== */\n.el-drawer {\n background-color: var(--el-bg-color-overlay) !important;\n}\n.el-drawer__header {\n color: var(--el-text-color-primary) !important;\n}\n.el-drawer__body {\n color: var(--el-text-color-regular) !important;\n}\n\n/* ==================== Popover / Tooltip ==================== */\n.el-popover {\n background-color: var(--el-bg-color-overlay) !important;\n border-color: var(--el-border-color-light) !important;\n color: var(--el-text-color-regular) !important;\n}\n\n/* ==================== 全局背景/文字 ==================== */\nbody {\n background-color: var(--el-bg-color-page) !important;\n color: var(--el-text-color-primary) !important;\n}\n\n/* 链接色 */\na {\n color: var(--el-color-primary) !important;\n}\na:hover {\n color: var(--el-color-primary-light-3) !important;\n}\n\n/* 分割线 */\n.el-divider__text {\n background-color: var(--el-bg-color) !important;\n color: var(--el-text-color-primary) !important;\n}\n.el-divider--horizontal {\n border-top-color: var(--el-border-color-lighter) !important;\n}");
1888
+
1910
1889
  /***/ }),
1911
1890
 
1912
1891
  /***/ "ceb9":
@@ -1999,13 +1978,6 @@ exports.default = {
1999
1978
 
2000
1979
  /***/ }),
2001
1980
 
2002
- /***/ "e895":
2003
- /***/ (function(module, exports, __webpack_require__) {
2004
-
2005
- // extracted by mini-css-extract-plugin
2006
-
2007
- /***/ }),
2008
-
2009
1981
  /***/ "e8d2":
2010
1982
  /***/ (function(module, exports, __webpack_require__) {
2011
1983
 
@@ -2031,6 +2003,13 @@ exports.default = {
2031
2003
 
2032
2004
  /***/ }),
2033
2005
 
2006
+ /***/ "f699":
2007
+ /***/ (function(module, exports, __webpack_require__) {
2008
+
2009
+ // extracted by mini-css-extract-plugin
2010
+
2011
+ /***/ }),
2012
+
2034
2013
  /***/ "fb15":
2035
2014
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2036
2015
 
@@ -2072,6 +2051,7 @@ __webpack_require__.d(__webpack_exports__, "XtIcon", function() { return /* reex
2072
2051
  __webpack_require__.d(__webpack_exports__, "XtTable", function() { return /* reexport */ components_xt_table; });
2073
2052
  __webpack_require__.d(__webpack_exports__, "XtList", function() { return /* reexport */ components_xt_list; });
2074
2053
  __webpack_require__.d(__webpack_exports__, "XtScrollArrow", function() { return /* reexport */ components_xt_scroll_arrow; });
2054
+ __webpack_require__.d(__webpack_exports__, "XtScroll", function() { return /* reexport */ components_xt_scroll; });
2075
2055
  __webpack_require__.d(__webpack_exports__, "XtBar", function() { return /* reexport */ XtBar; });
2076
2056
  __webpack_require__.d(__webpack_exports__, "XtLine", function() { return /* reexport */ XtLine; });
2077
2057
  __webpack_require__.d(__webpack_exports__, "XtChart", function() { return /* reexport */ components_xt_chart; });
@@ -2083,6 +2063,7 @@ __webpack_require__.d(__webpack_exports__, "XtUpload", function() { return /* re
2083
2063
  __webpack_require__.d(__webpack_exports__, "XtTransferTree", function() { return /* reexport */ components_xt_transfer_tree; });
2084
2064
  __webpack_require__.d(__webpack_exports__, "XtFormSchema", function() { return /* reexport */ components_xt_form_schema; });
2085
2065
  __webpack_require__.d(__webpack_exports__, "XtFlow", function() { return /* reexport */ components_xt_flow; });
2066
+ __webpack_require__.d(__webpack_exports__, "Theme", function() { return /* reexport */ components_theme; });
2086
2067
 
2087
2068
  // CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js
2088
2069
  // This file is imported into lib/wc client bundles.
@@ -2886,480 +2867,708 @@ EchartsUtil.destroyAll = function() {
2886
2867
 
2887
2868
 
2888
2869
 
2870
+ // CONCATENATED MODULE: ./src/utils/color.js
2871
+ /**
2872
+ * 颜色工具函数
2873
+ * 供 utils/index.js 和 theme/iframe-injector.js 共同使用
2874
+ */
2875
+
2876
+ /**
2877
+ * 十六进制颜色转 RGB 字符串 "r, g, b"
2878
+ */
2879
+ function hexToRgb(hex) {
2880
+ const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex)
2881
+ return result
2882
+ ? `${parseInt(result[1], 16)}, ${parseInt(result[2], 16)}, ${parseInt(result[3], 16)}`
2883
+ : '24, 144, 255'
2884
+ }
2885
+
2886
+ /**
2887
+ * 十六进制颜色转 RGB 对象 { r, g, b }
2888
+ */
2889
+ function hexToRgbObject(hex) {
2890
+ const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex)
2891
+ return result ? {
2892
+ r: parseInt(result[1], 16),
2893
+ g: parseInt(result[2], 16),
2894
+ b: parseInt(result[3], 16)
2895
+ } : null
2896
+ }
2897
+
2898
+ /**
2899
+ * RGB 对象转十六进制
2900
+ */
2901
+ function rgbToHex(r, g, b) {
2902
+ return '#' + [r, g, b].map(x => {
2903
+ const hex = x.toString(16)
2904
+ return hex.length === 1 ? '0' + hex : hex
2905
+ }).join('')
2906
+ }
2907
+
2908
+ /**
2909
+ * 加深颜色(amount 范围 0-100,表示减少的量)
2910
+ */
2911
+ function darkenColor(hex, amount) {
2912
+ const obj = hexToRgbObject(hex)
2913
+ if (!obj) return hex
2914
+ const r = Math.max(0, obj.r - amount)
2915
+ const g = Math.max(0, obj.g - amount)
2916
+ const b = Math.max(0, obj.b - amount)
2917
+ return rgbToHex(r, g, b)
2918
+ }
2919
+
2920
+ /**
2921
+ * 减淡/变亮颜色(percent 范围 0-100,表示增加的百分比)
2922
+ */
2923
+ function lightenColor(hex, percent) {
2924
+ const obj = hexToRgbObject(hex)
2925
+ if (!obj) return hex
2926
+ const amount = Math.round(2.55 * percent)
2927
+ const r = Math.min(255, obj.r + amount)
2928
+ const g = Math.min(255, obj.g + amount)
2929
+ const b = Math.min(255, obj.b + amount)
2930
+ return rgbToHex(r, g, b)
2931
+ }
2932
+
2933
+ /**
2934
+ * 根据主色调生成 Element UI 主色 CSS 变量
2935
+ * 返回 { '--el-color-primary': hex, '--el-color-primary-light-3': hex, ... }
2936
+ */
2937
+ function generatePrimaryColorVars(primaryColor) {
2938
+ const prefix = '--el-color-primary'
2939
+ return {
2940
+ [prefix]: primaryColor,
2941
+ [`${prefix}-light-3`]: lightenColor(primaryColor, 30),
2942
+ [`${prefix}-light-5`]: lightenColor(primaryColor, 50),
2943
+ [`${prefix}-light-7`]: lightenColor(primaryColor, 70),
2944
+ [`${prefix}-light-8`]: lightenColor(primaryColor, 80),
2945
+ [`${prefix}-light-9`]: lightenColor(primaryColor, 90),
2946
+ [`${prefix}-dark-2`]: darkenColor(primaryColor, 20),
2947
+ [`${prefix}-rgb`]: hexToRgb(primaryColor)
2948
+ }
2949
+ }
2950
+
2951
+ /**
2952
+ * 根据主色调生成 xt 组件主色 CSS 变量
2953
+ * 返回 { '--xt-color-primary': hex, ... }
2954
+ */
2955
+ function generateXtPrimaryColorVars(primaryColor) {
2956
+ const prefix = '--xt-color-primary'
2957
+ return {
2958
+ [prefix]: primaryColor,
2959
+ [`${prefix}-light-3`]: lightenColor(primaryColor, 30),
2960
+ [`${prefix}-light-5`]: lightenColor(primaryColor, 50),
2961
+ [`${prefix}-light-7`]: lightenColor(primaryColor, 70),
2962
+ [`${prefix}-light-8`]: lightenColor(primaryColor, 80),
2963
+ [`${prefix}-light-9`]: lightenColor(primaryColor, 90)
2964
+ }
2965
+ }
2966
+
2967
+ /* harmony default export */ var utils_color = ({
2968
+ hexToRgb,
2969
+ hexToRgbObject,
2970
+ rgbToHex,
2971
+ darkenColor,
2972
+ lightenColor,
2973
+ generatePrimaryColorVars,
2974
+ generateXtPrimaryColorVars
2975
+ });
2976
+ // CONCATENATED MODULE: ./src/utils/theme-vars.js
2977
+ /**
2978
+ * 主题 CSS 变量常量
2979
+ * 供 utils/index.js 和 theme/iframe-injector.js 共同使用
2980
+ * 定义 Element UI 组件主题相关的 CSS 变量映射
2981
+ */
2982
+
2983
+
2984
+ /**
2985
+ * 亮色主题 Element UI CSS 变量(关键子集:主色/背景/文字/边框/填充/遮罩)
2986
+ */
2987
+ const LIGHT_THEME_VARS = {
2988
+ '--el-color-primary': '#1890ff',
2989
+ '--el-color-success': '#67c23a',
2990
+ '--el-color-warning': '#e6a23c',
2991
+ '--el-color-danger': '#f56c6c',
2992
+ '--el-color-error': '#f56c6c',
2993
+ '--el-color-info': '#909399',
2994
+ '--el-bg-color': '#ffffff',
2995
+ '--el-bg-color-page': '#f2f3f5',
2996
+ '--el-bg-color-overlay': '#ffffff',
2997
+ '--el-text-color-primary': '#303133',
2998
+ '--el-text-color-regular': '#606266',
2999
+ '--el-text-color-secondary': '#909399',
3000
+ '--el-text-color-placeholder': '#a8abb2',
3001
+ '--el-text-color-disabled': '#c0c4cc',
3002
+ '--el-border-color': '#dcdfe6',
3003
+ '--el-border-color-light': '#e4e7ed',
3004
+ '--el-border-color-lighter': '#ebeef5',
3005
+ '--el-fill-color': '#f0f2f5',
3006
+ '--el-fill-color-light': '#f5f7fa',
3007
+ '--el-fill-color-lighter': '#fafafa',
3008
+ '--el-mask-color': 'rgba(255, 255, 255, .9)',
3009
+ '--el-mask-color-extra-light': 'rgba(255, 255, 255, .3)'
3010
+ }
3011
+
3012
+ /**
3013
+ * 暗色主题 Element UI CSS 变量(对应 LIGHT_THEME_VARS 的暗色版本)
3014
+ */
3015
+ const DARK_THEME_VARS = {
3016
+ '--el-color-primary': '#409eff',
3017
+ '--el-color-success': '#67c23a',
3018
+ '--el-color-warning': '#e6a23c',
3019
+ '--el-color-danger': '#f56c6c',
3020
+ '--el-color-error': '#f56c6c',
3021
+ '--el-color-info': '#909399',
3022
+ '--el-bg-color': '#141414',
3023
+ '--el-bg-color-page': '#0a0a0a',
3024
+ '--el-bg-color-overlay': '#1d1e1f',
3025
+ '--el-text-color-primary': '#E5EAF3',
3026
+ '--el-text-color-regular': '#CFD3DC',
3027
+ '--el-text-color-secondary': '#A3A6AD',
3028
+ '--el-text-color-placeholder': '#8D9095',
3029
+ '--el-text-color-disabled': '#6C6E72',
3030
+ '--el-border-color': '#4C4D4F',
3031
+ '--el-border-color-light': '#414243',
3032
+ '--el-border-color-lighter': '#363637',
3033
+ '--el-fill-color': '#303030',
3034
+ '--el-fill-color-light': '#262727',
3035
+ '--el-fill-color-lighter': '#1D1D1D',
3036
+ '--el-mask-color': 'rgba(0, 0, 0, .8)',
3037
+ '--el-mask-color-extra-light': 'rgba(0, 0, 0, .3)'
3038
+ }
3039
+
3040
+ /**
3041
+ * 品牌色映射
3042
+ * 用于微前端架构中根据品牌标识切换主题主色
3043
+ */
3044
+ const BRAND_COLORS = {
3045
+ water: { light: '#0077be', dark: '#0099cc' },
3046
+ electricity: { light: '#2ecc71', dark: '#27ae60' },
3047
+ gas: { light: '#f39c12', dark: '#e67e22' }
3048
+ }
3049
+
3050
+ /**
3051
+ * 主题存储 key
3052
+ */
3053
+ const THEME_STORAGE_KEY = 'xt-element-ui-theme-config'
3054
+
3055
+ /**
3056
+ * 主题变化事件名
3057
+ */
3058
+ const THEME_CHANGE_EVENT = 'xt-theme-change'
3059
+
3060
+ /**
3061
+ * 将主题相关 CSS 变量应用到任意 DOM 元素
3062
+ * 统一 utils/index.js(主文档)和 iframe-injector.js(iframe)的变量设置逻辑
3063
+ *
3064
+ * @param {HTMLElement} element - 目标元素(通常是 document.documentElement)
3065
+ * @param {Object} config
3066
+ * @param {string} config.theme - 'white' | 'dark'
3067
+ * @param {string} [config.primaryColor] - 主色调 hex
3068
+ * @param {string} [config.brand] - 品牌标识 '' | 'water' | 'electricity' | 'gas'
3069
+ */
3070
+ function applyThemeVars(element, config) {
3071
+ if (!element) return
3072
+
3073
+ const { theme = 'white', primaryColor, brand = '' } = config
3074
+ const style = element.style
3075
+
3076
+ // 1. 设置 data-theme / data-brand 属性
3077
+ element.setAttribute('data-theme', theme)
3078
+ if (brand) {
3079
+ element.setAttribute('data-brand', brand)
3080
+ } else {
3081
+ element.removeAttribute('data-brand')
3082
+ }
3083
+
3084
+ // 2. 应用主题变量(亮色/暗色)
3085
+ const themeVars = theme === 'dark' ? DARK_THEME_VARS : LIGHT_THEME_VARS
3086
+ for (const key in themeVars) {
3087
+ style.setProperty(key, themeVars[key])
3088
+ }
3089
+
3090
+ // 3. 应用主色调变量
3091
+ let color = primaryColor
3092
+ if (brand && BRAND_COLORS[brand]) {
3093
+ color = BRAND_COLORS[brand][theme === 'dark' ? 'dark' : 'light'] || primaryColor
3094
+ }
3095
+ if (color) {
3096
+ const primaryVars = generatePrimaryColorVars(color)
3097
+ for (const key in primaryVars) {
3098
+ style.setProperty(key, primaryVars[key])
3099
+ }
3100
+ }
3101
+ }
3102
+
3103
+ /* harmony default export */ var theme_vars = ({
3104
+ LIGHT_THEME_VARS,
3105
+ DARK_THEME_VARS,
3106
+ BRAND_COLORS,
3107
+ THEME_STORAGE_KEY,
3108
+ THEME_CHANGE_EVENT,
3109
+ applyThemeVars
3110
+ });
2889
3111
  // CONCATENATED MODULE: ./src/utils/index.js
2890
-
2891
-
2892
- const defaultConfig = {
2893
- theme: 'white',
2894
- size: 'medium',
2895
- primaryColor: '#1890ff'
2896
- }
2897
-
2898
- let currentConfig = { ...defaultConfig }
2899
-
2900
- const configChangeListeners = []
2901
-
2902
- const emitConfigChange = function(key, value) {
2903
- configChangeListeners.forEach(listener => {
2904
- listener(key, value)
2905
- })
2906
- }
2907
-
2908
- const getConfig = function() {
2909
- return { ...currentConfig }
2910
- }
2911
-
2912
- const setConfig = function(config) {
2913
- if (typeof config !== 'object' || config === null) {
2914
- console.warn('[XtElementUI] setConfig 必须传入对象参数')
2915
- return
2916
- }
2917
-
2918
- if (config.theme !== undefined) {
2919
- setTheme(config.theme)
2920
- }
2921
- if (config.size !== undefined) {
2922
- setSize(config.size)
2923
- }
2924
- if (config.primaryColor !== undefined) {
2925
- setPrimaryColor(config.primaryColor)
2926
- }
2927
- }
2928
-
2929
- function isBrowser() {
2930
- return typeof window !== 'undefined' && typeof document !== 'undefined'
2931
- }
2932
-
2933
- const setTheme = function(theme) {
2934
- const validThemes = ['white', 'dark']
2935
- if (!validThemes.includes(theme)) {
2936
- console.warn(`[XtElementUI] 无效的主题值: ${theme},可选值: ${validThemes.join(', ')}`)
2937
- return
2938
- }
2939
-
2940
- currentConfig.theme = theme
2941
-
2942
- if (isBrowser()) {
2943
- const root = document.documentElement
2944
-
2945
- if (theme === 'dark') {
2946
- root.setAttribute('data-theme', 'dark')
2947
- } else {
2948
- root.setAttribute('data-theme', theme)
2949
- }
2950
-
2951
- utils.changeAllTheme(currentConfig.theme, currentConfig.size)
2952
- }
2953
-
2954
- emitConfigChange('theme', theme)
2955
- }
2956
-
2957
- const setSize = function(size) {
2958
- const validSizes = ['small', 'medium', 'large']
2959
- if (!validSizes.includes(size)) {
2960
- console.warn(`[XtElementUI] 无效的大小值: ${size},可选值: ${validSizes.join(', ')}`)
2961
- return
2962
- }
2963
-
2964
- currentConfig.size = size
2965
-
2966
- if (isBrowser()) {
2967
- document.documentElement.setAttribute('data-size', size)
2968
- utils.changeAllTheme(currentConfig.theme, currentConfig.size)
2969
- }
2970
-
2971
- emitConfigChange('size', size)
2972
- }
2973
-
2974
- // 将十六进制颜色转换为 RGB 对象
2975
- function hexToRgb(hex) {
2976
- const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex)
2977
- return result ? {
2978
- r: parseInt(result[1], 16),
2979
- g: parseInt(result[2], 16),
2980
- b: parseInt(result[3], 16)
2981
- } : null
2982
- }
2983
-
2984
- // 将 RGB 对象转换为十六进制颜色
2985
- function rgbToHex(r, g, b) {
2986
- return '#' + [r, g, b].map(x => {
2987
- const hex = x.toString(16)
2988
- return hex.length === 1 ? '0' + hex : hex
2989
- }).join('')
2990
- }
2991
-
2992
- // 计算浅色系列(混合白色)
2993
- function lightenColor(hex, percent) {
2994
- const rgb = hexToRgb(hex)
2995
- if (!rgb) return hex
2996
-
2997
- const amount = Math.round(2.55 * percent)
2998
- const r = Math.min(255, rgb.r + amount)
2999
- const g = Math.min(255, rgb.g + amount)
3000
- const b = Math.min(255, rgb.b + amount)
3001
-
3002
- return rgbToHex(r, g, b)
3003
- }
3004
-
3005
- const setPrimaryColor = function(color) {
3006
- const colorRegex = /^#[0-9A-Fa-f]{3}$|^#[0-9A-Fa-f]{6}$|^#[0-9A-Fa-f]{8}$/
3007
- if (!colorRegex.test(color)) {
3008
- console.warn(`[XtElementUI] 无效的颜色值: ${color},请使用十六进制颜色格式,如 #1890ff`)
3009
- return
3010
- }
3011
-
3012
- let validColor = color
3013
- if (color.length === 4) {
3014
- validColor = '#' + color[1] + color[1] + color[2] + color[2] + color[3] + color[3]
3015
- } else if (color.length === 9) {
3016
- validColor = color.substring(0, 7)
3017
- }
3018
-
3019
- currentConfig.primaryColor = validColor
3020
-
3021
- if (isBrowser()) {
3022
- document.documentElement.style.setProperty('--xt-color-primary', validColor)
3023
-
3024
- document.documentElement.style.setProperty('--xt-color-primary-light-3', lightenColor(validColor, 30))
3025
- document.documentElement.style.setProperty('--xt-color-primary-light-5', lightenColor(validColor, 50))
3026
- document.documentElement.style.setProperty('--xt-color-primary-light-7', lightenColor(validColor, 70))
3027
- document.documentElement.style.setProperty('--xt-color-primary-light-8', lightenColor(validColor, 80))
3028
- document.documentElement.style.setProperty('--xt-color-primary-light-9', lightenColor(validColor, 90))
3029
- }
3030
-
3031
- emitConfigChange('primaryColor', validColor)
3032
- }
3033
-
3034
- // 获取当前主题
3035
- const getTheme = function() {
3036
- return currentConfig.theme
3037
- }
3038
-
3039
- // 获取当前字体大小
3040
- const getSize = function() {
3041
- return currentConfig.size
3042
- }
3043
-
3044
- // 获取当前主色调
3045
- const getPrimaryColor = function() {
3046
- return currentConfig.primaryColor
3047
- }
3048
-
3049
- // 重置为默认配置
3050
- const resetConfig = function() {
3051
- setConfig(defaultConfig)
3052
- }
3053
-
3054
- // 监听配置变更
3055
- const onConfigChange = function(listener) {
3056
- if (typeof listener === 'function') {
3057
- configChangeListeners.push(listener)
3058
- return function() {
3059
- const index = configChangeListeners.indexOf(listener)
3060
- if (index > -1) {
3061
- configChangeListeners.splice(index, 1)
3062
- }
3063
- }
3064
- } else {
3065
- console.warn('[XtElementUI] onConfigChange 必须传入函数')
3066
- }
3067
- }
3068
-
3069
- // ==================== 数字格式化 ====================
3070
-
3071
- const formatNumber = function(value, options) {
3072
- if (value === null || value === undefined || value === '') {
3073
- return ''
3074
- }
3075
-
3076
- const num = typeof value === 'string' ? parseFloat(value) : value
3077
- if (isNaN(num)) {
3078
- return String(value)
3079
- }
3080
-
3081
- const opts = Object.assign({
3082
- decimals: 2,
3083
- thousand: true,
3084
- prefix: '',
3085
- suffix: '',
3086
- showSign: false
3087
- }, options || {})
3088
-
3089
- let result = num.toFixed(opts.decimals)
3090
-
3091
- if (opts.thousand) {
3092
- const parts = result.split('.')
3093
- parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',')
3094
- result = parts.join('.')
3095
- }
3096
-
3097
- if (opts.showSign && num > 0) {
3098
- result = '+' + result
3099
- }
3100
-
3101
- return opts.prefix + result + opts.suffix
3102
- }
3103
-
3104
- const formatThousand = function(value, decimals) {
3105
- return formatNumber(value, {
3106
- decimals: decimals != null ? decimals : 2,
3107
- thousand: true
3108
- })
3109
- }
3110
-
3111
- const formatPercent = function(value, decimals) {
3112
- if (value === null || value === undefined || value === '') {
3113
- return ''
3114
- }
3115
- const num = typeof value === 'string' ? parseFloat(value) : value
3116
- if (isNaN(num)) {
3117
- return String(value)
3118
- }
3119
- return formatNumber(num * 100, {
3120
- decimals: decimals != null ? decimals : 2,
3121
- thousand: true,
3122
- suffix: '%'
3123
- })
3124
- }
3125
-
3126
- // ==================== 日期格式化 ====================
3127
-
3128
- function padZero(num, len) {
3129
- len = len || 2
3130
- return String(num).padStart(len, '0')
3131
- }
3132
-
3133
- const formatDate = function(date, format) {
3134
- if (!date) {
3135
- return ''
3136
- }
3137
-
3138
- let d
3139
- if (date instanceof Date) {
3140
- d = date
3141
- } else if (typeof date === 'number') {
3142
- d = new Date(date.toString().length === 10 ? date * 1000 : date)
3143
- } else if (typeof date === 'string') {
3144
- date = date.trim()
3145
- if (/^\d+$/.test(date)) {
3146
- d = new Date(date.length === 10 ? parseInt(date) * 1000 : parseInt(date))
3147
- } else {
3148
- d = new Date(date.replace(/-/g, '/'))
3149
- }
3150
- } else {
3151
- return ''
3152
- }
3153
-
3154
- if (isNaN(d.getTime())) {
3155
- return ''
3156
- }
3157
-
3158
- const fmt = format || 'yyyy-MM-dd'
3159
- const year = d.getFullYear()
3160
- const month = d.getMonth() + 1
3161
- const day = d.getDate()
3162
- const hour = d.getHours()
3163
- const minute = d.getMinutes()
3164
- const second = d.getSeconds()
3165
- const week = d.getDay()
3166
-
3167
- const weekMap = ['日', '一', '二', '三', '四', '五', '六']
3168
-
3169
- return fmt
3170
- .replace('yyyy', year)
3171
- .replace('MM', padZero(month))
3172
- .replace('M', month)
3173
- .replace('dd', padZero(day))
3174
- .replace('d', day)
3175
- .replace('HH', padZero(hour))
3176
- .replace('H', hour)
3177
- .replace('hh', padZero(hour % 12 || 12))
3178
- .replace('h', hour % 12 || 12)
3179
- .replace('mm', padZero(minute))
3180
- .replace('m', minute)
3181
- .replace('ss', padZero(second))
3182
- .replace('s', second)
3183
- .replace('w', weekMap[week])
3184
- .replace('W', '星期' + weekMap[week])
3185
- }
3186
-
3187
- const formatDateTime = function(date, format) {
3188
- return formatDate(date, format || 'yyyy-MM-dd HH:mm:ss')
3189
- }
3190
-
3191
- const formatTime = function(date, format) {
3192
- return formatDate(date, format || 'HH:mm:ss')
3193
- }
3194
-
3195
- const formatRelativeTime = function(date) {
3196
- if (!date) {
3197
- return ''
3198
- }
3199
-
3200
- let d
3201
- if (date instanceof Date) {
3202
- d = date
3203
- } else if (typeof date === 'number') {
3204
- d = new Date(date.toString().length === 10 ? date * 1000 : date)
3205
- } else if (typeof date === 'string') {
3206
- date = date.trim()
3207
- if (/^\d+$/.test(date)) {
3208
- d = new Date(date.length === 10 ? parseInt(date) * 1000 : parseInt(date))
3209
- } else {
3210
- d = new Date(date.replace(/-/g, '/'))
3211
- }
3212
- } else {
3213
- return ''
3214
- }
3215
-
3216
- if (isNaN(d.getTime())) {
3217
- return ''
3218
- }
3219
-
3220
- const now = new Date()
3221
- const diff = now.getTime() - d.getTime()
3222
- const minute = 60 * 1000
3223
- const hour = 60 * minute
3224
- const day = 24 * hour
3225
- const week = 7 * day
3226
- const month = 30 * day
3227
- const year = 365 * day
3228
-
3229
- if (diff < minute) {
3230
- return '刚刚'
3231
- } else if (diff < hour) {
3232
- return Math.floor(diff / minute) + '分钟前'
3233
- } else if (diff < day) {
3234
- return Math.floor(diff / hour) + '小时前'
3235
- } else if (diff < week) {
3236
- return Math.floor(diff / day) + '天前'
3237
- } else if (diff < month) {
3238
- return Math.floor(diff / week) + '周前'
3239
- } else if (diff < year) {
3240
- return Math.floor(diff / month) + '个月前'
3241
- } else {
3242
- return Math.floor(diff / year) + '年前'
3243
- }
3244
- }
3245
-
3246
- // ==================== 金额格式化 ====================
3247
-
3248
- const formatMoney = function(value, options) {
3249
- if (value === null || value === undefined || value === '') {
3250
- return ''
3251
- }
3252
-
3253
- const num = typeof value === 'string' ? parseFloat(value) : value
3254
- if (isNaN(num)) {
3255
- return String(value)
3256
- }
3257
-
3258
- const opts = Object.assign({
3259
- currency: 'CNY',
3260
- decimals: 2,
3261
- prefix: '',
3262
- suffix: '',
3263
- showSign: false
3264
- }, options || {})
3265
-
3266
- const currencySymbols = {
3267
- CNY: '¥',
3268
- USD: '$',
3269
- EUR: '€',
3270
- JPY: '¥',
3271
- GBP: '£',
3272
- AUD: 'A$',
3273
- CAD: 'C$'
3274
- }
3275
-
3276
- let symbol = currencySymbols[opts.currency] || ''
3277
- let formatted = num.toFixed(opts.decimals)
3278
-
3279
- const parts = formatted.split('.')
3280
- parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',')
3281
- formatted = parts.join('.')
3282
-
3283
- if (opts.showSign && num > 0) {
3284
- formatted = '+' + formatted
3285
- }
3286
-
3287
- if (opts.prefix) {
3288
- formatted = opts.prefix + formatted
3289
- }
3290
-
3291
- if (opts.suffix) {
3292
- formatted = formatted + opts.suffix
3293
- }
3294
-
3295
- return symbol + formatted
3296
- }
3297
-
3298
- const formatCNY = function(value, decimals) {
3299
- return formatMoney(value, {
3300
- currency: 'CNY',
3301
- decimals: decimals != null ? decimals : 2
3302
- })
3303
- }
3304
-
3305
- const formatUSD = function(value, decimals) {
3306
- return formatMoney(value, {
3307
- currency: 'USD',
3308
- decimals: decimals != null ? decimals : 2
3309
- })
3310
- }
3311
-
3312
- // ==================== 文件大小格式化 ====================
3313
-
3314
- const formatFileSize = function(bytes) {
3315
- if (bytes === null || bytes === undefined || bytes === '') {
3316
- return ''
3317
- }
3318
-
3319
- const num = typeof bytes === 'string' ? parseFloat(bytes) : bytes
3320
- if (isNaN(num)) {
3321
- return String(bytes)
3322
- }
3323
-
3324
- if (num === 0) {
3325
- return '0 B'
3326
- }
3327
-
3328
- const k = 1024
3329
- const sizes = ['B', 'KB', 'MB', 'GB', 'TB']
3330
- const i = Math.floor(Math.log(num) / Math.log(k))
3331
-
3332
- return parseFloat((num / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]
3333
- }
3334
-
3335
- /* harmony default export */ var src_utils = ({
3336
- setTheme,
3337
- setSize,
3338
- setPrimaryColor,
3339
- getConfig,
3340
- setConfig,
3341
- getTheme,
3342
- getSize,
3343
- getPrimaryColor,
3344
- resetConfig,
3345
- onConfigChange,
3346
- formatNumber,
3347
- formatThousand,
3348
- formatPercent,
3349
- formatDate,
3350
- formatDateTime,
3351
- formatTime,
3352
- formatRelativeTime,
3353
- formatMoney,
3354
- formatCNY,
3355
- formatUSD,
3356
- formatFileSize
3357
- });
3358
3112
 
3113
+
3114
+
3115
+
3116
+ const defaultConfig = {
3117
+ theme: 'white',
3118
+ size: 'medium',
3119
+ primaryColor: '#1890ff'
3120
+ }
3121
+
3122
+ let currentConfig = { ...defaultConfig }
3123
+
3124
+ const configChangeListeners = []
3125
+
3126
+ const emitConfigChange = function(key, value) {
3127
+ configChangeListeners.forEach(listener => {
3128
+ listener(key, value)
3129
+ })
3130
+ }
3131
+
3132
+ const getConfig = function() {
3133
+ return { ...currentConfig }
3134
+ }
3135
+
3136
+ const setConfig = function(config) {
3137
+ if (typeof config !== 'object' || config === null) {
3138
+ console.warn('[XtElementUI] setConfig 必须传入对象参数')
3139
+ return
3140
+ }
3141
+
3142
+ if (config.theme !== undefined) {
3143
+ setTheme(config.theme)
3144
+ }
3145
+ if (config.size !== undefined) {
3146
+ setSize(config.size)
3147
+ }
3148
+ if (config.primaryColor !== undefined) {
3149
+ setPrimaryColor(config.primaryColor)
3150
+ }
3151
+ }
3152
+
3153
+ function isBrowser() {
3154
+ return typeof window !== 'undefined' && typeof document !== 'undefined'
3155
+ }
3156
+
3157
+ /**
3158
+ * 设置主题(亮/暗)
3159
+ * 通过 applyThemeVars 统一设置 --el-* CSS 变量,确保组件库和 Element UI 同步响应
3160
+ * 同时设置 --xt-* CSS 变量供 xt 组件使用
3161
+ */
3162
+ const setTheme = function(theme) {
3163
+ const validThemes = ['white', 'dark']
3164
+ if (!validThemes.includes(theme)) {
3165
+ console.warn(`[XtElementUI] 无效的主题值: ${theme},可选值: ${validThemes.join(', ')}`)
3166
+ return
3167
+ }
3168
+
3169
+ currentConfig.theme = theme
3170
+
3171
+ if (isBrowser()) {
3172
+ const root = document.documentElement
3173
+
3174
+ // 统一通过 applyThemeVars 设置 --el-* 变量
3175
+ applyThemeVars(root, {
3176
+ theme,
3177
+ primaryColor: currentConfig.primaryColor
3178
+ })
3179
+
3180
+ // 同步设置 xt 组件主色变量(--xt-*)
3181
+ const xtVars = generateXtPrimaryColorVars(currentConfig.primaryColor)
3182
+ for (const key in xtVars) {
3183
+ root.style.setProperty(key, xtVars[key])
3184
+ }
3185
+
3186
+ utils.changeAllTheme(currentConfig.theme, currentConfig.size)
3187
+ }
3188
+
3189
+ emitConfigChange('theme', theme)
3190
+ }
3191
+
3192
+ const setSize = function(size) {
3193
+ const validSizes = ['small', 'medium', 'large']
3194
+ if (!validSizes.includes(size)) {
3195
+ console.warn(`[XtElementUI] 无效的大小值: ${size},可选值: ${validSizes.join(', ')}`)
3196
+ return
3197
+ }
3198
+
3199
+ currentConfig.size = size
3200
+
3201
+ if (isBrowser()) {
3202
+ document.documentElement.setAttribute('data-size', size)
3203
+ utils.changeAllTheme(currentConfig.theme, currentConfig.size)
3204
+ }
3205
+
3206
+ emitConfigChange('size', size)
3207
+ }
3208
+
3209
+ const setPrimaryColor = function(color) {
3210
+ const colorRegex = /^#[0-9A-Fa-f]{3}$|^#[0-9A-Fa-f]{6}$|^#[0-9A-Fa-f]{8}$/
3211
+ if (!colorRegex.test(color)) {
3212
+ console.warn(`[XtElementUI] 无效的颜色值: ${color},请使用十六进制颜色格式,如 #1890ff`)
3213
+ return
3214
+ }
3215
+
3216
+ let validColor = color
3217
+ if (color.length === 4) {
3218
+ validColor = '#' + color[1] + color[1] + color[2] + color[2] + color[3] + color[3]
3219
+ } else if (color.length === 9) {
3220
+ validColor = color.substring(0, 7)
3221
+ }
3222
+
3223
+ currentConfig.primaryColor = validColor
3224
+
3225
+ if (isBrowser()) {
3226
+ const root = document.documentElement
3227
+
3228
+ // 统一通过 applyThemeVars 设置 --el-* 主色变量
3229
+ applyThemeVars(root, {
3230
+ theme: currentConfig.theme,
3231
+ primaryColor: validColor
3232
+ })
3233
+
3234
+ // 同步设置 xt 组件主色变量(--xt-*)
3235
+ const xtVars = generateXtPrimaryColorVars(validColor)
3236
+ for (const key in xtVars) {
3237
+ root.style.setProperty(key, xtVars[key])
3238
+ }
3239
+ }
3240
+
3241
+ emitConfigChange('primaryColor', validColor)
3242
+ }
3243
+
3244
+ // 获取当前主题
3245
+ const getTheme = function() {
3246
+ return currentConfig.theme
3247
+ }
3248
+
3249
+ // 获取当前字体大小
3250
+ const getSize = function() {
3251
+ return currentConfig.size
3252
+ }
3253
+
3254
+ // 获取当前主色调
3255
+ const getPrimaryColor = function() {
3256
+ return currentConfig.primaryColor
3257
+ }
3258
+
3259
+ // 重置为默认配置
3260
+ const resetConfig = function() {
3261
+ setConfig(defaultConfig)
3262
+ }
3263
+
3264
+ // 监听配置变更
3265
+ const onConfigChange = function(listener) {
3266
+ if (typeof listener === 'function') {
3267
+ configChangeListeners.push(listener)
3268
+ return function() {
3269
+ const index = configChangeListeners.indexOf(listener)
3270
+ if (index > -1) {
3271
+ configChangeListeners.splice(index, 1)
3272
+ }
3273
+ }
3274
+ } else {
3275
+ console.warn('[XtElementUI] onConfigChange 必须传入函数')
3276
+ }
3277
+ }
3278
+
3279
+ // ==================== 数字格式化 ====================
3280
+
3281
+ const formatNumber = function(value, options) {
3282
+ if (value === null || value === undefined || value === '') {
3283
+ return ''
3284
+ }
3285
+
3286
+ const num = typeof value === 'string' ? parseFloat(value) : value
3287
+ if (isNaN(num)) {
3288
+ return String(value)
3289
+ }
3290
+
3291
+ const opts = Object.assign({
3292
+ decimals: 2,
3293
+ thousand: true,
3294
+ prefix: '',
3295
+ suffix: '',
3296
+ showSign: false
3297
+ }, options || {})
3298
+
3299
+ let result = num.toFixed(opts.decimals)
3300
+
3301
+ if (opts.thousand) {
3302
+ const parts = result.split('.')
3303
+ parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',')
3304
+ result = parts.join('.')
3305
+ }
3306
+
3307
+ if (opts.showSign && num > 0) {
3308
+ result = '+' + result
3309
+ }
3310
+
3311
+ return opts.prefix + result + opts.suffix
3312
+ }
3313
+
3314
+ const formatThousand = function(value, decimals) {
3315
+ return formatNumber(value, {
3316
+ decimals: decimals != null ? decimals : 2,
3317
+ thousand: true
3318
+ })
3319
+ }
3320
+
3321
+ const formatPercent = function(value, decimals) {
3322
+ if (value === null || value === undefined || value === '') {
3323
+ return ''
3324
+ }
3325
+ const num = typeof value === 'string' ? parseFloat(value) : value
3326
+ if (isNaN(num)) {
3327
+ return String(value)
3328
+ }
3329
+ return formatNumber(num * 100, {
3330
+ decimals: decimals != null ? decimals : 2,
3331
+ thousand: true,
3332
+ suffix: '%'
3333
+ })
3334
+ }
3335
+
3336
+ // ==================== 日期格式化 ====================
3337
+
3338
+ function padZero(num, len) {
3339
+ len = len || 2
3340
+ return String(num).padStart(len, '0')
3341
+ }
3342
+
3343
+ const formatDate = function(date, format) {
3344
+ if (!date) {
3345
+ return ''
3346
+ }
3347
+
3348
+ let d
3349
+ if (date instanceof Date) {
3350
+ d = date
3351
+ } else if (typeof date === 'number') {
3352
+ d = new Date(date.toString().length === 10 ? date * 1000 : date)
3353
+ } else if (typeof date === 'string') {
3354
+ date = date.trim()
3355
+ if (/^\d+$/.test(date)) {
3356
+ d = new Date(date.length === 10 ? parseInt(date) * 1000 : parseInt(date))
3357
+ } else {
3358
+ d = new Date(date.replace(/-/g, '/'))
3359
+ }
3360
+ } else {
3361
+ return ''
3362
+ }
3363
+
3364
+ if (isNaN(d.getTime())) {
3365
+ return ''
3366
+ }
3367
+
3368
+ const fmt = format || 'yyyy-MM-dd'
3369
+ const year = d.getFullYear()
3370
+ const month = d.getMonth() + 1
3371
+ const day = d.getDate()
3372
+ const hour = d.getHours()
3373
+ const minute = d.getMinutes()
3374
+ const second = d.getSeconds()
3375
+ const week = d.getDay()
3376
+
3377
+ const weekMap = ['日', '一', '二', '三', '四', '五', '六']
3378
+
3379
+ return fmt
3380
+ .replace('yyyy', year)
3381
+ .replace('MM', padZero(month))
3382
+ .replace('M', month)
3383
+ .replace('dd', padZero(day))
3384
+ .replace('d', day)
3385
+ .replace('HH', padZero(hour))
3386
+ .replace('H', hour)
3387
+ .replace('hh', padZero(hour % 12 || 12))
3388
+ .replace('h', hour % 12 || 12)
3389
+ .replace('mm', padZero(minute))
3390
+ .replace('m', minute)
3391
+ .replace('ss', padZero(second))
3392
+ .replace('s', second)
3393
+ .replace('w', weekMap[week])
3394
+ .replace('W', '星期' + weekMap[week])
3395
+ }
3396
+
3397
+ const formatDateTime = function(date, format) {
3398
+ return formatDate(date, format || 'yyyy-MM-dd HH:mm:ss')
3399
+ }
3400
+
3401
+ const formatTime = function(date, format) {
3402
+ return formatDate(date, format || 'HH:mm:ss')
3403
+ }
3404
+
3405
+ const formatRelativeTime = function(date) {
3406
+ if (!date) {
3407
+ return ''
3408
+ }
3409
+
3410
+ let d
3411
+ if (date instanceof Date) {
3412
+ d = date
3413
+ } else if (typeof date === 'number') {
3414
+ d = new Date(date.toString().length === 10 ? date * 1000 : date)
3415
+ } else if (typeof date === 'string') {
3416
+ date = date.trim()
3417
+ if (/^\d+$/.test(date)) {
3418
+ d = new Date(date.length === 10 ? parseInt(date) * 1000 : parseInt(date))
3419
+ } else {
3420
+ d = new Date(date.replace(/-/g, '/'))
3421
+ }
3422
+ } else {
3423
+ return ''
3424
+ }
3425
+
3426
+ if (isNaN(d.getTime())) {
3427
+ return ''
3428
+ }
3429
+
3430
+ const now = new Date()
3431
+ const diff = now.getTime() - d.getTime()
3432
+ const minute = 60 * 1000
3433
+ const hour = 60 * minute
3434
+ const day = 24 * hour
3435
+ const week = 7 * day
3436
+ const month = 30 * day
3437
+ const year = 365 * day
3438
+
3439
+ if (diff < minute) {
3440
+ return '刚刚'
3441
+ } else if (diff < hour) {
3442
+ return Math.floor(diff / minute) + '分钟前'
3443
+ } else if (diff < day) {
3444
+ return Math.floor(diff / hour) + '小时前'
3445
+ } else if (diff < week) {
3446
+ return Math.floor(diff / day) + '天前'
3447
+ } else if (diff < month) {
3448
+ return Math.floor(diff / week) + '周前'
3449
+ } else if (diff < year) {
3450
+ return Math.floor(diff / month) + '个月前'
3451
+ } else {
3452
+ return Math.floor(diff / year) + '年前'
3453
+ }
3454
+ }
3455
+
3456
+ // ==================== 金额格式化 ====================
3457
+
3458
+ const formatMoney = function(value, options) {
3459
+ if (value === null || value === undefined || value === '') {
3460
+ return ''
3461
+ }
3462
+
3463
+ const num = typeof value === 'string' ? parseFloat(value) : value
3464
+ if (isNaN(num)) {
3465
+ return String(value)
3466
+ }
3467
+
3468
+ const opts = Object.assign({
3469
+ currency: 'CNY',
3470
+ decimals: 2,
3471
+ prefix: '',
3472
+ suffix: '',
3473
+ showSign: false
3474
+ }, options || {})
3475
+
3476
+ const currencySymbols = {
3477
+ CNY: '¥',
3478
+ USD: '$',
3479
+ EUR: '€',
3480
+ JPY: '¥',
3481
+ GBP: '£',
3482
+ AUD: 'A$',
3483
+ CAD: 'C$'
3484
+ }
3485
+
3486
+ let symbol = currencySymbols[opts.currency] || ''
3487
+ let formatted = num.toFixed(opts.decimals)
3488
+
3489
+ const parts = formatted.split('.')
3490
+ parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',')
3491
+ formatted = parts.join('.')
3492
+
3493
+ if (opts.showSign && num > 0) {
3494
+ formatted = '+' + formatted
3495
+ }
3496
+
3497
+ if (opts.prefix) {
3498
+ formatted = opts.prefix + formatted
3499
+ }
3500
+
3501
+ if (opts.suffix) {
3502
+ formatted = formatted + opts.suffix
3503
+ }
3504
+
3505
+ return symbol + formatted
3506
+ }
3507
+
3508
+ const formatCNY = function(value, decimals) {
3509
+ return formatMoney(value, {
3510
+ currency: 'CNY',
3511
+ decimals: decimals != null ? decimals : 2
3512
+ })
3513
+ }
3514
+
3515
+ const formatUSD = function(value, decimals) {
3516
+ return formatMoney(value, {
3517
+ currency: 'USD',
3518
+ decimals: decimals != null ? decimals : 2
3519
+ })
3520
+ }
3521
+
3522
+ // ==================== 文件大小格式化 ====================
3523
+
3524
+ const formatFileSize = function(bytes) {
3525
+ if (bytes === null || bytes === undefined || bytes === '') {
3526
+ return ''
3527
+ }
3528
+
3529
+ const num = typeof bytes === 'string' ? parseFloat(bytes) : bytes
3530
+ if (isNaN(num)) {
3531
+ return String(bytes)
3532
+ }
3533
+
3534
+ if (num === 0) {
3535
+ return '0 B'
3536
+ }
3537
+
3538
+ const k = 1024
3539
+ const sizes = ['B', 'KB', 'MB', 'GB', 'TB']
3540
+ const i = Math.floor(Math.log(num) / Math.log(k))
3541
+
3542
+ return parseFloat((num / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]
3543
+ }
3544
+
3545
+ /* harmony default export */ var src_utils = ({
3546
+ setTheme,
3547
+ setSize,
3548
+ setPrimaryColor,
3549
+ getConfig,
3550
+ setConfig,
3551
+ getTheme,
3552
+ getSize,
3553
+ getPrimaryColor,
3554
+ resetConfig,
3555
+ onConfigChange,
3556
+ formatNumber,
3557
+ formatThousand,
3558
+ formatPercent,
3559
+ formatDate,
3560
+ formatDateTime,
3561
+ formatTime,
3562
+ formatRelativeTime,
3563
+ formatMoney,
3564
+ formatCNY,
3565
+ formatUSD,
3566
+ formatFileSize
3567
+ });
3359
3568
  // EXTERNAL MODULE: ./src/components/xt-button/style/index.scss
3360
3569
  var xt_button_style = __webpack_require__("0ba5");
3361
3570
 
3362
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-button/index.vue?vue&type=template&id=51370cdf
3571
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-button/index.vue?vue&type=template&id=51370cdf
3363
3572
  var render = function render(){var _vm=this,_c=_vm._self._c;return _c('el-button',_vm._b({staticClass:"xt-button",class:_vm.buttonClasses,attrs:{"type":_vm.type},on:{"click":_vm.handleClick}},'el-button',_vm.$attrs,false),[_vm._t("default")],2)
3364
3573
  }
3365
3574
  var staticRenderFns = []
@@ -3468,7 +3677,7 @@ xt_button.install = function (Vue) {
3468
3677
  // EXTERNAL MODULE: ./src/components/xt-input/style/index.scss
3469
3678
  var xt_input_style = __webpack_require__("0563");
3470
3679
 
3471
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-input/index.vue?vue&type=template&id=6a24ab05
3680
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-input/index.vue?vue&type=template&id=6a24ab05
3472
3681
  var xt_inputvue_type_template_id_6a24ab05_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"xt-input",class:[
3473
3682
  _vm.size ? 'xt-input--' + _vm.size : '',
3474
3683
  { 'is-disabled': _vm.disabled },
@@ -3822,7 +4031,7 @@ xt_input.install = function (Vue) {
3822
4031
  // EXTERNAL MODULE: ./src/components/xt-flex-box/style/index.scss
3823
4032
  var xt_flex_box_style = __webpack_require__("5820");
3824
4033
 
3825
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-flex-box/index.vue?vue&type=template&id=5dab0d2a
4034
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-flex-box/index.vue?vue&type=template&id=5dab0d2a
3826
4035
  var xt_flex_boxvue_type_template_id_5dab0d2a_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"xt-flex-box",class:_vm.classAttrs,style:(_vm.flexStyle)},[_vm._t("default")],2)
3827
4036
  }
3828
4037
  var xt_flex_boxvue_type_template_id_5dab0d2a_staticRenderFns = []
@@ -3895,7 +4104,7 @@ xt_flex_box.install = function (Vue) {
3895
4104
  // EXTERNAL MODULE: ./src/components/xt-card/style/index.scss
3896
4105
  var xt_card_style = __webpack_require__("419e");
3897
4106
 
3898
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-card/index.vue?vue&type=template&id=27e108a6
4107
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-card/index.vue?vue&type=template&id=27e108a6
3899
4108
  var xt_cardvue_type_template_id_27e108a6_render = function render(){var _vm=this,_c=_vm._self._c;return _c('el-card',_vm._b({staticClass:"xt-card",class:_vm.cardClasses,scopedSlots:_vm._u([(_vm.$slots.header || _vm.title)?{key:"header",fn:function(){return [_vm._t("header",function(){return [_vm._v(_vm._s(_vm.title))]})]},proxy:true}:null],null,true)},'el-card',_vm.$attrs,false),[_vm._t("default")],2)
3900
4109
  }
3901
4110
  var xt_cardvue_type_template_id_27e108a6_staticRenderFns = []
@@ -3993,7 +4202,7 @@ xt_card.install = function (Vue) {
3993
4202
  // EXTERNAL MODULE: ./src/components/xt-card-item/style/index.scss
3994
4203
  var xt_card_item_style = __webpack_require__("c1e7");
3995
4204
 
3996
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-card-item/index.vue?vue&type=template&id=d091942c
4205
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-card-item/index.vue?vue&type=template&id=d091942c
3997
4206
  var xt_card_itemvue_type_template_id_d091942c_render = function render(){var _vm=this,_c=_vm._self._c;return _c('xt-card',{staticClass:"xt-card-item",class:{ [`is-${_vm.type}`]: _vm.type ? true : false},attrs:{"bordered":false}},[_c('xt-flex-box',{attrs:{"content":"between"}},[_c('div',[_c('div',[_c('xt-text',{attrs:{"bold":"","size":"extra-large"}},[_vm._v(_vm._s(_vm.title))])],1),_c('xt-text',{attrs:{"bold":"","size":"large","format":"thousand","type":_vm.type,"decimals":0},model:{value:(_vm.value),callback:function ($$v) {_vm.value=$$v},expression:"value"}}),_c('div',{staticStyle:{"margin":"5px 0"}},[_c('xt-text',{attrs:{"size":"small"}},[_vm._v("较昨日")]),_c('xt-text',{attrs:{"format":"normal","type":_vm.diff > 0 ? 'success' : 'danger',"suffix":_vm.diff > 0 ? '↑' : '↓'},model:{value:(_vm.reference),callback:function ($$v) {_vm.reference=$$v},expression:"reference"}})],1)],1),_c('div',{staticStyle:{"height":"100%"}},[_vm._t("icon",function(){return [_c('xt-text',{attrs:{"size":"extra-large","type":_vm.type}},[_c('xt-icon',{attrs:{"name":"el-icon-user","size":48}})],1)]})],2)])],1)
3998
4207
  }
3999
4208
  var xt_card_itemvue_type_template_id_d091942c_staticRenderFns = []
@@ -4456,7 +4665,7 @@ xt_config_provider.install = function (Vue) {
4456
4665
  // EXTERNAL MODULE: ./src/components/xt-text/style/index.scss
4457
4666
  var xt_text_style = __webpack_require__("86ae");
4458
4667
 
4459
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-text/index.vue?vue&type=template&id=50bc2d50
4668
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-text/index.vue?vue&type=template&id=50bc2d50
4460
4669
  var xt_textvue_type_template_id_50bc2d50_render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.showTooltip && _vm.ellipsis)?_c('el-tooltip',{attrs:{"content":_vm.displayTooltipContent,"placement":_vm.tooltipPlacement,"disabled":!_vm.isOverflow,"effect":"dark"}},[_c('span',{ref:"textRef",staticClass:"xt-text",class:[
4461
4670
  _vm.type ? 'xt-text--' + _vm.type : '',
4462
4671
  'xt-text--' + _vm.size,
@@ -4765,7 +4974,7 @@ xt_text.install = function (Vue) {
4765
4974
  // EXTERNAL MODULE: ./src/components/xt-time/style/index.scss
4766
4975
  var xt_time_style = __webpack_require__("6c9e");
4767
4976
 
4768
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-time/index.vue?vue&type=template&id=d29acf2c
4977
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-time/index.vue?vue&type=template&id=d29acf2c
4769
4978
  var xt_timevue_type_template_id_d29acf2c_render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',{staticClass:"xt-time",class:[
4770
4979
  _vm.typeColor ? 'xt-time--' + _vm.typeColor : '',
4771
4980
  'xt-time--' + _vm.size,
@@ -5090,7 +5299,7 @@ xt_time.install = function (Vue) {
5090
5299
  // EXTERNAL MODULE: ./src/components/xt-step-price/style/index.scss
5091
5300
  var xt_step_price_style = __webpack_require__("fd93");
5092
5301
 
5093
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-step-price/index.vue?vue&type=template&id=0cb332f3
5302
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-step-price/index.vue?vue&type=template&id=0cb332f3
5094
5303
  var xt_step_pricevue_type_template_id_0cb332f3_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"xt-step-price",class:{ 'is-disabled': _vm.disabled }},[(_vm.title || _vm.$slots.header)?_c('div',{staticClass:"xt-step-price__header"},[(_vm.title)?_c('xt-text',{attrs:{"bold":"","size":"medium"}},[_vm._v(_vm._s(_vm.title))]):_vm._e(),_vm._t("header"),(!_vm.disabled && !_vm.isLimitReached)?_c('xt-button',{attrs:{"type":"primary","size":"small","icon":"el-icon-plus","plain":""},on:{"click":_vm.onAdd}},[_vm._v("新增"+_vm._s(_vm.stepName))]):_vm._e(),(_vm.isLimitReached)?_c('xt-text',{attrs:{"size":"small","type-color":"info"}},[_vm._v("已达上限("+_vm._s(_vm.localItems.length)+"/"+_vm._s(_vm.limit)+")")]):_vm._e()],2):_vm._e(),_c('div',{staticClass:"xt-step-price__list"},_vm._l((_vm.localItems),function(item,idx){return _c('XtStepPriceItem',{key:idx,attrs:{"value":item,"index":idx,"is-first":idx === 0,"is-last":idx === _vm.localItems.length - 1,"items-length":_vm.localItems.length,"removable":idx !== 0,"min-locked":idx !== 0 ? true : false,"unit":_vm.unit,"precision":_vm.precision,"step-name":_vm.stepName,"step":_vm.step,"left-bracket":_vm.leftBracket,"right-bracket":_vm.rightBracket,"field-keys":_vm.fieldKeys,"disabled":_vm.disabled,"allow-negative":_vm.allowNegative},on:{"input":(val) => _vm.onItemInput(val, idx),"max-change":_vm.onMaxChange,"min-change":_vm.onMinChange,"delete":_vm.onDelete,"blur":_vm.onFieldBlur}})}),1),(_vm.localItems.length === 0)?_c('div',{staticClass:"xt-step-price__empty"},[_c('span',[_vm._v("暂无数据,点击右上角「新增"+_vm._s(_vm.stepName)+"」开始配置")])]):_vm._e(),(_vm.tip || _vm.$slots.tip)?_c('div',{staticClass:"xt-step-price__tip"},[_vm._t("tip",function(){return [_c('xt-text',{attrs:{"size":"small","type-color":"warning"}},[_vm._v(_vm._s(_vm.tip))])]})],2):_vm._e()])
5095
5304
  }
5096
5305
  var xt_step_pricevue_type_template_id_0cb332f3_staticRenderFns = []
@@ -5098,7 +5307,7 @@ var xt_step_pricevue_type_template_id_0cb332f3_staticRenderFns = []
5098
5307
 
5099
5308
  // CONCATENATED MODULE: ./src/components/xt-step-price/index.vue?vue&type=template&id=0cb332f3
5100
5309
 
5101
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-step-price-item/index.vue?vue&type=template&id=4d5bb3b1
5310
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-step-price-item/index.vue?vue&type=template&id=4d5bb3b1
5102
5311
  var xt_step_price_itemvue_type_template_id_4d5bb3b1_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"xt-step-price-item"},[_c('div',{staticClass:"xt-step-price-item__range"},[_c('span',{staticClass:"xt-step-price-item__bracket"},[_vm._v(_vm._s(_vm.finalLeftBracket))]),(_vm.itemsLength > 1)?_c('span',{staticClass:"xt-step-price-item__name"},[_vm._v("第"+_vm._s(_vm.index + 1)+_vm._s(_vm.stepName))]):_vm._e(),_c('span',{staticClass:"xt-step-price-item__bracket"},[_vm._v(_vm._s(_vm.finalRightBracket))]),_c('xt-input',{staticClass:"xt-step-price-item__input",attrs:{"disabled":_vm.disabled || _vm.minLocked,"size":"small","placeholder":"下限"},on:{"blur":(e) => { _vm.onMinBlur(); _vm.onBlur(e) }},model:{value:(_vm.minInput),callback:function ($$v) {_vm.minInput=_vm._n($$v)},expression:"minInput"}}),_c('span',{staticClass:"xt-step-price-item__comma"},[_vm._v("-")]),(!_vm.isLast)?_c('xt-input',{staticClass:"xt-step-price-item__input",attrs:{"type":"number","disabled":_vm.disabled,"size":"small","placeholder":"上限"},on:{"blur":(e) => { _vm.onMaxBlur(); _vm.onBlur(e) }},model:{value:(_vm.maxInput),callback:function ($$v) {_vm.maxInput=_vm._n($$v)},expression:"maxInput"}}):_c('span',{staticClass:"xt-step-price-item__infinity"},[_vm._v("+∞")])],1),_c('div',{staticClass:"xt-step-price-item__price"},[_c('xt-input',{staticClass:"xt-step-price-item__input xt-step-price-item__input--price",attrs:{"type":"number","disabled":_vm.disabled,"size":"small","placeholder":"价格"},on:{"blur":(e) => { _vm.onPriceBlur(); _vm.onBlur(e) }},model:{value:(_vm.priceInput),callback:function ($$v) {_vm.priceInput=_vm._n($$v)},expression:"priceInput"}}),_c('span',{staticClass:"xt-step-price-item__unit"},[_vm._v(_vm._s(_vm.unit))])],1),(!_vm.disabled && _vm.removable && _vm.itemsLength > 1)?_c('xt-button',{staticClass:"xt-step-price-item__delete",attrs:{"type":"text","icon":"el-icon-delete"},on:{"click":_vm.onDelete}}):_vm._e()],1)
5103
5312
  }
5104
5313
  var xt_step_price_itemvue_type_template_id_4d5bb3b1_staticRenderFns = []
@@ -5668,7 +5877,7 @@ xt_step_price_item.install = function (Vue) {
5668
5877
  // EXTERNAL MODULE: ./src/components/xt-map/style/index.scss
5669
5878
  var xt_map_style = __webpack_require__("c759");
5670
5879
 
5671
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-map/index.vue?vue&type=template&id=0c15823e
5880
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-map/index.vue?vue&type=template&id=0c15823e
5672
5881
  var xt_mapvue_type_template_id_0c15823e_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"xt-map-wrapper"},[_c('div',{ref:"mapContainer",staticClass:"xt-map-container",attrs:{"data-theme":_vm.mergedTheme}}),(_vm.loading)?_c('div',{staticClass:"xt-map-loading"},[_c('span',[_vm._v("地图加载中...")])]):_vm._e(),(_vm.errorMessage)?_c('div',{staticClass:"xt-map-error"},[_c('span',[_vm._v(_vm._s(_vm.errorMessage))])]):_vm._e(),_vm._t("overlay")],2)
5673
5882
  }
5674
5883
  var xt_mapvue_type_template_id_0c15823e_staticRenderFns = []
@@ -7386,7 +7595,7 @@ xt_map.install = function (Vue) {
7386
7595
  /* harmony default export */ var components_xt_map = (xt_map);
7387
7596
 
7388
7597
 
7389
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-map/provider.vue?vue&type=template&id=16f243b0&scoped=true
7598
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-map/provider.vue?vue&type=template&id=16f243b0&scoped=true
7390
7599
  var providervue_type_template_id_16f243b0_scoped_true_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{class:['xt-map-provider', { 'xt-map-provider--dark': _vm.mergedTheme === 'dark' }],style:(_vm.wrapperStyle)},[_vm._t("default")],2)
7391
7600
  }
7392
7601
  var providervue_type_template_id_16f243b0_scoped_true_staticRenderFns = []
@@ -7593,7 +7802,7 @@ xt_map_provider.install = function (Vue) {
7593
7802
  // EXTERNAL MODULE: ./src/components/xt-grid-box/style/index.scss
7594
7803
  var xt_grid_box_style = __webpack_require__("4202");
7595
7804
 
7596
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-grid-box/index.vue?vue&type=template&id=67e197c4
7805
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-grid-box/index.vue?vue&type=template&id=67e197c4
7597
7806
  var xt_grid_boxvue_type_template_id_67e197c4_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"xt-grid-box",style:(_vm.styleAttrs)},[_vm._t("default")],2)
7598
7807
  }
7599
7808
  var xt_grid_boxvue_type_template_id_67e197c4_staticRenderFns = []
@@ -7764,7 +7973,7 @@ xt_grid_box.install = function (Vue) {
7764
7973
  /* harmony default export */ var components_xt_grid_box = (xt_grid_box);
7765
7974
 
7766
7975
 
7767
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-grid-item/index.vue?vue&type=template&id=160dc1ff&scoped=true
7976
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-grid-item/index.vue?vue&type=template&id=160dc1ff&scoped=true
7768
7977
  var xt_grid_itemvue_type_template_id_160dc1ff_scoped_true_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"xt-grid-item",style:(_vm.styleAttrs)},[_vm._t("default")],2)
7769
7978
  }
7770
7979
  var xt_grid_itemvue_type_template_id_160dc1ff_scoped_true_staticRenderFns = []
@@ -7907,7 +8116,7 @@ xt_grid_item.install = function (Vue) {
7907
8116
  // EXTERNAL MODULE: ./src/components/xt-progress/style/index.scss
7908
8117
  var xt_progress_style = __webpack_require__("2e12");
7909
8118
 
7910
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-progress/index.vue?vue&type=template&id=76c95a92
8119
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-progress/index.vue?vue&type=template&id=76c95a92
7911
8120
  var xt_progressvue_type_template_id_76c95a92_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"xt-progress",class:[
7912
8121
  `xt-progress--${_vm.type}`,
7913
8122
  `xt-progress--${_vm.size}`
@@ -8004,7 +8213,7 @@ xt_progress.install = function(Vue) {
8004
8213
 
8005
8214
  /* harmony default export */ var components_xt_progress = (xt_progress);
8006
8215
 
8007
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-tab-pane/index.vue?vue&type=template&id=77ab429e
8216
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-tab-pane/index.vue?vue&type=template&id=77ab429e
8008
8217
  var xt_tab_panevue_type_template_id_77ab429e_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{directives:[{name:"show",rawName:"v-show",value:(_vm.isActive),expression:"isActive"}],staticClass:"xt-tab-pane"},[_vm._t("default")],2)
8009
8218
  }
8010
8219
  var xt_tab_panevue_type_template_id_77ab429e_staticRenderFns = []
@@ -8093,7 +8302,7 @@ xt_tab_pane.install = function(Vue) {
8093
8302
  // EXTERNAL MODULE: ./src/components/xt-tabs/style/index.scss
8094
8303
  var xt_tabs_style = __webpack_require__("e8d2");
8095
8304
 
8096
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-tabs/index.vue?vue&type=template&id=6fedb3e8
8305
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-tabs/index.vue?vue&type=template&id=6fedb3e8
8097
8306
  var xt_tabsvue_type_template_id_6fedb3e8_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{ref:"tabsWrap",staticClass:"xt-tabs",class:[
8098
8307
  `xt-tabs--${_vm.actualPosition}`,
8099
8308
  { 'xt-tabs--card': _vm.type === 'card' },
@@ -8304,7 +8513,7 @@ xt_tabs.install = function(Vue) {
8304
8513
  // EXTERNAL MODULE: ./src/components/xt-badge/style/index.scss
8305
8514
  var xt_badge_style = __webpack_require__("bf3f");
8306
8515
 
8307
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-badge/index.vue?vue&type=template&id=3f0a6b4e
8516
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-badge/index.vue?vue&type=template&id=3f0a6b4e
8308
8517
  var xt_badgevue_type_template_id_3f0a6b4e_render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',{class:_vm.rootClasses},[_c('span',{staticClass:"xt-badge__content"},[_vm._t("default")],2),(!_vm.hidden && (_vm.value || _vm.isDot))?_c('span',{staticClass:"xt-badge__badge",style:(_vm.badgeStyle)},[(_vm.isDot)?_c('span'):(_vm.isOverflow)?_c('span',[_vm._v(_vm._s(_vm.overflowText))]):_c('span',[_vm._v(_vm._s(_vm.value))])]):_vm._e()])
8309
8518
  }
8310
8519
  var xt_badgevue_type_template_id_3f0a6b4e_staticRenderFns = []
@@ -8412,7 +8621,7 @@ xt_badge.install = function(Vue) {
8412
8621
  // EXTERNAL MODULE: ./src/components/xt-date-picker/style/index.scss
8413
8622
  var xt_date_picker_style = __webpack_require__("c828");
8414
8623
 
8415
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-date-picker/index.vue?vue&type=template&id=7f82fa36
8624
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-date-picker/index.vue?vue&type=template&id=7f82fa36
8416
8625
  var xt_date_pickervue_type_template_id_7f82fa36_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"xt-date-picker-container"},[(_vm.showDimension)?_c('div',{staticClass:"xt-date-dimension"},[_c('el-radio-group',{attrs:{"size":"small"},model:{value:(_vm.dimension),callback:function ($$v) {_vm.dimension=$$v},expression:"dimension"}},[_c('el-radio-button',{attrs:{"label":"date"}},[_vm._v("日")]),_c('el-radio-button',{attrs:{"label":"month"}},[_vm._v("月")]),_c('el-radio-button',{attrs:{"label":"year"}},[_vm._v("年")]),_c('el-radio-button',{attrs:{"label":"daterange"}},[_vm._v("自定义")])],1)],1):_vm._e(),_c('div',{staticClass:"xt-date-picker-wrapper"},[(_vm.useRangeMode)?_c('RangeDate',{staticClass:"xt-date",class:{ focus: _vm.isfocus },style:(_vm.width ? { width: `${_vm.width}px` } : {}),attrs:{"type":_vm.rangeDateType,"separator":_vm.separator,"disabled":_vm.disabled},on:{"focus":function($event){_vm.isfocus = true; _vm.$emit('focus')},"blur":function($event){_vm.isfocus = false; _vm.$emit('blur')}},model:{value:(_vm.rangeValue),callback:function ($$v) {_vm.rangeValue=$$v},expression:"rangeValue"}}):_vm._e(),(!_vm.useRangeMode && _vm.realDateType !== 'quarter')?_c('el-date-picker',{ref:"singlePicker",staticClass:"xt-date",attrs:{"size":"small","disabled":_vm.disabled,"append-to-body":"","format":_vm.format,"type":_vm.realDateType,"placeholder":_vm.innerPlaceholder,"clearable":""},on:{"focus":function($event){_vm.isfocus = true; _vm.$emit('focus')},"blur":function($event){_vm.isfocus = false; _vm.$emit('blur')}},model:{value:(_vm.singleValue),callback:function ($$v) {_vm.singleValue=$$v},expression:"singleValue"}}):(!_vm.useRangeMode && _vm.realDateType === 'quarter')?_c('Picker',{staticClass:"xt-date",attrs:{"type":"quarter","size":"small","disabled":_vm.disabled,"placeholder":_vm.innerPlaceholder},on:{"focus":function($event){_vm.isfocus = true; _vm.$emit('focus')},"blur":function($event){_vm.isfocus = false; _vm.$emit('blur')}},model:{value:(_vm.singleValue),callback:function ($$v) {_vm.singleValue=$$v},expression:"singleValue"}}):_vm._e()],1)])
8417
8626
  }
8418
8627
  var xt_date_pickervue_type_template_id_7f82fa36_staticRenderFns = []
@@ -8645,7 +8854,7 @@ xt_date_picker.install = function (Vue) {
8645
8854
 
8646
8855
  /* harmony default export */ var components_xt_date_picker = (xt_date_picker);
8647
8856
 
8648
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-chart/index.vue?vue&type=template&id=fcb32ff2
8857
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-chart/index.vue?vue&type=template&id=fcb32ff2
8649
8858
  var xt_chartvue_type_template_id_fcb32ff2_render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.type=='bar')?_c('xt-bar',_vm._b({attrs:{"theme":_vm.myTheme,"size":_vm.mySize}},'xt-bar',_vm.$attrs,false)):(_vm.type=='line')?_c('xt-line',_vm._b({attrs:{"theme":_vm.myTheme,"size":_vm.mySize}},'xt-line',_vm.$attrs,false)):(_vm.type=='pie')?_c('xt-pie',_vm._b({attrs:{"theme":_vm.myTheme,"size":_vm.mySize}},'xt-pie',_vm.$attrs,false)):(_vm.type=='multi')?_c('xt-multi',_vm._b({attrs:{"theme":_vm.myTheme,"size":_vm.mySize}},'xt-multi',_vm.$attrs,false)):_vm._e()
8650
8859
  }
8651
8860
  var xt_chartvue_type_template_id_fcb32ff2_staticRenderFns = []
@@ -8653,7 +8862,7 @@ var xt_chartvue_type_template_id_fcb32ff2_staticRenderFns = []
8653
8862
 
8654
8863
  // CONCATENATED MODULE: ./src/components/xt-chart/index.vue?vue&type=template&id=fcb32ff2
8655
8864
 
8656
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-chart/XtBar.vue?vue&type=template&id=5705d26c&scoped=true
8865
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-chart/XtBar.vue?vue&type=template&id=5705d26c&scoped=true
8657
8866
  var XtBarvue_type_template_id_5705d26c_scoped_true_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{ref:"barchart",staticClass:"bar-box",style:(_vm.chartStyle)})
8658
8867
  }
8659
8868
  var XtBarvue_type_template_id_5705d26c_scoped_true_staticRenderFns = []
@@ -8909,7 +9118,7 @@ var XtBar_component = Object(componentNormalizer["a" /* default */])(
8909
9118
  )
8910
9119
 
8911
9120
  /* harmony default export */ var XtBar = (XtBar_component.exports);
8912
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-chart/XtLine.vue?vue&type=template&id=ee5ba2d8&scoped=true
9121
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-chart/XtLine.vue?vue&type=template&id=ee5ba2d8&scoped=true
8913
9122
  var XtLinevue_type_template_id_ee5ba2d8_scoped_true_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{ref:"linechart",staticClass:"line-box",style:(_vm.chartStyle)})
8914
9123
  }
8915
9124
  var XtLinevue_type_template_id_ee5ba2d8_scoped_true_staticRenderFns = []
@@ -9117,7 +9326,7 @@ var XtLine_component = Object(componentNormalizer["a" /* default */])(
9117
9326
  )
9118
9327
 
9119
9328
  /* harmony default export */ var XtLine = (XtLine_component.exports);
9120
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-chart/XtPie.vue?vue&type=template&id=504b3110&scoped=true
9329
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-chart/XtPie.vue?vue&type=template&id=504b3110&scoped=true
9121
9330
  var XtPievue_type_template_id_504b3110_scoped_true_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{ref:"piechart",staticClass:"pie-box",style:(_vm.chartStyle)})
9122
9331
  }
9123
9332
  var XtPievue_type_template_id_504b3110_scoped_true_staticRenderFns = []
@@ -9339,7 +9548,7 @@ var XtPie_component = Object(componentNormalizer["a" /* default */])(
9339
9548
  )
9340
9549
 
9341
9550
  /* harmony default export */ var XtPie = (XtPie_component.exports);
9342
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-chart/XtMulti.vue?vue&type=template&id=2957321d&scoped=true
9551
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-chart/XtMulti.vue?vue&type=template&id=2957321d&scoped=true
9343
9552
  var XtMultivue_type_template_id_2957321d_scoped_true_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{ref:"multilinechart",staticClass:"multiline-box",style:(_vm.chartStyle)})
9344
9553
  }
9345
9554
  var XtMultivue_type_template_id_2957321d_scoped_true_staticRenderFns = []
@@ -9806,7 +10015,7 @@ xt_chart.install = function (Vue) {
9806
10015
  // EXTERNAL MODULE: ./src/components/xt-icon/style/index.scss
9807
10016
  var xt_icon_style = __webpack_require__("1f11");
9808
10017
 
9809
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-icon/index.vue?vue&type=template&id=0e301b72&scoped=true
10018
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-icon/index.vue?vue&type=template&id=0e301b72&scoped=true
9810
10019
  var xt_iconvue_type_template_id_0e301b72_scoped_true_render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(_vm.tag,_vm._g({tag:"component",class:_vm.iconClasses,style:(_vm.iconStyle),on:{"click":_vm.handleClick}},_vm.$listeners),[(_vm.isSvgSprite)?_c('svg',{style:(_vm.svgStyle),attrs:{"aria-hidden":"true"}},[_c('use',{attrs:{"href":_vm.svgHref}})]):(_vm.hasDefaultSlot)?_vm._t("default"):_vm._e()],2)
9811
10020
  }
9812
10021
  var xt_iconvue_type_template_id_0e301b72_scoped_true_staticRenderFns = []
@@ -9985,7 +10194,7 @@ xt_icon.install = function (Vue) {
9985
10194
 
9986
10195
  /* harmony default export */ var components_xt_icon = (xt_icon);
9987
10196
 
9988
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-table/index.vue?vue&type=template&id=39458c28&scoped=true
10197
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-table/index.vue?vue&type=template&id=39458c28&scoped=true
9989
10198
  var xt_tablevue_type_template_id_39458c28_scoped_true_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"xt-table-wrapper"},[(_vm.title || _vm.$slots.toolbar)?_c('div',{staticClass:"xt-table-header"},[(_vm.title)?_c('span',{staticClass:"xt-table-title"},[_vm._v(_vm._s(_vm.title))]):_vm._e(),_c('div',{staticClass:"xt-table-toolbar"},[_vm._t("toolbar")],2)]):_vm._e(),_c('div',{staticClass:"xt-table-body"},[_c('VirtualElTable',_vm._g(_vm._b({ref:"table",staticClass:"xt-table",attrs:{"data":_vm.processedTableData,"height":_vm.computedHeight,"max-height":_vm.computedMaxHeight,"virtual-scroll":_vm.virtualScroll,"row-height":_vm.rowInitHeight,"buffer-size":_vm.bufferSize,"span-method":_vm.groupColumns.length ? _vm.handleSpanMethod : undefined,"row-class-name":_vm.getRowClassName},on:{"selection-change":_vm.handleSelectionChange,"sort-change":_vm.handleSortChange}},'VirtualElTable',_vm.$attrs,false),_vm.$listeners),[(_vm.selection)?_c('el-table-column',{attrs:{"type":"selection","width":"55","fixed":_vm.selectionFixed}}):_vm._e(),(_vm.showIndex)?_c('el-table-column',{attrs:{"type":"index","width":"60","label":"#","fixed":_vm.indexFixed,"index":_vm.indexMethod}}):_vm._e(),_vm._l((_vm.flattenedColumns),function(col){return [(col.children && col.children.length)?_c('el-table-column',_vm._b({key:col._key},'el-table-column',_vm.getColumnProps(col),false),[_vm._l((col.children),function(child){return [_c('el-table-column',_vm._b({key:child._key,scopedSlots:_vm._u([(child.render)?{key:"default",fn:function(scope){return [_c('XtTableCell',{attrs:{"row":scope.row,"index":scope.$index,"render":child.render,"column":child}})]}}:(child.slot)?{key:"default",fn:function(scope){return [_vm._t(child.slot,null,{"row":scope.row,"index":scope.$index,"column":child})]}}:null],null,true)},'el-table-column',_vm.getColumnProps(child),false))]})],2):_c('el-table-column',_vm._b({key:col._key,scopedSlots:_vm._u([(col.render)?{key:"default",fn:function(scope){return [_c('XtTableCell',{attrs:{"row":scope.row,"index":scope.$index,"render":col.render,"column":col}})]}}:(col.slot)?{key:"default",fn:function(scope){return [_vm._t(col.slot,null,{"row":scope.row,"index":scope.$index,"column":col})]}}:null],null,true)},'el-table-column',_vm.getColumnProps(col),false))]})],2)],1),(_vm.showPagination)?_c('div',{staticClass:"xt-table-footer"},[_c('el-pagination',{attrs:{"current-page":_vm.pagination.pageNum,"page-size":_vm.pagination.pageSize,"total":_vm.total,"page-sizes":_vm.pagination.pageSizes || [10, 20, 50, 100],"layout":"total, sizes, prev, pager, next, jumper"},on:{"size-change":_vm.handleSizeChange,"current-change":_vm.handleCurrentChange}})],1):_vm._e()])
9990
10199
  }
9991
10200
  var xt_tablevue_type_template_id_39458c28_scoped_true_staticRenderFns = []
@@ -10039,7 +10248,7 @@ var XtTableCell_component = Object(componentNormalizer["a" /* default */])(
10039
10248
  )
10040
10249
 
10041
10250
  /* harmony default export */ var XtTableCell = (XtTableCell_component.exports);
10042
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-table/VirtualElTable.vue?vue&type=template&id=01f7dcee&scoped=true
10251
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-table/VirtualElTable.vue?vue&type=template&id=01f7dcee&scoped=true
10043
10252
  var VirtualElTablevue_type_template_id_01f7dcee_scoped_true_render = function render(){var _vm=this,_c=_vm._self._c;return _c('el-table',_vm._g(_vm._b({ref:"innerTable",attrs:{"data":_vm.renderList}},'el-table',_vm.$attrs,false),_vm.$listeners),[_vm._t("default")],2)
10044
10253
  }
10045
10254
  var VirtualElTablevue_type_template_id_01f7dcee_scoped_true_staticRenderFns = []
@@ -10732,43 +10941,370 @@ var xt_tablevue_type_style_index_0_id_39458c28_prod_scoped_true_lang_css = __web
10732
10941
 
10733
10942
  /* normalize component */
10734
10943
 
10735
- var xt_table_component = Object(componentNormalizer["a" /* default */])(
10736
- components_xt_tablevue_type_script_lang_js,
10737
- xt_tablevue_type_template_id_39458c28_scoped_true_render,
10738
- xt_tablevue_type_template_id_39458c28_scoped_true_staticRenderFns,
10944
+ var xt_table_component = Object(componentNormalizer["a" /* default */])(
10945
+ components_xt_tablevue_type_script_lang_js,
10946
+ xt_tablevue_type_template_id_39458c28_scoped_true_render,
10947
+ xt_tablevue_type_template_id_39458c28_scoped_true_staticRenderFns,
10948
+ false,
10949
+ null,
10950
+ "39458c28",
10951
+ null
10952
+
10953
+ )
10954
+
10955
+ /* harmony default export */ var xt_table = (xt_table_component.exports);
10956
+ // CONCATENATED MODULE: ./src/components/xt-table/index.js
10957
+
10958
+
10959
+ xt_table.install = function (Vue) {
10960
+ Vue.component(xt_table.name, xt_table)
10961
+ }
10962
+
10963
+ /* harmony default export */ var components_xt_table = (xt_table);
10964
+
10965
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-list/index.vue?vue&type=template&id=084d1476&scoped=true
10966
+ var xt_listvue_type_template_id_084d1476_scoped_true_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"xt-list",class:{ 'xt-list--loading': _vm.loading }},[(_vm.title || _vm.filterable || _vm.sortable || _vm.$slots.toolbar)?_c('div',{staticClass:"xt-list__header"},[(_vm.title)?_c('span',{staticClass:"xt-list__title"},[_vm._v(_vm._s(_vm.title))]):_vm._e(),_c('div',{staticClass:"xt-list__toolbar"},[(_vm.filterable)?_c('div',{staticClass:"xt-list__search"},[_c('el-input',{attrs:{"placeholder":_vm.filterPlaceholder,"size":"small","clearable":"","prefix-icon":"el-icon-search"},on:{"input":_vm.handleSearch},model:{value:(_vm.searchText),callback:function ($$v) {_vm.searchText=$$v},expression:"searchText"}})],1):_vm._e(),(_vm.sortable && _vm.sortBy)?_c('el-button',{attrs:{"size":"small","icon":"el-icon-sort","type":_vm.currentSortOrder ? 'primary' : 'default',"plain":""},on:{"click":_vm.handleSortToggle}},[_vm._v(" "+_vm._s(_vm.sortLabel)+" ")]):_vm._e(),_vm._t("toolbar")],2)]):_vm._e(),_c('xt-scroll',{ref:"scrollContainer",class:['xt-list__body', { 'xt-list__body--virtual': _vm.virtualScroll }],style:(_vm.bodyStyle),on:{"scroll":_vm.onScroll}},[(_vm.virtualScroll)?_c('div',{staticClass:"xt-list__phantom",style:({ height: _vm.totalHeight + 'px' })},[_c('div',{style:({ paddingTop: _vm.offsetY + 'px' })},[(_vm.groupedData.length)?[_vm._l((_vm.visibleGroups),function(group,gIdx){return [_c('div',{key:group._key,staticClass:"xt-list__group"},[_c('div',{staticClass:"xt-list__group-title",on:{"click":function($event){return _vm.toggleGroup(group._key)}}},[_c('span',{staticClass:"xt-list__group-arrow",class:{ 'is-expanded': group._expanded }},[_c('i',{staticClass:"el-icon-arrow-right"})]),_vm._t("group-title",function(){return [_c('span',{staticClass:"xt-list__group-label"},[_vm._v(_vm._s(_vm.getGroupLabel(group)))]),_c('span',{staticClass:"xt-list__group-count"},[_vm._v("("+_vm._s(group._items.length)+")")])]},{"group":group,"items":group._items,"expanded":group._expanded})],2),(group._expanded)?_c('div',{class:['xt-list__cards', 'xt-list__cols-' + _vm.columns]},_vm._l((_vm.getVisibleItems(group)),function(item,idx){return _c('div',{key:item._id || idx,staticClass:"xt-list__item",on:{"click":function($event){return _vm.handleItemClick(item, group._key)}}},[_c('el-card',{attrs:{"shadow":_vm.shadow,"body-style":_vm.cardBodyStyle}},[_vm._t("default",function(){return [(_vm.getImage(item))?_c('div',{staticClass:"xt-list__image"},[_c('img',{attrs:{"src":_vm.getImage(item),"alt":_vm.getConfigValue(_vm.cardConfig.title, item)}})]):_vm._e(),(_vm.getTag(item))?_c('div',{staticClass:"xt-list__tag"},[_c('el-tag',{attrs:{"size":"small","type":_vm.getTagType(item)}},[_vm._v(_vm._s(_vm.getTag(item)))])],1):_vm._e(),(_vm.getConfigValue(_vm.cardConfig.title, item))?_c('div',{staticClass:"xt-list__card-title"},[_vm._v(" "+_vm._s(_vm.getConfigValue(_vm.cardConfig.title, item))+" ")]):_vm._e(),(_vm.getConfigValue(_vm.cardConfig.subtitle, item))?_c('div',{staticClass:"xt-list__card-subtitle"},[_vm._v(" "+_vm._s(_vm.getConfigValue(_vm.cardConfig.subtitle, item))+" ")]):_vm._e(),(_vm.getConfigValue(_vm.cardConfig.content, item))?_c('div',{staticClass:"xt-list__card-content"},[_vm._v(" "+_vm._s(_vm.getConfigValue(_vm.cardConfig.content, item))+" ")]):_vm._e(),(_vm.getConfigValue(_vm.cardConfig.footer, item))?_c('div',{staticClass:"xt-list__card-footer"},[_vm._t("card-footer",function(){return [_vm._v(" "+_vm._s(_vm.getConfigValue(_vm.cardConfig.footer, item))+" ")]},{"item":item,"index":_vm.getItemIndex(item, group)})],2):_vm._e()]},{"item":item,"index":_vm.getItemIndex(item, group),"group":group})],2)],1)}),0):_vm._e()])]})]:(!_vm.loading)?_c('div',{staticClass:"xt-list__empty"},[_vm._t("empty",function(){return [_c('span',[_vm._v(_vm._s(_vm.emptyText))])]})],2):_vm._e()],2)]):(_vm.groupedData.length)?[_vm._l((_vm.groupedData),function(group){return [_c('div',{key:group._key,staticClass:"xt-list__group"},[_c('div',{staticClass:"xt-list__group-title",on:{"click":function($event){return _vm.toggleGroup(group._key)}}},[_c('span',{staticClass:"xt-list__group-arrow",class:{ 'is-expanded': group._expanded }},[_c('i',{staticClass:"el-icon-arrow-right"})]),_vm._t("group-title",function(){return [_c('span',{staticClass:"xt-list__group-label"},[_vm._v(_vm._s(_vm.getGroupLabel(group)))]),_c('span',{staticClass:"xt-list__group-count"},[_vm._v("("+_vm._s(group._items.length)+")")])]},{"group":group,"items":group._items,"expanded":group._expanded})],2),(group._expanded)?_c('div',{class:['xt-list__cards', 'xt-list__cols-' + _vm.columns]},_vm._l((group._items),function(item,idx){return _c('div',{key:item._id || idx,staticClass:"xt-list__item",on:{"click":function($event){return _vm.handleItemClick(item, group._key)}}},[_c('el-card',{attrs:{"shadow":_vm.shadow,"body-style":_vm.cardBodyStyle}},[_vm._t("default",function(){return [(_vm.getImage(item))?_c('div',{staticClass:"xt-list__image"},[_c('img',{attrs:{"src":_vm.getImage(item),"alt":_vm.getConfigValue(_vm.cardConfig.title, item)}})]):_vm._e(),(_vm.getTag(item))?_c('div',{staticClass:"xt-list__tag"},[_c('el-tag',{attrs:{"size":"small","type":_vm.getTagType(item)}},[_vm._v(_vm._s(_vm.getTag(item)))])],1):_vm._e(),(_vm.getConfigValue(_vm.cardConfig.title, item))?_c('div',{staticClass:"xt-list__card-title"},[_vm._v(" "+_vm._s(_vm.getConfigValue(_vm.cardConfig.title, item))+" ")]):_vm._e(),(_vm.getConfigValue(_vm.cardConfig.subtitle, item))?_c('div',{staticClass:"xt-list__card-subtitle"},[_vm._v(" "+_vm._s(_vm.getConfigValue(_vm.cardConfig.subtitle, item))+" ")]):_vm._e(),(_vm.getConfigValue(_vm.cardConfig.content, item))?_c('div',{staticClass:"xt-list__card-content"},[_vm._v(" "+_vm._s(_vm.getConfigValue(_vm.cardConfig.content, item))+" ")]):_vm._e(),(_vm.getConfigValue(_vm.cardConfig.footer, item))?_c('div',{staticClass:"xt-list__card-footer"},[_vm._t("card-footer",function(){return [_vm._v(" "+_vm._s(_vm.getConfigValue(_vm.cardConfig.footer, item))+" ")]},{"item":item,"index":idx})],2):_vm._e()]},{"item":item,"index":idx,"group":group})],2)],1)}),0):_vm._e()])]})]:(!_vm.loading)?_c('div',{staticClass:"xt-list__empty"},[_vm._t("empty",function(){return [_c('span',[_vm._v(_vm._s(_vm.emptyText))])]})],2):_vm._e(),(_vm.loadMore && _vm.hasMore && !_vm.loading)?_c('div',{staticClass:"xt-list__loadmore"},[_c('el-button',{attrs:{"type":"text","loading":_vm.loadMoreLoading},on:{"click":_vm.handleLoadMore}},[_vm._v(" "+_vm._s(_vm.loadMoreText)+" ")])],1):_vm._e()],2),(_vm.loading)?_c('div',{staticClass:"xt-list__loading"},[_vm._t("loading",function(){return [_c('i',{staticClass:"el-icon-loading"}),_c('span',[_vm._v("加载中...")])]})],2):_vm._e(),(_vm.showPagination)?_c('div',{staticClass:"xt-list__footer"},[_c('el-pagination',{attrs:{"background":"","small":"","current-page":_vm.pagination.pageNum,"page-size":_vm.pagination.pageSize,"total":_vm.total,"page-sizes":_vm.pagination.pageSizes || [10, 20, 50],"layout":"total, prev, pager, next"},on:{"size-change":_vm.handleSizeChange,"current-change":_vm.handleCurrentChange}})],1):_vm._e()],1)
10967
+ }
10968
+ var xt_listvue_type_template_id_084d1476_scoped_true_staticRenderFns = []
10969
+
10970
+
10971
+ // CONCATENATED MODULE: ./src/components/xt-list/index.vue?vue&type=template&id=084d1476&scoped=true
10972
+
10973
+ // EXTERNAL MODULE: ./src/components/xt-scroll/style/index.scss
10974
+ var xt_scroll_style = __webpack_require__("f699");
10975
+
10976
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-scroll/index.vue?vue&type=template&id=74170e40
10977
+ var xt_scrollvue_type_template_id_74170e40_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"xt-scroll",class:[`xt-scroll--${_vm.scrollDirection}`],style:(_vm.containerStyle)},[_c('div',{ref:"scrollWrap",staticClass:"xt-scroll__wrap",class:[`xt-scroll__wrap--${_vm.scrollDirection}`],on:{"scroll":_vm.onScroll}},[(_vm.vScroll)?_c('div',{staticClass:"xt-scroll__virtual",style:(_vm.virtualWrapperStyle)},[(_vm.scrollDirection === 'vertical')?_c('div',{staticClass:"xt-scroll__phantom",style:({ height: _vm.totalSize + 'px' })},[_c('div',{style:({ transform: `translateY(${_vm.offsetStart}px)` })},[_vm._l((_vm.visibleData),function(item,index){return [_c('div',{key:_vm.getItemKey(item, index),staticClass:"xt-scroll__item",class:_vm.itemClassName,style:(_vm.itemStyle)},[_vm._t("item",function(){return [_vm._v(" "+_vm._s(item)+" ")]},{"item":item,"index":_vm.getOriginalIndex(index)})],2)]})],2)]):(_vm.scrollDirection === 'horizontal')?_c('div',{staticClass:"xt-scroll__phantom",style:({ width: _vm.totalSize + 'px' })},[_c('div',{style:({ transform: `translateX(${_vm.offsetStart}px)` })},[_vm._l((_vm.visibleData),function(item,index){return [_c('div',{key:_vm.getItemKey(item, index),staticClass:"xt-scroll__item",class:_vm.itemClassName,style:(_vm.itemStyle)},[_vm._t("item",function(){return [_vm._v(" "+_vm._s(item)+" ")]},{"item":item,"index":_vm.getOriginalIndex(index)})],2)]})],2)]):_vm._e()]):_vm._e(),(_vm.vScroll && (!_vm.data || !_vm.data.length) && !_vm.loading)?_c('div',{staticClass:"xt-scroll__empty"},[_vm._t("empty",function(){return [_c('span',[_vm._v(_vm._s(_vm.emptyText))])]})],2):_vm._e(),(_vm.loading)?_c('div',{staticClass:"xt-scroll__loading"},[_vm._t("loading",function(){return [_c('i',{staticClass:"el-icon-loading"}),_c('span',[_vm._v("加载中...")])]})],2):_vm._e(),(!_vm.vScroll)?_c('div',{staticClass:"xt-scroll__default"},[_vm._t("default")],2):_vm._e(),(_vm.vScroll && _vm.showLoadMore && !_vm.loading)?_c('div',{staticClass:"xt-scroll__loadmore",on:{"click":_vm.onLoadMore}},[_c('el-button',{attrs:{"type":"text","loading":_vm.loadMoreLoading}},[_vm._v(" "+_vm._s(_vm.loadMoreText)+" ")])],1):_vm._e()])])
10978
+ }
10979
+ var xt_scrollvue_type_template_id_74170e40_staticRenderFns = []
10980
+
10981
+
10982
+ // CONCATENATED MODULE: ./src/components/xt-scroll/index.vue?vue&type=template&id=74170e40
10983
+
10984
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-scroll/index.vue?vue&type=script&lang=js
10985
+
10986
+ /* harmony default export */ var xt_scrollvue_type_script_lang_js = ({
10987
+ name: 'XtScroll',
10988
+
10989
+ props: {
10990
+ // ========== 虚拟滚动配置 ==========
10991
+ /** 是否启用虚拟滚动 */
10992
+ vScroll: { type: Boolean, default: false },
10993
+ /** 数据源 */
10994
+ data: { type: Array, default: () => [] },
10995
+ /** 每个 item 的固定尺寸(px),纵向为高度,横向为宽度 */
10996
+ itemSize: { type: Number, default: 50 },
10997
+ /** item 的唯一键字段名 */
10998
+ keyField: { type: String, default: 'id' },
10999
+ /** 预渲染缓冲区大小(item 数量) */
11000
+ bufferSize: { type: Number, default: 5 },
11001
+ /** 虚拟滚动方向 */
11002
+ scrollDirection: {
11003
+ type: String,
11004
+ default: 'vertical',
11005
+ validator: (v) => ['vertical', 'horizontal'].includes(v)
11006
+ },
11007
+ /** item 的自定义 CSS 类名 */
11008
+ itemClassName: { type: String, default: '' },
11009
+
11010
+ // ========== 容器尺寸 ==========
11011
+ height: { type: [Number, String], default: '' },
11012
+ maxHeight: { type: [Number, String], default: '' },
11013
+ width: { type: [Number, String], default: '' },
11014
+ maxWidth: { type: [Number, String], default: '' },
11015
+
11016
+ // ========== 状态 ==========
11017
+ loading: { type: Boolean, default: false },
11018
+ emptyText: { type: String, default: '暂无数据' },
11019
+
11020
+ // ========== 加载更多 ==========
11021
+ loadMore: { type: Boolean, default: false },
11022
+ loadMoreText: { type: String, default: '加载更多' },
11023
+ loadMoreLoading: { type: Boolean, default: false }
11024
+ },
11025
+
11026
+ data() {
11027
+ return {
11028
+ scrollPos: 0,
11029
+ containerSize: 0,
11030
+ resizeObserver: null,
11031
+ rafId: null
11032
+ }
11033
+ },
11034
+
11035
+ computed: {
11036
+ containerStyle() {
11037
+ const style = {}
11038
+ if (this.height) {
11039
+ style.height = typeof this.height === 'number' ? this.height + 'px' : this.height
11040
+ }
11041
+ if (this.maxHeight) {
11042
+ style.maxHeight = typeof this.maxHeight === 'number' ? this.maxHeight + 'px' : this.maxHeight
11043
+ }
11044
+ if (this.width) {
11045
+ style.width = typeof this.width === 'number' ? this.width + 'px' : this.width
11046
+ }
11047
+ if (this.maxWidth) {
11048
+ style.maxWidth = typeof this.maxWidth === 'number' ? this.maxWidth + 'px' : this.maxWidth
11049
+ }
11050
+ return style
11051
+ },
11052
+
11053
+ virtualWrapperStyle() {
11054
+ const style = {}
11055
+ if (this.scrollDirection === 'horizontal') {
11056
+ style.height = '100%'
11057
+ }
11058
+ return style
11059
+ },
11060
+
11061
+ itemStyle() {
11062
+ return this.scrollDirection === 'vertical'
11063
+ ? { height: this.itemSize + 'px' }
11064
+ : { width: this.itemSize + 'px', display: 'inline-block' }
11065
+ },
11066
+
11067
+ /** 数据总条数 */
11068
+ dataCount() {
11069
+ return (this.data && this.data.length) || 0
11070
+ },
11071
+
11072
+ /** 总滚动尺寸 */
11073
+ totalSize() {
11074
+ return this.dataCount * this.itemSize
11075
+ },
11076
+
11077
+ /** 虚拟滚动:可见范围起始索引 */
11078
+ visibleStartIndex() {
11079
+ if (!this.vScroll) return 0
11080
+ const start = Math.floor(this.scrollPos / this.itemSize)
11081
+ return Math.max(0, start - this.bufferSize)
11082
+ },
11083
+
11084
+ /** 虚拟滚动:可见范围结束索引 */
11085
+ visibleEndIndex() {
11086
+ if (!this.vScroll) return this.dataCount
11087
+ const visibleCount = Math.ceil(this.containerSize / this.itemSize)
11088
+ const end = Math.ceil(this.scrollPos / this.itemSize) + visibleCount
11089
+ return Math.min(this.dataCount, end + this.bufferSize)
11090
+ },
11091
+
11092
+ /** 可见数据 */
11093
+ visibleData() {
11094
+ if (!this.vScroll || !this.data) return this.data || []
11095
+ return this.data.slice(this.visibleStartIndex, this.visibleEndIndex)
11096
+ },
11097
+
11098
+ /** 偏移量(px) */
11099
+ offsetStart() {
11100
+ return this.visibleStartIndex * this.itemSize
11101
+ },
11102
+
11103
+ /** 是否显示加载更多 */
11104
+ showLoadMore() {
11105
+ if (!this.loadMore || !this.dataCount) return false
11106
+ if (this.scrollDirection === 'vertical') {
11107
+ return this.scrollPos + this.containerSize >= this.totalSize - this.itemSize * 2
11108
+ }
11109
+ return false
11110
+ }
11111
+ },
11112
+
11113
+ watch: {
11114
+ data: {
11115
+ handler() {
11116
+ this.$nextTick(() => {
11117
+ this.updateContainerSize()
11118
+ })
11119
+ }
11120
+ },
11121
+ vScroll(val) {
11122
+ if (val) {
11123
+ this.$nextTick(() => {
11124
+ this.updateContainerSize()
11125
+ this.bindResizeObserver()
11126
+ })
11127
+ }
11128
+ }
11129
+ },
11130
+
11131
+ mounted() {
11132
+ this.$nextTick(() => {
11133
+ this.updateContainerSize()
11134
+ if (this.vScroll) {
11135
+ this.bindResizeObserver()
11136
+ }
11137
+ })
11138
+ },
11139
+
11140
+ beforeDestroy() {
11141
+ this.unbindResizeObserver()
11142
+ if (this.rafId && typeof cancelAnimationFrame !== 'undefined') {
11143
+ cancelAnimationFrame(this.rafId)
11144
+ this.rafId = null
11145
+ }
11146
+ },
11147
+
11148
+ methods: {
11149
+ // ========== 虚拟滚动 ==========
11150
+ onScroll() {
11151
+ const wrap = this.$refs.scrollWrap
11152
+ if (!wrap) return
11153
+
11154
+ const pos = this.scrollDirection === 'vertical' ? wrap.scrollTop : wrap.scrollLeft
11155
+ this.scrollPos = pos
11156
+
11157
+ // 对外 emit scroll 事件,传递 scrollTop/scrollLeft 方便父组件使用
11158
+ this.$emit('scroll', {
11159
+ scrollTop: wrap.scrollTop,
11160
+ scrollLeft: wrap.scrollLeft
11161
+ })
11162
+
11163
+ if (this.rafId) return
11164
+ if (typeof requestAnimationFrame === 'undefined') return
11165
+ this.rafId = requestAnimationFrame(() => {
11166
+ this.$forceUpdate()
11167
+ this.rafId = null
11168
+ })
11169
+ },
11170
+
11171
+ getItemKey(item, index) {
11172
+ if (item && typeof item === 'object' && this.keyField && item[this.keyField] != null) {
11173
+ return item[this.keyField]
11174
+ }
11175
+ return `vitem_${this.visibleStartIndex + index}`
11176
+ },
11177
+
11178
+ getOriginalIndex(index) {
11179
+ return this.visibleStartIndex + index
11180
+ },
11181
+
11182
+ // ========== 容器尺寸 ==========
11183
+ updateContainerSize() {
11184
+ const wrap = this.$refs.scrollWrap
11185
+ if (!wrap) return
11186
+
11187
+ this.containerSize = this.scrollDirection === 'vertical'
11188
+ ? wrap.clientHeight
11189
+ : wrap.clientWidth
11190
+ },
11191
+
11192
+ bindResizeObserver() {
11193
+ if (typeof ResizeObserver === 'undefined') return
11194
+ this.unbindResizeObserver()
11195
+
11196
+ const wrap = this.$refs.scrollWrap
11197
+ if (!wrap) return
11198
+
11199
+ this.resizeObserver = new ResizeObserver(() => {
11200
+ this.updateContainerSize()
11201
+ })
11202
+ this.resizeObserver.observe(wrap)
11203
+ },
11204
+
11205
+ unbindResizeObserver() {
11206
+ if (this.resizeObserver) {
11207
+ this.resizeObserver.disconnect()
11208
+ this.resizeObserver = null
11209
+ }
11210
+ },
11211
+
11212
+ // ========== 加载更多 ==========
11213
+ onLoadMore() {
11214
+ this.$emit('load-more')
11215
+ },
11216
+
11217
+ // ========== 对外暴露方法 ==========
11218
+ /** 获取原生滚动容器 DOM 元素 */
11219
+ getScrollContainer() {
11220
+ return this.$refs.scrollWrap
11221
+ },
11222
+
11223
+ /** 滚动到指定位置 */
11224
+ scrollTo(pos, behavior) {
11225
+ const wrap = this.$refs.scrollWrap
11226
+ if (!wrap) return
11227
+
11228
+ const opts = behavior && typeof behavior === 'string'
11229
+ ? { behavior }
11230
+ : { behavior: 'smooth' }
11231
+
11232
+ if (this.scrollDirection === 'vertical') {
11233
+ wrap.scrollTo({ top: pos, ...opts })
11234
+ } else {
11235
+ wrap.scrollTo({ left: pos, ...opts })
11236
+ }
11237
+ },
11238
+
11239
+ /** 滚动到指定索引的 item */
11240
+ scrollToItem(index) {
11241
+ const pos = index * this.itemSize
11242
+ this.scrollTo(pos)
11243
+ },
11244
+
11245
+ /** 滚动到顶部/左侧 */
11246
+ scrollToStart() {
11247
+ this.scrollTo(0)
11248
+ },
11249
+
11250
+ /** 滚动到底部/右侧 */
11251
+ scrollToEnd() {
11252
+ this.scrollTo(this.totalSize)
11253
+ },
11254
+
11255
+ /** 获取当前滚动位置 */
11256
+ getScrollPos() {
11257
+ return this.scrollPos
11258
+ }
11259
+ }
11260
+ });
11261
+
11262
+ // CONCATENATED MODULE: ./src/components/xt-scroll/index.vue?vue&type=script&lang=js
11263
+ /* harmony default export */ var components_xt_scrollvue_type_script_lang_js = (xt_scrollvue_type_script_lang_js);
11264
+ // CONCATENATED MODULE: ./src/components/xt-scroll/index.vue
11265
+
11266
+
11267
+
11268
+
11269
+
11270
+ /* normalize component */
11271
+
11272
+ var xt_scroll_component = Object(componentNormalizer["a" /* default */])(
11273
+ components_xt_scrollvue_type_script_lang_js,
11274
+ xt_scrollvue_type_template_id_74170e40_render,
11275
+ xt_scrollvue_type_template_id_74170e40_staticRenderFns,
10739
11276
  false,
10740
11277
  null,
10741
- "39458c28",
11278
+ null,
10742
11279
  null
10743
11280
 
10744
11281
  )
10745
11282
 
10746
- /* harmony default export */ var xt_table = (xt_table_component.exports);
10747
- // CONCATENATED MODULE: ./src/components/xt-table/index.js
10748
-
10749
-
10750
- xt_table.install = function (Vue) {
10751
- Vue.component(xt_table.name, xt_table)
10752
- }
10753
-
10754
- /* harmony default export */ var components_xt_table = (xt_table);
11283
+ /* harmony default export */ var xt_scroll = (xt_scroll_component.exports);
11284
+ // CONCATENATED MODULE: ./src/components/xt-scroll/index.js
11285
+
10755
11286
 
10756
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-list/index.vue?vue&type=template&id=53c7db00&scoped=true
10757
- var xt_listvue_type_template_id_53c7db00_scoped_true_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"xt-list",class:{ 'xt-list--loading': _vm.loading }},[(_vm.title || _vm.filterable || _vm.sortable || _vm.$slots.toolbar)?_c('div',{staticClass:"xt-list__header"},[(_vm.title)?_c('span',{staticClass:"xt-list__title"},[_vm._v(_vm._s(_vm.title))]):_vm._e(),_c('div',{staticClass:"xt-list__toolbar"},[(_vm.filterable)?_c('div',{staticClass:"xt-list__search"},[_c('el-input',{attrs:{"placeholder":_vm.filterPlaceholder,"size":"small","clearable":"","prefix-icon":"el-icon-search"},on:{"input":_vm.handleSearch},model:{value:(_vm.searchText),callback:function ($$v) {_vm.searchText=$$v},expression:"searchText"}})],1):_vm._e(),(_vm.sortable && _vm.sortBy)?_c('el-button',{attrs:{"size":"small","icon":"el-icon-sort","type":_vm.currentSortOrder ? 'primary' : 'default',"plain":""},on:{"click":_vm.handleSortToggle}},[_vm._v(" "+_vm._s(_vm.sortLabel)+" ")]):_vm._e(),_vm._t("toolbar")],2)]):_vm._e(),_c('div',{ref:"scrollContainer",staticClass:"xt-list__body",style:(_vm.bodyStyle),on:{"scroll":_vm.onScroll}},[(_vm.virtualScroll)?_c('div',{staticClass:"xt-list__phantom",style:({ height: _vm.totalHeight + 'px' })},[_c('div',{style:({ paddingTop: _vm.offsetY + 'px' })},[(_vm.groupedData.length)?[_vm._l((_vm.visibleGroups),function(group,gIdx){return [_c('div',{key:group._key,staticClass:"xt-list__group"},[_c('div',{staticClass:"xt-list__group-title",on:{"click":function($event){return _vm.toggleGroup(group._key)}}},[_c('span',{staticClass:"xt-list__group-arrow",class:{ 'is-expanded': group._expanded }},[_c('i',{staticClass:"el-icon-arrow-right"})]),_vm._t("group-title",function(){return [_c('span',{staticClass:"xt-list__group-label"},[_vm._v(_vm._s(_vm.getGroupLabel(group)))]),_c('span',{staticClass:"xt-list__group-count"},[_vm._v("("+_vm._s(group._items.length)+")")])]},{"group":group,"items":group._items,"expanded":group._expanded})],2),(group._expanded)?_c('div',{class:['xt-list__cards', 'xt-list__cols-' + _vm.columns]},_vm._l((_vm.getVisibleItems(group)),function(item,idx){return _c('div',{key:item._id || idx,staticClass:"xt-list__item",on:{"click":function($event){return _vm.handleItemClick(item, group._key)}}},[_c('el-card',{attrs:{"shadow":_vm.shadow,"body-style":_vm.cardBodyStyle}},[_vm._t("default",function(){return [(_vm.getImage(item))?_c('div',{staticClass:"xt-list__image"},[_c('img',{attrs:{"src":_vm.getImage(item),"alt":_vm.getConfigValue(_vm.cardConfig.title, item)}})]):_vm._e(),(_vm.getTag(item))?_c('div',{staticClass:"xt-list__tag"},[_c('el-tag',{attrs:{"size":"small","type":_vm.getTagType(item)}},[_vm._v(_vm._s(_vm.getTag(item)))])],1):_vm._e(),(_vm.getConfigValue(_vm.cardConfig.title, item))?_c('div',{staticClass:"xt-list__card-title"},[_vm._v(" "+_vm._s(_vm.getConfigValue(_vm.cardConfig.title, item))+" ")]):_vm._e(),(_vm.getConfigValue(_vm.cardConfig.subtitle, item))?_c('div',{staticClass:"xt-list__card-subtitle"},[_vm._v(" "+_vm._s(_vm.getConfigValue(_vm.cardConfig.subtitle, item))+" ")]):_vm._e(),(_vm.getConfigValue(_vm.cardConfig.content, item))?_c('div',{staticClass:"xt-list__card-content"},[_vm._v(" "+_vm._s(_vm.getConfigValue(_vm.cardConfig.content, item))+" ")]):_vm._e(),(_vm.getConfigValue(_vm.cardConfig.footer, item))?_c('div',{staticClass:"xt-list__card-footer"},[_vm._t("card-footer",function(){return [_vm._v(" "+_vm._s(_vm.getConfigValue(_vm.cardConfig.footer, item))+" ")]},{"item":item,"index":_vm.getItemIndex(item, group)})],2):_vm._e()]},{"item":item,"index":_vm.getItemIndex(item, group),"group":group})],2)],1)}),0):_vm._e()])]})]:(!_vm.loading)?_c('div',{staticClass:"xt-list__empty"},[_vm._t("empty",function(){return [_c('span',[_vm._v(_vm._s(_vm.emptyText))])]})],2):_vm._e()],2)]):(_vm.groupedData.length)?[_vm._l((_vm.groupedData),function(group){return [_c('div',{key:group._key,staticClass:"xt-list__group"},[_c('div',{staticClass:"xt-list__group-title",on:{"click":function($event){return _vm.toggleGroup(group._key)}}},[_c('span',{staticClass:"xt-list__group-arrow",class:{ 'is-expanded': group._expanded }},[_c('i',{staticClass:"el-icon-arrow-right"})]),_vm._t("group-title",function(){return [_c('span',{staticClass:"xt-list__group-label"},[_vm._v(_vm._s(_vm.getGroupLabel(group)))]),_c('span',{staticClass:"xt-list__group-count"},[_vm._v("("+_vm._s(group._items.length)+")")])]},{"group":group,"items":group._items,"expanded":group._expanded})],2),(group._expanded)?_c('div',{class:['xt-list__cards', 'xt-list__cols-' + _vm.columns]},_vm._l((group._items),function(item,idx){return _c('div',{key:item._id || idx,staticClass:"xt-list__item",on:{"click":function($event){return _vm.handleItemClick(item, group._key)}}},[_c('el-card',{attrs:{"shadow":_vm.shadow,"body-style":_vm.cardBodyStyle}},[_vm._t("default",function(){return [(_vm.getImage(item))?_c('div',{staticClass:"xt-list__image"},[_c('img',{attrs:{"src":_vm.getImage(item),"alt":_vm.getConfigValue(_vm.cardConfig.title, item)}})]):_vm._e(),(_vm.getTag(item))?_c('div',{staticClass:"xt-list__tag"},[_c('el-tag',{attrs:{"size":"small","type":_vm.getTagType(item)}},[_vm._v(_vm._s(_vm.getTag(item)))])],1):_vm._e(),(_vm.getConfigValue(_vm.cardConfig.title, item))?_c('div',{staticClass:"xt-list__card-title"},[_vm._v(" "+_vm._s(_vm.getConfigValue(_vm.cardConfig.title, item))+" ")]):_vm._e(),(_vm.getConfigValue(_vm.cardConfig.subtitle, item))?_c('div',{staticClass:"xt-list__card-subtitle"},[_vm._v(" "+_vm._s(_vm.getConfigValue(_vm.cardConfig.subtitle, item))+" ")]):_vm._e(),(_vm.getConfigValue(_vm.cardConfig.content, item))?_c('div',{staticClass:"xt-list__card-content"},[_vm._v(" "+_vm._s(_vm.getConfigValue(_vm.cardConfig.content, item))+" ")]):_vm._e(),(_vm.getConfigValue(_vm.cardConfig.footer, item))?_c('div',{staticClass:"xt-list__card-footer"},[_vm._t("card-footer",function(){return [_vm._v(" "+_vm._s(_vm.getConfigValue(_vm.cardConfig.footer, item))+" ")]},{"item":item,"index":idx})],2):_vm._e()]},{"item":item,"index":idx,"group":group})],2)],1)}),0):_vm._e()])]})]:(!_vm.loading)?_c('div',{staticClass:"xt-list__empty"},[_vm._t("empty",function(){return [_c('span',[_vm._v(_vm._s(_vm.emptyText))])]})],2):_vm._e(),(_vm.loadMore && _vm.hasMore && !_vm.loading)?_c('div',{staticClass:"xt-list__loadmore"},[_c('el-button',{attrs:{"type":"text","loading":_vm.loadMoreLoading},on:{"click":_vm.handleLoadMore}},[_vm._v(" "+_vm._s(_vm.loadMoreText)+" ")])],1):_vm._e()],2),(_vm.loading)?_c('div',{staticClass:"xt-list__loading"},[_vm._t("loading",function(){return [_c('i',{staticClass:"el-icon-loading"}),_c('span',[_vm._v("加载中...")])]})],2):_vm._e(),(_vm.showPagination)?_c('div',{staticClass:"xt-list__footer"},[_c('el-pagination',{attrs:{"background":"","small":"","current-page":_vm.pagination.pageNum,"page-size":_vm.pagination.pageSize,"total":_vm.total,"page-sizes":_vm.pagination.pageSizes || [10, 20, 50],"layout":"total, prev, pager, next"},on:{"size-change":_vm.handleSizeChange,"current-change":_vm.handleCurrentChange}})],1):_vm._e()])
10758
- }
10759
- var xt_listvue_type_template_id_53c7db00_scoped_true_staticRenderFns = []
10760
11287
 
11288
+ xt_scroll.install = function (Vue) {
11289
+ Vue.component(xt_scroll.name, xt_scroll)
11290
+ }
10761
11291
 
10762
- // CONCATENATED MODULE: ./src/components/xt-list/index.vue?vue&type=template&id=53c7db00&scoped=true
11292
+ /* harmony default export */ var components_xt_scroll = (xt_scroll);
10763
11293
 
10764
11294
  // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-list/index.vue?vue&type=script&lang=js
10765
11295
 
11296
+
11297
+
10766
11298
  const CARD_ITEM_HEIGHT = 160
10767
11299
  const GROUP_HEADER_HEIGHT = 44
10768
11300
 
10769
11301
  /* harmony default export */ var xt_listvue_type_script_lang_js = ({
10770
11302
  name: 'XtList',
10771
11303
 
11304
+ components: {
11305
+ XtScroll: components_xt_scroll
11306
+ },
11307
+
10772
11308
  props: {
10773
11309
  data: { type: Array, default: () => [] },
10774
11310
  // 分组配置
@@ -11098,9 +11634,10 @@ const GROUP_HEADER_HEIGHT = 44
11098
11634
  return group._items.indexOf(item)
11099
11635
  },
11100
11636
 
11101
- onScroll() {
11637
+ onScroll(e) {
11102
11638
  if (!this.virtualScroll) return
11103
- this.scrollTop = this.$refs.scrollContainer.scrollTop
11639
+ // xt-scroll 传递的是 { scrollTop, scrollLeft } 对象
11640
+ this.scrollTop = e && e.scrollTop != null ? e.scrollTop : 0
11104
11641
  if (this.rafId) return
11105
11642
  if (typeof requestAnimationFrame === 'undefined') return
11106
11643
  this.rafId = requestAnimationFrame(() => {
@@ -11111,18 +11648,22 @@ const GROUP_HEADER_HEIGHT = 44
11111
11648
 
11112
11649
  updateContainerHeight() {
11113
11650
  if (this.$refs.scrollContainer) {
11114
- this.containerHeight = this.$refs.scrollContainer.clientHeight
11651
+ const scrollCmp = this.$refs.scrollContainer
11652
+ const wrap = scrollCmp.getScrollContainer && scrollCmp.getScrollContainer()
11653
+ this.containerHeight = wrap ? wrap.clientHeight : 0
11115
11654
  }
11116
11655
  },
11117
11656
 
11118
11657
  bindResizeObserver() {
11119
11658
  if (typeof ResizeObserver === 'undefined') return
11120
- const container = this.$refs.scrollContainer
11121
- if (!container) return
11659
+ const scrollCmp = this.$refs.scrollContainer
11660
+ if (!scrollCmp) return
11661
+ const wrap = scrollCmp.getScrollContainer && scrollCmp.getScrollContainer()
11662
+ if (!wrap) return
11122
11663
  this.resizeObserver = new ResizeObserver(() => {
11123
11664
  this.updateContainerHeight()
11124
11665
  })
11125
- this.resizeObserver.observe(container)
11666
+ this.resizeObserver.observe(wrap)
11126
11667
  },
11127
11668
 
11128
11669
  unbindResizeObserver() {
@@ -11162,8 +11703,8 @@ const GROUP_HEADER_HEIGHT = 44
11162
11703
 
11163
11704
  // ========== 对外暴露方法 ==========
11164
11705
  scrollToTop() {
11165
- if (this.$refs.scrollContainer) {
11166
- this.$refs.scrollContainer.scrollTo({ top: 0, behavior: 'smooth' })
11706
+ if (this.$refs.scrollContainer && this.$refs.scrollContainer.scrollToStart) {
11707
+ this.$refs.scrollContainer.scrollToStart()
11167
11708
  }
11168
11709
  },
11169
11710
 
@@ -11193,8 +11734,8 @@ const GROUP_HEADER_HEIGHT = 44
11193
11734
 
11194
11735
  // CONCATENATED MODULE: ./src/components/xt-list/index.vue?vue&type=script&lang=js
11195
11736
  /* harmony default export */ var components_xt_listvue_type_script_lang_js = (xt_listvue_type_script_lang_js);
11196
- // EXTERNAL MODULE: ./src/components/xt-list/index.vue?vue&type=style&index=0&id=53c7db00&prod&scoped=true&lang=css
11197
- var xt_listvue_type_style_index_0_id_53c7db00_prod_scoped_true_lang_css = __webpack_require__("732a");
11737
+ // EXTERNAL MODULE: ./src/components/xt-list/index.vue?vue&type=style&index=0&id=084d1476&prod&scoped=true&lang=css
11738
+ var xt_listvue_type_style_index_0_id_084d1476_prod_scoped_true_lang_css = __webpack_require__("52fd");
11198
11739
 
11199
11740
  // CONCATENATED MODULE: ./src/components/xt-list/index.vue
11200
11741
 
@@ -11207,11 +11748,11 @@ var xt_listvue_type_style_index_0_id_53c7db00_prod_scoped_true_lang_css = __webp
11207
11748
 
11208
11749
  var xt_list_component = Object(componentNormalizer["a" /* default */])(
11209
11750
  components_xt_listvue_type_script_lang_js,
11210
- xt_listvue_type_template_id_53c7db00_scoped_true_render,
11211
- xt_listvue_type_template_id_53c7db00_scoped_true_staticRenderFns,
11751
+ xt_listvue_type_template_id_084d1476_scoped_true_render,
11752
+ xt_listvue_type_template_id_084d1476_scoped_true_staticRenderFns,
11212
11753
  false,
11213
11754
  null,
11214
- "53c7db00",
11755
+ "084d1476",
11215
11756
  null
11216
11757
 
11217
11758
  )
@@ -11229,32 +11770,46 @@ xt_list.install = function (Vue) {
11229
11770
  // EXTERNAL MODULE: ./src/components/xt-scroll-arrow/style/index.scss
11230
11771
  var xt_scroll_arrow_style = __webpack_require__("4e56");
11231
11772
 
11232
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-scroll-arrow/index.vue?vue&type=template&id=3d6a271c
11233
- var xt_scroll_arrowvue_type_template_id_3d6a271c_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"xt-scroll-arrow",class:[`xt-scroll-arrow--${_vm.direction}`],style:(_vm.containerStyle)},[(_vm.showLeftArrow)?_c('div',{staticClass:"xt-scroll-arrow__btn xt-scroll-arrow__btn--left",on:{"click":_vm.scrollLeft}},[_c('i',{staticClass:"el-icon-arrow-left"})]):_vm._e(),_c('div',{ref:"scrollContainer",staticClass:"xt-scroll-arrow__content",on:{"scroll":_vm.handleScroll,"click":_vm.handleClick}},[_vm._t("default")],2),(_vm.showRightArrow)?_c('div',{staticClass:"xt-scroll-arrow__btn xt-scroll-arrow__btn--right",on:{"click":_vm.scrollRight}},[_c('i',{staticClass:"el-icon-arrow-right"})]):_vm._e(),(_vm.showTopArrow && _vm.direction === 'vertical')?_c('div',{staticClass:"xt-scroll-arrow__btn xt-scroll-arrow__btn--top",on:{"click":_vm.scrollTop}},[_c('i',{staticClass:"el-icon-arrow-up"})]):_vm._e(),(_vm.showBottomArrow && _vm.direction === 'vertical')?_c('div',{staticClass:"xt-scroll-arrow__btn xt-scroll-arrow__btn--bottom",on:{"click":_vm.scrollBottom}},[_c('i',{staticClass:"el-icon-arrow-down"})]):_vm._e()])
11773
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-scroll-arrow/index.vue?vue&type=template&id=6d59f4e4
11774
+ var xt_scroll_arrowvue_type_template_id_6d59f4e4_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"xt-scroll-arrow",class:[`xt-scroll-arrow--${_vm.direction}`],style:(_vm.containerStyle)},[(_vm.showLeftArrow)?_c('div',{staticClass:"xt-scroll-arrow__btn xt-scroll-arrow__btn--left",on:{"click":_vm.scrollLeft}},[_c('i',{staticClass:"el-icon-arrow-left"})]):_vm._e(),(_vm.showTopArrow && _vm.direction === 'vertical')?_c('div',{staticClass:"xt-scroll-arrow__btn xt-scroll-arrow__btn--top",on:{"click":_vm.scrollTop}},[_c('i',{staticClass:"el-icon-arrow-up"})]):_vm._e(),_c('xt-scroll',{ref:"scrollRef",class:['xt-scroll-arrow__content', _vm.scrollClass],attrs:{"v-scroll":_vm.vScroll,"data":_vm.vScrollData,"item-size":_vm.itemSize,"key-field":_vm.keyField,"buffer-size":_vm.bufferSize,"scroll-direction":_vm.direction,"loading":_vm.vScrollLoading,"load-more":_vm.loadMore,"load-more-text":_vm.loadMoreText,"load-more-loading":_vm.loadMoreLoading},on:{"scroll":_vm.onScroll,"load-more":function($event){return _vm.$emit('load-more')}},scopedSlots:_vm._u([(_vm.vScroll)?{key:"item",fn:function({ item, index }){return [_vm._t("vitem",function(){return [_c('div',{staticClass:"xt-scroll-arrow__vitem"},[_vm._v(_vm._s(item))])]},{"item":item,"index":index})]}}:{key:"default",fn:function(undefined){return _vm._t("default")}}],null,true)}),(_vm.showRightArrow)?_c('div',{staticClass:"xt-scroll-arrow__btn xt-scroll-arrow__btn--right",on:{"click":_vm.scrollRight}},[_c('i',{staticClass:"el-icon-arrow-right"})]):_vm._e(),(_vm.showBottomArrow && _vm.direction === 'vertical')?_c('div',{staticClass:"xt-scroll-arrow__btn xt-scroll-arrow__btn--bottom",on:{"click":_vm.scrollBottom}},[_c('i',{staticClass:"el-icon-arrow-down"})]):_vm._e()],1)
11234
11775
  }
11235
- var xt_scroll_arrowvue_type_template_id_3d6a271c_staticRenderFns = []
11776
+ var xt_scroll_arrowvue_type_template_id_6d59f4e4_staticRenderFns = []
11236
11777
 
11237
11778
 
11238
- // CONCATENATED MODULE: ./src/components/xt-scroll-arrow/index.vue?vue&type=template&id=3d6a271c
11779
+ // CONCATENATED MODULE: ./src/components/xt-scroll-arrow/index.vue?vue&type=template&id=6d59f4e4
11239
11780
 
11240
11781
  // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-scroll-arrow/index.vue?vue&type=script&lang=js
11241
11782
 
11783
+
11784
+
11242
11785
  /* harmony default export */ var xt_scroll_arrowvue_type_script_lang_js = ({
11243
11786
  name: 'XtScrollArrow',
11787
+
11788
+ components: {
11789
+ XtScroll: components_xt_scroll
11790
+ },
11791
+
11244
11792
  props: {
11793
+ // ========== 滚动方向 ==========
11245
11794
  direction: {
11246
11795
  type: String,
11247
11796
  default: 'horizontal',
11248
11797
  validator: (val) => ['horizontal', 'vertical'].includes(val)
11249
11798
  },
11799
+
11800
+ // ========== 滚动步长 ==========
11250
11801
  scrollStep: {
11251
11802
  type: Number,
11252
11803
  default: 100
11253
11804
  },
11805
+
11806
+ // ========== 箭头显示 ==========
11254
11807
  autoHide: {
11255
11808
  type: Boolean,
11256
11809
  default: true
11257
11810
  },
11811
+
11812
+ // ========== 容器尺寸 ==========
11258
11813
  height: {
11259
11814
  type: [String, Number],
11260
11815
  default: ''
@@ -11263,6 +11818,8 @@ var xt_scroll_arrowvue_type_template_id_3d6a271c_staticRenderFns = []
11263
11818
  type: [String, Number],
11264
11819
  default: ''
11265
11820
  },
11821
+
11822
+ // ========== 模式 ==========
11266
11823
  appendMode: {
11267
11824
  type: Boolean,
11268
11825
  default: false
@@ -11270,16 +11827,65 @@ var xt_scroll_arrowvue_type_template_id_3d6a271c_staticRenderFns = []
11270
11827
  clickMode: {
11271
11828
  type: Boolean,
11272
11829
  default: false
11830
+ },
11831
+
11832
+ // ========== 虚拟滚动配置 ==========
11833
+ /** 是否启用虚拟滚动 */
11834
+ vScroll: {
11835
+ type: Boolean,
11836
+ default: false
11837
+ },
11838
+ /** 虚拟滚动数据源 */
11839
+ vScrollData: {
11840
+ type: Array,
11841
+ default: () => []
11842
+ },
11843
+ /** 每个 item 的固定尺寸(px) */
11844
+ itemSize: {
11845
+ type: Number,
11846
+ default: 50
11847
+ },
11848
+ /** item 的唯一键字段名 */
11849
+ keyField: {
11850
+ type: String,
11851
+ default: 'id'
11852
+ },
11853
+ /** 预渲染缓冲区大小 */
11854
+ bufferSize: {
11855
+ type: Number,
11856
+ default: 5
11857
+ },
11858
+ /** 虚拟滚动加载状态 */
11859
+ vScrollLoading: {
11860
+ type: Boolean,
11861
+ default: false
11862
+ },
11863
+
11864
+ // ========== 加载更多 ==========
11865
+ loadMore: {
11866
+ type: Boolean,
11867
+ default: false
11868
+ },
11869
+ loadMoreText: {
11870
+ type: String,
11871
+ default: '加载更多'
11872
+ },
11873
+ loadMoreLoading: {
11874
+ type: Boolean,
11875
+ default: false
11273
11876
  }
11274
11877
  },
11878
+
11275
11879
  data() {
11276
11880
  return {
11277
11881
  showLeftArrow: false,
11278
11882
  showRightArrow: false,
11279
11883
  showTopArrow: false,
11280
- showBottomArrow: false
11884
+ showBottomArrow: false,
11885
+ mutationObserver: null
11281
11886
  }
11282
11887
  },
11888
+
11283
11889
  computed: {
11284
11890
  containerStyle() {
11285
11891
  const style = {}
@@ -11290,27 +11896,44 @@ var xt_scroll_arrowvue_type_template_id_3d6a271c_staticRenderFns = []
11290
11896
  style.width = typeof this.width === 'number' ? `${this.width}px` : this.width
11291
11897
  }
11292
11898
  return style
11899
+ },
11900
+ scrollClass() {
11901
+ return this.vScroll ? 'xt-scroll-arrow__content--virtual' : ''
11293
11902
  }
11294
11903
  },
11904
+
11295
11905
  watch: {
11296
11906
  direction() {
11297
11907
  this.$nextTick(() => {
11298
11908
  this.checkScroll()
11299
11909
  })
11910
+ },
11911
+ vScrollData: {
11912
+ handler() {
11913
+ this.$nextTick(() => {
11914
+ this.checkScroll()
11915
+ })
11916
+ }
11300
11917
  }
11301
11918
  },
11919
+
11302
11920
  mounted() {
11303
11921
  this.$nextTick(() => {
11304
11922
  this.checkScroll()
11305
11923
  })
11306
11924
  this.addResizeObserver()
11307
- this.addMutationObserver()
11925
+ if (!this.vScroll) {
11926
+ this.addMutationObserver()
11927
+ }
11308
11928
  },
11929
+
11309
11930
  beforeDestroy() {
11310
11931
  this.removeResizeObserver()
11311
11932
  this.removeMutationObserver()
11312
11933
  },
11934
+
11313
11935
  methods: {
11936
+ // ========== 尺寸监听 ==========
11314
11937
  addResizeObserver() {
11315
11938
  if (typeof ResizeObserver !== 'undefined') {
11316
11939
  this.resizeObserver = new ResizeObserver(() => {
@@ -11318,17 +11941,19 @@ var xt_scroll_arrowvue_type_template_id_3d6a271c_staticRenderFns = []
11318
11941
  this.checkScroll()
11319
11942
  })
11320
11943
  })
11321
- const container = this.$refs.scrollContainer
11944
+ const container = this.$el
11322
11945
  if (container) {
11323
11946
  this.resizeObserver.observe(container)
11324
11947
  }
11325
11948
  }
11326
11949
  },
11950
+
11327
11951
  removeResizeObserver() {
11328
11952
  if (this.resizeObserver) {
11329
11953
  this.resizeObserver.disconnect()
11330
11954
  }
11331
11955
  },
11956
+
11332
11957
  addMutationObserver() {
11333
11958
  if (typeof MutationObserver !== 'undefined') {
11334
11959
  this.mutationObserver = new MutationObserver(() => {
@@ -11339,28 +11964,37 @@ var xt_scroll_arrowvue_type_template_id_3d6a271c_staticRenderFns = []
11339
11964
  }
11340
11965
  })
11341
11966
  })
11342
- const container = this.$refs.scrollContainer
11967
+ const container = this.$refs.scrollRef
11343
11968
  if (container) {
11344
- this.mutationObserver.observe(container, {
11345
- childList: true,
11346
- subtree: true
11347
- })
11969
+ const wrap = container.getScrollContainer && container.getScrollContainer()
11970
+ if (wrap) {
11971
+ this.mutationObserver.observe(wrap, {
11972
+ childList: true,
11973
+ subtree: true
11974
+ })
11975
+ }
11348
11976
  }
11349
11977
  }
11350
11978
  },
11979
+
11351
11980
  removeMutationObserver() {
11352
11981
  if (this.mutationObserver) {
11353
11982
  this.mutationObserver.disconnect()
11354
11983
  }
11355
11984
  },
11985
+
11986
+ // ========== 滚动检测 ==========
11356
11987
  checkScroll() {
11357
- const container = this.$refs.scrollContainer
11358
- if (!container) return
11988
+ const scrollRef = this.$refs.scrollRef
11989
+ if (!scrollRef) return
11990
+
11991
+ const wrap = scrollRef.getScrollContainer && scrollRef.getScrollContainer()
11992
+ if (!wrap) return
11359
11993
 
11360
11994
  if (this.direction === 'horizontal') {
11361
- const scrollLeft = container.scrollLeft
11362
- const scrollWidth = container.scrollWidth
11363
- const clientWidth = container.clientWidth
11995
+ const scrollLeft = wrap.scrollLeft
11996
+ const scrollWidth = wrap.scrollWidth
11997
+ const clientWidth = wrap.clientWidth
11364
11998
  const maxScroll = scrollWidth - clientWidth
11365
11999
 
11366
12000
  this.showTopArrow = false
@@ -11368,15 +12002,15 @@ var xt_scroll_arrowvue_type_template_id_3d6a271c_staticRenderFns = []
11368
12002
 
11369
12003
  if (this.autoHide) {
11370
12004
  this.showLeftArrow = scrollLeft > 0
11371
- this.showRightArrow = maxScroll > 0 && scrollLeft < maxScroll
12005
+ this.showRightArrow = maxScroll > 0 && scrollLeft < maxScroll - 1
11372
12006
  } else {
11373
12007
  this.showLeftArrow = maxScroll > 0
11374
12008
  this.showRightArrow = maxScroll > 0
11375
12009
  }
11376
12010
  } else {
11377
- const scrollTop = container.scrollTop
11378
- const scrollHeight = container.scrollHeight
11379
- const clientHeight = container.clientHeight
12011
+ const scrollTop = wrap.scrollTop
12012
+ const scrollHeight = wrap.scrollHeight
12013
+ const clientHeight = wrap.clientHeight
11380
12014
  const maxScroll = scrollHeight - clientHeight
11381
12015
 
11382
12016
  this.showLeftArrow = false
@@ -11384,77 +12018,77 @@ var xt_scroll_arrowvue_type_template_id_3d6a271c_staticRenderFns = []
11384
12018
 
11385
12019
  if (this.autoHide) {
11386
12020
  this.showTopArrow = scrollTop > 0
11387
- this.showBottomArrow = maxScroll > 0 && scrollTop < maxScroll
12021
+ this.showBottomArrow = maxScroll > 0 && scrollTop < maxScroll - 1
11388
12022
  } else {
11389
12023
  this.showTopArrow = maxScroll > 0
11390
12024
  this.showBottomArrow = maxScroll > 0
11391
12025
  }
11392
12026
  }
11393
12027
  },
11394
- handleScroll() {
12028
+
12029
+ onScroll() {
11395
12030
  this.checkScroll()
11396
- this.$emit('scroll', this.$refs.scrollContainer)
11397
- },
11398
- handleClick(e) {
11399
- if (!this.clickMode) return
11400
- const container = this.$refs.scrollContainer
11401
- if (!container) return
11402
-
11403
- const target = e.target
11404
- if (!target || target === container) return
11405
-
11406
- const containerRect = container.getBoundingClientRect()
11407
- const targetRect = target.getBoundingClientRect()
11408
-
11409
- const isVisible = (
11410
- targetRect.left >= containerRect.left &&
11411
- targetRect.right <= containerRect.right &&
11412
- targetRect.top >= containerRect.top &&
11413
- targetRect.bottom <= containerRect.bottom
11414
- )
11415
-
11416
- if (!isVisible) {
11417
- if (this.direction === 'horizontal') {
11418
- const scrollLeft = target.offsetLeft - (container.clientWidth - targetRect.width) / 2
11419
- container.scrollTo({ left: scrollLeft, behavior: 'smooth' })
11420
- } else {
11421
- const scrollTop = target.offsetTop - (container.clientHeight - targetRect.height) / 2
11422
- container.scrollTo({ top: scrollTop, behavior: 'smooth' })
11423
- }
11424
- }
12031
+ this.$emit('scroll', this.$refs.scrollRef)
11425
12032
  },
12033
+
12034
+ // ========== 滚动操作 ==========
11426
12035
  scrollLeft() {
11427
- const container = this.$refs.scrollContainer
11428
- if (container) {
11429
- container.scrollBy({ left: -this.scrollStep, behavior: 'smooth' })
11430
- }
12036
+ this._scrollBy(-this.scrollStep)
11431
12037
  },
12038
+
11432
12039
  scrollRight() {
11433
- const container = this.$refs.scrollContainer
11434
- if (container) {
11435
- container.scrollBy({ left: this.scrollStep, behavior: 'smooth' })
11436
- }
12040
+ this._scrollBy(this.scrollStep)
11437
12041
  },
12042
+
11438
12043
  scrollTop() {
11439
- const container = this.$refs.scrollContainer
11440
- if (container) {
11441
- container.scrollBy({ top: -this.scrollStep, behavior: 'smooth' })
11442
- }
12044
+ this._scrollBy(-this.scrollStep, 'vertical')
11443
12045
  },
12046
+
11444
12047
  scrollBottom() {
11445
- const container = this.$refs.scrollContainer
11446
- if (container) {
11447
- container.scrollBy({ top: this.scrollStep, behavior: 'smooth' })
12048
+ this._scrollBy(this.scrollStep, 'vertical')
12049
+ },
12050
+
12051
+ _scrollBy(delta, dir) {
12052
+ const direction = dir || this.direction
12053
+ const scrollRef = this.$refs.scrollRef
12054
+ if (!scrollRef) return
12055
+
12056
+ const wrap = scrollRef.getScrollContainer && scrollRef.getScrollContainer()
12057
+ if (!wrap) return
12058
+
12059
+ if (direction === 'horizontal') {
12060
+ wrap.scrollBy({ left: delta, behavior: 'smooth' })
12061
+ } else {
12062
+ wrap.scrollBy({ top: delta, behavior: 'smooth' })
11448
12063
  }
11449
12064
  },
12065
+
11450
12066
  scrollToEnd() {
11451
- const container = this.$refs.scrollContainer
11452
- if (!container) return
12067
+ const scrollRef = this.$refs.scrollRef
12068
+ if (!scrollRef) return
12069
+ const wrap = scrollRef.getScrollContainer && scrollRef.getScrollContainer()
12070
+ if (!wrap) return
12071
+
11453
12072
  if (this.direction === 'horizontal') {
11454
- container.scrollTo({ left: container.scrollWidth, behavior: 'smooth' })
12073
+ wrap.scrollTo({ left: wrap.scrollWidth, behavior: 'smooth' })
11455
12074
  } else {
11456
- container.scrollTo({ top: container.scrollHeight, behavior: 'smooth' })
12075
+ wrap.scrollTo({ top: wrap.scrollHeight, behavior: 'smooth' })
11457
12076
  }
12077
+ },
12078
+
12079
+ // ========== 对外暴露方法 ==========
12080
+ /** 获取滚动位置 */
12081
+ getScrollPos() {
12082
+ const scrollRef = this.$refs.scrollRef
12083
+ if (!scrollRef) return 0
12084
+ const wrap = scrollRef.getScrollContainer && scrollRef.getScrollContainer()
12085
+ if (!wrap) return 0
12086
+ return this.direction === 'horizontal' ? wrap.scrollLeft : wrap.scrollTop
12087
+ },
12088
+
12089
+ /** 获取 xt-scroll 组件实例 */
12090
+ getScrollInstance() {
12091
+ return this.$refs.scrollRef
11458
12092
  }
11459
12093
  }
11460
12094
  });
@@ -11471,8 +12105,8 @@ var xt_scroll_arrowvue_type_template_id_3d6a271c_staticRenderFns = []
11471
12105
 
11472
12106
  var xt_scroll_arrow_component = Object(componentNormalizer["a" /* default */])(
11473
12107
  components_xt_scroll_arrowvue_type_script_lang_js,
11474
- xt_scroll_arrowvue_type_template_id_3d6a271c_render,
11475
- xt_scroll_arrowvue_type_template_id_3d6a271c_staticRenderFns,
12108
+ xt_scroll_arrowvue_type_template_id_6d59f4e4_render,
12109
+ xt_scroll_arrowvue_type_template_id_6d59f4e4_staticRenderFns,
11476
12110
  false,
11477
12111
  null,
11478
12112
  null,
@@ -11491,7 +12125,7 @@ xt_scroll_arrow.install = function (Vue) {
11491
12125
 
11492
12126
  /* harmony default export */ var components_xt_scroll_arrow = (xt_scroll_arrow);
11493
12127
 
11494
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-page/index.vue?vue&type=template&id=a1f6b910&scoped=true
12128
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-page/index.vue?vue&type=template&id=a1f6b910&scoped=true
11495
12129
  var xt_pagevue_type_template_id_a1f6b910_scoped_true_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"xt-page-container",class:_vm.containerClass,style:(_vm.rootCssVars)},[_c('el-container',{staticClass:"xt-page-main-wrap"},[(_vm.$slots.header && _vm.showHeader)?_c('el-header',{ref:"header",staticClass:"xt-page-header",class:_vm.headerClass},[_vm._t("header")],2):_vm._e(),_c('el-main',{ref:"main",staticClass:"xt-page-main",class:_vm.mainClass},[_vm._t("default",null,{"tableHeight":_vm.tableContentHeight})],2),(_vm.$slots.footer && _vm.showFooter)?_c('el-footer',{ref:"footer",staticClass:"xt-page-footer",class:_vm.footerClass},[_vm._t("footer")],2):_vm._e()],1),(_vm.$slots.aside && _vm.showAside)?_c('el-aside',{ref:"aside",staticClass:"xt-page-aside",class:_vm.asideClass,attrs:{"width":_vm.asideWidth}},[_vm._t("aside")],2):_vm._e(),_vm._t("dialog")],2)
11496
12130
  }
11497
12131
  var xt_pagevue_type_template_id_a1f6b910_scoped_true_staticRenderFns = []
@@ -11603,7 +12237,7 @@ xt_page.install = function (Vue) {
11603
12237
 
11604
12238
  /* harmony default export */ var components_xt_page = (xt_page);
11605
12239
 
11606
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-select-tree/index.vue?vue&type=template&id=962f42c0&scoped=true
12240
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-select-tree/index.vue?vue&type=template&id=962f42c0&scoped=true
11607
12241
  var xt_select_treevue_type_template_id_962f42c0_scoped_true_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"el-select select-tree"},[_c('el-popover',{ref:"elPopover",attrs:{"transition":"el-zoom-in-top","popper-class":"select-tree__popover","trigger":"click","disabled":_vm.disabled,"placement":_vm.placement,"width":_vm.popoverWidth},on:{"after-enter":_vm.handleScroll,"show":_vm.handleFocus,"hide":_vm.handleBlur},model:{value:(_vm.visible),callback:function ($$v) {_vm.visible=$$v},expression:"visible"}},[_c('el-scrollbar',{ref:"scrollbar",attrs:{"wrap-class":"el-select-dropdown__wrap","view-class":"el-select-dropdown__list"}},[_c('el-tree',{ref:"elTree",staticClass:"select-tree__list",style:({minWidth: _vm.minWidth + 'px'}),attrs:{"default-expand-keys":_vm.defaultExpandKeys,"show-checkbox":_vm.multiple,"expand-on-click-node":_vm.multiple,"data":_vm.data,"props":_vm.props,"node-key":_vm.propsValue,"default-expand-all":_vm.defaultExpandAll,"check-strictly":_vm.checkStrictly,"lazy":_vm.lazy,"load":_vm.load,"icon-class":_vm.iconClass,"highlight-current":_vm.highlightCurrent,"indent":_vm.indent,"accordion":_vm.accordion,"filter-node-method":_vm.filterNodeMethod,"auto-expand-parent":_vm.autoExpandParent,"render-content":_vm.renderContent,"render-after-expand":_vm.renderAfterExpand},on:{"check-change":_vm.checkChange,"node-click":_vm.nodeClick},nativeOn:{"transitionend":function($event){return _vm.$refs.elPopover.updatePopper()}},scopedSlots:_vm._u([{key:"default",fn:function({data}){return _c('div',{staticClass:"select-tree__item",class:_vm.treeItemClass(data)},[_vm._v(" "+_vm._s(data[_vm.propsLabel])+" ")])}}])})],1),_c('el-input',{ref:"reference",class:{'is-active': _vm.visible, 'is-selected': _vm.selectedLabel},attrs:{"slot":"reference","clearable":_vm.clearable,"readonly":!_vm.filterable,"validate-event":false,"size":_vm.size,"disabled":_vm.disabled,"placeholder":_vm.query || _vm.placeholder},on:{"input":_vm.getTreeFilter,"clear":_vm.clear},slot:"reference",model:{value:(_vm.selectedLabel),callback:function ($$v) {_vm.selectedLabel=$$v},expression:"selectedLabel"}},[_c('i',{staticClass:"el-input__icon el-input__icon-arrow-down el-icon-arrow-down",attrs:{"slot":"suffix"},slot:"suffix"})])],1)],1)
11608
12242
  }
11609
12243
  var xt_select_treevue_type_template_id_962f42c0_scoped_true_staticRenderFns = []
@@ -11921,7 +12555,7 @@ xt_select_tree.install = function (Vue) {
11921
12555
 
11922
12556
  /* harmony default export */ var components_xt_select_tree = (xt_select_tree);
11923
12557
 
11924
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-upload/index.vue?vue&type=template&id=03e2de58
12558
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-upload/index.vue?vue&type=template&id=03e2de58
11925
12559
  var xt_uploadvue_type_template_id_03e2de58_render = function render(){var _vm=this,_c=_vm._self._c;return _c('XtFlexBox',{attrs:{"type":"inline-flex","gap":"5px"}},[(_vm.action)?_c('el-upload',{ref:"uploadFile",attrs:{"disabled":_vm.disabled || _vm.uploading,"action":_vm.YSSQP + _vm.action,"file-list":_vm.fileList,"data":{accessToken: _vm.accessToken,..._vm.data},"multiple":_vm.multiple,"limit":_vm.limit,"on-success":_vm.uploadSuccess,"show-file-list":false,"auto-upload":_vm.autoUpload,"before-upload":_vm.uploadBefore,"accept":_vm.accept}},[_c('span',{staticStyle:{"font-size":"20px","padding":"20px","background":"#f0f0f1","color":"#409EFF"},style:({padding: _vm.plusPx / 2 + 'px',cursor:_vm.disabled ? 'not-allowed':'pointer'})},[_vm._t("default",function(){return [_c('i',{class:_vm.icon})]})],2)]):_vm._e(),(_vm.fileList!==null&&_vm.fileList.length>0)?_c('XtFlexBox',{staticClass:"el-upload-list el-upload-list--picture-card",staticStyle:{"flex":"1"},attrs:{"gap":"5px","wrap":"wrap"}},_vm._l((_vm.fileList),function(ite,index){return _c('li',{key:index,staticClass:"el-upload-list__item is-ready",staticStyle:{"margin":"0","width":"62px","height":"62px"},style:({ width: (_vm.plusPx + 22)+ 'px',height: (_vm.plusPx + 22)+ 'px'})},[_c('el-image',{staticClass:"el-upload-list__item-thumbnail",attrs:{"src":_vm.YSSQP+'/'+ite,"alt":""},on:{"click":_vm.clickHandler}}),_c('span',{staticClass:"el-upload-list__item-actions",on:{"click":function($event){return _vm.preShowPicture(ite, index)}}},[_c('span',{staticClass:"el-upload-list__item-preview",on:{"click":function($event){$event.stopPropagation();return _vm.preShowPicture(ite, index)}}},[_c('i',{staticClass:"el-icon-zoom-in"})]),(!_vm.uploading&&!_vm.disabled)?_c('span',{staticClass:"el-upload-list__item-delete",staticStyle:{"margin-left":"0"},on:{"click":function($event){$event.stopPropagation();return _vm.handleRemove(index)}}},[_c('i',{staticClass:"el-icon-delete"})]):_vm._e()])],1)}),0):_vm._e(),(_vm.preview)?[(_vm.previewVisible)?_c('ImageViewer',{attrs:{"z-index":3000,"base-url":_vm.baseUrl + '/',"infiniteLoop":false,"initial-index":_vm.imageIndex,"url-list":_vm.allFileList || _vm.fileList,"on-close":_vm.closeViewer}}):_vm._e()]:_vm._e()],2)
11926
12560
  }
11927
12561
  var xt_uploadvue_type_template_id_03e2de58_staticRenderFns = []
@@ -11929,7 +12563,7 @@ var xt_uploadvue_type_template_id_03e2de58_staticRenderFns = []
11929
12563
 
11930
12564
  // CONCATENATED MODULE: ./src/components/xt-upload/index.vue?vue&type=template&id=03e2de58
11931
12565
 
11932
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-upload/preview.vue?vue&type=template&id=236adf7f&scoped=true
12566
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-upload/preview.vue?vue&type=template&id=236adf7f&scoped=true
11933
12567
  var previewvue_type_template_id_236adf7f_scoped_true_render = function render(){var _vm=this,_c=_vm._self._c;return _c('transition',{attrs:{"name":"viewer-fade"}},[_c('div',{ref:"el-image-viewer__wrapper",staticClass:"el-image-viewer__wrapper",style:({ 'z-index': _vm.zIndex }),attrs:{"tabindex":"-1"}},[_c('div',{staticClass:"el-image-viewer__mask",on:{"click":_vm.hide}}),_c('span',{staticClass:"el-image-viewer__btn fix_close",on:{"click":_vm.hide}},[_c('i',{staticClass:"el-icon-close"})]),(!_vm.isSingle)?[_c('span',{staticClass:"el-image-viewer__btn el-image-viewer__prev",class:{ 'is-disabled': !_vm.infinite && _vm.isFirst },on:{"click":_vm.prev}},[_c('i',{staticClass:"el-icon-arrow-left"})]),_c('span',{staticClass:"el-image-viewer__btn el-image-viewer__next",class:{ 'is-disabled': !_vm.infinite && _vm.isLast },on:{"click":_vm.next}},[_c('i',{staticClass:"el-icon-arrow-right"})])]:_vm._e(),_c('div',{staticClass:"el-image-viewer__btn el-image-viewer__actions"},[_c('div',{staticClass:"el-image-viewer__actions__inner"},[_c('i',{staticClass:"el-icon-zoom-out",on:{"click":function($event){$event.stopPropagation();return _vm.handleActions('zoomOut')}}}),_c('i',{staticClass:"el-icon-zoom-in",on:{"click":function($event){$event.stopPropagation();return _vm.handleActions('zoomIn')}}}),_c('i',{staticClass:"el-image-viewer__actions__divider"}),_c('i',{class:_vm.mode.icon,on:{"click":function($event){$event.stopPropagation();return _vm.toggleMode.apply(null, arguments)}}}),_c('i',{staticClass:"el-image-viewer__actions__divider"}),_c('i',{staticClass:"el-icon-refresh-left",on:{"click":function($event){$event.stopPropagation();return _vm.handleActions('anticlocelise')}}}),_c('i',{staticClass:"el-icon-refresh-right",on:{"click":function($event){$event.stopPropagation();return _vm.handleActions('clocelise')}}})])]),_c('div',{staticClass:"el-image-viewer__canvas"},_vm._l((_vm.urlList),function(url,i){return (i === _vm.index)?_c('img',{key:url,ref:"img",refInFor:true,staticClass:"el-image-viewer__img",style:(_vm.imgStyle),attrs:{"src":_vm.currentImg},on:{"load":_vm.handleImgLoad,"error":_vm.handleImgError,"mousedown":_vm.handleMouseDown}}):_vm._e()}),0)],2)])
11934
12568
  }
11935
12569
  var previewvue_type_template_id_236adf7f_scoped_true_staticRenderFns = []
@@ -12965,7 +13599,7 @@ xt_upload.install = function (Vue) {
12965
13599
 
12966
13600
  /* harmony default export */ var components_xt_upload = (xt_upload);
12967
13601
 
12968
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-transfer-tree/index.vue?vue&type=template&id=561bec94&scoped=true
13602
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-transfer-tree/index.vue?vue&type=template&id=561bec94&scoped=true
12969
13603
  var xt_transfer_treevue_type_template_id_561bec94_scoped_true_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"xt-transfer-tree"},[_c('div',{staticClass:"xt-transfer-tree__panel xt-transfer-tree__source"},[_c('div',{staticClass:"xt-transfer-tree__header"},[_c('span',{staticClass:"xt-transfer-tree__title"},[_vm._v(_vm._s(_vm.leftTitle))]),_c('span',{staticClass:"xt-transfer-tree__count"},[_vm._v(_vm._s(_vm.leftCheckedCount)+"/"+_vm._s(_vm.leftTotalCount))])]),(_vm.filterable)?_c('div',{staticClass:"xt-transfer-tree__search"},[_c('el-input',{attrs:{"placeholder":"搜索","prefix-icon":"el-icon-search","size":"small"},model:{value:(_vm.leftFilterText),callback:function ($$v) {_vm.leftFilterText=$$v},expression:"leftFilterText"}})],1):_vm._e(),_c('div',{staticClass:"xt-transfer-tree__body"},[_c('el-tree',{ref:"leftTree",attrs:{"data":_vm.sourceData,"props":_vm.treeProps,"default-expand-all":_vm.defaultExpandAll,"filter-node-method":_vm.filterLeftNode,"show-checkbox":_vm.showCheckbox,"check-strictly":!_vm.cascade,"default-checked-keys":_vm.leftCheckedKeys},on:{"check-change":_vm.handleLeftCheckChange,"node-click":_vm.handleLeftNodeClick},scopedSlots:_vm._u([{key:"default",fn:function({ node, data }){return _c('span',{staticClass:"xt-transfer-tree__node"},[_c('span',[_vm._v(_vm._s(node.label))]),(data.children && data.children.length)?_c('span',{staticClass:"xt-transfer-tree__node-count"},[_vm._v(" ("+_vm._s(data.children.length)+") ")]):_vm._e()])}}])})],1)]),_c('div',{staticClass:"xt-transfer-tree__buttons"},[_c('el-button',{attrs:{"type":"primary","disabled":!_vm.leftCheckedCount,"size":_vm.buttonSize},on:{"click":_vm.transferToRight}},[_c('i',{staticClass:"el-icon-arrow-right"})]),_c('el-button',{attrs:{"type":"primary","disabled":!_vm.rightCheckedCount,"size":_vm.buttonSize},on:{"click":_vm.transferToLeft}},[_c('i',{staticClass:"el-icon-arrow-left"})])],1),_c('div',{staticClass:"xt-transfer-tree__panel xt-transfer-tree__target"},[_c('div',{staticClass:"xt-transfer-tree__header"},[_c('span',{staticClass:"xt-transfer-tree__title"},[_vm._v(_vm._s(_vm.rightTitle))]),_c('span',{staticClass:"xt-transfer-tree__count"},[_vm._v(_vm._s(_vm.rightCheckedCount)+"/"+_vm._s(_vm.rightTotalCount))])]),(_vm.filterable)?_c('div',{staticClass:"xt-transfer-tree__search"},[_c('el-input',{attrs:{"placeholder":"搜索","prefix-icon":"el-icon-search","size":"small"},model:{value:(_vm.rightFilterText),callback:function ($$v) {_vm.rightFilterText=$$v},expression:"rightFilterText"}})],1):_vm._e(),_c('div',{staticClass:"xt-transfer-tree__body"},[_c('el-tree',{ref:"rightTree",attrs:{"data":_vm.targetData,"props":_vm.treeProps,"default-expand-all":_vm.defaultExpandAll,"filter-node-method":_vm.filterRightNode,"show-checkbox":_vm.showCheckbox,"check-strictly":!_vm.cascade,"default-checked-keys":_vm.rightCheckedKeys},on:{"check-change":_vm.handleRightCheckChange,"node-click":_vm.handleRightNodeClick},scopedSlots:_vm._u([{key:"default",fn:function({ node, data }){return _c('span',{staticClass:"xt-transfer-tree__node"},[_c('span',[_vm._v(_vm._s(node.label))]),(data.children && data.children.length)?_c('span',{staticClass:"xt-transfer-tree__node-count"},[_vm._v(" ("+_vm._s(data.children.length)+") ")]):_vm._e()])}}])})],1)])])
12970
13604
  }
12971
13605
  var xt_transfer_treevue_type_template_id_561bec94_scoped_true_staticRenderFns = []
@@ -13318,7 +13952,7 @@ xt_transfer_tree.install = function (Vue) {
13318
13952
 
13319
13953
  /* harmony default export */ var components_xt_transfer_tree = (xt_transfer_tree);
13320
13954
 
13321
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-form-schema/index.vue?vue&type=template&id=50399771&scoped=true
13955
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-form-schema/index.vue?vue&type=template&id=50399771&scoped=true
13322
13956
  var xt_form_schemavue_type_template_id_50399771_scoped_true_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"xt-form-schema"},[(_vm.showSearchTags)?_c('div',{staticClass:"search-tags"},[_c('span',{staticClass:"tags-title"},[_vm._v("已检索:")]),_vm._l((_vm.activeSearchTags),function(tag,key){return _c('el-tag',{key:key,attrs:{"closable":"","size":"small"},on:{"close":function($event){return _vm.handleRemoveTag(key)}}},[_vm._v(" "+_vm._s(tag.label)+": "+_vm._s(tag.value)+" ")])}),(_vm.activeSearchTagsCount === 0)?_c('span',{staticClass:"no-tags"},[_vm._v("暂无检索条件")]):_vm._e()],2):_vm._e(),(_vm.mode === 'dialog')?_c('el-dialog',{staticClass:"xt-form-schema-dialog",attrs:{"title":_vm.title,"visible":_vm.visible,"width":_vm.width,"before-close":_vm.handleCancel,"append-to-body":"","modal-append-to-body":""},on:{"update:visible":function($event){_vm.visible=$event}}},[_c('el-form',{attrs:{"model":_vm.formData,"inline":false,"label-width":"120px"}},_vm._l((_vm.schema),function(field){return _c('el-form-item',{key:field.prop,attrs:{"label":field.label,"prop":field.prop}},[(!field.isSlot)?_c(_vm.getFieldComponent(field),_vm._b({tag:"component"},'component',_vm.getFieldProps(field),false)):_vm._t(field.prop,null,{"field":field})],2)}),1),_c('div',{staticClass:"dialog-footer",attrs:{"slot":"footer"},slot:"footer"},[_c('el-button',{on:{"click":_vm.handleCancel}},[_vm._v("取消")]),_c('el-button',{attrs:{"type":"primary"},on:{"click":_vm.handleConfirm}},[_vm._v("确认")])],1)],1):_vm._e(),(_vm.mode === 'drawer')?_c('el-drawer',{staticClass:"xt-form-schema-drawer",attrs:{"title":_vm.title,"visible":_vm.visible,"direction":_vm.direction,"size":_vm.width,"before-close":_vm.handleCancel,"append-to-body":"","modal-append-to-body":""},on:{"update:visible":function($event){_vm.visible=$event}}},[_c('el-form',{attrs:{"model":_vm.formData,"inline":false,"label-width":"120px"}},_vm._l((_vm.schema),function(field){return _c('el-form-item',{key:field.prop,attrs:{"label":field.label,"prop":field.prop}},[(!field.isSlot)?_c(_vm.getFieldComponent(field),_vm._b({tag:"component"},'component',_vm.getFieldProps(field),false)):_vm._t(field.prop,null,{"field":field})],2)}),1),_c('div',{staticClass:"drawer-footer"},[_c('el-button',{on:{"click":_vm.handleCancel}},[_vm._v("取消")]),_c('el-button',{attrs:{"type":"primary"},on:{"click":_vm.handleConfirm}},[_vm._v("确认")])],1)],1):_vm._e()],1)
13323
13957
  }
13324
13958
  var xt_form_schemavue_type_template_id_50399771_scoped_true_staticRenderFns = []
@@ -13590,7 +14224,7 @@ xt_form_schema.install = function (Vue) {
13590
14224
  // EXTERNAL MODULE: ./src/components/xt-flow/style/index.scss
13591
14225
  var xt_flow_style = __webpack_require__("fdbd");
13592
14226
 
13593
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d8e97dbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-flow/index.vue?vue&type=template&id=05a25f5f
14227
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1d9e3ae5-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-flow/index.vue?vue&type=template&id=05a25f5f
13594
14228
  var xt_flowvue_type_template_id_05a25f5f_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"xt-flow",class:_vm.rootClasses},[_vm._l((_vm.displayNodes),function(node,index){return _c('div',{key:node.id || index,staticClass:"xt-flow__node",class:_vm.nodeClasses(node, index)},[_c('div',{staticClass:"xt-flow__timeline"},[_c('div',{staticClass:"xt-flow__icon",class:`xt-flow__icon--${node.status}`},[_vm._t("node-avatar",function(){return [_c('span',{staticClass:"xt-flow__icon-dot"})]},{"node":node,"index":index})],2),(index < _vm.displayNodes.length - 1)?_c('div',{staticClass:"xt-flow__line",class:[
13595
14229
  `xt-flow__line--${node.status}`,
13596
14230
  { 'xt-flow__line--dashed': node.status === 'rejected' }
@@ -13998,6 +14632,567 @@ xt_flow.install = function(Vue) {
13998
14632
  }
13999
14633
 
14000
14634
  /* harmony default export */ var components_xt_flow = (xt_flow);
14635
+ // CONCATENATED MODULE: ./src/components/theme/iframe-injector.js
14636
+ /* ============================================================
14637
+ * XT-Element-UI iframe 主题注入工具
14638
+ *
14639
+ * 使用场景:微前端架构中,主系统统一管理主题,子系统通过 iframe 嵌入。
14640
+ * 子系统为标准 Element UI 项目,无需任何改造。
14641
+ *
14642
+ * 设计:
14643
+ * - 主题状态的唯一事实源是 utils/index.js(setTheme / setPrimaryColor)
14644
+ * - 本模块仅负责 iframe DOM 操作(注入、MutationObserver、持久化、广播)
14645
+ * - 通过订阅 utils.onConfigChange 实现主文档和 iframe 的同步
14646
+ * - setTheme / setPrimaryColor 委托给 utils,保持外部 API 不变
14647
+ *
14648
+ * 工作流程:
14649
+ * 1. 主系统调用 utils.setTheme('dark') → utils 同步更新 --xt-* + --el-* 变量
14650
+ * 2. utils emitConfigChange → 所有 IframeThemeInjector 实例收到通知
14651
+ * 3. 实例将新主题应用到其管理的所有 iframe
14652
+ * 4. 持久化、广播事件、回调
14653
+ * ============================================================ */
14654
+
14655
+
14656
+
14657
+
14658
+ /**
14659
+ * IframeThemeInjector 类
14660
+ * 负责向 iframe 注入主题 CSS 并管理 iframe 侧主题状态
14661
+ *
14662
+ * 注意:主文档的 --el-* / --xt-* CSS 变量由 utils/index.js 管理,
14663
+ * 本类仅负责 iframe 内的同步,避免重复设置主文档变量。
14664
+ */
14665
+ class iframe_injector_IframeThemeInjector {
14666
+ /**
14667
+ * @param {Object} options
14668
+ * @param {string} options.baseCSS - 基础 CSS 内容(注入到 iframe 的 <head>)
14669
+ * @param {string} [options.theme='white'] - 初始主题 'white' | 'dark'
14670
+ * @param {string} [options.primaryColor='#1890ff'] - 初始主色调
14671
+ * @param {string} [options.brand=''] - 品牌标识 '' | 'water' | 'electricity' | 'gas'
14672
+ * @param {boolean} [options.persist=false] - 是否持久化主题配置到 localStorage
14673
+ * @param {Function} [options.onThemeChange] - 主题变化回调
14674
+ */
14675
+ constructor(options = {}) {
14676
+ if (!options.baseCSS) {
14677
+ console.warn('[IframeThemeInjector] baseCSS 未提供,主题样式将无法注入到 iframe')
14678
+ }
14679
+
14680
+ this.baseCSS = options.baseCSS || ''
14681
+ this.theme = options.theme || 'white'
14682
+ this.brand = options.brand || ''
14683
+ this.persist = options.persist || false
14684
+ this.onThemeChange = options.onThemeChange || null
14685
+
14686
+ // 主色调:如果有 brand,优先使用 brand 对应的颜色
14687
+ this.primaryColor = options.primaryColor || this._getBrandColor()
14688
+ this._userPrimaryColor = options.primaryColor || '#1890ff'
14689
+
14690
+ // 管理的 iframe 列表
14691
+ // Map<HTMLIFrameElement, { styleEl: HTMLStyleElement, injected: boolean }>
14692
+ this.iframes = new Map()
14693
+
14694
+ // MutationObserver 用于自动检测新增 iframe
14695
+ this._observer = null
14696
+ this._observerTarget = null
14697
+
14698
+ // 注入计数器(用于去重定时器)
14699
+ this._injectPending = new Set()
14700
+
14701
+ // 订阅 utils 配置变更,实现主文档和 iframe 的主题同步
14702
+ this._unsubscribe = onConfigChange((key, value) => {
14703
+ this._onUtilsConfigChange(key, value)
14704
+ })
14705
+ }
14706
+
14707
+ // ==================== 公共方法 ====================
14708
+
14709
+ /**
14710
+ * 向指定 iframe 注入主题 CSS
14711
+ * @param {HTMLIFrameElement} iframe - iframe 元素
14712
+ * @returns {boolean} 是否注入成功
14713
+ */
14714
+ inject(iframe) {
14715
+ if (!iframe) {
14716
+ console.warn('[IframeThemeInjector] inject: iframe 参数为空')
14717
+ return false
14718
+ }
14719
+
14720
+ // 如果已注入,跳过
14721
+ if (this.iframes.has(iframe)) {
14722
+ return true
14723
+ }
14724
+
14725
+ return this._doInject(iframe)
14726
+ }
14727
+
14728
+ /**
14729
+ * 批量注入:注入所有匹配选择器的 iframe
14730
+ * @param {string} [selector='iframe'] - CSS 选择器
14731
+ * @returns {number} 成功注入的数量
14732
+ */
14733
+ injectAll(selector = 'iframe') {
14734
+ const iframes = document.querySelectorAll(selector)
14735
+ let count = 0
14736
+ iframes.forEach(iframe => {
14737
+ if (this.inject(iframe)) count++
14738
+ })
14739
+ return count
14740
+ }
14741
+
14742
+ /**
14743
+ * 切换主题
14744
+ * 委托给 utils 处理主文档 CSS 变量,本类负责 iframe 同步
14745
+ * @param {string} theme - 'white' | 'dark'
14746
+ * @param {Object} [options]
14747
+ * @param {string} [options.primaryColor] - 主色调
14748
+ * @param {string} [options.brand] - 品牌色
14749
+ */
14750
+ setTheme(theme, options = {}) {
14751
+ if (theme !== 'white' && theme !== 'dark') {
14752
+ console.warn('[IframeThemeInjector] setTheme: 无效的主题值,使用 "white"', theme)
14753
+ theme = 'white'
14754
+ }
14755
+
14756
+ const prevTheme = this.theme
14757
+ this.theme = theme
14758
+
14759
+ if (options.primaryColor) {
14760
+ this.primaryColor = options.primaryColor
14761
+ this._userPrimaryColor = options.primaryColor
14762
+ } else if (options.brand || this.brand) {
14763
+ this.brand = options.brand || this.brand
14764
+ this.primaryColor = this._getBrandColor()
14765
+ }
14766
+
14767
+ if (options.brand !== undefined) {
14768
+ this.brand = options.brand
14769
+ }
14770
+
14771
+ // 委托给 utils 处理主文档的 CSS 变量设置
14772
+ setTheme(theme)
14773
+ if (this.primaryColor) {
14774
+ setPrimaryColor(this.primaryColor)
14775
+ }
14776
+
14777
+ // 同步所有 iframe
14778
+ this.iframes.forEach((_, iframeEl) => {
14779
+ try {
14780
+ if (iframeEl.contentDocument) {
14781
+ this._applyThemeToDocument(iframeEl.contentDocument)
14782
+ }
14783
+ } catch (e) { /* 跨域 iframe 无法访问 */ }
14784
+ })
14785
+
14786
+ // 持久化
14787
+ if (this.persist) {
14788
+ this._saveToStorage()
14789
+ }
14790
+
14791
+ // 广播事件
14792
+ this._broadcastChange()
14793
+
14794
+ // 回调
14795
+ if (this.onThemeChange) {
14796
+ this.onThemeChange({
14797
+ theme: this.theme,
14798
+ primaryColor: this.primaryColor,
14799
+ brand: this.brand,
14800
+ prevTheme
14801
+ })
14802
+ }
14803
+ }
14804
+
14805
+ /**
14806
+ * 设置主色调
14807
+ * @param {string} color - hex 颜色值,如 '#1890ff'
14808
+ */
14809
+ setPrimaryColor(color) {
14810
+ this.primaryColor = color
14811
+ this._userPrimaryColor = color
14812
+ this.brand = '' // 清除品牌色
14813
+
14814
+ // 委托给 utils 处理主文档
14815
+ setPrimaryColor(color)
14816
+
14817
+ // 同步 iframe
14818
+ this._applyPrimaryColorToAll()
14819
+ }
14820
+
14821
+ /**
14822
+ * 设置品牌色
14823
+ * @param {string} brand - '' | 'water' | 'electricity' | 'gas'
14824
+ */
14825
+ setBrand(brand) {
14826
+ this.brand = brand
14827
+ this.primaryColor = this._getBrandColor()
14828
+
14829
+ // 委托给 utils 处理主文档
14830
+ setPrimaryColor(this.primaryColor)
14831
+
14832
+ // 同步 iframe
14833
+ this._applyPrimaryColorToAll()
14834
+ }
14835
+
14836
+ /**
14837
+ * 移除指定 iframe 的注入
14838
+ * @param {HTMLIFrameElement} iframe
14839
+ */
14840
+ remove(iframe) {
14841
+ const info = this.iframes.get(iframe)
14842
+ if (info && info.styleEl && info.styleEl.parentNode) {
14843
+ info.styleEl.parentNode.removeChild(info.styleEl)
14844
+ }
14845
+ this.iframes.delete(iframe)
14846
+ this._injectPending.delete(iframe)
14847
+ }
14848
+
14849
+ /**
14850
+ * 移除所有注入
14851
+ */
14852
+ removeAll() {
14853
+ this.iframes.forEach((info, iframe) => {
14854
+ if (info.styleEl && info.styleEl.parentNode) {
14855
+ info.styleEl.parentNode.removeChild(info.styleEl)
14856
+ }
14857
+ })
14858
+ this.iframes.clear()
14859
+ this._injectPending.clear()
14860
+ }
14861
+
14862
+ /**
14863
+ * 开始自动监听 DOM 变化,自动注入新添加的 iframe
14864
+ * @param {HTMLElement} [target=document.body] - 监听的容器元素
14865
+ */
14866
+ startObserving(target) {
14867
+ this.stopObserving()
14868
+
14869
+ this._observerTarget = target || document.body
14870
+ this._observer = new MutationObserver((mutations) => {
14871
+ mutations.forEach(mutation => {
14872
+ mutation.addedNodes.forEach(node => {
14873
+ // 直接添加的 iframe
14874
+ if (node.tagName === 'IFRAME') {
14875
+ this._handleNewIframe(node)
14876
+ }
14877
+ // 包含 iframe 的子元素
14878
+ if (node.querySelectorAll) {
14879
+ node.querySelectorAll('iframe').forEach(iframe => {
14880
+ this._handleNewIframe(iframe)
14881
+ })
14882
+ }
14883
+ })
14884
+ })
14885
+ })
14886
+
14887
+ this._observer.observe(this._observerTarget, {
14888
+ childList: true,
14889
+ subtree: true
14890
+ })
14891
+ }
14892
+
14893
+ /**
14894
+ * 停止自动监听
14895
+ */
14896
+ stopObserving() {
14897
+ if (this._observer) {
14898
+ this._observer.disconnect()
14899
+ this._observer = null
14900
+ }
14901
+ this._observerTarget = null
14902
+ }
14903
+
14904
+ /**
14905
+ * 获取当前主题配置
14906
+ * @returns {Object}
14907
+ */
14908
+ getConfig() {
14909
+ return {
14910
+ theme: this.theme,
14911
+ primaryColor: this.primaryColor,
14912
+ brand: this.brand
14913
+ }
14914
+ }
14915
+
14916
+ /**
14917
+ * 获取已注入的 iframe 数量
14918
+ * @returns {number}
14919
+ */
14920
+ getIframeCount() {
14921
+ return this.iframes.size
14922
+ }
14923
+
14924
+ /**
14925
+ * 销毁实例,清理所有资源
14926
+ */
14927
+ destroy() {
14928
+ this.removeAll()
14929
+ this.stopObserving()
14930
+ if (this._unsubscribe) {
14931
+ this._unsubscribe()
14932
+ this._unsubscribe = null
14933
+ }
14934
+ }
14935
+
14936
+ // ==================== utils 变更响应 ====================
14937
+
14938
+ /**
14939
+ * 响应 utils 配置变更,同步到所有 iframe
14940
+ * 统一使用 applyThemeVars 处理主题+主色变量
14941
+ */
14942
+ _onUtilsConfigChange(key, value) {
14943
+ if (key === 'theme') {
14944
+ this.theme = value
14945
+ } else if (key === 'primaryColor') {
14946
+ this.primaryColor = value
14947
+ } else {
14948
+ return
14949
+ }
14950
+ this._applyPrimaryColorToAll()
14951
+ }
14952
+
14953
+ // ==================== 私有方法 ====================
14954
+
14955
+ /**
14956
+ * 执行实际的注入操作
14957
+ */
14958
+ _doInject(iframe) {
14959
+ try {
14960
+ const doc = iframe.contentDocument || iframe.contentWindow.document
14961
+ if (!doc || !doc.head) {
14962
+ // iframe 尚未加载完成,等待 load 事件
14963
+ iframe.addEventListener('load', () => this._doInject(iframe), { once: true })
14964
+ return false
14965
+ }
14966
+
14967
+ // 检查是否已注入过(防止重复)
14968
+ const existing = doc.head.querySelector('style[data-xt-theme-injector]')
14969
+ if (existing) {
14970
+ this.iframes.set(iframe, { styleEl: existing, injected: true })
14971
+ this._applyThemeToDocument(doc)
14972
+ return true
14973
+ }
14974
+
14975
+ // 创建 style 元素并注入
14976
+ const styleEl = doc.createElement('style')
14977
+ styleEl.setAttribute('data-xt-theme-injector', '')
14978
+ styleEl.setAttribute('type', 'text/css')
14979
+ styleEl.textContent = this.baseCSS
14980
+ doc.head.appendChild(styleEl)
14981
+
14982
+ // 应用主题变量
14983
+ this._applyThemeToDocument(doc)
14984
+
14985
+ // 记录
14986
+ this.iframes.set(iframe, { styleEl, injected: true })
14987
+
14988
+ return true
14989
+ } catch (e) {
14990
+ console.warn('[IframeThemeInjector] 无法注入主题到 iframe(可能是跨域限制):', e.message)
14991
+ return false
14992
+ }
14993
+ }
14994
+
14995
+ /**
14996
+ * 处理新检测到的 iframe
14997
+ */
14998
+ _handleNewIframe(iframe) {
14999
+ if (this.iframes.has(iframe) || this._injectPending.has(iframe)) {
15000
+ return
15001
+ }
15002
+
15003
+ this._injectPending.add(iframe)
15004
+
15005
+ const tryInject = () => {
15006
+ this._injectPending.delete(iframe)
15007
+ if (!this.iframes.has(iframe)) {
15008
+ this._doInject(iframe)
15009
+ }
15010
+ }
15011
+
15012
+ if (iframe.contentDocument && iframe.contentDocument.readyState === 'complete') {
15013
+ tryInject()
15014
+ } else {
15015
+ iframe.addEventListener('load', tryInject, { once: true })
15016
+ }
15017
+ }
15018
+
15019
+ /**
15020
+ * 将主题配置应用到指定文档(iframe 内)
15021
+ * 统一使用 applyThemeVars 处理 CSS 变量
15022
+ */
15023
+ _applyThemeToDocument(doc) {
15024
+ if (!doc || !doc.documentElement) return
15025
+
15026
+ applyThemeVars(doc.documentElement, {
15027
+ theme: this.theme,
15028
+ primaryColor: this.primaryColor,
15029
+ brand: this.brand
15030
+ })
15031
+ }
15032
+
15033
+ /**
15034
+ * 更新所有 iframe 文档的主色调
15035
+ * 统一使用 applyThemeVars 处理
15036
+ */
15037
+ _applyPrimaryColorToAll() {
15038
+ this.iframes.forEach((_, iframeEl) => {
15039
+ try {
15040
+ if (iframeEl.contentDocument) {
15041
+ applyThemeVars(iframeEl.contentDocument.documentElement, {
15042
+ theme: this.theme,
15043
+ primaryColor: this.primaryColor,
15044
+ brand: this.brand
15045
+ })
15046
+ }
15047
+ } catch (e) { /* 跨域 */ }
15048
+ })
15049
+ }
15050
+
15051
+ /**
15052
+ * 获取品牌色对应的主色调
15053
+ */
15054
+ _getBrandColor() {
15055
+ if (!this.brand || !BRAND_COLORS[this.brand]) {
15056
+ return this._userPrimaryColor || '#1890ff'
15057
+ }
15058
+ const colors = BRAND_COLORS[this.brand]
15059
+ return this.theme === 'dark' ? colors.dark : colors.light
15060
+ }
15061
+
15062
+ /**
15063
+ * 持久化到 localStorage
15064
+ */
15065
+ _saveToStorage() {
15066
+ if (typeof localStorage === 'undefined') return
15067
+ try {
15068
+ localStorage.setItem(THEME_STORAGE_KEY, JSON.stringify({
15069
+ theme: this.theme,
15070
+ primaryColor: this._userPrimaryColor,
15071
+ brand: this.brand,
15072
+ timestamp: Date.now()
15073
+ }))
15074
+ } catch (e) {
15075
+ console.warn('[IframeThemeInjector] 保存主题配置失败:', e.message)
15076
+ }
15077
+ }
15078
+
15079
+ /**
15080
+ * 从 localStorage 恢复配置
15081
+ */
15082
+ _loadFromStorage() {
15083
+ if (typeof localStorage === 'undefined') return null
15084
+ try {
15085
+ const stored = localStorage.getItem(THEME_STORAGE_KEY)
15086
+ return stored ? JSON.parse(stored) : null
15087
+ } catch (e) {
15088
+ return null
15089
+ }
15090
+ }
15091
+
15092
+ /**
15093
+ * 广播主题变化事件
15094
+ */
15095
+ _broadcastChange() {
15096
+ if (typeof window === 'undefined') return
15097
+ try {
15098
+ window.dispatchEvent(new CustomEvent(THEME_CHANGE_EVENT, {
15099
+ detail: {
15100
+ theme: this.theme,
15101
+ primaryColor: this.primaryColor,
15102
+ brand: this.brand,
15103
+ timestamp: Date.now()
15104
+ },
15105
+ bubbles: true,
15106
+ composed: true
15107
+ }))
15108
+ } catch (e) {
15109
+ // 忽略
15110
+ }
15111
+ }
15112
+ }
15113
+
15114
+ /**
15115
+ * 创建 IframeThemeInjector 实例并自动从 localStorage 恢复配置
15116
+ * @param {Object} options
15117
+ * @returns {IframeThemeInjector}
15118
+ */
15119
+ function createInjector(options = {}) {
15120
+ const injector = new iframe_injector_IframeThemeInjector(options)
15121
+
15122
+ // 如果启用持久化,尝试从 localStorage 恢复
15123
+ if (options.persist) {
15124
+ const stored = injector._loadFromStorage()
15125
+ if (stored) {
15126
+ injector.theme = stored.theme || 'white'
15127
+ injector.brand = stored.brand || ''
15128
+ injector._userPrimaryColor = stored.primaryColor || '#1890ff'
15129
+ injector.primaryColor = stored.primaryColor || injector._getBrandColor()
15130
+ }
15131
+ }
15132
+
15133
+ return injector
15134
+ }
15135
+
15136
+ /* harmony default export */ var iframe_injector = (iframe_injector_IframeThemeInjector);
15137
+
15138
+ // CONCATENATED MODULE: ./src/components/theme/index.js
15139
+ /* ============================================================
15140
+ * XT-Element-UI Theme 模块入口
15141
+ *
15142
+ * 提供:
15143
+ * 1. 静态 CSS 样式文件(用于注入到 iframe)
15144
+ * 2. IframeThemeInjector - iframe 主题注入工具
15145
+ * 3. 便捷的工厂函数
15146
+ * ============================================================ */
15147
+
15148
+
15149
+
15150
+ // 使用 raw-loader 以原始字符串形式导入 CSS 文件
15151
+ // eslint-disable-next-line
15152
+ const elementVarsCSS = __webpack_require__("b85c").default || __webpack_require__("b85c")
15153
+ // eslint-disable-next-line
15154
+ const elementOverridesCSS = __webpack_require__("c8e4").default || __webpack_require__("c8e4")
15155
+
15156
+ /**
15157
+ * 合并后的完整 CSS 内容
15158
+ * 可直接注入到 iframe 的 <head> 中
15159
+ */
15160
+ const fullThemeCSS = elementVarsCSS + '\n' + elementOverridesCSS
15161
+
15162
+ /**
15163
+ * 创建一个预配置好 CSS 内容的 IframeThemeInjector 实例
15164
+ * 这是推荐的使用方式,无需手动提供 CSS 内容
15165
+ *
15166
+ * @param {Object} options
15167
+ * @param {string} [options.theme='white'] - 初始主题 'white' | 'dark'
15168
+ * @param {string} [options.primaryColor='#1890ff'] - 初始主色调
15169
+ * @param {boolean} [options.persist=false] - 是否持久化主题配置
15170
+ * @param {Function} [options.onThemeChange] - 主题变化回调
15171
+ * @returns {IframeThemeInjector}
15172
+ *
15173
+ * @example
15174
+ * // 基本使用
15175
+ * const injector = createThemeInjector({ theme: 'white' })
15176
+ * injector.injectAll('iframe')
15177
+ *
15178
+ * @example
15179
+ * // 切换主题
15180
+ * injector.setTheme('dark')
15181
+ *
15182
+ * @example
15183
+ * // 自动监听新增 iframe
15184
+ * injector.startObserving()
15185
+ */
15186
+ function createThemeInjector(options = {}) {
15187
+ return createInjector({
15188
+ ...options,
15189
+ baseCSS: fullThemeCSS
15190
+ })
15191
+ }
15192
+
15193
+
15194
+
15195
+ /* harmony default export */ var components_theme = (createThemeInjector);
14001
15196
  // CONCATENATED MODULE: ./src/index.js
14002
15197
  // 导入主题样式(定义 CSS 变量)
14003
15198
 
@@ -14038,6 +15233,7 @@ const { getConfig: src_getConfig, setConfig: src_setConfig, getTheme: src_getThe
14038
15233
  // XtTable 组件(基于 ElementUI Table 封装)
14039
15234
  // XtList 组件(卡片列表)
14040
15235
 
15236
+ // XtScroll 组件(虚拟滚动容器)
14041
15237
 
14042
15238
 
14043
15239
 
@@ -14048,6 +15244,7 @@ const { getConfig: src_getConfig, setConfig: src_setConfig, getTheme: src_getThe
14048
15244
  // XtTransferTree 组件(树形穿梭框)
14049
15245
  // XtFormSchema 组件(表单配置化搜索)
14050
15246
  // XtFlow 组件(审批流程轨迹)
15247
+ // Theme 模块(iframe 主题注入工具)
14051
15248
 
14052
15249
 
14053
15250
  const src_components = [
@@ -14075,6 +15272,7 @@ const src_components = [
14075
15272
  components_xt_table,
14076
15273
  components_xt_list,
14077
15274
  components_xt_scroll_arrow,
15275
+ components_xt_scroll,
14078
15276
  XtBar,
14079
15277
  XtLine,
14080
15278
  XtPie,
@@ -14155,6 +15353,7 @@ if (typeof window !== 'undefined' && window.Vue) {
14155
15353
  XtTable: components_xt_table,
14156
15354
  XtList: components_xt_list,
14157
15355
  XtScrollArrow: components_xt_scroll_arrow,
15356
+ XtScroll: components_xt_scroll,
14158
15357
  XtBar: XtBar,
14159
15358
  XtLine: XtLine,
14160
15359
  XtPie: XtPie,
@@ -14164,7 +15363,8 @@ if (typeof window !== 'undefined' && window.Vue) {
14164
15363
  XtUpload: components_xt_upload,
14165
15364
  XtTransferTree: components_xt_transfer_tree,
14166
15365
  XtFormSchema: components_xt_form_schema,
14167
- XtFlow: components_xt_flow
15366
+ XtFlow: components_xt_flow,
15367
+ Theme: components_theme
14168
15368
  });
14169
15369
 
14170
15370
  // 导出工具函数和变量