xt-element-ui 1.3.0 → 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.
- package/docs/components/base/xt-map.md +331 -0
- package/docs/components/base/xt-step-price.md +103 -217
- package/lib/index.common.js +2109 -38
- package/lib/index.css +1 -1
- package/lib/index.umd.js +2109 -38
- package/lib/index.umd.min.js +5 -5
- package/package.json +4 -3
- package/src/components/ex-button/index.js +8 -2
- package/src/components/ex-chart/index.js +6 -0
- package/src/components/ex-date-picker/index.js +8 -2
- package/src/components/ex-icon/index.js +6 -0
- package/src/components/ex-page/index.js +8 -2
- package/src/components/ex-select-tree/index.js +8 -2
- package/src/components/ex-table/index.js +6 -0
- package/src/components/ex-upload/index.js +6 -0
- package/src/components/xt-button/index.js +8 -2
- package/src/components/xt-card/index.js +8 -2
- package/src/components/xt-card-item/index.js +8 -2
- package/src/components/xt-config-provider/index.js +6 -0
- package/src/components/xt-flex-box/index.js +8 -2
- package/src/components/xt-flex-box/style/index.scss +0 -9
- package/src/components/xt-grid-box/index.js +8 -2
- package/src/components/xt-grid-item/index.js +7 -1
- package/src/components/xt-input/index.js +8 -2
- package/src/components/xt-map/adapters/amap.js +235 -0
- package/src/components/xt-map/adapters/baidu.js +254 -0
- package/src/components/xt-map/adapters/base.js +267 -0
- package/src/components/xt-map/adapters/index.js +29 -0
- package/src/components/xt-map/adapters/tianditu.js +242 -0
- package/src/components/xt-map/config/xt-map-config.js +197 -0
- package/src/components/xt-map/index.js +22 -0
- package/src/components/xt-map/index.vue +351 -0
- package/src/components/xt-map/loaders/script-loader.js +114 -0
- package/src/components/xt-map/provider.vue +200 -0
- package/src/components/xt-map/style/index.scss +77 -0
- package/src/components/xt-step-price/index.js +9 -0
- package/src/components/xt-step-price-item/index.js +6 -0
- package/src/components/xt-step-price-item/index.vue +3 -1
- package/src/components/xt-text/index.js +8 -2
- package/src/components/xt-time/index.js +6 -0
- package/src/index.js +6 -0
|
@@ -1,280 +1,166 @@
|
|
|
1
1
|
## XtStepPrice 阶梯价格组件
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
用于配置阶梯式价格、数量区间等场景,支持区间自动校正、批量删除、自定义字段名等功能。
|
|
4
4
|
|
|
5
|
-
|
|
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
|
-
|
|
14
|
-
|
|
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
|
-
|
|
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
|
-
|
|
39
|
-
|
|
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
|
-
|
|
48
|
-
|
|
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
|
-
|
|
67
|
-
|
|
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
|
-
|
|
75
|
-
|
|
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
|
-
<
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
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
|
-
|
|
65
|
+
priceSteps: [
|
|
117
66
|
{ min: 0, max: 100, price: 10 },
|
|
118
|
-
{ min: 100, max:
|
|
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
|
-
|
|
76
|
+
### 自定义字段名
|
|
132
77
|
|
|
133
|
-
::: demo 限制阶梯数量
|
|
134
78
|
```vue
|
|
135
79
|
<template>
|
|
136
|
-
<XtStepPrice
|
|
137
|
-
|
|
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
|
-
|
|
145
|
-
{
|
|
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
|
-
|
|
101
|
+
### 禁用状态
|
|
155
102
|
|
|
156
|
-
::: demo 使用 XtStepPriceItem 自定义布局
|
|
157
103
|
```vue
|
|
158
|
-
<
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
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
|
-
###
|
|
111
|
+
### 属性说明
|
|
229
112
|
|
|
230
113
|
| 属性 | 类型 | 默认值 | 说明 |
|
|
231
114
|
|------|------|--------|------|
|
|
232
|
-
| `value`
|
|
233
|
-
| `
|
|
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
|
-
| `
|
|
241
|
-
| `
|
|
242
|
-
| `
|
|
243
|
-
| `
|
|
244
|
-
| `
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
| `
|
|
254
|
-
|
|
255
|
-
|
|
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
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
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.
|
|
277
|
-
2.
|
|
278
|
-
3.
|
|
279
|
-
4.
|
|
280
|
-
5. `
|
|
162
|
+
1. **区间逻辑**:采用左闭右闭 `[min, max]`,最后一级自动处理为 `[min, +∞)`
|
|
163
|
+
2. **空值处理**:当 `v-model` 为空数组时,会自动生成默认阶梯(可通过 `defaultFirst=false` 关闭)
|
|
164
|
+
3. **精度控制**:所有输入值会自动按 `precision` 四舍五入
|
|
165
|
+
4. **性能优化**:当阶梯数量较多时,建议设置 `limit` 限制最大数量
|
|
166
|
+
5. **字段名映射**:`fieldKeys` 必须与传入的 `value` 字段名完全匹配
|