xt-element-ui 1.2.6 → 1.2.8
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/README.md +1 -1
- package/docs/README.md +1 -1
- package/docs/components/base/xt-card-item.md +1 -1
- package/docs/components/base/xt-step-price.md +280 -0
- package/docs/components/base/xt-time.md +165 -0
- package/docs/components/extend/ex-date-picker.md +0 -0
- package/lib/index.common.js +810 -61
- package/lib/index.css +1 -1
- package/lib/index.umd.js +810 -61
- package/lib/index.umd.min.js +4 -4
- package/package.json +4 -4
- package/src/components/ex-chart/theme/dark.js +5 -4
- package/src/components/ex-chart/theme/white.js +1 -0
- package/src/components/ex-date-picker/index.js +2 -0
- package/src/components/{xt-date-picker → ex-date-picker}/index.vue +1 -1
- package/src/components/index.scss +6 -0
- package/src/components/xt-card-item/index.vue +3 -1
- package/src/components/xt-step-price/index.js +2 -0
- package/src/components/xt-step-price/index.vue +270 -0
- package/src/components/xt-step-price/style/index.scss +115 -0
- package/src/components/xt-step-price-item/index.js +2 -0
- package/src/components/xt-step-price-item/index.vue +183 -0
- package/src/components/xt-time/index.js +2 -0
- package/src/components/xt-time/index.vue +313 -0
- package/src/components/xt-time/style/index.scss +23 -0
- package/src/index.js +12 -3
- package/src/components/xt-date-picker/index.js +0 -2
- /package/src/components/{xt-date-picker → ex-date-picker}/SearchDate.vue +0 -0
- /package/src/components/{xt-date-picker → ex-date-picker}/quarter.vue +0 -0
package/README.md
CHANGED
|
@@ -94,7 +94,6 @@ Vue.component('ExBar', ExBar)
|
|
|
94
94
|
| **XtGridItem** | 网格子项组件 |
|
|
95
95
|
| **XtText** | 文本组件 |
|
|
96
96
|
| **XtInput** | 输入框组件 |
|
|
97
|
-
| **XtDatePicker** | 日期选择组件 |
|
|
98
97
|
| **XtConfigProvider** | 全局配置提供器 |
|
|
99
98
|
|
|
100
99
|
### Ex 组件(扩展组件)
|
|
@@ -112,6 +111,7 @@ Vue.component('ExBar', ExBar)
|
|
|
112
111
|
| **ExSelectTree** | 下拉选择树组件 |
|
|
113
112
|
| **ExUpload** | 上传组件(支持图片预览) |
|
|
114
113
|
| **ExPage** | 页面组件 |
|
|
114
|
+
| **ExDatePicker** | 日期选择组件 |
|
|
115
115
|
| **ExIcon** | 图标组件(支持 SVG / 字体图标) |
|
|
116
116
|
|
|
117
117
|
---
|
package/docs/README.md
CHANGED
|
@@ -54,7 +54,6 @@ Vue.use(XtElementUI)
|
|
|
54
54
|
| **XtGridBox** | 网格布局组件 |
|
|
55
55
|
| **XtText** | 文本组件 |
|
|
56
56
|
| **XtInput** | 输入框组件 |
|
|
57
|
-
| **XtDatePicker** | 日期选择组件 |
|
|
58
57
|
| **XtConfigProvider** | 全局配置提供器 |
|
|
59
58
|
|
|
60
59
|
### ✨ Ex 组件(扩展组件)
|
|
@@ -70,6 +69,7 @@ Vue.use(XtElementUI)
|
|
|
70
69
|
| **ExSelectTree** | 下拉选择树组件 |
|
|
71
70
|
| **ExUpload** | 上传组件(支持图片预览) |
|
|
72
71
|
| **ExPage** | 页面组件 |
|
|
72
|
+
| **ExDatePicker** | 日期选择组件 |
|
|
73
73
|
| **ExIcon** | 图标组件(支持 SVG / 字体图标) |
|
|
74
74
|
|
|
75
75
|
---
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
## XtStepPrice 阶梯价格组件
|
|
2
|
+
|
|
3
|
+
用于配置「根据数量区间 → 单价」阶梯型价格配置。
|
|
4
|
+
|
|
5
|
+
- 最小数量从 `0` 开始,最后一档为 `[min, +∞)`
|
|
6
|
+
- 支持动态增减阶梯;删除后前后区间自动对接到一起保证连续性
|
|
7
|
+
- 提供 `XtStepPriceItem` 子组件,方便自定义场景下单独使用
|
|
8
|
+
|
|
9
|
+
## 基本用法
|
|
10
|
+
|
|
11
|
+
::: demo 基本用法
|
|
12
|
+
```vue
|
|
13
|
+
<template>
|
|
14
|
+
<XtStepPrice v-model="items" title="阶梯价格" />
|
|
15
|
+
<XtText size="small" style="margin-top: 12px;">当前值:{{ JSON.stringify(items) }}</XtText>
|
|
16
|
+
</template>
|
|
17
|
+
|
|
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>
|
|
31
|
+
```
|
|
32
|
+
:::
|
|
33
|
+
|
|
34
|
+
## 自定义单位和小数位
|
|
35
|
+
|
|
36
|
+
::: demo 自定义单位和小数位
|
|
37
|
+
```vue
|
|
38
|
+
<template>
|
|
39
|
+
<XtStepPrice
|
|
40
|
+
v-model="items"
|
|
41
|
+
title="批发阶梯价(美元,保留 4 位小数)"
|
|
42
|
+
unit="美元"
|
|
43
|
+
:precision="4"
|
|
44
|
+
/>
|
|
45
|
+
</template>
|
|
46
|
+
|
|
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>
|
|
59
|
+
```
|
|
60
|
+
:::
|
|
61
|
+
|
|
62
|
+
## 只读态
|
|
63
|
+
|
|
64
|
+
::: demo 只读态
|
|
65
|
+
```vue
|
|
66
|
+
<template>
|
|
67
|
+
<XtStepPrice
|
|
68
|
+
v-model="items"
|
|
69
|
+
title="阶梯价格(只读)"
|
|
70
|
+
disabled
|
|
71
|
+
/>
|
|
72
|
+
</template>
|
|
73
|
+
|
|
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>
|
|
87
|
+
```
|
|
88
|
+
:::
|
|
89
|
+
|
|
90
|
+
## 自定义括号与字段名
|
|
91
|
+
|
|
92
|
+
::: demo 自定义括号与字段名
|
|
93
|
+
```vue
|
|
94
|
+
<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>
|
|
110
|
+
</template>
|
|
111
|
+
|
|
112
|
+
<script>
|
|
113
|
+
export default {
|
|
114
|
+
data() {
|
|
115
|
+
return {
|
|
116
|
+
items: [
|
|
117
|
+
{ 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 }
|
|
123
|
+
]
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
</script>
|
|
128
|
+
```
|
|
129
|
+
:::
|
|
130
|
+
|
|
131
|
+
## 限制阶梯数量(limit)
|
|
132
|
+
|
|
133
|
+
::: demo 限制阶梯数量
|
|
134
|
+
```vue
|
|
135
|
+
<template>
|
|
136
|
+
<XtStepPrice v-model="items" title="最多 3 档" :limit="3" />
|
|
137
|
+
<XtText size="small" style="margin-top: 12px;">输出:{{ JSON.stringify(items) }}</XtText>
|
|
138
|
+
</template>
|
|
139
|
+
|
|
140
|
+
<script>
|
|
141
|
+
export default {
|
|
142
|
+
data() {
|
|
143
|
+
return {
|
|
144
|
+
items: [
|
|
145
|
+
{ min: 0, max: 100, price: 10 }
|
|
146
|
+
]
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
</script>
|
|
151
|
+
```
|
|
152
|
+
:::
|
|
153
|
+
|
|
154
|
+
## 使用 XtStepPriceItem 自定义布局
|
|
155
|
+
|
|
156
|
+
::: demo 使用 XtStepPriceItem 自定义布局
|
|
157
|
+
```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>
|
|
207
|
+
```
|
|
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
|
+
|
|
228
|
+
### XtStepPriceItem
|
|
229
|
+
|
|
230
|
+
| 属性 | 类型 | 默认值 | 说明 |
|
|
231
|
+
|------|------|--------|------|
|
|
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` 输入框 |
|
|
238
|
+
| `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
|
|
256
|
+
|
|
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` | 底部提示自定义内容 |
|
|
273
|
+
|
|
274
|
+
## 注意事项
|
|
275
|
+
|
|
276
|
+
1. **首条 `min` 固定为 `0` 且锁定不可编辑,保证最小数量从 0 开始。
|
|
277
|
+
2. **末条 `max` 固定为 `+∞`,保证任何数量都能匹配到一个区间。
|
|
278
|
+
3. **连续性保证**:任意两条相邻阶梯,后一条的 `min` 始终等于前一条的 `max`;删除中间阶梯后,前后自动对接到一起。
|
|
279
|
+
4. 容器内的 `XtStepPriceItem` 的 `min` 输入框对非首条默认锁定,避免用户误操作破坏连续性;如需自由编辑,可单独使用 `XtStepPriceItem` 自行管理数据。
|
|
280
|
+
5. `price` 输入值小于 `0` 时自动修正为 `0`。
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
## XtTime 时间组件
|
|
2
|
+
|
|
3
|
+
集三种模式于一身的时间组件:当前时间实时显示、目标时间倒计时、日期文本格式化展示。
|
|
4
|
+
|
|
5
|
+
## 基本用法
|
|
6
|
+
|
|
7
|
+
### 三种显示模式
|
|
8
|
+
|
|
9
|
+
::: demo 三种显示模式
|
|
10
|
+
```vue
|
|
11
|
+
<template>
|
|
12
|
+
<div style="display: flex; flex-direction: column; gap: 12px;">
|
|
13
|
+
<div>当前时间:<XtTime type="now" /></div>
|
|
14
|
+
<div>距 2026-12-31:<XtTime type="countdown" target-time="2026-12-31 23:59:59" /></div>
|
|
15
|
+
<div>创建时间:<XtTime type="text" :value="1704067200000" /></div>
|
|
16
|
+
</div>
|
|
17
|
+
</template>
|
|
18
|
+
```
|
|
19
|
+
:::
|
|
20
|
+
|
|
21
|
+
## 属性说明
|
|
22
|
+
|
|
23
|
+
### 通用属性
|
|
24
|
+
|
|
25
|
+
| 属性 | 类型 | 默认值 | 可选值 | 说明 |
|
|
26
|
+
|------|------|--------|--------|------|
|
|
27
|
+
| `type` | String | `now` | `now`、`countdown`、`text` | 显示模式 |
|
|
28
|
+
| `format` | String | `YYYY-MM-DD HH:mm:ss` | - | `now` / `text` 模式下的日期格式 |
|
|
29
|
+
| `size` | String | base | `extra-large`、`large`、`medium`、`base`、`small`、`extra-small` | 字体大小 |
|
|
30
|
+
| `type-color` | String | - | `primary`、`success`、`warning`、`danger` | 颜色语义 |
|
|
31
|
+
| `bold` | Boolean | false | - | 是否加粗 |
|
|
32
|
+
| `prefix` | String | - | - | 前缀文本 |
|
|
33
|
+
| `suffix` | String | - | - | 后缀文本 |
|
|
34
|
+
| `empty-text` | String | `-` | - | 空值/无效值时展示的占位文本 |
|
|
35
|
+
| `hide-empty` | Boolean | false | - | 值为空时是否不渲染内容 |
|
|
36
|
+
| `interval` | Number | `1000` | `>= 100` | 刷新间隔(毫秒),仅 `now` / `countdown` 生效 |
|
|
37
|
+
|
|
38
|
+
### text 模式专属属性
|
|
39
|
+
|
|
40
|
+
| 属性 | 类型 | 默认值 | 说明 |
|
|
41
|
+
|------|------|--------|------|
|
|
42
|
+
| `value` | String / Number / Date | - | 待格式化的日期值,支持时间戳(10 位秒或 13 位毫秒)、Date 对象、`2024-01-01 12:00:00` 等字符串 |
|
|
43
|
+
|
|
44
|
+
### countdown 模式专属属性
|
|
45
|
+
|
|
46
|
+
| 属性 | 类型 | 默认值 | 可选值 | 说明 |
|
|
47
|
+
|------|------|--------|--------|------|
|
|
48
|
+
| `target-time` | String / Number / Date | - | - | 目标时间,取值同 `value` |
|
|
49
|
+
| `countdown-format` | String | `DHMS` | `DHMS`、`HMS`、`MS`、`SEC` | 倒计时显示格式 |
|
|
50
|
+
| `finished-text` | String | `已结束` | - | 倒计时结束后显示的文本 |
|
|
51
|
+
|
|
52
|
+
## 事件
|
|
53
|
+
|
|
54
|
+
| 事件名 | 说明 | 参数 |
|
|
55
|
+
|--------|------|------|
|
|
56
|
+
| `finish` | 倒计时结束触发(仅 `countdown` 模式) | - |
|
|
57
|
+
| `click` | 点击组件触发 | `(event: MouseEvent)` |
|
|
58
|
+
|
|
59
|
+
## 插槽
|
|
60
|
+
|
|
61
|
+
| 插槽 | 说明 |
|
|
62
|
+
|------|------|
|
|
63
|
+
| `prefix` | 前缀插槽,优先级高于 `prefix` 属性 |
|
|
64
|
+
| `suffix` | 后缀插槽,优先级高于 `suffix` 属性 |
|
|
65
|
+
| `finished` | 倒计时结束态自定义内容(仅 `countdown` 模式) |
|
|
66
|
+
| `default` | 自定义整体内容,覆盖默认渲染 |
|
|
67
|
+
|
|
68
|
+
## 示例
|
|
69
|
+
|
|
70
|
+
### 当前时间(now 模式)
|
|
71
|
+
|
|
72
|
+
::: demo 当前时间
|
|
73
|
+
```vue
|
|
74
|
+
<template>
|
|
75
|
+
<div style="display: flex; flex-direction: column; gap: 8px;">
|
|
76
|
+
<XtTime type="now" />
|
|
77
|
+
<XtTime type="now" format="YYYY年MM月DD日 HH时mm分ss秒" type-color="primary" bold />
|
|
78
|
+
<XtTime type="now" format="HH:mm:ss" size="extra-large" type-color="danger" />
|
|
79
|
+
</div>
|
|
80
|
+
</template>
|
|
81
|
+
```
|
|
82
|
+
:::
|
|
83
|
+
|
|
84
|
+
### 日期文本(text 模式)
|
|
85
|
+
|
|
86
|
+
`value` 支持时间戳、字符串、Date 对象,自动识别并格式化:
|
|
87
|
+
|
|
88
|
+
::: demo 日期文本
|
|
89
|
+
```vue
|
|
90
|
+
<template>
|
|
91
|
+
<div style="display: flex; flex-direction: column; gap: 8px;">
|
|
92
|
+
<XtTime type="text" value="2024-01-01 12:00:00" />
|
|
93
|
+
<XtTime type="text" :value="1704067200" format="YYYY-MM-DD" />
|
|
94
|
+
<XtTime type="text" :value="new Date('2024-06-15')" format="YYYY/MM/DD" />
|
|
95
|
+
<XtTime type="text" value="无效值" />
|
|
96
|
+
<XtTime type="text" value="2024-01-01" prefix="创建于 " type-color="success" />
|
|
97
|
+
</div>
|
|
98
|
+
</template>
|
|
99
|
+
```
|
|
100
|
+
:::
|
|
101
|
+
|
|
102
|
+
### 倒计时(countdown 模式)
|
|
103
|
+
|
|
104
|
+
::: demo 倒计时
|
|
105
|
+
```vue
|
|
106
|
+
<template>
|
|
107
|
+
<div style="display: flex; flex-direction: column; gap: 8px;">
|
|
108
|
+
<XtTime type="countdown" target-time="2026-12-31 23:59:59" />
|
|
109
|
+
<XtTime type="countdown" target-time="2026-12-31 23:59:59" countdown-format="HMS" type-color="primary" />
|
|
110
|
+
<XtTime type="countdown" target-time="2026-12-31 23:59:59" countdown-format="MS" />
|
|
111
|
+
<XtTime type="countdown" target-time="2026-12-31 23:59:59" countdown-format="SEC" suffix="后结束" />
|
|
112
|
+
<XtTime
|
|
113
|
+
type="countdown"
|
|
114
|
+
:target-time="Date.now() + 5000"
|
|
115
|
+
@finish="onFinish"
|
|
116
|
+
/>
|
|
117
|
+
</div>
|
|
118
|
+
</template>
|
|
119
|
+
|
|
120
|
+
<script>
|
|
121
|
+
export default {
|
|
122
|
+
methods: {
|
|
123
|
+
onFinish() {
|
|
124
|
+
this.$message && this.$message('倒计时结束!')
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
</script>
|
|
129
|
+
```
|
|
130
|
+
:::
|
|
131
|
+
|
|
132
|
+
### 自定义结束态(finished 插槽)
|
|
133
|
+
|
|
134
|
+
::: demo 自定义结束态
|
|
135
|
+
```vue
|
|
136
|
+
<template>
|
|
137
|
+
<XtTime type="countdown" :target-time="Date.now() + 3000">
|
|
138
|
+
<template #finished>
|
|
139
|
+
<span style="color: #67c23a;">🎉 活动已开始,欢迎参加</span>
|
|
140
|
+
</template>
|
|
141
|
+
</XtTime>
|
|
142
|
+
</template>
|
|
143
|
+
```
|
|
144
|
+
:::
|
|
145
|
+
|
|
146
|
+
### 前缀 / 后缀
|
|
147
|
+
|
|
148
|
+
::: demo 前缀后缀
|
|
149
|
+
```vue
|
|
150
|
+
<template>
|
|
151
|
+
<div style="display: flex; flex-direction: column; gap: 8px;">
|
|
152
|
+
<XtTime type="now" prefix="当前时间:" />
|
|
153
|
+
<XtTime type="countdown" target-time="2026-12-31 23:59:59" suffix=" 后截止" type-color="warning" />
|
|
154
|
+
<XtTime type="text" value="2024-01-01 08:00:00" prefix="入职日期:" suffix="(周一)" />
|
|
155
|
+
</div>
|
|
156
|
+
</template>
|
|
157
|
+
```
|
|
158
|
+
:::
|
|
159
|
+
|
|
160
|
+
## 注意事项
|
|
161
|
+
|
|
162
|
+
- `value` / `target-time` 对**纯数字时间戳**自动识别:10 位数字视作秒级时间戳,13 位数字视作毫秒级时间戳。
|
|
163
|
+
- `countdown` 模式下组件销毁、切出 `keep-alive` 缓存时会自动清理定时器,避免内存泄漏。
|
|
164
|
+
- `type` 从 `now`/`countdown` 切换为 `text`(或反向),组件会自动重置定时器。
|
|
165
|
+
- 如需不同的时区展示,可在父组件中将 `value` 先转换为本地时区 Date 对象再传入。
|
|
File without changes
|