xt-element-ui 2.2.1 → 2.2.2

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 (46) hide show
  1. package/docs/components/base/xt-date-picker.md +7 -26
  2. package/docs/components/base/xt-grid-box.md +34 -34
  3. package/docs/components/base/xt-tabs.md +51 -6
  4. package/docs/components/base/xt-text.md +20 -3
  5. package/lib/css/1.87a493be.css +1 -0
  6. package/lib/index.common.1.js +294 -0
  7. package/lib/index.common.2.js +141 -0
  8. package/lib/index.common.js +342 -492
  9. package/lib/index.css +1 -1
  10. package/lib/index.umd.1.js +294 -0
  11. package/lib/index.umd.2.js +141 -0
  12. package/lib/index.umd.js +342 -492
  13. package/lib/index.umd.min.1.js +1 -0
  14. package/lib/index.umd.min.2.js +1 -0
  15. package/lib/index.umd.min.js +1 -1
  16. package/lib/xt-date-picker/css/1.87a493be.css +1 -0
  17. package/lib/xt-date-picker/xt-date-picker.common.1.js +294 -0
  18. package/lib/xt-date-picker/xt-date-picker.common.2.js +141 -0
  19. package/lib/xt-date-picker/xt-date-picker.common.js +201 -332
  20. package/lib/xt-date-picker/xt-date-picker.css +1 -1
  21. package/lib/xt-date-picker/xt-date-picker.umd.1.js +294 -0
  22. package/lib/xt-date-picker/xt-date-picker.umd.2.js +141 -0
  23. package/lib/xt-date-picker/xt-date-picker.umd.js +201 -332
  24. package/lib/xt-date-picker/xt-date-picker.umd.min.1.js +1 -0
  25. package/lib/xt-date-picker/xt-date-picker.umd.min.2.js +1 -0
  26. package/lib/xt-date-picker/xt-date-picker.umd.min.js +1 -1
  27. package/lib/xt-tabs/xt-tabs.common.js +5 -27
  28. package/lib/xt-tabs/xt-tabs.css +1 -1
  29. package/lib/xt-tabs/xt-tabs.umd.js +5 -27
  30. package/lib/xt-tabs/xt-tabs.umd.min.js +1 -1
  31. package/lib/xt-text/xt-text.common.js +7 -4
  32. package/lib/xt-text/xt-text.umd.js +7 -4
  33. package/lib/xt-text/xt-text.umd.min.js +1 -1
  34. package/package.json +1 -1
  35. package/src/components/index.scss +3 -0
  36. package/src/components/xt-date-picker/component/Picker.vue +2 -46
  37. package/src/components/xt-date-picker/component/RangeDate.vue +4 -4
  38. package/src/components/xt-date-picker/index.js +1 -0
  39. package/src/components/xt-date-picker/index.vue +3 -23
  40. package/src/components/xt-date-picker/style/index.scss +64 -0
  41. package/src/components/xt-input/style/index.scss +1 -1
  42. package/src/components/xt-tabs/index.vue +3 -174
  43. package/src/components/xt-tabs/style/index.scss +131 -121
  44. package/src/components/xt-text/index.vue +5 -2
  45. package/src/styles/theme/index.scss +0 -1
  46. package/src/styles/theme/dark-variables.scss +0 -0
@@ -45,12 +45,12 @@ export default {
45
45
 
46
46
  ## 示例
47
47
 
48
- ### 日期范围选择
48
+ ### 范围选择
49
49
 
50
- ::: demo 日期范围选择
50
+ ::: demo 日期选择
51
51
  ```vue
52
52
  <template>
53
- <XtDatePicker v-model="dateRange" rangeMode="true" />
53
+ <XtDatePicker v-model="dateRange" :rangeMode="true" />
54
54
  </template>
55
55
 
56
56
  <script>
@@ -65,9 +65,9 @@ export default {
65
65
  ```
66
66
  :::
67
67
 
68
- ### 月份范围选择
68
+ ### 月份选择
69
69
 
70
- ::: demo 月份范围选择
70
+ ::: demo 月份选择
71
71
  ```vue
72
72
  <template>
73
73
  <XtDatePicker v-model="monthRange" dateType="month" />
@@ -85,9 +85,9 @@ export default {
85
85
  ```
86
86
  :::
87
87
 
88
- ### 年份范围选择
88
+ ### 年份选择
89
89
 
90
- ::: demo 年份范围选择
90
+ ::: demo 年份选择
91
91
  ```vue
92
92
  <template>
93
93
  <XtDatePicker v-model="yearRange" dateType="year" />
@@ -125,25 +125,6 @@ export default {
125
125
  ```
126
126
  :::
127
127
 
128
- ### 单选模式
129
-
130
- ::: demo 单选模式
131
- ```vue
132
- <template>
133
- <XtDatePicker v-model="singleDate" :range-mode="false" />
134
- </template>
135
-
136
- <script>
137
- export default {
138
- data() {
139
- return {
140
- singleDate: null
141
- }
142
- }
143
- }
144
- </script>
145
- ```
146
- :::
147
128
 
148
129
  ### 时间维度选择(统计分析)
149
130
 
@@ -6,12 +6,12 @@
6
6
  ```vue
7
7
  <template>
8
8
  <XtGridBox :columns="3" gap="16px">
9
- <div style="padding: 16px; background: #f0f0f0; border-radius: 8px;">项目1</div>
10
- <div style="padding: 16px; background: #f0f0f0; border-radius: 8px;">项目2</div>
11
- <div style="padding: 16px; background: #f0f0f0; border-radius: 8px;">项目3</div>
12
- <div style="padding: 16px; background: #f0f0f0; border-radius: 8px;">项目4</div>
13
- <div style="padding: 16px; background: #f0f0f0; border-radius: 8px;">项目5</div>
14
- <div style="padding: 16px; background: #f0f0f0; border-radius: 8px;">项目6</div>
9
+ <div style="padding: 16px; background: #1890ff; color: white; border-radius: 8px;">元素1</div>
10
+ <div style="padding: 16px; background: #52c41a; color: white; border-radius: 8px;">元素2</div>
11
+ <div style="padding: 16px; background: #faad14; color: white; border-radius: 8px;">元素3</div>
12
+ <div style="padding: 16px; background: #f56c6c; color: white; border-radius: 8px;">元素4</div>
13
+ <div style="padding: 16px; background: #9adbbe; color: white; border-radius: 8px;">元素5</div>
14
+ <div style="padding: 16px; background: #40ffef; color: white; border-radius: 8px;">元素6</div>
15
15
  </XtGridBox>
16
16
  </template>
17
17
  ```
@@ -56,7 +56,7 @@
56
56
  ```vue
57
57
  <template>
58
58
  <XtGridBox :columns="4" gap="12px">
59
- <div v-for="i in 8" :key="i" style="padding: 12px; background: #e6f7ff; border-radius: 4px; text-align: center;">{{ i }}</div>
59
+ <div v-for="i in 8" :key="i" style="padding: 12px; background: #1890ff; border-radius: 4px; text-align: center;">{{ i }}</div>
60
60
  </XtGridBox>
61
61
  </template>
62
62
  ```
@@ -70,21 +70,21 @@
70
70
  <div>
71
71
  <!-- 数字方式:自动 repeat -->
72
72
  <XtGridBox :columns="3" gap="8px" style="margin-bottom: 16px;">
73
- <div v-for="i in 3" :key="i" style="padding: 12px; background: #f0f0f0;">{{ i }}</div>
73
+ <div v-for="i in 3" :key="i" style="padding: 12px; background: #1890ff;">{{ i }}</div>
74
74
  </XtGridBox>
75
75
 
76
76
  <!-- 字符串方式 -->
77
77
  <XtGridBox columns="200px 1fr 1fr" gap="8px" style="margin-bottom: 16px;">
78
- <div style="padding: 12px; background: #e6f7ff;">固定宽度</div>
79
- <div style="padding: 12px; background: #f6ffed;">弹性1</div>
80
- <div style="padding: 12px; background: #fff7e6;">弹性2</div>
78
+ <div style="padding: 12px; background: #52c41a;">固定宽度</div>
79
+ <div style="padding: 12px; background: #faad14;">弹性1</div>
80
+ <div style="padding: 12px; background: #f5222d;">弹性2</div>
81
81
  </XtGridBox>
82
82
 
83
83
  <!-- 数组方式 -->
84
84
  <XtGridBox :columns="['100px', '1fr', '2fr']" gap="8px">
85
- <div style="padding: 12px; background: #f9f0ff;">固定</div>
86
- <div style="padding: 12px; background: #e6fffb;">1份</div>
87
- <div style="padding: 12px; background: #fff7e6;">2份</div>
85
+ <div style="padding: 12px; background: #52c41a;">固定</div>
86
+ <div style="padding: 12px; background: #faad14;">1份</div>
87
+ <div style="padding: 12px; background: #f5222d;">2份</div>
88
88
  </XtGridBox>
89
89
  </div>
90
90
  </template>
@@ -97,13 +97,13 @@
97
97
  ```vue
98
98
  <template>
99
99
  <XtGridBox :columns="4" gap="12px">
100
- <XtGridItem :span="2" style="padding: 24px; background: #1890ff; color: white; border-radius: 8px;">跨2列</XtGridItem>
100
+ <XtGridItem :span="2" style="padding: 24px; background: #52c41a; color: white; border-radius: 8px;">跨2列</XtGridItem>
101
101
  <XtGridItem style="padding: 24px; background: #52c41a; color: white; border-radius: 8px;">普通</XtGridItem>
102
102
  <XtGridItem style="padding: 24px; background: #52c41a; color: white; border-radius: 8px;">普通</XtGridItem>
103
103
  <XtGridItem :rowSpan="2" style="padding: 48px 16px; background: #faad14; color: white; border-radius: 8px;">跨2行</XtGridItem>
104
- <XtGridItem style="padding: 24px; background: #f5222d; color: white; border-radius: 8px;">普通</XtGridItem>
105
- <XtGridItem style="padding: 24px; background: #f5222d; color: white; border-radius: 8px;">普通</XtGridItem>
106
- <XtGridItem style="padding: 24px; background: #f5222d; color: white; border-radius: 8px;">普通</XtGridItem>
104
+ <XtGridItem style="padding: 24px; background: #52c41a; color: white; border-radius: 8px;">普通</XtGridItem>
105
+ <XtGridItem style="padding: 24px; background: #52c41a; color: white; border-radius: 8px;">普通</XtGridItem>
106
+ <XtGridItem style="padding: 24px; background: #52c41a; color: white; border-radius: 8px;">普通</XtGridItem>
107
107
  </XtGridBox>
108
108
  </template>
109
109
  ```
@@ -139,16 +139,16 @@
139
139
  <div>
140
140
  <!-- 子项居中对齐 -->
141
141
  <XtGridBox :columns="3" gap="8px" align="center" style="height: 120px; background: #f0f0f0; margin-bottom: 16px;">
142
- <div style="padding: 8px 16px; background: white;">居中</div>
143
- <div style="padding: 8px 16px; background: white;">居中</div>
144
- <div style="padding: 8px 16px; background: white;">居中</div>
142
+ <div style="padding: 8px 16px; background: #1890ff; color: white;">居中</div>
143
+ <div style="padding: 8px 16px; background: #1890ff; color: white;">居中</div>
144
+ <div style="padding: 8px 16px; background: #1890ff; color: white;">居中</div>
145
145
  </XtGridBox>
146
146
 
147
147
  <!-- 内容两端对齐 -->
148
148
  <XtGridBox :columns="3" gap="8px" justify="space-between" style="background: #f0f0f0;">
149
- <div style="padding: 8px 16px; background: white;">左</div>
150
- <div style="padding: 8px 16px; background: white;">中</div>
151
- <div style="padding: 8px 16px; background: white;">右</div>
149
+ <div style="padding: 8px 16px;background: #1890ff; color: white;">左</div>
150
+ <div style="padding: 8px 16px;background: #1890ff; color: white;">中</div>
151
+ <div style="padding: 8px 16px;background: #1890ff; color: white;">右</div>
152
152
  </XtGridBox>
153
153
  </div>
154
154
  </template>
@@ -161,7 +161,7 @@
161
161
  ```vue
162
162
  <template>
163
163
  <XtGridBox :columns="3" rowGap="24px" colGap="8px">
164
- <div v-for="i in 6" :key="i" style="padding: 12px; background: #e6f7ff; text-align: center;">{{ i }}</div>
164
+ <div v-for="i in 6" :key="i" style="padding: 12px; background: #1890ff; text-align: center;">{{ i }}</div>
165
165
  </XtGridBox>
166
166
  </template>
167
167
  ```
@@ -173,7 +173,7 @@
173
173
  ```vue
174
174
  <template>
175
175
  <XtGridBox columns="repeat(auto-fill, minmax(150px, 1fr))" gap="12px">
176
- <div v-for="i in 8" :key="i" style="padding: 16px; background: #f0f0f0; text-align: center;">项目{{ i }}</div>
176
+ <div v-for="i in 8" :key="i" style="padding: 16px; background: #1890ff; text-align: center;">项目{{ i }}</div>
177
177
  </XtGridBox>
178
178
  </template>
179
179
  ```
@@ -186,22 +186,22 @@
186
186
  <template>
187
187
  <XtGridBox :columns="2" gap="16px">
188
188
  <!-- 左侧 -->
189
- <div style="padding: 16px; background: #e6f7ff;">
189
+ <div style="padding: 16px; background: #f5222d;">
190
190
  <h4>左侧面板</h4>
191
191
  <XtGridBox :columns="1" gap="8px">
192
- <div style="padding: 8px; background: white;">子项1</div>
193
- <div style="padding: 8px; background: white;">子项2</div>
192
+ <div style="padding: 8px; background: #1890ff;">子项1</div>
193
+ <div style="padding: 8px; background: #1890ff;">子项2</div>
194
194
  </XtGridBox>
195
195
  </div>
196
196
 
197
197
  <!-- 右侧 -->
198
- <div style="padding: 16px; background: #f6ffed;">
198
+ <div style="padding: 16px; background: #faad14;">
199
199
  <h4>右侧面板</h4>
200
200
  <XtGridBox :columns="2" gap="8px">
201
- <div style="padding: 8px; background: white;">A</div>
202
- <div style="padding: 8px; background: white;">B</div>
203
- <div style="padding: 8px; background: white;">C</div>
204
- <div style="padding: 8px; background: white;">D</div>
201
+ <div style="padding: 8px; background: #1890ff;">A</div>
202
+ <div style="padding: 8px; background: #1890ff;">B</div>
203
+ <div style="padding: 8px; background: #1890ff;">C</div>
204
+ <div style="padding: 8px; background: #1890ff;">D</div>
205
205
  </XtGridBox>
206
206
  </div>
207
207
  </XtGridBox>
@@ -61,7 +61,7 @@ export default {
61
61
  ```vue
62
62
  <template>
63
63
  <div style="display: flex; flex-direction: column; gap: 16px;">
64
- <XtTabs v-model="activeName">
64
+ <XtTabs v-model="activeName" type="card">
65
65
  <XtTabPane label="卡片式" name="first">卡片式标签页</XtTabPane>
66
66
  <XtTabPane label="配置管理" name="second">配置管理内容</XtTabPane>
67
67
  </XtTabs>
@@ -89,10 +89,15 @@ export default {
89
89
  ::: demo 标签位置
90
90
  ```vue
91
91
  <template>
92
- <XtTabs v-model="activeName" tab-position="left">
93
- <XtTabPane label="用户管理" name="first">用户管理内容</XtTabPane>
94
- <XtTabPane label="配置管理" name="second">配置管理内容</XtTabPane>
95
- <XtTabPane label="角色管理" name="third">角色管理内容</XtTabPane>
92
+ <XtTabs v-model="activeName" tab-position="top" closable addable @edit="handleTabsEdit">
93
+ <XtTabPane
94
+ :key="item.name"
95
+ v-for="(item, index) in editableTabs"
96
+ :label="item.title"
97
+ :name="item.name"
98
+ >
99
+ {{item.content}}
100
+ </XtTabPane>
96
101
  </XtTabs>
97
102
  </template>
98
103
 
@@ -100,7 +105,47 @@ export default {
100
105
  export default {
101
106
  data() {
102
107
  return {
103
- activeName: 'first'
108
+ editableTabsValue: '2',
109
+ editableTabs: [{
110
+ title: 'Tab 1',
111
+ name: '1',
112
+ content: 'Tab 1 content'
113
+ }, {
114
+ title: 'Tab 2',
115
+ name: '2',
116
+ content: 'Tab 2 content'
117
+ }],
118
+ tabIndex: 2
119
+ }
120
+ },
121
+ methods: {
122
+ handleTabsEdit(targetName, action) {
123
+ if (action === 'add') {
124
+ let newTabName = ++this.tabIndex + '';
125
+ this.editableTabs.push({
126
+ title: 'New Tab',
127
+ name: newTabName,
128
+ content: 'New Tab content'
129
+ });
130
+ this.editableTabsValue = newTabName;
131
+ }
132
+ if (action === 'remove') {
133
+ let tabs = this.editableTabs;
134
+ let activeName = this.editableTabsValue;
135
+ if (activeName === targetName) {
136
+ tabs.forEach((tab, index) => {
137
+ if (tab.name === targetName) {
138
+ let nextTab = tabs[index + 1] || tabs[index - 1];
139
+ if (nextTab) {
140
+ activeName = nextTab.name;
141
+ }
142
+ }
143
+ });
144
+ }
145
+
146
+ this.editableTabsValue = activeName;
147
+ this.editableTabs = tabs.filter(tab => tab.name !== targetName);
148
+ }
104
149
  }
105
150
  }
106
151
  }
@@ -6,7 +6,6 @@
6
6
  ```vue
7
7
  <template>
8
8
  <XtText type="primary">主要文本</XtText>
9
- <div style="width: 80px;"><XtText ellipsis>溢出隐藏文本溢出隐藏文本</XtText></div>
10
9
  </template>
11
10
  ```
12
11
  :::
@@ -17,8 +16,12 @@
17
16
  | `type` | String | - | `primary`、`success`、`warning`、`danger` | 文本颜色类型 |
18
17
  | `size` | String | base | `extra-large`、`large`、`medium`、`base`、`small`、`extra-small` | 字体大小 |
19
18
  | `bold` | Boolean | false | - | 是否加粗 |
20
- | `letterSpacing` | String / Number | - | - | 字间距 |
21
- | `money` | Boolean | false | - | 是否启用金额格式化 |
19
+ | `ellipsis` | Boolean | false | - | 是否显示省略号 |
20
+ | `ellipsisRows` | Number | 1 | 1至10 | 省略行数 |
21
+ | `showTooltip` | Boolean | true | - | 当文字溢出隐藏时,是否显示悬浮提示 |
22
+ | `tooltipPlacement` | String | `top` | - | 悬浮窗提示位置 |
23
+ | `format` | String | normal | 'normal', 'thousand', 'money' |- | 格式化模式 |
24
+ | `money` | Boolean | false | - | 是否启用金额格式化(使用format替代) |
22
25
  | `value` | Number / String | - | - | 金额数值 |
23
26
  | `currency` | String | CNY | `CNY`、`USD`、`EUR`、`JPY`、`GBP`、`AUD`、`CAD` | 货币类型 |
24
27
  | `decimals` | Number | 2 | 0-10 | 小数位数 |
@@ -85,6 +88,20 @@
85
88
  ```
86
89
  :::
87
90
 
91
+
92
+ ### 溢出隐藏
93
+ ::: demo 溢出隐藏
94
+ ```vue
95
+ <template>
96
+ <div style="display: flex; flex-direction: column; gap: 8px;width: 80px;">
97
+ <XtText ellipsis>溢出隐藏文本溢出隐藏文本</XtText>
98
+ <XtText ellipsis :ellipsisRows="5">溢出隐藏文本显示5行,溢出隐藏文本显示5行,溢出隐藏文本显示5行,溢出隐藏文本显示5行,</XtText>
99
+ <XtText ellipsis :showTooltip="false">不显示浮窗提示信息</XtText>
100
+ </div>
101
+ </template>
102
+ ```
103
+ :::
104
+
88
105
  ### 组合使用
89
106
 
90
107
  ::: demo 组合使用
@@ -0,0 +1 @@
1
+ .range-picker[data-v-32b85e82]{display:flex;align-items:center;flex-wrap:wrap;gap:8px;width:100%}.range-picker .el-date-editor[data-v-32b85e82]{flex:1;min-width:130px}.split[data-v-32b85e82]{flex-shrink:0;padding:0 4px}@media (max-width:360px){.range-picker[data-v-32b85e82]{flex-direction:column;align-items:stretch}.split[data-v-32b85e82]{text-align:center;margin:4px 0}}
@@ -0,0 +1,294 @@
1
+ ((typeof self !== 'undefined' ? self : this)["webpackJsonpindex"] = (typeof self !== 'undefined' ? self : this)["webpackJsonpindex"] || []).push([[1,2],{
2
+
3
+ /***/ "0e3e":
4
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
5
+
6
+ "use strict";
7
+ /* 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_RangeDate_vue_vue_type_style_index_0_id_32b85e82_prod_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("16dd");
8
+ /* 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_RangeDate_vue_vue_type_style_index_0_id_32b85e82_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_RangeDate_vue_vue_type_style_index_0_id_32b85e82_prod_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__);
9
+ /* unused harmony reexport * */
10
+
11
+
12
+ /***/ }),
13
+
14
+ /***/ "16dd":
15
+ /***/ (function(module, exports, __webpack_require__) {
16
+
17
+ // extracted by mini-css-extract-plugin
18
+
19
+ /***/ }),
20
+
21
+ /***/ "1db3":
22
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
23
+
24
+ "use strict";
25
+ // ESM COMPAT FLAG
26
+ __webpack_require__.r(__webpack_exports__);
27
+
28
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"b8cd9b04-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/component/RangeDate.vue?vue&type=template&id=32b85e82&scoped=true
29
+ var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"range-picker"},[_c('Picker',{attrs:{"type":_vm.type,"size":"small","placeholder":_vm.startPlaceholder,"disabled":_vm.disabled,"disabled-date":_vm.disabledStart},on:{"change":_vm.handleChange},model:{value:(_vm.startVal),callback:function ($$v) {_vm.startVal=$$v},expression:"startVal"}}),_c('span',{staticClass:"split"},[_vm._v(_vm._s(_vm.separator))]),_c('Picker',{attrs:{"type":_vm.type,"size":"small","placeholder":_vm.endPlaceholder,"disabled":_vm.disabled,"disabled-date":_vm.disabledEnd},on:{"change":_vm.handleChange},model:{value:(_vm.endVal),callback:function ($$v) {_vm.endVal=$$v},expression:"endVal"}})],1)
30
+ }
31
+ var staticRenderFns = []
32
+
33
+
34
+ // CONCATENATED MODULE: ./src/components/xt-date-picker/component/RangeDate.vue?vue&type=template&id=32b85e82&scoped=true
35
+
36
+ // EXTERNAL MODULE: ./src/components/xt-date-picker/component/Picker.vue + 4 modules
37
+ var Picker = __webpack_require__("b0ea");
38
+
39
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-date-picker/component/RangeDate.vue?vue&type=script&lang=js
40
+
41
+
42
+ /* harmony default export */ var RangeDatevue_type_script_lang_js = ({
43
+ name: 'RangeDate',
44
+ components: { Picker: Picker["default"] },
45
+ props: {
46
+ // 父组件v-model绑定数组 [startStr, endStr]
47
+ value: {
48
+ type: Array,
49
+ default: () => [null, null]
50
+ },
51
+ type: {
52
+ type: String,
53
+ default: 'date'
54
+ },
55
+ separator: {
56
+ type: String,
57
+ default: '至'
58
+ },
59
+ disabled: { type: Boolean, default: false }
60
+ },
61
+ data() {
62
+ return {
63
+ startVal: '',
64
+ endVal: ''
65
+ }
66
+ },
67
+ watch: {
68
+ // 外部回填回显
69
+ value: {
70
+ handler(val) {
71
+ const [s, e] = val || []
72
+ this.startVal = s || ''
73
+ this.endVal = e || ''
74
+ },
75
+ immediate: true
76
+ }
77
+ },
78
+ computed: {
79
+ startDate() {
80
+ return this.startVal ? new Date(this.startVal) : null
81
+ },
82
+ endDate() {
83
+ return this.endVal ? new Date(this.endVal) : null
84
+ },
85
+ startPlaceholder() {
86
+ const map = {
87
+ date: '开始日期',
88
+ month: '开始月份',
89
+ year: '开始年份',
90
+ quarter: '开始季度',
91
+ week: '开始周'
92
+ }
93
+ return map[this.type] || '开始日期'
94
+ },
95
+ endPlaceholder() {
96
+ const map = {
97
+ date: '结束日期',
98
+ month: '结束月份',
99
+ year: '结束年份',
100
+ quarter: '结束季度',
101
+ week: '结束周'
102
+ }
103
+ return map[this.type] || '结束日期'
104
+ }
105
+ },
106
+ methods: {
107
+ // 禁用开始:不能晚于已选结束
108
+ disabledStart(time) {
109
+ if (!this.endDate) return false
110
+ return time.getTime() > this.endDate.getTime()
111
+ },
112
+ // 禁用结束:不能早于已选开始
113
+ disabledEnd(time) {
114
+ if (!this.startDate) return false
115
+ return time.getTime() < this.startDate.getTime()
116
+ },
117
+ // 任意日期变更同步抛出数组给父组件
118
+ handleChange() {
119
+ this.$emit('input', [this.startVal, this.endVal])
120
+ }
121
+ }
122
+ });
123
+
124
+ // CONCATENATED MODULE: ./src/components/xt-date-picker/component/RangeDate.vue?vue&type=script&lang=js
125
+ /* harmony default export */ var component_RangeDatevue_type_script_lang_js = (RangeDatevue_type_script_lang_js);
126
+ // EXTERNAL MODULE: ./src/components/xt-date-picker/component/RangeDate.vue?vue&type=style&index=0&id=32b85e82&prod&scoped=true&lang=css
127
+ var RangeDatevue_type_style_index_0_id_32b85e82_prod_scoped_true_lang_css = __webpack_require__("0e3e");
128
+
129
+ // EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
130
+ var componentNormalizer = __webpack_require__("2877");
131
+
132
+ // CONCATENATED MODULE: ./src/components/xt-date-picker/component/RangeDate.vue
133
+
134
+
135
+
136
+
137
+
138
+
139
+ /* normalize component */
140
+
141
+ var component = Object(componentNormalizer["a" /* default */])(
142
+ component_RangeDatevue_type_script_lang_js,
143
+ render,
144
+ staticRenderFns,
145
+ false,
146
+ null,
147
+ "32b85e82",
148
+ null
149
+
150
+ )
151
+
152
+ /* harmony default export */ var RangeDate = __webpack_exports__["default"] = (component.exports);
153
+
154
+ /***/ }),
155
+
156
+ /***/ "b0ea":
157
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
158
+
159
+ "use strict";
160
+ // ESM COMPAT FLAG
161
+ __webpack_require__.r(__webpack_exports__);
162
+
163
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"b8cd9b04-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/component/Picker.vue?vue&type=template&id=4a866a03
164
+ var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"date-picker"},[(_vm.type !== 'quarter')?_c('el-date-picker',_vm._g(_vm._b({attrs:{"type":_vm.pickerType,"value-format":_vm.valueFormat,"disabled":_vm.disabled,"placeholder":_vm.placeholder,"popper-append-to-body":"","popper-class":"base-date-popper"},model:{value:(_vm.innerValue),callback:function ($$v) {_vm.innerValue=$$v},expression:"innerValue"}},'el-date-picker',_vm.$attrs,false),_vm.$listeners)):_c('el-popover',{attrs:{"trigger":"manual","placement":"bottom-start","width":"240"},model:{value:(_vm.quarterPopVisible),callback:function ($$v) {_vm.quarterPopVisible=$$v},expression:"quarterPopVisible"}},[_c('div',{staticClass:"quarter-panel"},[_c('div',{staticClass:"quarter-header"},[_c('el-button',{attrs:{"icon":"el-icon-d-arrow-left"},on:{"click":function($event){_vm.year--}}}),_c('span',[_vm._v(_vm._s(_vm.year)+" 年")]),_c('el-button',{attrs:{"icon":"el-icon-d-arrow-right"},on:{"click":function($event){_vm.year++}}})],1),_c('div',{staticClass:"quarter-list"},_vm._l((4),function(q){return _c('div',{key:q,staticClass:"quarter-item",class:{ active: _vm.quarterNum === q },on:{"click":function($event){return _vm.selectQuarter(q)}}},[_vm._v(" Q"+_vm._s(q)+" ")])}),0)]),_c('el-input',{ref:"quarterInput",attrs:{"slot":"reference","size":"small","readonly":"","placeholder":_vm.placeholder,"disabled":_vm.disabled,"clearable":""},on:{"clear":_vm.handleClearQuarter},slot:"reference",model:{value:(_vm.quarterShowText),callback:function ($$v) {_vm.quarterShowText=$$v},expression:"quarterShowText"}},[_c('i',{staticClass:"el-icon-date",attrs:{"slot":"affix"},slot:"affix"})])],1)],1)
165
+ }
166
+ var staticRenderFns = []
167
+
168
+
169
+ // CONCATENATED MODULE: ./src/components/xt-date-picker/component/Picker.vue?vue&type=template&id=4a866a03
170
+
171
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/xt-date-picker/component/Picker.vue?vue&type=script&lang=js
172
+
173
+ /* harmony default export */ var Pickervue_type_script_lang_js = ({
174
+ name: 'BaseDatePicker',
175
+ inheritAttrs: false,
176
+ props: {
177
+ value: {
178
+ type: [String, null],
179
+ default: null
180
+ },
181
+ type: {
182
+ type: String,
183
+ default: 'date',
184
+ validator: val => ['date', 'month', 'year', 'quarter', 'week'].includes(val)
185
+ },
186
+ disabled: {
187
+ type: Boolean,
188
+ default: false
189
+ }
190
+ },
191
+ data() {
192
+ return {
193
+ quarterPopVisible: false,
194
+ year: new Date().getFullYear(),
195
+ quarterNum: null
196
+ }
197
+ },
198
+ computed: {
199
+ pickerType() {
200
+ return this.type === 'quarter' ? null : this.type
201
+ },
202
+ placeholder() {
203
+ const map = {
204
+ date: '请选择日期',
205
+ month: '请选择月份',
206
+ year: '请选择年份',
207
+ quarter: '请选择季度',
208
+ week: '请选择周'
209
+ }
210
+ return map[this.type] || '请选择日期'
211
+ },
212
+ valueFormat() {
213
+ const map = {
214
+ date: 'yyyy-MM-dd',
215
+ month: 'yyyy-MM',
216
+ year: 'yyyy',
217
+ quarter: 'yyyy-Qq',
218
+ week: 'yyyy-WW'
219
+ }
220
+ return map[this.type] || 'yyyy-MM-dd'
221
+ },
222
+ innerValue: {
223
+ get() { return this.value },
224
+ set(val) { this.$emit('input', val) }
225
+ },
226
+ quarterShowText() {
227
+ if (!this.value) return ''
228
+ return `${this.year}-Q${this.quarterNum}`
229
+ }
230
+ },
231
+ watch: {
232
+ value: {
233
+ handler(val) {
234
+ if (this.type !== 'quarter' || !val) {
235
+ this.quarterNum = null
236
+ return
237
+ }
238
+ const [y, q] = val.split('-Q')
239
+ this.year = Number(y)
240
+ this.quarterNum = Number(q)
241
+ },
242
+ immediate: true
243
+ }
244
+ },
245
+ methods: {
246
+ selectQuarter(q) {
247
+ this.quarterNum = q
248
+ const val = `${this.year}-Q${q}`
249
+ this.$emit('input', val)
250
+ this.quarterPopVisible = false
251
+ },
252
+ handleClearQuarter() {
253
+ this.quarterNum = null
254
+ this.$emit('input', null)
255
+ }
256
+ },
257
+ mounted() {
258
+ if (this.type === 'quarter' && this.$refs.quarterInput) {
259
+ this.$refs.quarterInput.$el.addEventListener('click', () => {
260
+ if (!this.disabled) this.quarterPopVisible = true
261
+ })
262
+ }
263
+ }
264
+ });
265
+
266
+ // CONCATENATED MODULE: ./src/components/xt-date-picker/component/Picker.vue?vue&type=script&lang=js
267
+ /* harmony default export */ var component_Pickervue_type_script_lang_js = (Pickervue_type_script_lang_js);
268
+ // EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
269
+ var componentNormalizer = __webpack_require__("2877");
270
+
271
+ // CONCATENATED MODULE: ./src/components/xt-date-picker/component/Picker.vue
272
+
273
+
274
+
275
+
276
+
277
+ /* normalize component */
278
+
279
+ var component = Object(componentNormalizer["a" /* default */])(
280
+ component_Pickervue_type_script_lang_js,
281
+ render,
282
+ staticRenderFns,
283
+ false,
284
+ null,
285
+ null,
286
+ null
287
+
288
+ )
289
+
290
+ /* harmony default export */ var Picker = __webpack_exports__["default"] = (component.exports);
291
+
292
+ /***/ })
293
+
294
+ }]);