xt-element-ui 1.2.8 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/docs/components/base/xt-map.md +331 -0
  2. package/docs/components/base/xt-step-price.md +103 -217
  3. package/lib/index.common.js +2218 -87
  4. package/lib/index.css +1 -1
  5. package/lib/index.umd.js +2218 -87
  6. package/lib/index.umd.min.js +5 -5
  7. package/package.json +4 -3
  8. package/src/components/ex-button/index.js +8 -2
  9. package/src/components/ex-chart/index.js +6 -0
  10. package/src/components/ex-date-picker/index.js +8 -2
  11. package/src/components/ex-icon/index.js +6 -0
  12. package/src/components/ex-page/index.js +8 -2
  13. package/src/components/ex-select-tree/index.js +8 -2
  14. package/src/components/ex-table/index.js +6 -0
  15. package/src/components/ex-upload/index.js +6 -0
  16. package/src/components/xt-button/index.js +8 -2
  17. package/src/components/xt-button/index.vue +53 -10
  18. package/src/components/xt-button/style/index.scss +147 -43
  19. package/src/components/xt-card/index.js +8 -2
  20. package/src/components/xt-card-item/index.js +8 -2
  21. package/src/components/xt-config-provider/index.js +6 -0
  22. package/src/components/xt-flex-box/index.js +8 -2
  23. package/src/components/xt-flex-box/style/index.scss +0 -9
  24. package/src/components/xt-grid-box/index.js +8 -2
  25. package/src/components/xt-grid-item/index.js +7 -1
  26. package/src/components/xt-input/index.js +8 -2
  27. package/src/components/xt-input/index.vue +66 -37
  28. package/src/components/xt-input/style/index.scss +70 -13
  29. package/src/components/xt-map/adapters/amap.js +235 -0
  30. package/src/components/xt-map/adapters/baidu.js +254 -0
  31. package/src/components/xt-map/adapters/base.js +267 -0
  32. package/src/components/xt-map/adapters/index.js +29 -0
  33. package/src/components/xt-map/adapters/tianditu.js +242 -0
  34. package/src/components/xt-map/config/xt-map-config.js +197 -0
  35. package/src/components/xt-map/index.js +22 -0
  36. package/src/components/xt-map/index.vue +351 -0
  37. package/src/components/xt-map/loaders/script-loader.js +114 -0
  38. package/src/components/xt-map/provider.vue +200 -0
  39. package/src/components/xt-map/style/index.scss +77 -0
  40. package/src/components/xt-step-price/index.js +9 -0
  41. package/src/components/xt-step-price/index.vue +12 -10
  42. package/src/components/xt-step-price/style/index.scss +32 -24
  43. package/src/components/xt-step-price-item/index.js +6 -0
  44. package/src/components/xt-step-price-item/index.vue +13 -9
  45. package/src/components/xt-text/index.js +8 -2
  46. package/src/components/xt-time/index.js +6 -0
  47. package/src/index.js +6 -0
@@ -1,280 +1,166 @@
1
1
  ## XtStepPrice 阶梯价格组件
2
2
 
3
- 用于配置「根据数量区间 → 单价」阶梯型价格配置。
3
+ 用于配置阶梯式价格、数量区间等场景,支持区间自动校正、批量删除、自定义字段名等功能。
4
4
 
5
- - 最小数量从 `0` 开始,最后一档为 `[min, +∞)`
6
- - 支持动态增减阶梯;删除后前后区间自动对接到一起保证连续性
7
- - 提供 `XtStepPriceItem` 子组件,方便自定义场景下单独使用
5
+ ### 核心特性
8
6
 
9
- ## 基本用法
7
+ - **区间自动校正**:保证区间连续且不重叠,自动处理左闭右闭逻辑
8
+ - **批量操作**:支持新增、删除档位,达到上限时自动禁用新增
9
+ - **自定义字段名**:允许传入自定义字段名映射(如 min/max/price 可改为 start/end/value)
10
+ - **单位与精度**:支持自定义货币单位和小数精度
11
+ - **括号逻辑**:自动处理括号显示(单条显示 `]`,多条显示 `)`)
12
+
13
+ ### 安装与引入
14
+
15
+ #### 方式1:全量引入(推荐)
10
16
 
11
- ::: demo 基本用法
12
17
  ```vue
13
- <template>
14
- <XtStepPrice v-model="items" title="阶梯价格" />
15
- <XtText size="small" style="margin-top: 12px;">当前值:{{ JSON.stringify(items) }}</XtText>
16
- </template>
18
+ import Vue from 'vue'
19
+ import XtElementUI from 'xt-element-ui'
17
20
 
18
- <script>
19
- export default {
20
- data() {
21
- return {
22
- items: [
23
- { min: 0, max: 100, price: 10 },
24
- { min: 100, max: 500, price: 8 },
25
- { min: 500, max: null, price: 5 }
26
- ]
27
- }
28
- }
29
- }
30
- </script>
21
+ Vue.use(XtElementUI)
31
22
  ```
32
- :::
33
23
 
34
- ## 自定义单位和小数位
24
+ #### 方式2:单独引入(支持 Vue.use)
35
25
 
36
- ::: demo 自定义单位和小数位
37
26
  ```vue
38
- <template>
39
- <XtStepPrice
40
- v-model="items"
41
- title="批发阶梯价(美元,保留 4 位小数)"
42
- unit="美元"
43
- :precision="4"
44
- />
45
- </template>
27
+ import Vue from 'vue'
28
+ import XtStepPrice from 'xt-element-ui/src/components/xt-step-price'
46
29
 
47
- <script>
48
- export default {
49
- data() {
50
- return {
51
- items: [
52
- { min: 0, max: 100, price: 1.25 },
53
- { min: 100, max: null, price: 0.85 }
54
- ]
55
- }
56
- }
57
- }
58
- </script>
30
+ // 自动注册 XtStepPrice 和 XtStepPriceItem
31
+ Vue.use(XtStepPrice)
59
32
  ```
60
- :::
61
33
 
62
- ## 只读态
34
+ #### 方式3:手动注册组件
63
35
 
64
- ::: demo 只读态
65
36
  ```vue
66
- <template>
67
- <XtStepPrice
68
- v-model="items"
69
- title="阶梯价格(只读)"
70
- disabled
71
- />
72
- </template>
37
+ import Vue from 'vue'
38
+ import { XtStepPrice, XtStepPriceItem } from 'xt-element-ui/src/components/xt-step-price'
73
39
 
74
- <script>
75
- export default {
76
- data() {
77
- return {
78
- items: [
79
- { min: 0, max: 100, price: 10 },
80
- { min: 100, max: 500, price: 8 },
81
- { min: 500, max: null, price: 5 }
82
- ]
83
- }
84
- }
85
- }
86
- </script>
40
+ Vue.component(XtStepPrice.name, XtStepPrice)
41
+ Vue.component(XtStepPriceItem.name, XtStepPriceItem)
87
42
  ```
88
- :::
89
43
 
90
- ## 自定义括号与字段名
44
+ ### 基本用法
91
45
 
92
- ::: demo 自定义括号与字段名
93
46
  ```vue
94
47
  <template>
95
- <XtStepPrice
96
- v-model="items"
97
- title="自定义括号"
98
- left-bracket="("
99
- right-bracket="]"
100
- />
101
- <XtText size="small" style="margin-top: 12px;">输出:{{ JSON.stringify(items) }}</XtText>
102
-
103
- <XtStepPrice
104
- v-model="backendItems"
105
- title="适配后端字段结构"
106
- :field-keys="{ min: 'low', max: 'high', price: 'unitPrice' }"
107
- style="margin-top: 24px;"
108
- />
109
- <XtText size="small" style="margin-top: 12px;">后端字段:{{ JSON.stringify(backendItems) }}</XtText>
48
+ <div style="width: 600px;">
49
+ <XtStepPrice
50
+ v-model="priceSteps"
51
+ title="阶梯价格"
52
+ unit=""
53
+ :precision="2"
54
+ :limit="5"
55
+ :step="10"
56
+ tip="区间左闭右闭 [min, max],最后一级为 [min, +∞)"
57
+ />
58
+ </div>
110
59
  </template>
111
60
 
112
61
  <script>
113
62
  export default {
114
63
  data() {
115
64
  return {
116
- items: [
65
+ priceSteps: [
117
66
  { min: 0, max: 100, price: 10 },
118
- { min: 100, max: null, price: 5 }
119
- ],
120
- backendItems: [
121
- { low: 0, high: 200, unitPrice: 15 },
122
- { low: 200, high: null, unitPrice: 8 }
67
+ { min: 100, max: 500, price: 9 },
68
+ { min: 500, max: Infinity, price: 8 }
123
69
  ]
124
70
  }
125
71
  }
126
72
  }
127
73
  </script>
128
74
  ```
129
- :::
130
75
 
131
- ## 限制阶梯数量(limit)
76
+ ### 自定义字段名
132
77
 
133
- ::: demo 限制阶梯数量
134
78
  ```vue
135
79
  <template>
136
- <XtStepPrice v-model="items" title="最多 3 档" :limit="3" />
137
- <XtText size="small" style="margin-top: 12px;">输出:{{ JSON.stringify(items) }}</XtText>
80
+ <XtStepPrice
81
+ v-model="customSteps"
82
+ :field-keys="{ min: 'start', max: 'end', price: 'value' }"
83
+ title="自定义字段名"
84
+ />
138
85
  </template>
139
86
 
140
87
  <script>
141
88
  export default {
142
89
  data() {
143
90
  return {
144
- items: [
145
- { min: 0, max: 100, price: 10 }
91
+ customSteps: [
92
+ { start: 0, end: 100, value: 10 },
93
+ { start: 100, end: 500, value: 9 }
146
94
  ]
147
95
  }
148
96
  }
149
97
  }
150
98
  </script>
151
99
  ```
152
- :::
153
100
 
154
- ## 使用 XtStepPriceItem 自定义布局
101
+ ### 禁用状态
155
102
 
156
- ::: demo 使用 XtStepPriceItem 自定义布局
157
103
  ```vue
158
- <template>
159
- <div style="display: flex; flex-direction: column; gap: 8px;">
160
- <XtStepPriceItem
161
- v-for="(item, idx) in items"
162
- :key="idx"
163
- :value="item"
164
- :index="idx"
165
- :is-first="idx === 0"
166
- :is-last="idx === items.length - 1"
167
- :items-length="items.length"
168
- :min-locked="idx !== 0"
169
- @input="(val) => onInput(val, idx)"
170
- @delete="onDelete"
171
- />
172
- <el-button size="small" type="primary" plain icon="el-icon-plus" @click="onAdd">新增</el-button>
173
- </div>
174
- </template>
175
-
176
- <script>
177
- export default {
178
- data() {
179
- return {
180
- items: [
181
- { min: 0, max: 100, price: 10 },
182
- { min: 100, max: null, price: 6 }
183
- ]
184
- }
185
- },
186
- methods: {
187
- onInput(val, idx) {
188
- this.$set(this.items, idx, val)
189
- },
190
- onAdd() {
191
- const last = this.items[this.items.length - 1]
192
- if (!last) {
193
- this.items.push({ min: 0, max: null, price: 0 })
194
- return
195
- }
196
- const cur = { min: last.min, max: last.min + 1, price: last.price }
197
- last.min = cur.max
198
- this.items.splice(this.items.length - 1, 0, cur)
199
- },
200
- onDelete(idx) {
201
- if (this.items.length <= 1) return
202
- this.items.splice(idx, 1)
203
- }
204
- }
205
- }
206
- </script>
104
+ <XtStepPrice
105
+ v-model="priceSteps"
106
+ disabled
107
+ title="禁用状态"
108
+ />
207
109
  ```
208
- :::
209
-
210
- ## 属性说明
211
-
212
- ### XtStepPrice
213
-
214
- | 属性 | 类型 | 默认值 | 说明 |
215
- |------|------|--------|------|
216
- | `value` | `Array<{min, max, price}>` | `[{min:0, max:null, price:0}]` | 阶梯数组,`v-model` 绑定,支持 `.sync` 风格亦可 |
217
- | `title` | String | `''` | 标题 |
218
- | `unit` | String | `'元'` | 价格单位 |
219
- | `precision` | Number | `2` | 价格小数位(失焦后自动格式化) |
220
- | `left-bracket` | String | `'['` | 左括号显示字符,传空字符串则不显示 |
221
- | `right-bracket` | String | `null` | 右括号显示字符;传 `null` 走内置规则(仅 1 条时为 `]`,多条为 `)`),传具体值则强制显示 |
222
- | `field-keys` | `{min, max, price}` | `{min:'min', max:'max', price:'price'}` | 自定义字段名映射 |
223
- | `limit` | Number | `0` | 阶梯数量上限;`<= 0` 表示不限制;达到上限时隐藏新增按钮并提示 |
224
- | `disabled` | Boolean | `false` | 是否禁用/只读 |
225
- | `tip` | String | 中文提示文案 | 底部提示文案 |
226
- | `default-first` | Boolean | `true` | 传入空数组时是否自动生成首条 `[0, +∞)` |
227
110
 
228
- ### XtStepPriceItem
111
+ ### 属性说明
229
112
 
230
113
  | 属性 | 类型 | 默认值 | 说明 |
231
114
  |------|------|--------|------|
232
- | `value` | `{min, max, price}` | `{min: 0, max: null, price: 0}` | 单条阶梯的值 |
233
- | `index` | Number | `0` | 索引,用于事件回调 |
234
- | `is-first` | Boolean | `false` | 是否首条(首条 `min` 固定为 `0` 且锁定不可改) |
235
- | `is-last` | Boolean | `false` | 是否末条(末条 `max` 显示为 `+∞`) |
236
- | `items-length` | Number | `1` | 当前阶梯总数,用于决定是否可删除及右括号默认策略 |
237
- | `min-locked` | Boolean | `false` | 是否锁定 `min` 输入框 |
115
+ | `value` / `v-model` | Array | `[]` | 阶梯数据数组,每个元素包含 `min`/`max`/`price` 字段 |
116
+ | `title` | String | `''` | 标题文本 |
238
117
  | `unit` | String | `'元'` | 价格单位 |
239
- | `precision` | Number | `2` | 价格小数位 |
240
- | `left-bracket` | String | `'['` | 左括号显示字符 |
241
- | `right-bracket` | String | `null` | 右括号;为 `null` 走默认逻辑(仅 1 条→ `]`,多条→ `)`) |
242
- | `field-keys` | `{min, max, price}` | `{min:'min', max:'max', price:'price'}` | 自定义字段名映射 |
243
- | `removable` | Boolean | `true` | 是否可删除(`removable=true` `items-length>1` 时才显示删除按钮) |
244
- | `disabled` | Boolean | `false` | 是否禁用 |
245
-
246
- ## 事件
247
-
248
- ### XtStepPrice
249
-
250
- | 事件 | 说明 | 参数 |
251
- |------|------|------|
252
- | `input` | 值变化(v-model 自动更新) | 最新的 items 数组 |
253
- | `change` | 任何引起值变化的动作(新增/删除/修改) | 最新的 items 数组 |
254
-
255
- ### XtStepPriceItem
118
+ | `precision` | Number | `2` | 价格小数精度 |
119
+ | `leftBracket` | String | `'['` | 左括号,传空字符串则不显示 |
120
+ | `rightBracket` | String | `null` | 右括号,默认自动逻辑(单条 `]`,多条 `)`);传具体值强制使用 |
121
+ | `fieldKeys` | Object | `{ min: 'min', max: 'max', price: 'price' }` | 字段名映射,支持自定义字段名 |
122
+ | `limit` | Number | `0` | 阶梯数量上限,<=0 表示不限制 |
123
+ | `step` | Number | `10` | 阶梯增量,新增时自动填充下一级的 min 值 |
124
+ | `disabled` | Boolean | `false` | 是否禁用所有操作 |
125
+ | `tip` | String | `'区间左闭右闭 [min, max],最后一级为 [min, +∞),保证连续且不重叠。'` | 底部提示文本 |
126
+ | `defaultFirst` | Boolean | `true` | 空数组时是否自动生成默认阶梯 |
127
+
128
+ ### 事件
129
+
130
+ | 事件名 | 说明 | 参数 |
131
+ |--------|------|------|
132
+ | `input` | 数据变化时触发 | 最新的阶梯数组 |
133
+ | `add` | 新增档位时触发 | 新增的档位数据 |
134
+ | `delete` | 删除档位时触发 | 删除的档位索引和数据 |
135
+ | `change` | 任一档位数据变化时触发 | 变化后的完整阶梯数组 |
136
+
137
+ ### 插槽
138
+
139
+ | 插槽名 | 说明 |
140
+ |--------|------|
141
+ | `header` | 标题栏右侧自定义内容 |
142
+ | `tip` | 底部提示区域自定义内容 |
143
+
144
+ ### XtStepPriceItem 子组件(单独使用)
256
145
 
257
- | 事件 | 说明 | 参数 |
258
- |------|------|------|
259
- | `input` | 该条值变化 | `{min, max, price}` |
260
- | `change` | 该条值变化 | `{min, max, price}, index` |
261
- | `min-change` | min 失焦修改 | `min, index` |
262
- | `max-change` | max 失焦修改 | `max, index` |
263
- | `delete` | 点击删除 | `index` |
264
-
265
- ## 插槽
266
-
267
- ### XtStepPrice
268
-
269
- | 插槽 | 说明 |
270
- |------|------|
271
- | `header` | 头部右侧自定义内容 |
272
- | `tip` | 底部提示自定义内容 |
146
+ ```vue
147
+ <XtStepPriceItem
148
+ v-model="item"
149
+ :index="0"
150
+ :is-first="true"
151
+ :is-last="true"
152
+ :items-length="1"
153
+ :unit="'元'"
154
+ :precision="2"
155
+ @input="onItemInput"
156
+ @delete="onDelete"
157
+ />
158
+ ```
273
159
 
274
- ## 注意事项
160
+ ### 注意事项
275
161
 
276
- 1. **首条 `min` 固定为 `0` 且锁定不可编辑,保证最小数量从 0 开始。
277
- 2. **末条 `max` 固定为 `+∞`,保证任何数量都能匹配到一个区间。
278
- 3. **连续性保证**:任意两条相邻阶梯,后一条的 `min` 始终等于前一条的 `max`;删除中间阶梯后,前后自动对接到一起。
279
- 4. 容器内的 `XtStepPriceItem` 的 `min` 输入框对非首条默认锁定,避免用户误操作破坏连续性;如需自由编辑,可单独使用 `XtStepPriceItem` 自行管理数据。
280
- 5. `price` 输入值小于 `0` 时自动修正为 `0`。
162
+ 1. **区间逻辑**:采用左闭右闭 `[min, max]`,最后一级自动处理为 `[min, +∞)`
163
+ 2. **空值处理**:当 `v-model` 为空数组时,会自动生成默认阶梯(可通过 `defaultFirst=false` 关闭)
164
+ 3. **精度控制**:所有输入值会自动按 `precision` 四舍五入
165
+ 4. **性能优化**:当阶梯数量较多时,建议设置 `limit` 限制最大数量
166
+ 5. **字段名映射**:`fieldKeys` 必须与传入的 `value` 字段名完全匹配