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
@@ -33,11 +33,6 @@ module.exports =
33
33
  /******/ // The module cache
34
34
  /******/ var installedModules = {};
35
35
  /******/
36
- /******/ // object to store loaded CSS chunks
37
- /******/ var installedCssChunks = {
38
- /******/ 0: 0
39
- /******/ }
40
- /******/
41
36
  /******/ // object to store loaded and loading chunks
42
37
  /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
43
38
  /******/ // Promise = chunk loading, 0 = chunk loaded
@@ -82,47 +77,6 @@ module.exports =
82
77
  /******/ var promises = [];
83
78
  /******/
84
79
  /******/
85
- /******/ // mini-css-extract-plugin CSS loading
86
- /******/ var cssChunks = {"1":1};
87
- /******/ if(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);
88
- /******/ else if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {
89
- /******/ promises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {
90
- /******/ var href = "css/" + ({}[chunkId]||chunkId) + "." + {"1":"87a493be","2":"31d6cfe0"}[chunkId] + ".css";
91
- /******/ var fullhref = __webpack_require__.p + href;
92
- /******/ var existingLinkTags = document.getElementsByTagName("link");
93
- /******/ for(var i = 0; i < existingLinkTags.length; i++) {
94
- /******/ var tag = existingLinkTags[i];
95
- /******/ var dataHref = tag.getAttribute("data-href") || tag.getAttribute("href");
96
- /******/ if(tag.rel === "stylesheet" && (dataHref === href || dataHref === fullhref)) return resolve();
97
- /******/ }
98
- /******/ var existingStyleTags = document.getElementsByTagName("style");
99
- /******/ for(var i = 0; i < existingStyleTags.length; i++) {
100
- /******/ var tag = existingStyleTags[i];
101
- /******/ var dataHref = tag.getAttribute("data-href");
102
- /******/ if(dataHref === href || dataHref === fullhref) return resolve();
103
- /******/ }
104
- /******/ var linkTag = document.createElement("link");
105
- /******/ linkTag.rel = "stylesheet";
106
- /******/ linkTag.type = "text/css";
107
- /******/ linkTag.onload = resolve;
108
- /******/ linkTag.onerror = function(event) {
109
- /******/ var request = event && event.target && event.target.src || fullhref;
110
- /******/ var err = new Error("Loading CSS chunk " + chunkId + " failed.\n(" + request + ")");
111
- /******/ err.code = "CSS_CHUNK_LOAD_FAILED";
112
- /******/ err.request = request;
113
- /******/ delete installedCssChunks[chunkId]
114
- /******/ linkTag.parentNode.removeChild(linkTag)
115
- /******/ reject(err);
116
- /******/ };
117
- /******/ linkTag.href = fullhref;
118
- /******/
119
- /******/ var head = document.getElementsByTagName("head")[0];
120
- /******/ head.appendChild(linkTag);
121
- /******/ }).then(function() {
122
- /******/ installedCssChunks[chunkId] = 0;
123
- /******/ }));
124
- /******/ }
125
- /******/
126
80
  /******/ // JSONP chunk loading for javascript
127
81
  /******/
128
82
  /******/ var installedChunkData = installedChunks[chunkId];
@@ -491,6 +445,13 @@ function normalizeComponent(
491
445
 
492
446
  /***/ }),
493
447
 
448
+ /***/ "3ae0":
449
+ /***/ (function(module, exports, __webpack_require__) {
450
+
451
+ // extracted by mini-css-extract-plugin
452
+
453
+ /***/ }),
454
+
494
455
  /***/ "3cef":
495
456
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
496
457
 
@@ -598,6 +559,17 @@ var removeResizeListener = exports.removeResizeListener = function removeResizeL
598
559
 
599
560
  // extracted by mini-css-extract-plugin
600
561
 
562
+ /***/ }),
563
+
564
+ /***/ "52fd":
565
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
566
+
567
+ "use strict";
568
+ /* 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");
569
+ /* 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__);
570
+ /* unused harmony reexport * */
571
+
572
+
601
573
  /***/ }),
602
574
 
603
575
  /***/ "5820":
@@ -1687,17 +1659,6 @@ var index = (function () {
1687
1659
 
1688
1660
  // extracted by mini-css-extract-plugin
1689
1661
 
1690
- /***/ }),
1691
-
1692
- /***/ "732a":
1693
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
1694
-
1695
- "use strict";
1696
- /* 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");
1697
- /* 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__);
1698
- /* unused harmony reexport * */
1699
-
1700
-
1701
1662
  /***/ }),
1702
1663
 
1703
1664
  /***/ "76cb":
@@ -1817,6 +1778,15 @@ module.exports = {"xtColorPrimary":"#1890ff","xtColorSuccess":"#37c3a4","xtColor
1817
1778
  /* unused harmony reexport * */
1818
1779
 
1819
1780
 
1781
+ /***/ }),
1782
+
1783
+ /***/ "b85c":
1784
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1785
+
1786
+ "use strict";
1787
+ __webpack_require__.r(__webpack_exports__);
1788
+ /* 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}");
1789
+
1820
1790
  /***/ }),
1821
1791
 
1822
1792
  /***/ "b8f0":
@@ -1897,6 +1867,15 @@ try {
1897
1867
  module.exports = g;
1898
1868
 
1899
1869
 
1870
+ /***/ }),
1871
+
1872
+ /***/ "c8e4":
1873
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1874
+
1875
+ "use strict";
1876
+ __webpack_require__.r(__webpack_exports__);
1877
+ /* 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}");
1878
+
1900
1879
  /***/ }),
1901
1880
 
1902
1881
  /***/ "ceb9":
@@ -1989,13 +1968,6 @@ exports.default = {
1989
1968
 
1990
1969
  /***/ }),
1991
1970
 
1992
- /***/ "e895":
1993
- /***/ (function(module, exports, __webpack_require__) {
1994
-
1995
- // extracted by mini-css-extract-plugin
1996
-
1997
- /***/ }),
1998
-
1999
1971
  /***/ "e8d2":
2000
1972
  /***/ (function(module, exports, __webpack_require__) {
2001
1973
 
@@ -2021,6 +1993,13 @@ exports.default = {
2021
1993
 
2022
1994
  /***/ }),
2023
1995
 
1996
+ /***/ "f699":
1997
+ /***/ (function(module, exports, __webpack_require__) {
1998
+
1999
+ // extracted by mini-css-extract-plugin
2000
+
2001
+ /***/ }),
2002
+
2024
2003
  /***/ "fb15":
2025
2004
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2026
2005
 
@@ -2062,6 +2041,7 @@ __webpack_require__.d(__webpack_exports__, "XtIcon", function() { return /* reex
2062
2041
  __webpack_require__.d(__webpack_exports__, "XtTable", function() { return /* reexport */ components_xt_table; });
2063
2042
  __webpack_require__.d(__webpack_exports__, "XtList", function() { return /* reexport */ components_xt_list; });
2064
2043
  __webpack_require__.d(__webpack_exports__, "XtScrollArrow", function() { return /* reexport */ components_xt_scroll_arrow; });
2044
+ __webpack_require__.d(__webpack_exports__, "XtScroll", function() { return /* reexport */ components_xt_scroll; });
2065
2045
  __webpack_require__.d(__webpack_exports__, "XtBar", function() { return /* reexport */ XtBar; });
2066
2046
  __webpack_require__.d(__webpack_exports__, "XtLine", function() { return /* reexport */ XtLine; });
2067
2047
  __webpack_require__.d(__webpack_exports__, "XtChart", function() { return /* reexport */ components_xt_chart; });
@@ -2073,6 +2053,7 @@ __webpack_require__.d(__webpack_exports__, "XtUpload", function() { return /* re
2073
2053
  __webpack_require__.d(__webpack_exports__, "XtTransferTree", function() { return /* reexport */ components_xt_transfer_tree; });
2074
2054
  __webpack_require__.d(__webpack_exports__, "XtFormSchema", function() { return /* reexport */ components_xt_form_schema; });
2075
2055
  __webpack_require__.d(__webpack_exports__, "XtFlow", function() { return /* reexport */ components_xt_flow; });
2056
+ __webpack_require__.d(__webpack_exports__, "Theme", function() { return /* reexport */ components_theme; });
2076
2057
 
2077
2058
  // CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js
2078
2059
  // This file is imported into lib/wc client bundles.
@@ -2876,480 +2857,708 @@ EchartsUtil.destroyAll = function() {
2876
2857
 
2877
2858
 
2878
2859
 
2860
+ // CONCATENATED MODULE: ./src/utils/color.js
2861
+ /**
2862
+ * 颜色工具函数
2863
+ * 供 utils/index.js 和 theme/iframe-injector.js 共同使用
2864
+ */
2865
+
2866
+ /**
2867
+ * 十六进制颜色转 RGB 字符串 "r, g, b"
2868
+ */
2869
+ function hexToRgb(hex) {
2870
+ const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex)
2871
+ return result
2872
+ ? `${parseInt(result[1], 16)}, ${parseInt(result[2], 16)}, ${parseInt(result[3], 16)}`
2873
+ : '24, 144, 255'
2874
+ }
2875
+
2876
+ /**
2877
+ * 十六进制颜色转 RGB 对象 { r, g, b }
2878
+ */
2879
+ function hexToRgbObject(hex) {
2880
+ const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex)
2881
+ return result ? {
2882
+ r: parseInt(result[1], 16),
2883
+ g: parseInt(result[2], 16),
2884
+ b: parseInt(result[3], 16)
2885
+ } : null
2886
+ }
2887
+
2888
+ /**
2889
+ * RGB 对象转十六进制
2890
+ */
2891
+ function rgbToHex(r, g, b) {
2892
+ return '#' + [r, g, b].map(x => {
2893
+ const hex = x.toString(16)
2894
+ return hex.length === 1 ? '0' + hex : hex
2895
+ }).join('')
2896
+ }
2897
+
2898
+ /**
2899
+ * 加深颜色(amount 范围 0-100,表示减少的量)
2900
+ */
2901
+ function darkenColor(hex, amount) {
2902
+ const obj = hexToRgbObject(hex)
2903
+ if (!obj) return hex
2904
+ const r = Math.max(0, obj.r - amount)
2905
+ const g = Math.max(0, obj.g - amount)
2906
+ const b = Math.max(0, obj.b - amount)
2907
+ return rgbToHex(r, g, b)
2908
+ }
2909
+
2910
+ /**
2911
+ * 减淡/变亮颜色(percent 范围 0-100,表示增加的百分比)
2912
+ */
2913
+ function lightenColor(hex, percent) {
2914
+ const obj = hexToRgbObject(hex)
2915
+ if (!obj) return hex
2916
+ const amount = Math.round(2.55 * percent)
2917
+ const r = Math.min(255, obj.r + amount)
2918
+ const g = Math.min(255, obj.g + amount)
2919
+ const b = Math.min(255, obj.b + amount)
2920
+ return rgbToHex(r, g, b)
2921
+ }
2922
+
2923
+ /**
2924
+ * 根据主色调生成 Element UI 主色 CSS 变量
2925
+ * 返回 { '--el-color-primary': hex, '--el-color-primary-light-3': hex, ... }
2926
+ */
2927
+ function generatePrimaryColorVars(primaryColor) {
2928
+ const prefix = '--el-color-primary'
2929
+ return {
2930
+ [prefix]: primaryColor,
2931
+ [`${prefix}-light-3`]: lightenColor(primaryColor, 30),
2932
+ [`${prefix}-light-5`]: lightenColor(primaryColor, 50),
2933
+ [`${prefix}-light-7`]: lightenColor(primaryColor, 70),
2934
+ [`${prefix}-light-8`]: lightenColor(primaryColor, 80),
2935
+ [`${prefix}-light-9`]: lightenColor(primaryColor, 90),
2936
+ [`${prefix}-dark-2`]: darkenColor(primaryColor, 20),
2937
+ [`${prefix}-rgb`]: hexToRgb(primaryColor)
2938
+ }
2939
+ }
2940
+
2941
+ /**
2942
+ * 根据主色调生成 xt 组件主色 CSS 变量
2943
+ * 返回 { '--xt-color-primary': hex, ... }
2944
+ */
2945
+ function generateXtPrimaryColorVars(primaryColor) {
2946
+ const prefix = '--xt-color-primary'
2947
+ return {
2948
+ [prefix]: primaryColor,
2949
+ [`${prefix}-light-3`]: lightenColor(primaryColor, 30),
2950
+ [`${prefix}-light-5`]: lightenColor(primaryColor, 50),
2951
+ [`${prefix}-light-7`]: lightenColor(primaryColor, 70),
2952
+ [`${prefix}-light-8`]: lightenColor(primaryColor, 80),
2953
+ [`${prefix}-light-9`]: lightenColor(primaryColor, 90)
2954
+ }
2955
+ }
2956
+
2957
+ /* harmony default export */ var utils_color = ({
2958
+ hexToRgb,
2959
+ hexToRgbObject,
2960
+ rgbToHex,
2961
+ darkenColor,
2962
+ lightenColor,
2963
+ generatePrimaryColorVars,
2964
+ generateXtPrimaryColorVars
2965
+ });
2966
+ // CONCATENATED MODULE: ./src/utils/theme-vars.js
2967
+ /**
2968
+ * 主题 CSS 变量常量
2969
+ * 供 utils/index.js 和 theme/iframe-injector.js 共同使用
2970
+ * 定义 Element UI 组件主题相关的 CSS 变量映射
2971
+ */
2972
+
2973
+
2974
+ /**
2975
+ * 亮色主题 Element UI CSS 变量(关键子集:主色/背景/文字/边框/填充/遮罩)
2976
+ */
2977
+ const LIGHT_THEME_VARS = {
2978
+ '--el-color-primary': '#1890ff',
2979
+ '--el-color-success': '#67c23a',
2980
+ '--el-color-warning': '#e6a23c',
2981
+ '--el-color-danger': '#f56c6c',
2982
+ '--el-color-error': '#f56c6c',
2983
+ '--el-color-info': '#909399',
2984
+ '--el-bg-color': '#ffffff',
2985
+ '--el-bg-color-page': '#f2f3f5',
2986
+ '--el-bg-color-overlay': '#ffffff',
2987
+ '--el-text-color-primary': '#303133',
2988
+ '--el-text-color-regular': '#606266',
2989
+ '--el-text-color-secondary': '#909399',
2990
+ '--el-text-color-placeholder': '#a8abb2',
2991
+ '--el-text-color-disabled': '#c0c4cc',
2992
+ '--el-border-color': '#dcdfe6',
2993
+ '--el-border-color-light': '#e4e7ed',
2994
+ '--el-border-color-lighter': '#ebeef5',
2995
+ '--el-fill-color': '#f0f2f5',
2996
+ '--el-fill-color-light': '#f5f7fa',
2997
+ '--el-fill-color-lighter': '#fafafa',
2998
+ '--el-mask-color': 'rgba(255, 255, 255, .9)',
2999
+ '--el-mask-color-extra-light': 'rgba(255, 255, 255, .3)'
3000
+ }
3001
+
3002
+ /**
3003
+ * 暗色主题 Element UI CSS 变量(对应 LIGHT_THEME_VARS 的暗色版本)
3004
+ */
3005
+ const DARK_THEME_VARS = {
3006
+ '--el-color-primary': '#409eff',
3007
+ '--el-color-success': '#67c23a',
3008
+ '--el-color-warning': '#e6a23c',
3009
+ '--el-color-danger': '#f56c6c',
3010
+ '--el-color-error': '#f56c6c',
3011
+ '--el-color-info': '#909399',
3012
+ '--el-bg-color': '#141414',
3013
+ '--el-bg-color-page': '#0a0a0a',
3014
+ '--el-bg-color-overlay': '#1d1e1f',
3015
+ '--el-text-color-primary': '#E5EAF3',
3016
+ '--el-text-color-regular': '#CFD3DC',
3017
+ '--el-text-color-secondary': '#A3A6AD',
3018
+ '--el-text-color-placeholder': '#8D9095',
3019
+ '--el-text-color-disabled': '#6C6E72',
3020
+ '--el-border-color': '#4C4D4F',
3021
+ '--el-border-color-light': '#414243',
3022
+ '--el-border-color-lighter': '#363637',
3023
+ '--el-fill-color': '#303030',
3024
+ '--el-fill-color-light': '#262727',
3025
+ '--el-fill-color-lighter': '#1D1D1D',
3026
+ '--el-mask-color': 'rgba(0, 0, 0, .8)',
3027
+ '--el-mask-color-extra-light': 'rgba(0, 0, 0, .3)'
3028
+ }
3029
+
3030
+ /**
3031
+ * 品牌色映射
3032
+ * 用于微前端架构中根据品牌标识切换主题主色
3033
+ */
3034
+ const BRAND_COLORS = {
3035
+ water: { light: '#0077be', dark: '#0099cc' },
3036
+ electricity: { light: '#2ecc71', dark: '#27ae60' },
3037
+ gas: { light: '#f39c12', dark: '#e67e22' }
3038
+ }
3039
+
3040
+ /**
3041
+ * 主题存储 key
3042
+ */
3043
+ const THEME_STORAGE_KEY = 'xt-element-ui-theme-config'
3044
+
3045
+ /**
3046
+ * 主题变化事件名
3047
+ */
3048
+ const THEME_CHANGE_EVENT = 'xt-theme-change'
3049
+
3050
+ /**
3051
+ * 将主题相关 CSS 变量应用到任意 DOM 元素
3052
+ * 统一 utils/index.js(主文档)和 iframe-injector.js(iframe)的变量设置逻辑
3053
+ *
3054
+ * @param {HTMLElement} element - 目标元素(通常是 document.documentElement)
3055
+ * @param {Object} config
3056
+ * @param {string} config.theme - 'white' | 'dark'
3057
+ * @param {string} [config.primaryColor] - 主色调 hex
3058
+ * @param {string} [config.brand] - 品牌标识 '' | 'water' | 'electricity' | 'gas'
3059
+ */
3060
+ function applyThemeVars(element, config) {
3061
+ if (!element) return
3062
+
3063
+ const { theme = 'white', primaryColor, brand = '' } = config
3064
+ const style = element.style
3065
+
3066
+ // 1. 设置 data-theme / data-brand 属性
3067
+ element.setAttribute('data-theme', theme)
3068
+ if (brand) {
3069
+ element.setAttribute('data-brand', brand)
3070
+ } else {
3071
+ element.removeAttribute('data-brand')
3072
+ }
3073
+
3074
+ // 2. 应用主题变量(亮色/暗色)
3075
+ const themeVars = theme === 'dark' ? DARK_THEME_VARS : LIGHT_THEME_VARS
3076
+ for (const key in themeVars) {
3077
+ style.setProperty(key, themeVars[key])
3078
+ }
3079
+
3080
+ // 3. 应用主色调变量
3081
+ let color = primaryColor
3082
+ if (brand && BRAND_COLORS[brand]) {
3083
+ color = BRAND_COLORS[brand][theme === 'dark' ? 'dark' : 'light'] || primaryColor
3084
+ }
3085
+ if (color) {
3086
+ const primaryVars = generatePrimaryColorVars(color)
3087
+ for (const key in primaryVars) {
3088
+ style.setProperty(key, primaryVars[key])
3089
+ }
3090
+ }
3091
+ }
3092
+
3093
+ /* harmony default export */ var theme_vars = ({
3094
+ LIGHT_THEME_VARS,
3095
+ DARK_THEME_VARS,
3096
+ BRAND_COLORS,
3097
+ THEME_STORAGE_KEY,
3098
+ THEME_CHANGE_EVENT,
3099
+ applyThemeVars
3100
+ });
2879
3101
  // CONCATENATED MODULE: ./src/utils/index.js
2880
-
2881
-
2882
- const defaultConfig = {
2883
- theme: 'white',
2884
- size: 'medium',
2885
- primaryColor: '#1890ff'
2886
- }
2887
-
2888
- let currentConfig = { ...defaultConfig }
2889
-
2890
- const configChangeListeners = []
2891
-
2892
- const emitConfigChange = function(key, value) {
2893
- configChangeListeners.forEach(listener => {
2894
- listener(key, value)
2895
- })
2896
- }
2897
-
2898
- const getConfig = function() {
2899
- return { ...currentConfig }
2900
- }
2901
-
2902
- const setConfig = function(config) {
2903
- if (typeof config !== 'object' || config === null) {
2904
- console.warn('[XtElementUI] setConfig 必须传入对象参数')
2905
- return
2906
- }
2907
-
2908
- if (config.theme !== undefined) {
2909
- setTheme(config.theme)
2910
- }
2911
- if (config.size !== undefined) {
2912
- setSize(config.size)
2913
- }
2914
- if (config.primaryColor !== undefined) {
2915
- setPrimaryColor(config.primaryColor)
2916
- }
2917
- }
2918
-
2919
- function isBrowser() {
2920
- return typeof window !== 'undefined' && typeof document !== 'undefined'
2921
- }
2922
-
2923
- const setTheme = function(theme) {
2924
- const validThemes = ['white', 'dark']
2925
- if (!validThemes.includes(theme)) {
2926
- console.warn(`[XtElementUI] 无效的主题值: ${theme},可选值: ${validThemes.join(', ')}`)
2927
- return
2928
- }
2929
-
2930
- currentConfig.theme = theme
2931
-
2932
- if (isBrowser()) {
2933
- const root = document.documentElement
2934
-
2935
- if (theme === 'dark') {
2936
- root.setAttribute('data-theme', 'dark')
2937
- } else {
2938
- root.setAttribute('data-theme', theme)
2939
- }
2940
-
2941
- utils.changeAllTheme(currentConfig.theme, currentConfig.size)
2942
- }
2943
-
2944
- emitConfigChange('theme', theme)
2945
- }
2946
-
2947
- const setSize = function(size) {
2948
- const validSizes = ['small', 'medium', 'large']
2949
- if (!validSizes.includes(size)) {
2950
- console.warn(`[XtElementUI] 无效的大小值: ${size},可选值: ${validSizes.join(', ')}`)
2951
- return
2952
- }
2953
-
2954
- currentConfig.size = size
2955
-
2956
- if (isBrowser()) {
2957
- document.documentElement.setAttribute('data-size', size)
2958
- utils.changeAllTheme(currentConfig.theme, currentConfig.size)
2959
- }
2960
-
2961
- emitConfigChange('size', size)
2962
- }
2963
-
2964
- // 将十六进制颜色转换为 RGB 对象
2965
- function hexToRgb(hex) {
2966
- const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex)
2967
- return result ? {
2968
- r: parseInt(result[1], 16),
2969
- g: parseInt(result[2], 16),
2970
- b: parseInt(result[3], 16)
2971
- } : null
2972
- }
2973
-
2974
- // 将 RGB 对象转换为十六进制颜色
2975
- function rgbToHex(r, g, b) {
2976
- return '#' + [r, g, b].map(x => {
2977
- const hex = x.toString(16)
2978
- return hex.length === 1 ? '0' + hex : hex
2979
- }).join('')
2980
- }
2981
-
2982
- // 计算浅色系列(混合白色)
2983
- function lightenColor(hex, percent) {
2984
- const rgb = hexToRgb(hex)
2985
- if (!rgb) return hex
2986
-
2987
- const amount = Math.round(2.55 * percent)
2988
- const r = Math.min(255, rgb.r + amount)
2989
- const g = Math.min(255, rgb.g + amount)
2990
- const b = Math.min(255, rgb.b + amount)
2991
-
2992
- return rgbToHex(r, g, b)
2993
- }
2994
-
2995
- const setPrimaryColor = function(color) {
2996
- const colorRegex = /^#[0-9A-Fa-f]{3}$|^#[0-9A-Fa-f]{6}$|^#[0-9A-Fa-f]{8}$/
2997
- if (!colorRegex.test(color)) {
2998
- console.warn(`[XtElementUI] 无效的颜色值: ${color},请使用十六进制颜色格式,如 #1890ff`)
2999
- return
3000
- }
3001
-
3002
- let validColor = color
3003
- if (color.length === 4) {
3004
- validColor = '#' + color[1] + color[1] + color[2] + color[2] + color[3] + color[3]
3005
- } else if (color.length === 9) {
3006
- validColor = color.substring(0, 7)
3007
- }
3008
-
3009
- currentConfig.primaryColor = validColor
3010
-
3011
- if (isBrowser()) {
3012
- document.documentElement.style.setProperty('--xt-color-primary', validColor)
3013
-
3014
- document.documentElement.style.setProperty('--xt-color-primary-light-3', lightenColor(validColor, 30))
3015
- document.documentElement.style.setProperty('--xt-color-primary-light-5', lightenColor(validColor, 50))
3016
- document.documentElement.style.setProperty('--xt-color-primary-light-7', lightenColor(validColor, 70))
3017
- document.documentElement.style.setProperty('--xt-color-primary-light-8', lightenColor(validColor, 80))
3018
- document.documentElement.style.setProperty('--xt-color-primary-light-9', lightenColor(validColor, 90))
3019
- }
3020
-
3021
- emitConfigChange('primaryColor', validColor)
3022
- }
3023
-
3024
- // 获取当前主题
3025
- const getTheme = function() {
3026
- return currentConfig.theme
3027
- }
3028
-
3029
- // 获取当前字体大小
3030
- const getSize = function() {
3031
- return currentConfig.size
3032
- }
3033
-
3034
- // 获取当前主色调
3035
- const getPrimaryColor = function() {
3036
- return currentConfig.primaryColor
3037
- }
3038
-
3039
- // 重置为默认配置
3040
- const resetConfig = function() {
3041
- setConfig(defaultConfig)
3042
- }
3043
-
3044
- // 监听配置变更
3045
- const onConfigChange = function(listener) {
3046
- if (typeof listener === 'function') {
3047
- configChangeListeners.push(listener)
3048
- return function() {
3049
- const index = configChangeListeners.indexOf(listener)
3050
- if (index > -1) {
3051
- configChangeListeners.splice(index, 1)
3052
- }
3053
- }
3054
- } else {
3055
- console.warn('[XtElementUI] onConfigChange 必须传入函数')
3056
- }
3057
- }
3058
-
3059
- // ==================== 数字格式化 ====================
3060
-
3061
- const formatNumber = function(value, options) {
3062
- if (value === null || value === undefined || value === '') {
3063
- return ''
3064
- }
3065
-
3066
- const num = typeof value === 'string' ? parseFloat(value) : value
3067
- if (isNaN(num)) {
3068
- return String(value)
3069
- }
3070
-
3071
- const opts = Object.assign({
3072
- decimals: 2,
3073
- thousand: true,
3074
- prefix: '',
3075
- suffix: '',
3076
- showSign: false
3077
- }, options || {})
3078
-
3079
- let result = num.toFixed(opts.decimals)
3080
-
3081
- if (opts.thousand) {
3082
- const parts = result.split('.')
3083
- parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',')
3084
- result = parts.join('.')
3085
- }
3086
-
3087
- if (opts.showSign && num > 0) {
3088
- result = '+' + result
3089
- }
3090
-
3091
- return opts.prefix + result + opts.suffix
3092
- }
3093
-
3094
- const formatThousand = function(value, decimals) {
3095
- return formatNumber(value, {
3096
- decimals: decimals != null ? decimals : 2,
3097
- thousand: true
3098
- })
3099
- }
3100
-
3101
- const formatPercent = function(value, decimals) {
3102
- if (value === null || value === undefined || value === '') {
3103
- return ''
3104
- }
3105
- const num = typeof value === 'string' ? parseFloat(value) : value
3106
- if (isNaN(num)) {
3107
- return String(value)
3108
- }
3109
- return formatNumber(num * 100, {
3110
- decimals: decimals != null ? decimals : 2,
3111
- thousand: true,
3112
- suffix: '%'
3113
- })
3114
- }
3115
-
3116
- // ==================== 日期格式化 ====================
3117
-
3118
- function padZero(num, len) {
3119
- len = len || 2
3120
- return String(num).padStart(len, '0')
3121
- }
3122
-
3123
- const formatDate = function(date, format) {
3124
- if (!date) {
3125
- return ''
3126
- }
3127
-
3128
- let d
3129
- if (date instanceof Date) {
3130
- d = date
3131
- } else if (typeof date === 'number') {
3132
- d = new Date(date.toString().length === 10 ? date * 1000 : date)
3133
- } else if (typeof date === 'string') {
3134
- date = date.trim()
3135
- if (/^\d+$/.test(date)) {
3136
- d = new Date(date.length === 10 ? parseInt(date) * 1000 : parseInt(date))
3137
- } else {
3138
- d = new Date(date.replace(/-/g, '/'))
3139
- }
3140
- } else {
3141
- return ''
3142
- }
3143
-
3144
- if (isNaN(d.getTime())) {
3145
- return ''
3146
- }
3147
-
3148
- const fmt = format || 'yyyy-MM-dd'
3149
- const year = d.getFullYear()
3150
- const month = d.getMonth() + 1
3151
- const day = d.getDate()
3152
- const hour = d.getHours()
3153
- const minute = d.getMinutes()
3154
- const second = d.getSeconds()
3155
- const week = d.getDay()
3156
-
3157
- const weekMap = ['日', '一', '二', '三', '四', '五', '六']
3158
-
3159
- return fmt
3160
- .replace('yyyy', year)
3161
- .replace('MM', padZero(month))
3162
- .replace('M', month)
3163
- .replace('dd', padZero(day))
3164
- .replace('d', day)
3165
- .replace('HH', padZero(hour))
3166
- .replace('H', hour)
3167
- .replace('hh', padZero(hour % 12 || 12))
3168
- .replace('h', hour % 12 || 12)
3169
- .replace('mm', padZero(minute))
3170
- .replace('m', minute)
3171
- .replace('ss', padZero(second))
3172
- .replace('s', second)
3173
- .replace('w', weekMap[week])
3174
- .replace('W', '星期' + weekMap[week])
3175
- }
3176
-
3177
- const formatDateTime = function(date, format) {
3178
- return formatDate(date, format || 'yyyy-MM-dd HH:mm:ss')
3179
- }
3180
-
3181
- const formatTime = function(date, format) {
3182
- return formatDate(date, format || 'HH:mm:ss')
3183
- }
3184
-
3185
- const formatRelativeTime = function(date) {
3186
- if (!date) {
3187
- return ''
3188
- }
3189
-
3190
- let d
3191
- if (date instanceof Date) {
3192
- d = date
3193
- } else if (typeof date === 'number') {
3194
- d = new Date(date.toString().length === 10 ? date * 1000 : date)
3195
- } else if (typeof date === 'string') {
3196
- date = date.trim()
3197
- if (/^\d+$/.test(date)) {
3198
- d = new Date(date.length === 10 ? parseInt(date) * 1000 : parseInt(date))
3199
- } else {
3200
- d = new Date(date.replace(/-/g, '/'))
3201
- }
3202
- } else {
3203
- return ''
3204
- }
3205
-
3206
- if (isNaN(d.getTime())) {
3207
- return ''
3208
- }
3209
-
3210
- const now = new Date()
3211
- const diff = now.getTime() - d.getTime()
3212
- const minute = 60 * 1000
3213
- const hour = 60 * minute
3214
- const day = 24 * hour
3215
- const week = 7 * day
3216
- const month = 30 * day
3217
- const year = 365 * day
3218
-
3219
- if (diff < minute) {
3220
- return '刚刚'
3221
- } else if (diff < hour) {
3222
- return Math.floor(diff / minute) + '分钟前'
3223
- } else if (diff < day) {
3224
- return Math.floor(diff / hour) + '小时前'
3225
- } else if (diff < week) {
3226
- return Math.floor(diff / day) + '天前'
3227
- } else if (diff < month) {
3228
- return Math.floor(diff / week) + '周前'
3229
- } else if (diff < year) {
3230
- return Math.floor(diff / month) + '个月前'
3231
- } else {
3232
- return Math.floor(diff / year) + '年前'
3233
- }
3234
- }
3235
-
3236
- // ==================== 金额格式化 ====================
3237
-
3238
- const formatMoney = function(value, options) {
3239
- if (value === null || value === undefined || value === '') {
3240
- return ''
3241
- }
3242
-
3243
- const num = typeof value === 'string' ? parseFloat(value) : value
3244
- if (isNaN(num)) {
3245
- return String(value)
3246
- }
3247
-
3248
- const opts = Object.assign({
3249
- currency: 'CNY',
3250
- decimals: 2,
3251
- prefix: '',
3252
- suffix: '',
3253
- showSign: false
3254
- }, options || {})
3255
-
3256
- const currencySymbols = {
3257
- CNY: '¥',
3258
- USD: '$',
3259
- EUR: '€',
3260
- JPY: '¥',
3261
- GBP: '£',
3262
- AUD: 'A$',
3263
- CAD: 'C$'
3264
- }
3265
-
3266
- let symbol = currencySymbols[opts.currency] || ''
3267
- let formatted = num.toFixed(opts.decimals)
3268
-
3269
- const parts = formatted.split('.')
3270
- parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',')
3271
- formatted = parts.join('.')
3272
-
3273
- if (opts.showSign && num > 0) {
3274
- formatted = '+' + formatted
3275
- }
3276
-
3277
- if (opts.prefix) {
3278
- formatted = opts.prefix + formatted
3279
- }
3280
-
3281
- if (opts.suffix) {
3282
- formatted = formatted + opts.suffix
3283
- }
3284
-
3285
- return symbol + formatted
3286
- }
3287
-
3288
- const formatCNY = function(value, decimals) {
3289
- return formatMoney(value, {
3290
- currency: 'CNY',
3291
- decimals: decimals != null ? decimals : 2
3292
- })
3293
- }
3294
-
3295
- const formatUSD = function(value, decimals) {
3296
- return formatMoney(value, {
3297
- currency: 'USD',
3298
- decimals: decimals != null ? decimals : 2
3299
- })
3300
- }
3301
-
3302
- // ==================== 文件大小格式化 ====================
3303
-
3304
- const formatFileSize = function(bytes) {
3305
- if (bytes === null || bytes === undefined || bytes === '') {
3306
- return ''
3307
- }
3308
-
3309
- const num = typeof bytes === 'string' ? parseFloat(bytes) : bytes
3310
- if (isNaN(num)) {
3311
- return String(bytes)
3312
- }
3313
-
3314
- if (num === 0) {
3315
- return '0 B'
3316
- }
3317
-
3318
- const k = 1024
3319
- const sizes = ['B', 'KB', 'MB', 'GB', 'TB']
3320
- const i = Math.floor(Math.log(num) / Math.log(k))
3321
-
3322
- return parseFloat((num / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]
3323
- }
3324
-
3325
- /* harmony default export */ var src_utils = ({
3326
- setTheme,
3327
- setSize,
3328
- setPrimaryColor,
3329
- getConfig,
3330
- setConfig,
3331
- getTheme,
3332
- getSize,
3333
- getPrimaryColor,
3334
- resetConfig,
3335
- onConfigChange,
3336
- formatNumber,
3337
- formatThousand,
3338
- formatPercent,
3339
- formatDate,
3340
- formatDateTime,
3341
- formatTime,
3342
- formatRelativeTime,
3343
- formatMoney,
3344
- formatCNY,
3345
- formatUSD,
3346
- formatFileSize
3347
- });
3348
3102
 
3103
+
3104
+
3105
+
3106
+ const defaultConfig = {
3107
+ theme: 'white',
3108
+ size: 'medium',
3109
+ primaryColor: '#1890ff'
3110
+ }
3111
+
3112
+ let currentConfig = { ...defaultConfig }
3113
+
3114
+ const configChangeListeners = []
3115
+
3116
+ const emitConfigChange = function(key, value) {
3117
+ configChangeListeners.forEach(listener => {
3118
+ listener(key, value)
3119
+ })
3120
+ }
3121
+
3122
+ const getConfig = function() {
3123
+ return { ...currentConfig }
3124
+ }
3125
+
3126
+ const setConfig = function(config) {
3127
+ if (typeof config !== 'object' || config === null) {
3128
+ console.warn('[XtElementUI] setConfig 必须传入对象参数')
3129
+ return
3130
+ }
3131
+
3132
+ if (config.theme !== undefined) {
3133
+ setTheme(config.theme)
3134
+ }
3135
+ if (config.size !== undefined) {
3136
+ setSize(config.size)
3137
+ }
3138
+ if (config.primaryColor !== undefined) {
3139
+ setPrimaryColor(config.primaryColor)
3140
+ }
3141
+ }
3142
+
3143
+ function isBrowser() {
3144
+ return typeof window !== 'undefined' && typeof document !== 'undefined'
3145
+ }
3146
+
3147
+ /**
3148
+ * 设置主题(亮/暗)
3149
+ * 通过 applyThemeVars 统一设置 --el-* CSS 变量,确保组件库和 Element UI 同步响应
3150
+ * 同时设置 --xt-* CSS 变量供 xt 组件使用
3151
+ */
3152
+ const setTheme = function(theme) {
3153
+ const validThemes = ['white', 'dark']
3154
+ if (!validThemes.includes(theme)) {
3155
+ console.warn(`[XtElementUI] 无效的主题值: ${theme},可选值: ${validThemes.join(', ')}`)
3156
+ return
3157
+ }
3158
+
3159
+ currentConfig.theme = theme
3160
+
3161
+ if (isBrowser()) {
3162
+ const root = document.documentElement
3163
+
3164
+ // 统一通过 applyThemeVars 设置 --el-* 变量
3165
+ applyThemeVars(root, {
3166
+ theme,
3167
+ primaryColor: currentConfig.primaryColor
3168
+ })
3169
+
3170
+ // 同步设置 xt 组件主色变量(--xt-*)
3171
+ const xtVars = generateXtPrimaryColorVars(currentConfig.primaryColor)
3172
+ for (const key in xtVars) {
3173
+ root.style.setProperty(key, xtVars[key])
3174
+ }
3175
+
3176
+ utils.changeAllTheme(currentConfig.theme, currentConfig.size)
3177
+ }
3178
+
3179
+ emitConfigChange('theme', theme)
3180
+ }
3181
+
3182
+ const setSize = function(size) {
3183
+ const validSizes = ['small', 'medium', 'large']
3184
+ if (!validSizes.includes(size)) {
3185
+ console.warn(`[XtElementUI] 无效的大小值: ${size},可选值: ${validSizes.join(', ')}`)
3186
+ return
3187
+ }
3188
+
3189
+ currentConfig.size = size
3190
+
3191
+ if (isBrowser()) {
3192
+ document.documentElement.setAttribute('data-size', size)
3193
+ utils.changeAllTheme(currentConfig.theme, currentConfig.size)
3194
+ }
3195
+
3196
+ emitConfigChange('size', size)
3197
+ }
3198
+
3199
+ const setPrimaryColor = function(color) {
3200
+ const colorRegex = /^#[0-9A-Fa-f]{3}$|^#[0-9A-Fa-f]{6}$|^#[0-9A-Fa-f]{8}$/
3201
+ if (!colorRegex.test(color)) {
3202
+ console.warn(`[XtElementUI] 无效的颜色值: ${color},请使用十六进制颜色格式,如 #1890ff`)
3203
+ return
3204
+ }
3205
+
3206
+ let validColor = color
3207
+ if (color.length === 4) {
3208
+ validColor = '#' + color[1] + color[1] + color[2] + color[2] + color[3] + color[3]
3209
+ } else if (color.length === 9) {
3210
+ validColor = color.substring(0, 7)
3211
+ }
3212
+
3213
+ currentConfig.primaryColor = validColor
3214
+
3215
+ if (isBrowser()) {
3216
+ const root = document.documentElement
3217
+
3218
+ // 统一通过 applyThemeVars 设置 --el-* 主色变量
3219
+ applyThemeVars(root, {
3220
+ theme: currentConfig.theme,
3221
+ primaryColor: validColor
3222
+ })
3223
+
3224
+ // 同步设置 xt 组件主色变量(--xt-*)
3225
+ const xtVars = generateXtPrimaryColorVars(validColor)
3226
+ for (const key in xtVars) {
3227
+ root.style.setProperty(key, xtVars[key])
3228
+ }
3229
+ }
3230
+
3231
+ emitConfigChange('primaryColor', validColor)
3232
+ }
3233
+
3234
+ // 获取当前主题
3235
+ const getTheme = function() {
3236
+ return currentConfig.theme
3237
+ }
3238
+
3239
+ // 获取当前字体大小
3240
+ const getSize = function() {
3241
+ return currentConfig.size
3242
+ }
3243
+
3244
+ // 获取当前主色调
3245
+ const getPrimaryColor = function() {
3246
+ return currentConfig.primaryColor
3247
+ }
3248
+
3249
+ // 重置为默认配置
3250
+ const resetConfig = function() {
3251
+ setConfig(defaultConfig)
3252
+ }
3253
+
3254
+ // 监听配置变更
3255
+ const onConfigChange = function(listener) {
3256
+ if (typeof listener === 'function') {
3257
+ configChangeListeners.push(listener)
3258
+ return function() {
3259
+ const index = configChangeListeners.indexOf(listener)
3260
+ if (index > -1) {
3261
+ configChangeListeners.splice(index, 1)
3262
+ }
3263
+ }
3264
+ } else {
3265
+ console.warn('[XtElementUI] onConfigChange 必须传入函数')
3266
+ }
3267
+ }
3268
+
3269
+ // ==================== 数字格式化 ====================
3270
+
3271
+ const formatNumber = function(value, options) {
3272
+ if (value === null || value === undefined || value === '') {
3273
+ return ''
3274
+ }
3275
+
3276
+ const num = typeof value === 'string' ? parseFloat(value) : value
3277
+ if (isNaN(num)) {
3278
+ return String(value)
3279
+ }
3280
+
3281
+ const opts = Object.assign({
3282
+ decimals: 2,
3283
+ thousand: true,
3284
+ prefix: '',
3285
+ suffix: '',
3286
+ showSign: false
3287
+ }, options || {})
3288
+
3289
+ let result = num.toFixed(opts.decimals)
3290
+
3291
+ if (opts.thousand) {
3292
+ const parts = result.split('.')
3293
+ parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',')
3294
+ result = parts.join('.')
3295
+ }
3296
+
3297
+ if (opts.showSign && num > 0) {
3298
+ result = '+' + result
3299
+ }
3300
+
3301
+ return opts.prefix + result + opts.suffix
3302
+ }
3303
+
3304
+ const formatThousand = function(value, decimals) {
3305
+ return formatNumber(value, {
3306
+ decimals: decimals != null ? decimals : 2,
3307
+ thousand: true
3308
+ })
3309
+ }
3310
+
3311
+ const formatPercent = function(value, decimals) {
3312
+ if (value === null || value === undefined || value === '') {
3313
+ return ''
3314
+ }
3315
+ const num = typeof value === 'string' ? parseFloat(value) : value
3316
+ if (isNaN(num)) {
3317
+ return String(value)
3318
+ }
3319
+ return formatNumber(num * 100, {
3320
+ decimals: decimals != null ? decimals : 2,
3321
+ thousand: true,
3322
+ suffix: '%'
3323
+ })
3324
+ }
3325
+
3326
+ // ==================== 日期格式化 ====================
3327
+
3328
+ function padZero(num, len) {
3329
+ len = len || 2
3330
+ return String(num).padStart(len, '0')
3331
+ }
3332
+
3333
+ const formatDate = function(date, format) {
3334
+ if (!date) {
3335
+ return ''
3336
+ }
3337
+
3338
+ let d
3339
+ if (date instanceof Date) {
3340
+ d = date
3341
+ } else if (typeof date === 'number') {
3342
+ d = new Date(date.toString().length === 10 ? date * 1000 : date)
3343
+ } else if (typeof date === 'string') {
3344
+ date = date.trim()
3345
+ if (/^\d+$/.test(date)) {
3346
+ d = new Date(date.length === 10 ? parseInt(date) * 1000 : parseInt(date))
3347
+ } else {
3348
+ d = new Date(date.replace(/-/g, '/'))
3349
+ }
3350
+ } else {
3351
+ return ''
3352
+ }
3353
+
3354
+ if (isNaN(d.getTime())) {
3355
+ return ''
3356
+ }
3357
+
3358
+ const fmt = format || 'yyyy-MM-dd'
3359
+ const year = d.getFullYear()
3360
+ const month = d.getMonth() + 1
3361
+ const day = d.getDate()
3362
+ const hour = d.getHours()
3363
+ const minute = d.getMinutes()
3364
+ const second = d.getSeconds()
3365
+ const week = d.getDay()
3366
+
3367
+ const weekMap = ['日', '一', '二', '三', '四', '五', '六']
3368
+
3369
+ return fmt
3370
+ .replace('yyyy', year)
3371
+ .replace('MM', padZero(month))
3372
+ .replace('M', month)
3373
+ .replace('dd', padZero(day))
3374
+ .replace('d', day)
3375
+ .replace('HH', padZero(hour))
3376
+ .replace('H', hour)
3377
+ .replace('hh', padZero(hour % 12 || 12))
3378
+ .replace('h', hour % 12 || 12)
3379
+ .replace('mm', padZero(minute))
3380
+ .replace('m', minute)
3381
+ .replace('ss', padZero(second))
3382
+ .replace('s', second)
3383
+ .replace('w', weekMap[week])
3384
+ .replace('W', '星期' + weekMap[week])
3385
+ }
3386
+
3387
+ const formatDateTime = function(date, format) {
3388
+ return formatDate(date, format || 'yyyy-MM-dd HH:mm:ss')
3389
+ }
3390
+
3391
+ const formatTime = function(date, format) {
3392
+ return formatDate(date, format || 'HH:mm:ss')
3393
+ }
3394
+
3395
+ const formatRelativeTime = function(date) {
3396
+ if (!date) {
3397
+ return ''
3398
+ }
3399
+
3400
+ let d
3401
+ if (date instanceof Date) {
3402
+ d = date
3403
+ } else if (typeof date === 'number') {
3404
+ d = new Date(date.toString().length === 10 ? date * 1000 : date)
3405
+ } else if (typeof date === 'string') {
3406
+ date = date.trim()
3407
+ if (/^\d+$/.test(date)) {
3408
+ d = new Date(date.length === 10 ? parseInt(date) * 1000 : parseInt(date))
3409
+ } else {
3410
+ d = new Date(date.replace(/-/g, '/'))
3411
+ }
3412
+ } else {
3413
+ return ''
3414
+ }
3415
+
3416
+ if (isNaN(d.getTime())) {
3417
+ return ''
3418
+ }
3419
+
3420
+ const now = new Date()
3421
+ const diff = now.getTime() - d.getTime()
3422
+ const minute = 60 * 1000
3423
+ const hour = 60 * minute
3424
+ const day = 24 * hour
3425
+ const week = 7 * day
3426
+ const month = 30 * day
3427
+ const year = 365 * day
3428
+
3429
+ if (diff < minute) {
3430
+ return '刚刚'
3431
+ } else if (diff < hour) {
3432
+ return Math.floor(diff / minute) + '分钟前'
3433
+ } else if (diff < day) {
3434
+ return Math.floor(diff / hour) + '小时前'
3435
+ } else if (diff < week) {
3436
+ return Math.floor(diff / day) + '天前'
3437
+ } else if (diff < month) {
3438
+ return Math.floor(diff / week) + '周前'
3439
+ } else if (diff < year) {
3440
+ return Math.floor(diff / month) + '个月前'
3441
+ } else {
3442
+ return Math.floor(diff / year) + '年前'
3443
+ }
3444
+ }
3445
+
3446
+ // ==================== 金额格式化 ====================
3447
+
3448
+ const formatMoney = function(value, options) {
3449
+ if (value === null || value === undefined || value === '') {
3450
+ return ''
3451
+ }
3452
+
3453
+ const num = typeof value === 'string' ? parseFloat(value) : value
3454
+ if (isNaN(num)) {
3455
+ return String(value)
3456
+ }
3457
+
3458
+ const opts = Object.assign({
3459
+ currency: 'CNY',
3460
+ decimals: 2,
3461
+ prefix: '',
3462
+ suffix: '',
3463
+ showSign: false
3464
+ }, options || {})
3465
+
3466
+ const currencySymbols = {
3467
+ CNY: '¥',
3468
+ USD: '$',
3469
+ EUR: '€',
3470
+ JPY: '¥',
3471
+ GBP: '£',
3472
+ AUD: 'A$',
3473
+ CAD: 'C$'
3474
+ }
3475
+
3476
+ let symbol = currencySymbols[opts.currency] || ''
3477
+ let formatted = num.toFixed(opts.decimals)
3478
+
3479
+ const parts = formatted.split('.')
3480
+ parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',')
3481
+ formatted = parts.join('.')
3482
+
3483
+ if (opts.showSign && num > 0) {
3484
+ formatted = '+' + formatted
3485
+ }
3486
+
3487
+ if (opts.prefix) {
3488
+ formatted = opts.prefix + formatted
3489
+ }
3490
+
3491
+ if (opts.suffix) {
3492
+ formatted = formatted + opts.suffix
3493
+ }
3494
+
3495
+ return symbol + formatted
3496
+ }
3497
+
3498
+ const formatCNY = function(value, decimals) {
3499
+ return formatMoney(value, {
3500
+ currency: 'CNY',
3501
+ decimals: decimals != null ? decimals : 2
3502
+ })
3503
+ }
3504
+
3505
+ const formatUSD = function(value, decimals) {
3506
+ return formatMoney(value, {
3507
+ currency: 'USD',
3508
+ decimals: decimals != null ? decimals : 2
3509
+ })
3510
+ }
3511
+
3512
+ // ==================== 文件大小格式化 ====================
3513
+
3514
+ const formatFileSize = function(bytes) {
3515
+ if (bytes === null || bytes === undefined || bytes === '') {
3516
+ return ''
3517
+ }
3518
+
3519
+ const num = typeof bytes === 'string' ? parseFloat(bytes) : bytes
3520
+ if (isNaN(num)) {
3521
+ return String(bytes)
3522
+ }
3523
+
3524
+ if (num === 0) {
3525
+ return '0 B'
3526
+ }
3527
+
3528
+ const k = 1024
3529
+ const sizes = ['B', 'KB', 'MB', 'GB', 'TB']
3530
+ const i = Math.floor(Math.log(num) / Math.log(k))
3531
+
3532
+ return parseFloat((num / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]
3533
+ }
3534
+
3535
+ /* harmony default export */ var src_utils = ({
3536
+ setTheme,
3537
+ setSize,
3538
+ setPrimaryColor,
3539
+ getConfig,
3540
+ setConfig,
3541
+ getTheme,
3542
+ getSize,
3543
+ getPrimaryColor,
3544
+ resetConfig,
3545
+ onConfigChange,
3546
+ formatNumber,
3547
+ formatThousand,
3548
+ formatPercent,
3549
+ formatDate,
3550
+ formatDateTime,
3551
+ formatTime,
3552
+ formatRelativeTime,
3553
+ formatMoney,
3554
+ formatCNY,
3555
+ formatUSD,
3556
+ formatFileSize
3557
+ });
3349
3558
  // EXTERNAL MODULE: ./src/components/xt-button/style/index.scss
3350
3559
  var xt_button_style = __webpack_require__("0ba5");
3351
3560
 
3352
- // 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
3561
+ // 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
3353
3562
  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)
3354
3563
  }
3355
3564
  var staticRenderFns = []
@@ -3458,7 +3667,7 @@ xt_button.install = function (Vue) {
3458
3667
  // EXTERNAL MODULE: ./src/components/xt-input/style/index.scss
3459
3668
  var xt_input_style = __webpack_require__("0563");
3460
3669
 
3461
- // 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
3670
+ // 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
3462
3671
  var xt_inputvue_type_template_id_6a24ab05_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"xt-input",class:[
3463
3672
  _vm.size ? 'xt-input--' + _vm.size : '',
3464
3673
  { 'is-disabled': _vm.disabled },
@@ -3812,7 +4021,7 @@ xt_input.install = function (Vue) {
3812
4021
  // EXTERNAL MODULE: ./src/components/xt-flex-box/style/index.scss
3813
4022
  var xt_flex_box_style = __webpack_require__("5820");
3814
4023
 
3815
- // 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
4024
+ // 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
3816
4025
  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)
3817
4026
  }
3818
4027
  var xt_flex_boxvue_type_template_id_5dab0d2a_staticRenderFns = []
@@ -3885,7 +4094,7 @@ xt_flex_box.install = function (Vue) {
3885
4094
  // EXTERNAL MODULE: ./src/components/xt-card/style/index.scss
3886
4095
  var xt_card_style = __webpack_require__("419e");
3887
4096
 
3888
- // 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
4097
+ // 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
3889
4098
  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)
3890
4099
  }
3891
4100
  var xt_cardvue_type_template_id_27e108a6_staticRenderFns = []
@@ -3983,7 +4192,7 @@ xt_card.install = function (Vue) {
3983
4192
  // EXTERNAL MODULE: ./src/components/xt-card-item/style/index.scss
3984
4193
  var xt_card_item_style = __webpack_require__("c1e7");
3985
4194
 
3986
- // 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
4195
+ // 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
3987
4196
  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)
3988
4197
  }
3989
4198
  var xt_card_itemvue_type_template_id_d091942c_staticRenderFns = []
@@ -4446,7 +4655,7 @@ xt_config_provider.install = function (Vue) {
4446
4655
  // EXTERNAL MODULE: ./src/components/xt-text/style/index.scss
4447
4656
  var xt_text_style = __webpack_require__("86ae");
4448
4657
 
4449
- // 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
4658
+ // 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
4450
4659
  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:[
4451
4660
  _vm.type ? 'xt-text--' + _vm.type : '',
4452
4661
  'xt-text--' + _vm.size,
@@ -4755,7 +4964,7 @@ xt_text.install = function (Vue) {
4755
4964
  // EXTERNAL MODULE: ./src/components/xt-time/style/index.scss
4756
4965
  var xt_time_style = __webpack_require__("6c9e");
4757
4966
 
4758
- // 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
4967
+ // 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
4759
4968
  var xt_timevue_type_template_id_d29acf2c_render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',{staticClass:"xt-time",class:[
4760
4969
  _vm.typeColor ? 'xt-time--' + _vm.typeColor : '',
4761
4970
  'xt-time--' + _vm.size,
@@ -5080,7 +5289,7 @@ xt_time.install = function (Vue) {
5080
5289
  // EXTERNAL MODULE: ./src/components/xt-step-price/style/index.scss
5081
5290
  var xt_step_price_style = __webpack_require__("fd93");
5082
5291
 
5083
- // 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
5292
+ // 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
5084
5293
  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()])
5085
5294
  }
5086
5295
  var xt_step_pricevue_type_template_id_0cb332f3_staticRenderFns = []
@@ -5088,7 +5297,7 @@ var xt_step_pricevue_type_template_id_0cb332f3_staticRenderFns = []
5088
5297
 
5089
5298
  // CONCATENATED MODULE: ./src/components/xt-step-price/index.vue?vue&type=template&id=0cb332f3
5090
5299
 
5091
- // 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
5300
+ // 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
5092
5301
  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)
5093
5302
  }
5094
5303
  var xt_step_price_itemvue_type_template_id_4d5bb3b1_staticRenderFns = []
@@ -5658,7 +5867,7 @@ xt_step_price_item.install = function (Vue) {
5658
5867
  // EXTERNAL MODULE: ./src/components/xt-map/style/index.scss
5659
5868
  var xt_map_style = __webpack_require__("c759");
5660
5869
 
5661
- // 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
5870
+ // 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
5662
5871
  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)
5663
5872
  }
5664
5873
  var xt_mapvue_type_template_id_0c15823e_staticRenderFns = []
@@ -7376,7 +7585,7 @@ xt_map.install = function (Vue) {
7376
7585
  /* harmony default export */ var components_xt_map = (xt_map);
7377
7586
 
7378
7587
 
7379
- // 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
7588
+ // 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
7380
7589
  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)
7381
7590
  }
7382
7591
  var providervue_type_template_id_16f243b0_scoped_true_staticRenderFns = []
@@ -7583,7 +7792,7 @@ xt_map_provider.install = function (Vue) {
7583
7792
  // EXTERNAL MODULE: ./src/components/xt-grid-box/style/index.scss
7584
7793
  var xt_grid_box_style = __webpack_require__("4202");
7585
7794
 
7586
- // 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
7795
+ // 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
7587
7796
  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)
7588
7797
  }
7589
7798
  var xt_grid_boxvue_type_template_id_67e197c4_staticRenderFns = []
@@ -7754,7 +7963,7 @@ xt_grid_box.install = function (Vue) {
7754
7963
  /* harmony default export */ var components_xt_grid_box = (xt_grid_box);
7755
7964
 
7756
7965
 
7757
- // 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
7966
+ // 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
7758
7967
  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)
7759
7968
  }
7760
7969
  var xt_grid_itemvue_type_template_id_160dc1ff_scoped_true_staticRenderFns = []
@@ -7897,7 +8106,7 @@ xt_grid_item.install = function (Vue) {
7897
8106
  // EXTERNAL MODULE: ./src/components/xt-progress/style/index.scss
7898
8107
  var xt_progress_style = __webpack_require__("2e12");
7899
8108
 
7900
- // 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
8109
+ // 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
7901
8110
  var xt_progressvue_type_template_id_76c95a92_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"xt-progress",class:[
7902
8111
  `xt-progress--${_vm.type}`,
7903
8112
  `xt-progress--${_vm.size}`
@@ -7994,7 +8203,7 @@ xt_progress.install = function(Vue) {
7994
8203
 
7995
8204
  /* harmony default export */ var components_xt_progress = (xt_progress);
7996
8205
 
7997
- // 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
8206
+ // 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
7998
8207
  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)
7999
8208
  }
8000
8209
  var xt_tab_panevue_type_template_id_77ab429e_staticRenderFns = []
@@ -8083,7 +8292,7 @@ xt_tab_pane.install = function(Vue) {
8083
8292
  // EXTERNAL MODULE: ./src/components/xt-tabs/style/index.scss
8084
8293
  var xt_tabs_style = __webpack_require__("e8d2");
8085
8294
 
8086
- // 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
8295
+ // 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
8087
8296
  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:[
8088
8297
  `xt-tabs--${_vm.actualPosition}`,
8089
8298
  { 'xt-tabs--card': _vm.type === 'card' },
@@ -8294,7 +8503,7 @@ xt_tabs.install = function(Vue) {
8294
8503
  // EXTERNAL MODULE: ./src/components/xt-badge/style/index.scss
8295
8504
  var xt_badge_style = __webpack_require__("bf3f");
8296
8505
 
8297
- // 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
8506
+ // 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
8298
8507
  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()])
8299
8508
  }
8300
8509
  var xt_badgevue_type_template_id_3f0a6b4e_staticRenderFns = []
@@ -8402,7 +8611,7 @@ xt_badge.install = function(Vue) {
8402
8611
  // EXTERNAL MODULE: ./src/components/xt-date-picker/style/index.scss
8403
8612
  var xt_date_picker_style = __webpack_require__("c828");
8404
8613
 
8405
- // 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
8614
+ // 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
8406
8615
  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)])
8407
8616
  }
8408
8617
  var xt_date_pickervue_type_template_id_7f82fa36_staticRenderFns = []
@@ -8635,7 +8844,7 @@ xt_date_picker.install = function (Vue) {
8635
8844
 
8636
8845
  /* harmony default export */ var components_xt_date_picker = (xt_date_picker);
8637
8846
 
8638
- // 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
8847
+ // 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
8639
8848
  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()
8640
8849
  }
8641
8850
  var xt_chartvue_type_template_id_fcb32ff2_staticRenderFns = []
@@ -8643,7 +8852,7 @@ var xt_chartvue_type_template_id_fcb32ff2_staticRenderFns = []
8643
8852
 
8644
8853
  // CONCATENATED MODULE: ./src/components/xt-chart/index.vue?vue&type=template&id=fcb32ff2
8645
8854
 
8646
- // 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
8855
+ // 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
8647
8856
  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)})
8648
8857
  }
8649
8858
  var XtBarvue_type_template_id_5705d26c_scoped_true_staticRenderFns = []
@@ -8899,7 +9108,7 @@ var XtBar_component = Object(componentNormalizer["a" /* default */])(
8899
9108
  )
8900
9109
 
8901
9110
  /* harmony default export */ var XtBar = (XtBar_component.exports);
8902
- // 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
9111
+ // 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
8903
9112
  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)})
8904
9113
  }
8905
9114
  var XtLinevue_type_template_id_ee5ba2d8_scoped_true_staticRenderFns = []
@@ -9107,7 +9316,7 @@ var XtLine_component = Object(componentNormalizer["a" /* default */])(
9107
9316
  )
9108
9317
 
9109
9318
  /* harmony default export */ var XtLine = (XtLine_component.exports);
9110
- // 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
9319
+ // 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
9111
9320
  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)})
9112
9321
  }
9113
9322
  var XtPievue_type_template_id_504b3110_scoped_true_staticRenderFns = []
@@ -9329,7 +9538,7 @@ var XtPie_component = Object(componentNormalizer["a" /* default */])(
9329
9538
  )
9330
9539
 
9331
9540
  /* harmony default export */ var XtPie = (XtPie_component.exports);
9332
- // 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
9541
+ // 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
9333
9542
  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)})
9334
9543
  }
9335
9544
  var XtMultivue_type_template_id_2957321d_scoped_true_staticRenderFns = []
@@ -9796,7 +10005,7 @@ xt_chart.install = function (Vue) {
9796
10005
  // EXTERNAL MODULE: ./src/components/xt-icon/style/index.scss
9797
10006
  var xt_icon_style = __webpack_require__("1f11");
9798
10007
 
9799
- // 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
10008
+ // 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
9800
10009
  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)
9801
10010
  }
9802
10011
  var xt_iconvue_type_template_id_0e301b72_scoped_true_staticRenderFns = []
@@ -9975,7 +10184,7 @@ xt_icon.install = function (Vue) {
9975
10184
 
9976
10185
  /* harmony default export */ var components_xt_icon = (xt_icon);
9977
10186
 
9978
- // 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
10187
+ // 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
9979
10188
  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()])
9980
10189
  }
9981
10190
  var xt_tablevue_type_template_id_39458c28_scoped_true_staticRenderFns = []
@@ -10029,7 +10238,7 @@ var XtTableCell_component = Object(componentNormalizer["a" /* default */])(
10029
10238
  )
10030
10239
 
10031
10240
  /* harmony default export */ var XtTableCell = (XtTableCell_component.exports);
10032
- // 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
10241
+ // 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
10033
10242
  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)
10034
10243
  }
10035
10244
  var VirtualElTablevue_type_template_id_01f7dcee_scoped_true_staticRenderFns = []
@@ -10722,43 +10931,370 @@ var xt_tablevue_type_style_index_0_id_39458c28_prod_scoped_true_lang_css = __web
10722
10931
 
10723
10932
  /* normalize component */
10724
10933
 
10725
- var xt_table_component = Object(componentNormalizer["a" /* default */])(
10726
- components_xt_tablevue_type_script_lang_js,
10727
- xt_tablevue_type_template_id_39458c28_scoped_true_render,
10728
- xt_tablevue_type_template_id_39458c28_scoped_true_staticRenderFns,
10934
+ var xt_table_component = Object(componentNormalizer["a" /* default */])(
10935
+ components_xt_tablevue_type_script_lang_js,
10936
+ xt_tablevue_type_template_id_39458c28_scoped_true_render,
10937
+ xt_tablevue_type_template_id_39458c28_scoped_true_staticRenderFns,
10938
+ false,
10939
+ null,
10940
+ "39458c28",
10941
+ null
10942
+
10943
+ )
10944
+
10945
+ /* harmony default export */ var xt_table = (xt_table_component.exports);
10946
+ // CONCATENATED MODULE: ./src/components/xt-table/index.js
10947
+
10948
+
10949
+ xt_table.install = function (Vue) {
10950
+ Vue.component(xt_table.name, xt_table)
10951
+ }
10952
+
10953
+ /* harmony default export */ var components_xt_table = (xt_table);
10954
+
10955
+ // 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
10956
+ 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)
10957
+ }
10958
+ var xt_listvue_type_template_id_084d1476_scoped_true_staticRenderFns = []
10959
+
10960
+
10961
+ // CONCATENATED MODULE: ./src/components/xt-list/index.vue?vue&type=template&id=084d1476&scoped=true
10962
+
10963
+ // EXTERNAL MODULE: ./src/components/xt-scroll/style/index.scss
10964
+ var xt_scroll_style = __webpack_require__("f699");
10965
+
10966
+ // 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
10967
+ 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()])])
10968
+ }
10969
+ var xt_scrollvue_type_template_id_74170e40_staticRenderFns = []
10970
+
10971
+
10972
+ // CONCATENATED MODULE: ./src/components/xt-scroll/index.vue?vue&type=template&id=74170e40
10973
+
10974
+ // 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
10975
+
10976
+ /* harmony default export */ var xt_scrollvue_type_script_lang_js = ({
10977
+ name: 'XtScroll',
10978
+
10979
+ props: {
10980
+ // ========== 虚拟滚动配置 ==========
10981
+ /** 是否启用虚拟滚动 */
10982
+ vScroll: { type: Boolean, default: false },
10983
+ /** 数据源 */
10984
+ data: { type: Array, default: () => [] },
10985
+ /** 每个 item 的固定尺寸(px),纵向为高度,横向为宽度 */
10986
+ itemSize: { type: Number, default: 50 },
10987
+ /** item 的唯一键字段名 */
10988
+ keyField: { type: String, default: 'id' },
10989
+ /** 预渲染缓冲区大小(item 数量) */
10990
+ bufferSize: { type: Number, default: 5 },
10991
+ /** 虚拟滚动方向 */
10992
+ scrollDirection: {
10993
+ type: String,
10994
+ default: 'vertical',
10995
+ validator: (v) => ['vertical', 'horizontal'].includes(v)
10996
+ },
10997
+ /** item 的自定义 CSS 类名 */
10998
+ itemClassName: { type: String, default: '' },
10999
+
11000
+ // ========== 容器尺寸 ==========
11001
+ height: { type: [Number, String], default: '' },
11002
+ maxHeight: { type: [Number, String], default: '' },
11003
+ width: { type: [Number, String], default: '' },
11004
+ maxWidth: { type: [Number, String], default: '' },
11005
+
11006
+ // ========== 状态 ==========
11007
+ loading: { type: Boolean, default: false },
11008
+ emptyText: { type: String, default: '暂无数据' },
11009
+
11010
+ // ========== 加载更多 ==========
11011
+ loadMore: { type: Boolean, default: false },
11012
+ loadMoreText: { type: String, default: '加载更多' },
11013
+ loadMoreLoading: { type: Boolean, default: false }
11014
+ },
11015
+
11016
+ data() {
11017
+ return {
11018
+ scrollPos: 0,
11019
+ containerSize: 0,
11020
+ resizeObserver: null,
11021
+ rafId: null
11022
+ }
11023
+ },
11024
+
11025
+ computed: {
11026
+ containerStyle() {
11027
+ const style = {}
11028
+ if (this.height) {
11029
+ style.height = typeof this.height === 'number' ? this.height + 'px' : this.height
11030
+ }
11031
+ if (this.maxHeight) {
11032
+ style.maxHeight = typeof this.maxHeight === 'number' ? this.maxHeight + 'px' : this.maxHeight
11033
+ }
11034
+ if (this.width) {
11035
+ style.width = typeof this.width === 'number' ? this.width + 'px' : this.width
11036
+ }
11037
+ if (this.maxWidth) {
11038
+ style.maxWidth = typeof this.maxWidth === 'number' ? this.maxWidth + 'px' : this.maxWidth
11039
+ }
11040
+ return style
11041
+ },
11042
+
11043
+ virtualWrapperStyle() {
11044
+ const style = {}
11045
+ if (this.scrollDirection === 'horizontal') {
11046
+ style.height = '100%'
11047
+ }
11048
+ return style
11049
+ },
11050
+
11051
+ itemStyle() {
11052
+ return this.scrollDirection === 'vertical'
11053
+ ? { height: this.itemSize + 'px' }
11054
+ : { width: this.itemSize + 'px', display: 'inline-block' }
11055
+ },
11056
+
11057
+ /** 数据总条数 */
11058
+ dataCount() {
11059
+ return (this.data && this.data.length) || 0
11060
+ },
11061
+
11062
+ /** 总滚动尺寸 */
11063
+ totalSize() {
11064
+ return this.dataCount * this.itemSize
11065
+ },
11066
+
11067
+ /** 虚拟滚动:可见范围起始索引 */
11068
+ visibleStartIndex() {
11069
+ if (!this.vScroll) return 0
11070
+ const start = Math.floor(this.scrollPos / this.itemSize)
11071
+ return Math.max(0, start - this.bufferSize)
11072
+ },
11073
+
11074
+ /** 虚拟滚动:可见范围结束索引 */
11075
+ visibleEndIndex() {
11076
+ if (!this.vScroll) return this.dataCount
11077
+ const visibleCount = Math.ceil(this.containerSize / this.itemSize)
11078
+ const end = Math.ceil(this.scrollPos / this.itemSize) + visibleCount
11079
+ return Math.min(this.dataCount, end + this.bufferSize)
11080
+ },
11081
+
11082
+ /** 可见数据 */
11083
+ visibleData() {
11084
+ if (!this.vScroll || !this.data) return this.data || []
11085
+ return this.data.slice(this.visibleStartIndex, this.visibleEndIndex)
11086
+ },
11087
+
11088
+ /** 偏移量(px) */
11089
+ offsetStart() {
11090
+ return this.visibleStartIndex * this.itemSize
11091
+ },
11092
+
11093
+ /** 是否显示加载更多 */
11094
+ showLoadMore() {
11095
+ if (!this.loadMore || !this.dataCount) return false
11096
+ if (this.scrollDirection === 'vertical') {
11097
+ return this.scrollPos + this.containerSize >= this.totalSize - this.itemSize * 2
11098
+ }
11099
+ return false
11100
+ }
11101
+ },
11102
+
11103
+ watch: {
11104
+ data: {
11105
+ handler() {
11106
+ this.$nextTick(() => {
11107
+ this.updateContainerSize()
11108
+ })
11109
+ }
11110
+ },
11111
+ vScroll(val) {
11112
+ if (val) {
11113
+ this.$nextTick(() => {
11114
+ this.updateContainerSize()
11115
+ this.bindResizeObserver()
11116
+ })
11117
+ }
11118
+ }
11119
+ },
11120
+
11121
+ mounted() {
11122
+ this.$nextTick(() => {
11123
+ this.updateContainerSize()
11124
+ if (this.vScroll) {
11125
+ this.bindResizeObserver()
11126
+ }
11127
+ })
11128
+ },
11129
+
11130
+ beforeDestroy() {
11131
+ this.unbindResizeObserver()
11132
+ if (this.rafId && typeof cancelAnimationFrame !== 'undefined') {
11133
+ cancelAnimationFrame(this.rafId)
11134
+ this.rafId = null
11135
+ }
11136
+ },
11137
+
11138
+ methods: {
11139
+ // ========== 虚拟滚动 ==========
11140
+ onScroll() {
11141
+ const wrap = this.$refs.scrollWrap
11142
+ if (!wrap) return
11143
+
11144
+ const pos = this.scrollDirection === 'vertical' ? wrap.scrollTop : wrap.scrollLeft
11145
+ this.scrollPos = pos
11146
+
11147
+ // 对外 emit scroll 事件,传递 scrollTop/scrollLeft 方便父组件使用
11148
+ this.$emit('scroll', {
11149
+ scrollTop: wrap.scrollTop,
11150
+ scrollLeft: wrap.scrollLeft
11151
+ })
11152
+
11153
+ if (this.rafId) return
11154
+ if (typeof requestAnimationFrame === 'undefined') return
11155
+ this.rafId = requestAnimationFrame(() => {
11156
+ this.$forceUpdate()
11157
+ this.rafId = null
11158
+ })
11159
+ },
11160
+
11161
+ getItemKey(item, index) {
11162
+ if (item && typeof item === 'object' && this.keyField && item[this.keyField] != null) {
11163
+ return item[this.keyField]
11164
+ }
11165
+ return `vitem_${this.visibleStartIndex + index}`
11166
+ },
11167
+
11168
+ getOriginalIndex(index) {
11169
+ return this.visibleStartIndex + index
11170
+ },
11171
+
11172
+ // ========== 容器尺寸 ==========
11173
+ updateContainerSize() {
11174
+ const wrap = this.$refs.scrollWrap
11175
+ if (!wrap) return
11176
+
11177
+ this.containerSize = this.scrollDirection === 'vertical'
11178
+ ? wrap.clientHeight
11179
+ : wrap.clientWidth
11180
+ },
11181
+
11182
+ bindResizeObserver() {
11183
+ if (typeof ResizeObserver === 'undefined') return
11184
+ this.unbindResizeObserver()
11185
+
11186
+ const wrap = this.$refs.scrollWrap
11187
+ if (!wrap) return
11188
+
11189
+ this.resizeObserver = new ResizeObserver(() => {
11190
+ this.updateContainerSize()
11191
+ })
11192
+ this.resizeObserver.observe(wrap)
11193
+ },
11194
+
11195
+ unbindResizeObserver() {
11196
+ if (this.resizeObserver) {
11197
+ this.resizeObserver.disconnect()
11198
+ this.resizeObserver = null
11199
+ }
11200
+ },
11201
+
11202
+ // ========== 加载更多 ==========
11203
+ onLoadMore() {
11204
+ this.$emit('load-more')
11205
+ },
11206
+
11207
+ // ========== 对外暴露方法 ==========
11208
+ /** 获取原生滚动容器 DOM 元素 */
11209
+ getScrollContainer() {
11210
+ return this.$refs.scrollWrap
11211
+ },
11212
+
11213
+ /** 滚动到指定位置 */
11214
+ scrollTo(pos, behavior) {
11215
+ const wrap = this.$refs.scrollWrap
11216
+ if (!wrap) return
11217
+
11218
+ const opts = behavior && typeof behavior === 'string'
11219
+ ? { behavior }
11220
+ : { behavior: 'smooth' }
11221
+
11222
+ if (this.scrollDirection === 'vertical') {
11223
+ wrap.scrollTo({ top: pos, ...opts })
11224
+ } else {
11225
+ wrap.scrollTo({ left: pos, ...opts })
11226
+ }
11227
+ },
11228
+
11229
+ /** 滚动到指定索引的 item */
11230
+ scrollToItem(index) {
11231
+ const pos = index * this.itemSize
11232
+ this.scrollTo(pos)
11233
+ },
11234
+
11235
+ /** 滚动到顶部/左侧 */
11236
+ scrollToStart() {
11237
+ this.scrollTo(0)
11238
+ },
11239
+
11240
+ /** 滚动到底部/右侧 */
11241
+ scrollToEnd() {
11242
+ this.scrollTo(this.totalSize)
11243
+ },
11244
+
11245
+ /** 获取当前滚动位置 */
11246
+ getScrollPos() {
11247
+ return this.scrollPos
11248
+ }
11249
+ }
11250
+ });
11251
+
11252
+ // CONCATENATED MODULE: ./src/components/xt-scroll/index.vue?vue&type=script&lang=js
11253
+ /* harmony default export */ var components_xt_scrollvue_type_script_lang_js = (xt_scrollvue_type_script_lang_js);
11254
+ // CONCATENATED MODULE: ./src/components/xt-scroll/index.vue
11255
+
11256
+
11257
+
11258
+
11259
+
11260
+ /* normalize component */
11261
+
11262
+ var xt_scroll_component = Object(componentNormalizer["a" /* default */])(
11263
+ components_xt_scrollvue_type_script_lang_js,
11264
+ xt_scrollvue_type_template_id_74170e40_render,
11265
+ xt_scrollvue_type_template_id_74170e40_staticRenderFns,
10729
11266
  false,
10730
11267
  null,
10731
- "39458c28",
11268
+ null,
10732
11269
  null
10733
11270
 
10734
11271
  )
10735
11272
 
10736
- /* harmony default export */ var xt_table = (xt_table_component.exports);
10737
- // CONCATENATED MODULE: ./src/components/xt-table/index.js
10738
-
10739
-
10740
- xt_table.install = function (Vue) {
10741
- Vue.component(xt_table.name, xt_table)
10742
- }
10743
-
10744
- /* harmony default export */ var components_xt_table = (xt_table);
11273
+ /* harmony default export */ var xt_scroll = (xt_scroll_component.exports);
11274
+ // CONCATENATED MODULE: ./src/components/xt-scroll/index.js
11275
+
10745
11276
 
10746
- // 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
10747
- 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()])
10748
- }
10749
- var xt_listvue_type_template_id_53c7db00_scoped_true_staticRenderFns = []
10750
11277
 
11278
+ xt_scroll.install = function (Vue) {
11279
+ Vue.component(xt_scroll.name, xt_scroll)
11280
+ }
10751
11281
 
10752
- // CONCATENATED MODULE: ./src/components/xt-list/index.vue?vue&type=template&id=53c7db00&scoped=true
11282
+ /* harmony default export */ var components_xt_scroll = (xt_scroll);
10753
11283
 
10754
11284
  // 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
10755
11285
 
11286
+
11287
+
10756
11288
  const CARD_ITEM_HEIGHT = 160
10757
11289
  const GROUP_HEADER_HEIGHT = 44
10758
11290
 
10759
11291
  /* harmony default export */ var xt_listvue_type_script_lang_js = ({
10760
11292
  name: 'XtList',
10761
11293
 
11294
+ components: {
11295
+ XtScroll: components_xt_scroll
11296
+ },
11297
+
10762
11298
  props: {
10763
11299
  data: { type: Array, default: () => [] },
10764
11300
  // 分组配置
@@ -11088,9 +11624,10 @@ const GROUP_HEADER_HEIGHT = 44
11088
11624
  return group._items.indexOf(item)
11089
11625
  },
11090
11626
 
11091
- onScroll() {
11627
+ onScroll(e) {
11092
11628
  if (!this.virtualScroll) return
11093
- this.scrollTop = this.$refs.scrollContainer.scrollTop
11629
+ // xt-scroll 传递的是 { scrollTop, scrollLeft } 对象
11630
+ this.scrollTop = e && e.scrollTop != null ? e.scrollTop : 0
11094
11631
  if (this.rafId) return
11095
11632
  if (typeof requestAnimationFrame === 'undefined') return
11096
11633
  this.rafId = requestAnimationFrame(() => {
@@ -11101,18 +11638,22 @@ const GROUP_HEADER_HEIGHT = 44
11101
11638
 
11102
11639
  updateContainerHeight() {
11103
11640
  if (this.$refs.scrollContainer) {
11104
- this.containerHeight = this.$refs.scrollContainer.clientHeight
11641
+ const scrollCmp = this.$refs.scrollContainer
11642
+ const wrap = scrollCmp.getScrollContainer && scrollCmp.getScrollContainer()
11643
+ this.containerHeight = wrap ? wrap.clientHeight : 0
11105
11644
  }
11106
11645
  },
11107
11646
 
11108
11647
  bindResizeObserver() {
11109
11648
  if (typeof ResizeObserver === 'undefined') return
11110
- const container = this.$refs.scrollContainer
11111
- if (!container) return
11649
+ const scrollCmp = this.$refs.scrollContainer
11650
+ if (!scrollCmp) return
11651
+ const wrap = scrollCmp.getScrollContainer && scrollCmp.getScrollContainer()
11652
+ if (!wrap) return
11112
11653
  this.resizeObserver = new ResizeObserver(() => {
11113
11654
  this.updateContainerHeight()
11114
11655
  })
11115
- this.resizeObserver.observe(container)
11656
+ this.resizeObserver.observe(wrap)
11116
11657
  },
11117
11658
 
11118
11659
  unbindResizeObserver() {
@@ -11152,8 +11693,8 @@ const GROUP_HEADER_HEIGHT = 44
11152
11693
 
11153
11694
  // ========== 对外暴露方法 ==========
11154
11695
  scrollToTop() {
11155
- if (this.$refs.scrollContainer) {
11156
- this.$refs.scrollContainer.scrollTo({ top: 0, behavior: 'smooth' })
11696
+ if (this.$refs.scrollContainer && this.$refs.scrollContainer.scrollToStart) {
11697
+ this.$refs.scrollContainer.scrollToStart()
11157
11698
  }
11158
11699
  },
11159
11700
 
@@ -11183,8 +11724,8 @@ const GROUP_HEADER_HEIGHT = 44
11183
11724
 
11184
11725
  // CONCATENATED MODULE: ./src/components/xt-list/index.vue?vue&type=script&lang=js
11185
11726
  /* harmony default export */ var components_xt_listvue_type_script_lang_js = (xt_listvue_type_script_lang_js);
11186
- // EXTERNAL MODULE: ./src/components/xt-list/index.vue?vue&type=style&index=0&id=53c7db00&prod&scoped=true&lang=css
11187
- var xt_listvue_type_style_index_0_id_53c7db00_prod_scoped_true_lang_css = __webpack_require__("732a");
11727
+ // EXTERNAL MODULE: ./src/components/xt-list/index.vue?vue&type=style&index=0&id=084d1476&prod&scoped=true&lang=css
11728
+ var xt_listvue_type_style_index_0_id_084d1476_prod_scoped_true_lang_css = __webpack_require__("52fd");
11188
11729
 
11189
11730
  // CONCATENATED MODULE: ./src/components/xt-list/index.vue
11190
11731
 
@@ -11197,11 +11738,11 @@ var xt_listvue_type_style_index_0_id_53c7db00_prod_scoped_true_lang_css = __webp
11197
11738
 
11198
11739
  var xt_list_component = Object(componentNormalizer["a" /* default */])(
11199
11740
  components_xt_listvue_type_script_lang_js,
11200
- xt_listvue_type_template_id_53c7db00_scoped_true_render,
11201
- xt_listvue_type_template_id_53c7db00_scoped_true_staticRenderFns,
11741
+ xt_listvue_type_template_id_084d1476_scoped_true_render,
11742
+ xt_listvue_type_template_id_084d1476_scoped_true_staticRenderFns,
11202
11743
  false,
11203
11744
  null,
11204
- "53c7db00",
11745
+ "084d1476",
11205
11746
  null
11206
11747
 
11207
11748
  )
@@ -11219,32 +11760,46 @@ xt_list.install = function (Vue) {
11219
11760
  // EXTERNAL MODULE: ./src/components/xt-scroll-arrow/style/index.scss
11220
11761
  var xt_scroll_arrow_style = __webpack_require__("4e56");
11221
11762
 
11222
- // 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
11223
- 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()])
11763
+ // 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
11764
+ 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)
11224
11765
  }
11225
- var xt_scroll_arrowvue_type_template_id_3d6a271c_staticRenderFns = []
11766
+ var xt_scroll_arrowvue_type_template_id_6d59f4e4_staticRenderFns = []
11226
11767
 
11227
11768
 
11228
- // CONCATENATED MODULE: ./src/components/xt-scroll-arrow/index.vue?vue&type=template&id=3d6a271c
11769
+ // CONCATENATED MODULE: ./src/components/xt-scroll-arrow/index.vue?vue&type=template&id=6d59f4e4
11229
11770
 
11230
11771
  // 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
11231
11772
 
11773
+
11774
+
11232
11775
  /* harmony default export */ var xt_scroll_arrowvue_type_script_lang_js = ({
11233
11776
  name: 'XtScrollArrow',
11777
+
11778
+ components: {
11779
+ XtScroll: components_xt_scroll
11780
+ },
11781
+
11234
11782
  props: {
11783
+ // ========== 滚动方向 ==========
11235
11784
  direction: {
11236
11785
  type: String,
11237
11786
  default: 'horizontal',
11238
11787
  validator: (val) => ['horizontal', 'vertical'].includes(val)
11239
11788
  },
11789
+
11790
+ // ========== 滚动步长 ==========
11240
11791
  scrollStep: {
11241
11792
  type: Number,
11242
11793
  default: 100
11243
11794
  },
11795
+
11796
+ // ========== 箭头显示 ==========
11244
11797
  autoHide: {
11245
11798
  type: Boolean,
11246
11799
  default: true
11247
11800
  },
11801
+
11802
+ // ========== 容器尺寸 ==========
11248
11803
  height: {
11249
11804
  type: [String, Number],
11250
11805
  default: ''
@@ -11253,6 +11808,8 @@ var xt_scroll_arrowvue_type_template_id_3d6a271c_staticRenderFns = []
11253
11808
  type: [String, Number],
11254
11809
  default: ''
11255
11810
  },
11811
+
11812
+ // ========== 模式 ==========
11256
11813
  appendMode: {
11257
11814
  type: Boolean,
11258
11815
  default: false
@@ -11260,16 +11817,65 @@ var xt_scroll_arrowvue_type_template_id_3d6a271c_staticRenderFns = []
11260
11817
  clickMode: {
11261
11818
  type: Boolean,
11262
11819
  default: false
11820
+ },
11821
+
11822
+ // ========== 虚拟滚动配置 ==========
11823
+ /** 是否启用虚拟滚动 */
11824
+ vScroll: {
11825
+ type: Boolean,
11826
+ default: false
11827
+ },
11828
+ /** 虚拟滚动数据源 */
11829
+ vScrollData: {
11830
+ type: Array,
11831
+ default: () => []
11832
+ },
11833
+ /** 每个 item 的固定尺寸(px) */
11834
+ itemSize: {
11835
+ type: Number,
11836
+ default: 50
11837
+ },
11838
+ /** item 的唯一键字段名 */
11839
+ keyField: {
11840
+ type: String,
11841
+ default: 'id'
11842
+ },
11843
+ /** 预渲染缓冲区大小 */
11844
+ bufferSize: {
11845
+ type: Number,
11846
+ default: 5
11847
+ },
11848
+ /** 虚拟滚动加载状态 */
11849
+ vScrollLoading: {
11850
+ type: Boolean,
11851
+ default: false
11852
+ },
11853
+
11854
+ // ========== 加载更多 ==========
11855
+ loadMore: {
11856
+ type: Boolean,
11857
+ default: false
11858
+ },
11859
+ loadMoreText: {
11860
+ type: String,
11861
+ default: '加载更多'
11862
+ },
11863
+ loadMoreLoading: {
11864
+ type: Boolean,
11865
+ default: false
11263
11866
  }
11264
11867
  },
11868
+
11265
11869
  data() {
11266
11870
  return {
11267
11871
  showLeftArrow: false,
11268
11872
  showRightArrow: false,
11269
11873
  showTopArrow: false,
11270
- showBottomArrow: false
11874
+ showBottomArrow: false,
11875
+ mutationObserver: null
11271
11876
  }
11272
11877
  },
11878
+
11273
11879
  computed: {
11274
11880
  containerStyle() {
11275
11881
  const style = {}
@@ -11280,27 +11886,44 @@ var xt_scroll_arrowvue_type_template_id_3d6a271c_staticRenderFns = []
11280
11886
  style.width = typeof this.width === 'number' ? `${this.width}px` : this.width
11281
11887
  }
11282
11888
  return style
11889
+ },
11890
+ scrollClass() {
11891
+ return this.vScroll ? 'xt-scroll-arrow__content--virtual' : ''
11283
11892
  }
11284
11893
  },
11894
+
11285
11895
  watch: {
11286
11896
  direction() {
11287
11897
  this.$nextTick(() => {
11288
11898
  this.checkScroll()
11289
11899
  })
11900
+ },
11901
+ vScrollData: {
11902
+ handler() {
11903
+ this.$nextTick(() => {
11904
+ this.checkScroll()
11905
+ })
11906
+ }
11290
11907
  }
11291
11908
  },
11909
+
11292
11910
  mounted() {
11293
11911
  this.$nextTick(() => {
11294
11912
  this.checkScroll()
11295
11913
  })
11296
11914
  this.addResizeObserver()
11297
- this.addMutationObserver()
11915
+ if (!this.vScroll) {
11916
+ this.addMutationObserver()
11917
+ }
11298
11918
  },
11919
+
11299
11920
  beforeDestroy() {
11300
11921
  this.removeResizeObserver()
11301
11922
  this.removeMutationObserver()
11302
11923
  },
11924
+
11303
11925
  methods: {
11926
+ // ========== 尺寸监听 ==========
11304
11927
  addResizeObserver() {
11305
11928
  if (typeof ResizeObserver !== 'undefined') {
11306
11929
  this.resizeObserver = new ResizeObserver(() => {
@@ -11308,17 +11931,19 @@ var xt_scroll_arrowvue_type_template_id_3d6a271c_staticRenderFns = []
11308
11931
  this.checkScroll()
11309
11932
  })
11310
11933
  })
11311
- const container = this.$refs.scrollContainer
11934
+ const container = this.$el
11312
11935
  if (container) {
11313
11936
  this.resizeObserver.observe(container)
11314
11937
  }
11315
11938
  }
11316
11939
  },
11940
+
11317
11941
  removeResizeObserver() {
11318
11942
  if (this.resizeObserver) {
11319
11943
  this.resizeObserver.disconnect()
11320
11944
  }
11321
11945
  },
11946
+
11322
11947
  addMutationObserver() {
11323
11948
  if (typeof MutationObserver !== 'undefined') {
11324
11949
  this.mutationObserver = new MutationObserver(() => {
@@ -11329,28 +11954,37 @@ var xt_scroll_arrowvue_type_template_id_3d6a271c_staticRenderFns = []
11329
11954
  }
11330
11955
  })
11331
11956
  })
11332
- const container = this.$refs.scrollContainer
11957
+ const container = this.$refs.scrollRef
11333
11958
  if (container) {
11334
- this.mutationObserver.observe(container, {
11335
- childList: true,
11336
- subtree: true
11337
- })
11959
+ const wrap = container.getScrollContainer && container.getScrollContainer()
11960
+ if (wrap) {
11961
+ this.mutationObserver.observe(wrap, {
11962
+ childList: true,
11963
+ subtree: true
11964
+ })
11965
+ }
11338
11966
  }
11339
11967
  }
11340
11968
  },
11969
+
11341
11970
  removeMutationObserver() {
11342
11971
  if (this.mutationObserver) {
11343
11972
  this.mutationObserver.disconnect()
11344
11973
  }
11345
11974
  },
11975
+
11976
+ // ========== 滚动检测 ==========
11346
11977
  checkScroll() {
11347
- const container = this.$refs.scrollContainer
11348
- if (!container) return
11978
+ const scrollRef = this.$refs.scrollRef
11979
+ if (!scrollRef) return
11980
+
11981
+ const wrap = scrollRef.getScrollContainer && scrollRef.getScrollContainer()
11982
+ if (!wrap) return
11349
11983
 
11350
11984
  if (this.direction === 'horizontal') {
11351
- const scrollLeft = container.scrollLeft
11352
- const scrollWidth = container.scrollWidth
11353
- const clientWidth = container.clientWidth
11985
+ const scrollLeft = wrap.scrollLeft
11986
+ const scrollWidth = wrap.scrollWidth
11987
+ const clientWidth = wrap.clientWidth
11354
11988
  const maxScroll = scrollWidth - clientWidth
11355
11989
 
11356
11990
  this.showTopArrow = false
@@ -11358,15 +11992,15 @@ var xt_scroll_arrowvue_type_template_id_3d6a271c_staticRenderFns = []
11358
11992
 
11359
11993
  if (this.autoHide) {
11360
11994
  this.showLeftArrow = scrollLeft > 0
11361
- this.showRightArrow = maxScroll > 0 && scrollLeft < maxScroll
11995
+ this.showRightArrow = maxScroll > 0 && scrollLeft < maxScroll - 1
11362
11996
  } else {
11363
11997
  this.showLeftArrow = maxScroll > 0
11364
11998
  this.showRightArrow = maxScroll > 0
11365
11999
  }
11366
12000
  } else {
11367
- const scrollTop = container.scrollTop
11368
- const scrollHeight = container.scrollHeight
11369
- const clientHeight = container.clientHeight
12001
+ const scrollTop = wrap.scrollTop
12002
+ const scrollHeight = wrap.scrollHeight
12003
+ const clientHeight = wrap.clientHeight
11370
12004
  const maxScroll = scrollHeight - clientHeight
11371
12005
 
11372
12006
  this.showLeftArrow = false
@@ -11374,77 +12008,77 @@ var xt_scroll_arrowvue_type_template_id_3d6a271c_staticRenderFns = []
11374
12008
 
11375
12009
  if (this.autoHide) {
11376
12010
  this.showTopArrow = scrollTop > 0
11377
- this.showBottomArrow = maxScroll > 0 && scrollTop < maxScroll
12011
+ this.showBottomArrow = maxScroll > 0 && scrollTop < maxScroll - 1
11378
12012
  } else {
11379
12013
  this.showTopArrow = maxScroll > 0
11380
12014
  this.showBottomArrow = maxScroll > 0
11381
12015
  }
11382
12016
  }
11383
12017
  },
11384
- handleScroll() {
12018
+
12019
+ onScroll() {
11385
12020
  this.checkScroll()
11386
- this.$emit('scroll', this.$refs.scrollContainer)
11387
- },
11388
- handleClick(e) {
11389
- if (!this.clickMode) return
11390
- const container = this.$refs.scrollContainer
11391
- if (!container) return
11392
-
11393
- const target = e.target
11394
- if (!target || target === container) return
11395
-
11396
- const containerRect = container.getBoundingClientRect()
11397
- const targetRect = target.getBoundingClientRect()
11398
-
11399
- const isVisible = (
11400
- targetRect.left >= containerRect.left &&
11401
- targetRect.right <= containerRect.right &&
11402
- targetRect.top >= containerRect.top &&
11403
- targetRect.bottom <= containerRect.bottom
11404
- )
11405
-
11406
- if (!isVisible) {
11407
- if (this.direction === 'horizontal') {
11408
- const scrollLeft = target.offsetLeft - (container.clientWidth - targetRect.width) / 2
11409
- container.scrollTo({ left: scrollLeft, behavior: 'smooth' })
11410
- } else {
11411
- const scrollTop = target.offsetTop - (container.clientHeight - targetRect.height) / 2
11412
- container.scrollTo({ top: scrollTop, behavior: 'smooth' })
11413
- }
11414
- }
12021
+ this.$emit('scroll', this.$refs.scrollRef)
11415
12022
  },
12023
+
12024
+ // ========== 滚动操作 ==========
11416
12025
  scrollLeft() {
11417
- const container = this.$refs.scrollContainer
11418
- if (container) {
11419
- container.scrollBy({ left: -this.scrollStep, behavior: 'smooth' })
11420
- }
12026
+ this._scrollBy(-this.scrollStep)
11421
12027
  },
12028
+
11422
12029
  scrollRight() {
11423
- const container = this.$refs.scrollContainer
11424
- if (container) {
11425
- container.scrollBy({ left: this.scrollStep, behavior: 'smooth' })
11426
- }
12030
+ this._scrollBy(this.scrollStep)
11427
12031
  },
12032
+
11428
12033
  scrollTop() {
11429
- const container = this.$refs.scrollContainer
11430
- if (container) {
11431
- container.scrollBy({ top: -this.scrollStep, behavior: 'smooth' })
11432
- }
12034
+ this._scrollBy(-this.scrollStep, 'vertical')
11433
12035
  },
12036
+
11434
12037
  scrollBottom() {
11435
- const container = this.$refs.scrollContainer
11436
- if (container) {
11437
- container.scrollBy({ top: this.scrollStep, behavior: 'smooth' })
12038
+ this._scrollBy(this.scrollStep, 'vertical')
12039
+ },
12040
+
12041
+ _scrollBy(delta, dir) {
12042
+ const direction = dir || this.direction
12043
+ const scrollRef = this.$refs.scrollRef
12044
+ if (!scrollRef) return
12045
+
12046
+ const wrap = scrollRef.getScrollContainer && scrollRef.getScrollContainer()
12047
+ if (!wrap) return
12048
+
12049
+ if (direction === 'horizontal') {
12050
+ wrap.scrollBy({ left: delta, behavior: 'smooth' })
12051
+ } else {
12052
+ wrap.scrollBy({ top: delta, behavior: 'smooth' })
11438
12053
  }
11439
12054
  },
12055
+
11440
12056
  scrollToEnd() {
11441
- const container = this.$refs.scrollContainer
11442
- if (!container) return
12057
+ const scrollRef = this.$refs.scrollRef
12058
+ if (!scrollRef) return
12059
+ const wrap = scrollRef.getScrollContainer && scrollRef.getScrollContainer()
12060
+ if (!wrap) return
12061
+
11443
12062
  if (this.direction === 'horizontal') {
11444
- container.scrollTo({ left: container.scrollWidth, behavior: 'smooth' })
12063
+ wrap.scrollTo({ left: wrap.scrollWidth, behavior: 'smooth' })
11445
12064
  } else {
11446
- container.scrollTo({ top: container.scrollHeight, behavior: 'smooth' })
12065
+ wrap.scrollTo({ top: wrap.scrollHeight, behavior: 'smooth' })
11447
12066
  }
12067
+ },
12068
+
12069
+ // ========== 对外暴露方法 ==========
12070
+ /** 获取滚动位置 */
12071
+ getScrollPos() {
12072
+ const scrollRef = this.$refs.scrollRef
12073
+ if (!scrollRef) return 0
12074
+ const wrap = scrollRef.getScrollContainer && scrollRef.getScrollContainer()
12075
+ if (!wrap) return 0
12076
+ return this.direction === 'horizontal' ? wrap.scrollLeft : wrap.scrollTop
12077
+ },
12078
+
12079
+ /** 获取 xt-scroll 组件实例 */
12080
+ getScrollInstance() {
12081
+ return this.$refs.scrollRef
11448
12082
  }
11449
12083
  }
11450
12084
  });
@@ -11461,8 +12095,8 @@ var xt_scroll_arrowvue_type_template_id_3d6a271c_staticRenderFns = []
11461
12095
 
11462
12096
  var xt_scroll_arrow_component = Object(componentNormalizer["a" /* default */])(
11463
12097
  components_xt_scroll_arrowvue_type_script_lang_js,
11464
- xt_scroll_arrowvue_type_template_id_3d6a271c_render,
11465
- xt_scroll_arrowvue_type_template_id_3d6a271c_staticRenderFns,
12098
+ xt_scroll_arrowvue_type_template_id_6d59f4e4_render,
12099
+ xt_scroll_arrowvue_type_template_id_6d59f4e4_staticRenderFns,
11466
12100
  false,
11467
12101
  null,
11468
12102
  null,
@@ -11481,7 +12115,7 @@ xt_scroll_arrow.install = function (Vue) {
11481
12115
 
11482
12116
  /* harmony default export */ var components_xt_scroll_arrow = (xt_scroll_arrow);
11483
12117
 
11484
- // 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
12118
+ // 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
11485
12119
  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)
11486
12120
  }
11487
12121
  var xt_pagevue_type_template_id_a1f6b910_scoped_true_staticRenderFns = []
@@ -11593,7 +12227,7 @@ xt_page.install = function (Vue) {
11593
12227
 
11594
12228
  /* harmony default export */ var components_xt_page = (xt_page);
11595
12229
 
11596
- // 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
12230
+ // 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
11597
12231
  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)
11598
12232
  }
11599
12233
  var xt_select_treevue_type_template_id_962f42c0_scoped_true_staticRenderFns = []
@@ -11911,7 +12545,7 @@ xt_select_tree.install = function (Vue) {
11911
12545
 
11912
12546
  /* harmony default export */ var components_xt_select_tree = (xt_select_tree);
11913
12547
 
11914
- // 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
12548
+ // 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
11915
12549
  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)
11916
12550
  }
11917
12551
  var xt_uploadvue_type_template_id_03e2de58_staticRenderFns = []
@@ -11919,7 +12553,7 @@ var xt_uploadvue_type_template_id_03e2de58_staticRenderFns = []
11919
12553
 
11920
12554
  // CONCATENATED MODULE: ./src/components/xt-upload/index.vue?vue&type=template&id=03e2de58
11921
12555
 
11922
- // 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
12556
+ // 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
11923
12557
  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)])
11924
12558
  }
11925
12559
  var previewvue_type_template_id_236adf7f_scoped_true_staticRenderFns = []
@@ -12955,7 +13589,7 @@ xt_upload.install = function (Vue) {
12955
13589
 
12956
13590
  /* harmony default export */ var components_xt_upload = (xt_upload);
12957
13591
 
12958
- // 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
13592
+ // 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
12959
13593
  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)])])
12960
13594
  }
12961
13595
  var xt_transfer_treevue_type_template_id_561bec94_scoped_true_staticRenderFns = []
@@ -13308,7 +13942,7 @@ xt_transfer_tree.install = function (Vue) {
13308
13942
 
13309
13943
  /* harmony default export */ var components_xt_transfer_tree = (xt_transfer_tree);
13310
13944
 
13311
- // 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
13945
+ // 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
13312
13946
  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)
13313
13947
  }
13314
13948
  var xt_form_schemavue_type_template_id_50399771_scoped_true_staticRenderFns = []
@@ -13580,7 +14214,7 @@ xt_form_schema.install = function (Vue) {
13580
14214
  // EXTERNAL MODULE: ./src/components/xt-flow/style/index.scss
13581
14215
  var xt_flow_style = __webpack_require__("fdbd");
13582
14216
 
13583
- // 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
14217
+ // 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
13584
14218
  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:[
13585
14219
  `xt-flow__line--${node.status}`,
13586
14220
  { 'xt-flow__line--dashed': node.status === 'rejected' }
@@ -13988,6 +14622,567 @@ xt_flow.install = function(Vue) {
13988
14622
  }
13989
14623
 
13990
14624
  /* harmony default export */ var components_xt_flow = (xt_flow);
14625
+ // CONCATENATED MODULE: ./src/components/theme/iframe-injector.js
14626
+ /* ============================================================
14627
+ * XT-Element-UI iframe 主题注入工具
14628
+ *
14629
+ * 使用场景:微前端架构中,主系统统一管理主题,子系统通过 iframe 嵌入。
14630
+ * 子系统为标准 Element UI 项目,无需任何改造。
14631
+ *
14632
+ * 设计:
14633
+ * - 主题状态的唯一事实源是 utils/index.js(setTheme / setPrimaryColor)
14634
+ * - 本模块仅负责 iframe DOM 操作(注入、MutationObserver、持久化、广播)
14635
+ * - 通过订阅 utils.onConfigChange 实现主文档和 iframe 的同步
14636
+ * - setTheme / setPrimaryColor 委托给 utils,保持外部 API 不变
14637
+ *
14638
+ * 工作流程:
14639
+ * 1. 主系统调用 utils.setTheme('dark') → utils 同步更新 --xt-* + --el-* 变量
14640
+ * 2. utils emitConfigChange → 所有 IframeThemeInjector 实例收到通知
14641
+ * 3. 实例将新主题应用到其管理的所有 iframe
14642
+ * 4. 持久化、广播事件、回调
14643
+ * ============================================================ */
14644
+
14645
+
14646
+
14647
+
14648
+ /**
14649
+ * IframeThemeInjector 类
14650
+ * 负责向 iframe 注入主题 CSS 并管理 iframe 侧主题状态
14651
+ *
14652
+ * 注意:主文档的 --el-* / --xt-* CSS 变量由 utils/index.js 管理,
14653
+ * 本类仅负责 iframe 内的同步,避免重复设置主文档变量。
14654
+ */
14655
+ class iframe_injector_IframeThemeInjector {
14656
+ /**
14657
+ * @param {Object} options
14658
+ * @param {string} options.baseCSS - 基础 CSS 内容(注入到 iframe 的 <head>)
14659
+ * @param {string} [options.theme='white'] - 初始主题 'white' | 'dark'
14660
+ * @param {string} [options.primaryColor='#1890ff'] - 初始主色调
14661
+ * @param {string} [options.brand=''] - 品牌标识 '' | 'water' | 'electricity' | 'gas'
14662
+ * @param {boolean} [options.persist=false] - 是否持久化主题配置到 localStorage
14663
+ * @param {Function} [options.onThemeChange] - 主题变化回调
14664
+ */
14665
+ constructor(options = {}) {
14666
+ if (!options.baseCSS) {
14667
+ console.warn('[IframeThemeInjector] baseCSS 未提供,主题样式将无法注入到 iframe')
14668
+ }
14669
+
14670
+ this.baseCSS = options.baseCSS || ''
14671
+ this.theme = options.theme || 'white'
14672
+ this.brand = options.brand || ''
14673
+ this.persist = options.persist || false
14674
+ this.onThemeChange = options.onThemeChange || null
14675
+
14676
+ // 主色调:如果有 brand,优先使用 brand 对应的颜色
14677
+ this.primaryColor = options.primaryColor || this._getBrandColor()
14678
+ this._userPrimaryColor = options.primaryColor || '#1890ff'
14679
+
14680
+ // 管理的 iframe 列表
14681
+ // Map<HTMLIFrameElement, { styleEl: HTMLStyleElement, injected: boolean }>
14682
+ this.iframes = new Map()
14683
+
14684
+ // MutationObserver 用于自动检测新增 iframe
14685
+ this._observer = null
14686
+ this._observerTarget = null
14687
+
14688
+ // 注入计数器(用于去重定时器)
14689
+ this._injectPending = new Set()
14690
+
14691
+ // 订阅 utils 配置变更,实现主文档和 iframe 的主题同步
14692
+ this._unsubscribe = onConfigChange((key, value) => {
14693
+ this._onUtilsConfigChange(key, value)
14694
+ })
14695
+ }
14696
+
14697
+ // ==================== 公共方法 ====================
14698
+
14699
+ /**
14700
+ * 向指定 iframe 注入主题 CSS
14701
+ * @param {HTMLIFrameElement} iframe - iframe 元素
14702
+ * @returns {boolean} 是否注入成功
14703
+ */
14704
+ inject(iframe) {
14705
+ if (!iframe) {
14706
+ console.warn('[IframeThemeInjector] inject: iframe 参数为空')
14707
+ return false
14708
+ }
14709
+
14710
+ // 如果已注入,跳过
14711
+ if (this.iframes.has(iframe)) {
14712
+ return true
14713
+ }
14714
+
14715
+ return this._doInject(iframe)
14716
+ }
14717
+
14718
+ /**
14719
+ * 批量注入:注入所有匹配选择器的 iframe
14720
+ * @param {string} [selector='iframe'] - CSS 选择器
14721
+ * @returns {number} 成功注入的数量
14722
+ */
14723
+ injectAll(selector = 'iframe') {
14724
+ const iframes = document.querySelectorAll(selector)
14725
+ let count = 0
14726
+ iframes.forEach(iframe => {
14727
+ if (this.inject(iframe)) count++
14728
+ })
14729
+ return count
14730
+ }
14731
+
14732
+ /**
14733
+ * 切换主题
14734
+ * 委托给 utils 处理主文档 CSS 变量,本类负责 iframe 同步
14735
+ * @param {string} theme - 'white' | 'dark'
14736
+ * @param {Object} [options]
14737
+ * @param {string} [options.primaryColor] - 主色调
14738
+ * @param {string} [options.brand] - 品牌色
14739
+ */
14740
+ setTheme(theme, options = {}) {
14741
+ if (theme !== 'white' && theme !== 'dark') {
14742
+ console.warn('[IframeThemeInjector] setTheme: 无效的主题值,使用 "white"', theme)
14743
+ theme = 'white'
14744
+ }
14745
+
14746
+ const prevTheme = this.theme
14747
+ this.theme = theme
14748
+
14749
+ if (options.primaryColor) {
14750
+ this.primaryColor = options.primaryColor
14751
+ this._userPrimaryColor = options.primaryColor
14752
+ } else if (options.brand || this.brand) {
14753
+ this.brand = options.brand || this.brand
14754
+ this.primaryColor = this._getBrandColor()
14755
+ }
14756
+
14757
+ if (options.brand !== undefined) {
14758
+ this.brand = options.brand
14759
+ }
14760
+
14761
+ // 委托给 utils 处理主文档的 CSS 变量设置
14762
+ setTheme(theme)
14763
+ if (this.primaryColor) {
14764
+ setPrimaryColor(this.primaryColor)
14765
+ }
14766
+
14767
+ // 同步所有 iframe
14768
+ this.iframes.forEach((_, iframeEl) => {
14769
+ try {
14770
+ if (iframeEl.contentDocument) {
14771
+ this._applyThemeToDocument(iframeEl.contentDocument)
14772
+ }
14773
+ } catch (e) { /* 跨域 iframe 无法访问 */ }
14774
+ })
14775
+
14776
+ // 持久化
14777
+ if (this.persist) {
14778
+ this._saveToStorage()
14779
+ }
14780
+
14781
+ // 广播事件
14782
+ this._broadcastChange()
14783
+
14784
+ // 回调
14785
+ if (this.onThemeChange) {
14786
+ this.onThemeChange({
14787
+ theme: this.theme,
14788
+ primaryColor: this.primaryColor,
14789
+ brand: this.brand,
14790
+ prevTheme
14791
+ })
14792
+ }
14793
+ }
14794
+
14795
+ /**
14796
+ * 设置主色调
14797
+ * @param {string} color - hex 颜色值,如 '#1890ff'
14798
+ */
14799
+ setPrimaryColor(color) {
14800
+ this.primaryColor = color
14801
+ this._userPrimaryColor = color
14802
+ this.brand = '' // 清除品牌色
14803
+
14804
+ // 委托给 utils 处理主文档
14805
+ setPrimaryColor(color)
14806
+
14807
+ // 同步 iframe
14808
+ this._applyPrimaryColorToAll()
14809
+ }
14810
+
14811
+ /**
14812
+ * 设置品牌色
14813
+ * @param {string} brand - '' | 'water' | 'electricity' | 'gas'
14814
+ */
14815
+ setBrand(brand) {
14816
+ this.brand = brand
14817
+ this.primaryColor = this._getBrandColor()
14818
+
14819
+ // 委托给 utils 处理主文档
14820
+ setPrimaryColor(this.primaryColor)
14821
+
14822
+ // 同步 iframe
14823
+ this._applyPrimaryColorToAll()
14824
+ }
14825
+
14826
+ /**
14827
+ * 移除指定 iframe 的注入
14828
+ * @param {HTMLIFrameElement} iframe
14829
+ */
14830
+ remove(iframe) {
14831
+ const info = this.iframes.get(iframe)
14832
+ if (info && info.styleEl && info.styleEl.parentNode) {
14833
+ info.styleEl.parentNode.removeChild(info.styleEl)
14834
+ }
14835
+ this.iframes.delete(iframe)
14836
+ this._injectPending.delete(iframe)
14837
+ }
14838
+
14839
+ /**
14840
+ * 移除所有注入
14841
+ */
14842
+ removeAll() {
14843
+ this.iframes.forEach((info, iframe) => {
14844
+ if (info.styleEl && info.styleEl.parentNode) {
14845
+ info.styleEl.parentNode.removeChild(info.styleEl)
14846
+ }
14847
+ })
14848
+ this.iframes.clear()
14849
+ this._injectPending.clear()
14850
+ }
14851
+
14852
+ /**
14853
+ * 开始自动监听 DOM 变化,自动注入新添加的 iframe
14854
+ * @param {HTMLElement} [target=document.body] - 监听的容器元素
14855
+ */
14856
+ startObserving(target) {
14857
+ this.stopObserving()
14858
+
14859
+ this._observerTarget = target || document.body
14860
+ this._observer = new MutationObserver((mutations) => {
14861
+ mutations.forEach(mutation => {
14862
+ mutation.addedNodes.forEach(node => {
14863
+ // 直接添加的 iframe
14864
+ if (node.tagName === 'IFRAME') {
14865
+ this._handleNewIframe(node)
14866
+ }
14867
+ // 包含 iframe 的子元素
14868
+ if (node.querySelectorAll) {
14869
+ node.querySelectorAll('iframe').forEach(iframe => {
14870
+ this._handleNewIframe(iframe)
14871
+ })
14872
+ }
14873
+ })
14874
+ })
14875
+ })
14876
+
14877
+ this._observer.observe(this._observerTarget, {
14878
+ childList: true,
14879
+ subtree: true
14880
+ })
14881
+ }
14882
+
14883
+ /**
14884
+ * 停止自动监听
14885
+ */
14886
+ stopObserving() {
14887
+ if (this._observer) {
14888
+ this._observer.disconnect()
14889
+ this._observer = null
14890
+ }
14891
+ this._observerTarget = null
14892
+ }
14893
+
14894
+ /**
14895
+ * 获取当前主题配置
14896
+ * @returns {Object}
14897
+ */
14898
+ getConfig() {
14899
+ return {
14900
+ theme: this.theme,
14901
+ primaryColor: this.primaryColor,
14902
+ brand: this.brand
14903
+ }
14904
+ }
14905
+
14906
+ /**
14907
+ * 获取已注入的 iframe 数量
14908
+ * @returns {number}
14909
+ */
14910
+ getIframeCount() {
14911
+ return this.iframes.size
14912
+ }
14913
+
14914
+ /**
14915
+ * 销毁实例,清理所有资源
14916
+ */
14917
+ destroy() {
14918
+ this.removeAll()
14919
+ this.stopObserving()
14920
+ if (this._unsubscribe) {
14921
+ this._unsubscribe()
14922
+ this._unsubscribe = null
14923
+ }
14924
+ }
14925
+
14926
+ // ==================== utils 变更响应 ====================
14927
+
14928
+ /**
14929
+ * 响应 utils 配置变更,同步到所有 iframe
14930
+ * 统一使用 applyThemeVars 处理主题+主色变量
14931
+ */
14932
+ _onUtilsConfigChange(key, value) {
14933
+ if (key === 'theme') {
14934
+ this.theme = value
14935
+ } else if (key === 'primaryColor') {
14936
+ this.primaryColor = value
14937
+ } else {
14938
+ return
14939
+ }
14940
+ this._applyPrimaryColorToAll()
14941
+ }
14942
+
14943
+ // ==================== 私有方法 ====================
14944
+
14945
+ /**
14946
+ * 执行实际的注入操作
14947
+ */
14948
+ _doInject(iframe) {
14949
+ try {
14950
+ const doc = iframe.contentDocument || iframe.contentWindow.document
14951
+ if (!doc || !doc.head) {
14952
+ // iframe 尚未加载完成,等待 load 事件
14953
+ iframe.addEventListener('load', () => this._doInject(iframe), { once: true })
14954
+ return false
14955
+ }
14956
+
14957
+ // 检查是否已注入过(防止重复)
14958
+ const existing = doc.head.querySelector('style[data-xt-theme-injector]')
14959
+ if (existing) {
14960
+ this.iframes.set(iframe, { styleEl: existing, injected: true })
14961
+ this._applyThemeToDocument(doc)
14962
+ return true
14963
+ }
14964
+
14965
+ // 创建 style 元素并注入
14966
+ const styleEl = doc.createElement('style')
14967
+ styleEl.setAttribute('data-xt-theme-injector', '')
14968
+ styleEl.setAttribute('type', 'text/css')
14969
+ styleEl.textContent = this.baseCSS
14970
+ doc.head.appendChild(styleEl)
14971
+
14972
+ // 应用主题变量
14973
+ this._applyThemeToDocument(doc)
14974
+
14975
+ // 记录
14976
+ this.iframes.set(iframe, { styleEl, injected: true })
14977
+
14978
+ return true
14979
+ } catch (e) {
14980
+ console.warn('[IframeThemeInjector] 无法注入主题到 iframe(可能是跨域限制):', e.message)
14981
+ return false
14982
+ }
14983
+ }
14984
+
14985
+ /**
14986
+ * 处理新检测到的 iframe
14987
+ */
14988
+ _handleNewIframe(iframe) {
14989
+ if (this.iframes.has(iframe) || this._injectPending.has(iframe)) {
14990
+ return
14991
+ }
14992
+
14993
+ this._injectPending.add(iframe)
14994
+
14995
+ const tryInject = () => {
14996
+ this._injectPending.delete(iframe)
14997
+ if (!this.iframes.has(iframe)) {
14998
+ this._doInject(iframe)
14999
+ }
15000
+ }
15001
+
15002
+ if (iframe.contentDocument && iframe.contentDocument.readyState === 'complete') {
15003
+ tryInject()
15004
+ } else {
15005
+ iframe.addEventListener('load', tryInject, { once: true })
15006
+ }
15007
+ }
15008
+
15009
+ /**
15010
+ * 将主题配置应用到指定文档(iframe 内)
15011
+ * 统一使用 applyThemeVars 处理 CSS 变量
15012
+ */
15013
+ _applyThemeToDocument(doc) {
15014
+ if (!doc || !doc.documentElement) return
15015
+
15016
+ applyThemeVars(doc.documentElement, {
15017
+ theme: this.theme,
15018
+ primaryColor: this.primaryColor,
15019
+ brand: this.brand
15020
+ })
15021
+ }
15022
+
15023
+ /**
15024
+ * 更新所有 iframe 文档的主色调
15025
+ * 统一使用 applyThemeVars 处理
15026
+ */
15027
+ _applyPrimaryColorToAll() {
15028
+ this.iframes.forEach((_, iframeEl) => {
15029
+ try {
15030
+ if (iframeEl.contentDocument) {
15031
+ applyThemeVars(iframeEl.contentDocument.documentElement, {
15032
+ theme: this.theme,
15033
+ primaryColor: this.primaryColor,
15034
+ brand: this.brand
15035
+ })
15036
+ }
15037
+ } catch (e) { /* 跨域 */ }
15038
+ })
15039
+ }
15040
+
15041
+ /**
15042
+ * 获取品牌色对应的主色调
15043
+ */
15044
+ _getBrandColor() {
15045
+ if (!this.brand || !BRAND_COLORS[this.brand]) {
15046
+ return this._userPrimaryColor || '#1890ff'
15047
+ }
15048
+ const colors = BRAND_COLORS[this.brand]
15049
+ return this.theme === 'dark' ? colors.dark : colors.light
15050
+ }
15051
+
15052
+ /**
15053
+ * 持久化到 localStorage
15054
+ */
15055
+ _saveToStorage() {
15056
+ if (typeof localStorage === 'undefined') return
15057
+ try {
15058
+ localStorage.setItem(THEME_STORAGE_KEY, JSON.stringify({
15059
+ theme: this.theme,
15060
+ primaryColor: this._userPrimaryColor,
15061
+ brand: this.brand,
15062
+ timestamp: Date.now()
15063
+ }))
15064
+ } catch (e) {
15065
+ console.warn('[IframeThemeInjector] 保存主题配置失败:', e.message)
15066
+ }
15067
+ }
15068
+
15069
+ /**
15070
+ * 从 localStorage 恢复配置
15071
+ */
15072
+ _loadFromStorage() {
15073
+ if (typeof localStorage === 'undefined') return null
15074
+ try {
15075
+ const stored = localStorage.getItem(THEME_STORAGE_KEY)
15076
+ return stored ? JSON.parse(stored) : null
15077
+ } catch (e) {
15078
+ return null
15079
+ }
15080
+ }
15081
+
15082
+ /**
15083
+ * 广播主题变化事件
15084
+ */
15085
+ _broadcastChange() {
15086
+ if (typeof window === 'undefined') return
15087
+ try {
15088
+ window.dispatchEvent(new CustomEvent(THEME_CHANGE_EVENT, {
15089
+ detail: {
15090
+ theme: this.theme,
15091
+ primaryColor: this.primaryColor,
15092
+ brand: this.brand,
15093
+ timestamp: Date.now()
15094
+ },
15095
+ bubbles: true,
15096
+ composed: true
15097
+ }))
15098
+ } catch (e) {
15099
+ // 忽略
15100
+ }
15101
+ }
15102
+ }
15103
+
15104
+ /**
15105
+ * 创建 IframeThemeInjector 实例并自动从 localStorage 恢复配置
15106
+ * @param {Object} options
15107
+ * @returns {IframeThemeInjector}
15108
+ */
15109
+ function createInjector(options = {}) {
15110
+ const injector = new iframe_injector_IframeThemeInjector(options)
15111
+
15112
+ // 如果启用持久化,尝试从 localStorage 恢复
15113
+ if (options.persist) {
15114
+ const stored = injector._loadFromStorage()
15115
+ if (stored) {
15116
+ injector.theme = stored.theme || 'white'
15117
+ injector.brand = stored.brand || ''
15118
+ injector._userPrimaryColor = stored.primaryColor || '#1890ff'
15119
+ injector.primaryColor = stored.primaryColor || injector._getBrandColor()
15120
+ }
15121
+ }
15122
+
15123
+ return injector
15124
+ }
15125
+
15126
+ /* harmony default export */ var iframe_injector = (iframe_injector_IframeThemeInjector);
15127
+
15128
+ // CONCATENATED MODULE: ./src/components/theme/index.js
15129
+ /* ============================================================
15130
+ * XT-Element-UI Theme 模块入口
15131
+ *
15132
+ * 提供:
15133
+ * 1. 静态 CSS 样式文件(用于注入到 iframe)
15134
+ * 2. IframeThemeInjector - iframe 主题注入工具
15135
+ * 3. 便捷的工厂函数
15136
+ * ============================================================ */
15137
+
15138
+
15139
+
15140
+ // 使用 raw-loader 以原始字符串形式导入 CSS 文件
15141
+ // eslint-disable-next-line
15142
+ const elementVarsCSS = __webpack_require__("b85c").default || __webpack_require__("b85c")
15143
+ // eslint-disable-next-line
15144
+ const elementOverridesCSS = __webpack_require__("c8e4").default || __webpack_require__("c8e4")
15145
+
15146
+ /**
15147
+ * 合并后的完整 CSS 内容
15148
+ * 可直接注入到 iframe 的 <head> 中
15149
+ */
15150
+ const fullThemeCSS = elementVarsCSS + '\n' + elementOverridesCSS
15151
+
15152
+ /**
15153
+ * 创建一个预配置好 CSS 内容的 IframeThemeInjector 实例
15154
+ * 这是推荐的使用方式,无需手动提供 CSS 内容
15155
+ *
15156
+ * @param {Object} options
15157
+ * @param {string} [options.theme='white'] - 初始主题 'white' | 'dark'
15158
+ * @param {string} [options.primaryColor='#1890ff'] - 初始主色调
15159
+ * @param {boolean} [options.persist=false] - 是否持久化主题配置
15160
+ * @param {Function} [options.onThemeChange] - 主题变化回调
15161
+ * @returns {IframeThemeInjector}
15162
+ *
15163
+ * @example
15164
+ * // 基本使用
15165
+ * const injector = createThemeInjector({ theme: 'white' })
15166
+ * injector.injectAll('iframe')
15167
+ *
15168
+ * @example
15169
+ * // 切换主题
15170
+ * injector.setTheme('dark')
15171
+ *
15172
+ * @example
15173
+ * // 自动监听新增 iframe
15174
+ * injector.startObserving()
15175
+ */
15176
+ function createThemeInjector(options = {}) {
15177
+ return createInjector({
15178
+ ...options,
15179
+ baseCSS: fullThemeCSS
15180
+ })
15181
+ }
15182
+
15183
+
15184
+
15185
+ /* harmony default export */ var components_theme = (createThemeInjector);
13991
15186
  // CONCATENATED MODULE: ./src/index.js
13992
15187
  // 导入主题样式(定义 CSS 变量)
13993
15188
 
@@ -14028,6 +15223,7 @@ const { getConfig: src_getConfig, setConfig: src_setConfig, getTheme: src_getThe
14028
15223
  // XtTable 组件(基于 ElementUI Table 封装)
14029
15224
  // XtList 组件(卡片列表)
14030
15225
 
15226
+ // XtScroll 组件(虚拟滚动容器)
14031
15227
 
14032
15228
 
14033
15229
 
@@ -14038,6 +15234,7 @@ const { getConfig: src_getConfig, setConfig: src_setConfig, getTheme: src_getThe
14038
15234
  // XtTransferTree 组件(树形穿梭框)
14039
15235
  // XtFormSchema 组件(表单配置化搜索)
14040
15236
  // XtFlow 组件(审批流程轨迹)
15237
+ // Theme 模块(iframe 主题注入工具)
14041
15238
 
14042
15239
 
14043
15240
  const src_components = [
@@ -14065,6 +15262,7 @@ const src_components = [
14065
15262
  components_xt_table,
14066
15263
  components_xt_list,
14067
15264
  components_xt_scroll_arrow,
15265
+ components_xt_scroll,
14068
15266
  XtBar,
14069
15267
  XtLine,
14070
15268
  XtPie,
@@ -14145,6 +15343,7 @@ if (typeof window !== 'undefined' && window.Vue) {
14145
15343
  XtTable: components_xt_table,
14146
15344
  XtList: components_xt_list,
14147
15345
  XtScrollArrow: components_xt_scroll_arrow,
15346
+ XtScroll: components_xt_scroll,
14148
15347
  XtBar: XtBar,
14149
15348
  XtLine: XtLine,
14150
15349
  XtPie: XtPie,
@@ -14154,7 +15353,8 @@ if (typeof window !== 'undefined' && window.Vue) {
14154
15353
  XtUpload: components_xt_upload,
14155
15354
  XtTransferTree: components_xt_transfer_tree,
14156
15355
  XtFormSchema: components_xt_form_schema,
14157
- XtFlow: components_xt_flow
15356
+ XtFlow: components_xt_flow,
15357
+ Theme: components_theme
14158
15358
  });
14159
15359
 
14160
15360
  // 导出工具函数和变量