xt-element-ui 2.1.22 → 2.1.72

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 (79) hide show
  1. package/docs/components/base/xt-badge.md +0 -2
  2. package/docs/components/base/xt-bar.md +5 -32
  3. package/docs/components/base/xt-button.md +0 -2
  4. package/docs/components/base/xt-card-item.md +0 -2
  5. package/docs/components/base/xt-card.md +17 -19
  6. package/docs/components/base/xt-chart.md +5 -31
  7. package/docs/components/base/xt-config-provider.md +0 -2
  8. package/docs/components/base/xt-date-picker.md +185 -28
  9. package/docs/components/base/xt-flex-box.md +25 -25
  10. package/docs/components/base/xt-form-schema.md +356 -0
  11. package/docs/components/base/xt-grid-box.md +4 -6
  12. package/docs/components/base/xt-icon.md +0 -2
  13. package/docs/components/base/xt-input.md +204 -44
  14. package/docs/components/base/xt-line.md +4 -30
  15. package/docs/components/base/xt-list.md +456 -458
  16. package/docs/components/base/xt-map-provider.md +0 -2
  17. package/docs/components/base/xt-map.md +0 -2
  18. package/docs/components/base/xt-multi.md +5 -44
  19. package/docs/components/base/xt-page.md +17 -6
  20. package/docs/components/base/xt-pie.md +5 -30
  21. package/docs/components/base/xt-progress.md +0 -2
  22. package/docs/components/base/xt-scroll-arrow.md +0 -2
  23. package/docs/components/base/xt-select-tree.md +0 -2
  24. package/docs/components/base/xt-step-price.md +3 -4
  25. package/docs/components/base/xt-table.md +2 -2
  26. package/docs/components/base/xt-tabs.md +0 -2
  27. package/docs/components/base/xt-text.md +1 -2
  28. package/docs/components/base/xt-time.md +0 -2
  29. package/docs/components/base/xt-transfer-tree.md +270 -0
  30. package/docs/components/base/xt-upload.md +11 -8
  31. package/docs/components/utils/config.md +285 -0
  32. package/docs/components/utils/format.md +445 -0
  33. package/lib/index.common.js +98163 -117565
  34. package/lib/index.css +1 -1
  35. package/lib/index.umd.js +98166 -117568
  36. package/lib/index.umd.min.js +1 -34
  37. package/package.json +9 -6
  38. package/src/components/xt-badge/style/index.scss +0 -22
  39. package/src/components/xt-button/index.vue +2 -1
  40. package/src/components/xt-button/style/index.scss +2 -2
  41. package/src/components/xt-card/style/index.scss +2 -2
  42. package/src/components/xt-card-item/style/index.scss +5 -40
  43. package/src/components/xt-chart/XtBar.vue +0 -3
  44. package/src/components/xt-date-picker/component/Picker.vue +196 -0
  45. package/src/components/xt-date-picker/component/RangeDate.vue +136 -0
  46. package/src/components/xt-date-picker/index.vue +220 -80
  47. package/src/components/xt-flex-box/index.vue +1 -1
  48. package/src/components/xt-form-schema/index.js +8 -0
  49. package/src/components/xt-form-schema/index.vue +328 -0
  50. package/src/components/xt-grid-item/index.vue +2 -2
  51. package/src/components/xt-input/index.vue +224 -28
  52. package/src/components/xt-input/style/index.scss +10 -0
  53. package/src/components/xt-layout/ExFieldset.vue +4 -4
  54. package/src/components/xt-list/index.js +7 -7
  55. package/src/components/xt-list/index.vue +885 -885
  56. package/src/components/xt-page/index.vue +148 -75
  57. package/src/components/xt-progress/style/index.scss +0 -14
  58. package/src/components/xt-step-price/style/index.scss +0 -4
  59. package/src/components/xt-step-price-item/index.vue +1 -1
  60. package/src/components/xt-tab-pane/index.js +10 -0
  61. package/src/components/{xt-tabs/TabPane.vue → xt-tab-pane/index.vue} +14 -1
  62. package/src/components/xt-table/XtTableCell.vue +2 -2
  63. package/src/components/xt-table/index.vue +17 -10
  64. package/src/components/xt-tabs/index.js +1 -3
  65. package/src/components/xt-tabs/index.vue +303 -44
  66. package/src/components/xt-tabs/style/index.scss +0 -40
  67. package/src/components/xt-text/index.vue +16 -4
  68. package/src/components/xt-text/style/index.scss +0 -15
  69. package/src/components/xt-transfer-tree/index.js +8 -0
  70. package/src/components/xt-transfer-tree/index.vue +494 -0
  71. package/src/components/xt-upload/index.vue +12 -6
  72. package/src/index.js +10 -2
  73. package/src/styles/theme/colors.scss +0 -44
  74. package/src/styles/theme/dark-variables.scss +0 -29
  75. package/src/styles/variables-export.scss +0 -72
  76. package/src/utils/index.js +278 -1
  77. package/src/components/xt-date-picker/SearchDate.vue +0 -45
  78. package/src/components/xt-date-picker/quarter.vue +0 -154
  79. package/src/components/xt-table/index copy.vue +0 -663
@@ -0,0 +1,356 @@
1
+ 用于解决大量检索条件场景下的表单使用,支持使用抽屉或对话框显示高级搜索表单,自动展示已检索标签。
2
+
3
+ ## 基本用法
4
+
5
+ ::: demo 基本用法(抽屉模式)
6
+ ```vue
7
+ <template>
8
+ <div>
9
+ <XtButton type="primary" @click="showForm = true">高级搜索</XtButton>
10
+ <XtFormSchema
11
+ v-model="searchForm"
12
+ :visible.sync="showForm"
13
+ :schema="schema"
14
+ mode="drawer"
15
+ title="高级搜索"
16
+ @confirm="handleConfirm"
17
+ />
18
+ </div>
19
+ </template>
20
+
21
+ <script>
22
+ export default {
23
+ data() {
24
+ return {
25
+ showForm: false,
26
+ searchForm: {},
27
+ schema: [
28
+ {
29
+ prop: 'name',
30
+ label: '姓名',
31
+ type: 'input',
32
+ placeholder: '请输入姓名'
33
+ },
34
+ {
35
+ prop: 'gender',
36
+ label: '性别',
37
+ type: 'select',
38
+ options: [
39
+ { value: 'male', label: '男' },
40
+ { value: 'female', label: '女' }
41
+ ]
42
+ },
43
+ {
44
+ prop: 'dateRange',
45
+ label: '时间范围',
46
+ type: 'daterange'
47
+ }
48
+ ]
49
+ }
50
+ },
51
+ methods: {
52
+ handleConfirm(formData) {
53
+ console.log('搜索条件:', formData)
54
+ }
55
+ }
56
+ }
57
+ </script>
58
+ ```
59
+ :::
60
+
61
+ ## 属性说明
62
+
63
+ | 属性 | 类型 | 默认值 | 可选值 | 说明 |
64
+ |------|------|--------|--------|------|
65
+ | `value / v-model` | Object | {} | - | 表单数据对象 |
66
+ | `visible` | Boolean | false | - | 是否显示弹窗/抽屉 |
67
+ | `schema` | Array | [] | - | 表单字段配置数组 |
68
+ | `mode` | String | drawer | `dialog`、`drawer` | 展示模式:对话框或抽屉 |
69
+ | `title` | String | 高级搜索 | - | 弹窗/抽屉标题 |
70
+ | `width` | String / Number | 500px | - | 弹窗/抽屉宽度 |
71
+ | `direction` | String | rtl | `ltr`、`rtl`、`ttb`、`btt` | 抽屉弹出方向 |
72
+ | `showSearchTags` | Boolean | true | - | 是否显示已检索标签 |
73
+ | `simpleFields` | Array | [] | - | 页面上简单展示的字段 |
74
+
75
+ ## schema 字段配置说明
76
+
77
+ | 属性 | 类型 | 必填 | 说明 |
78
+ |------|------|------|------|
79
+ | `prop` | String | 是 | 字段名,对应表单数据的 key |
80
+ | `label` | String | 是 | 字段标签 |
81
+ | `type` | String | 是 | 字段类型,见下表 |
82
+ | `placeholder` | String | 否 | 占位提示 |
83
+ | `defaultValue` | Any | 否 | 默认值 |
84
+ | `options` | Array | 否 | 下拉选项,用于 select/radio-group/checkbox-group |
85
+ | `disabled` | Boolean | 否 | 是否禁用 |
86
+ | `size` | String | 否 | 字段尺寸 |
87
+ | `filterable` | Boolean | 否 | 是否可搜索(select) |
88
+ | `multiple` | Boolean | 否 | 是否多选(select) |
89
+ | `format` | String | 否 | 日期格式化(date-picker) |
90
+ | `valueFormat` | String | 否 | 日期值格式(date-picker) |
91
+ | `dateType` | String | 否 | 日期类型(date-picker) |
92
+ | `min` | Number | 否 | 最小值(number) |
93
+ | `max` | Number | 否 | 最大值(number) |
94
+ | `step` | Number | 否 | 步长(number) |
95
+ | `rows` | Number | 否 | 行数(textarea) |
96
+
97
+ ## 支持的字段类型
98
+
99
+ | 类型 | 说明 | 对应 Element 组件 |
100
+ |------|------|-------------------|
101
+ | `input` | 文本输入 | el-input |
102
+ | `textarea` | 多行文本 | el-input(type="textarea") |
103
+ | `select` | 下拉选择 | el-select |
104
+ | `checkbox` | 单选框 | el-checkbox |
105
+ | `checkbox-group` | 多选框组 | el-checkbox-group |
106
+ | `radio` | 单选按钮 | el-radio |
107
+ | `radio-group` | 单选按钮组 | el-radio-group |
108
+ | `date` | 日期选择 | el-date-picker |
109
+ | `daterange` | 日期范围 | el-date-picker(type="daterange") |
110
+ | `datetime` | 日期时间 | el-date-picker(type="datetime") |
111
+ | `datetime-range` | 日期时间范围 | el-date-picker(type="datetimerange") |
112
+ | `number` | 数字输入 | el-input-number |
113
+ | `switch` | 开关 | el-switch |
114
+
115
+ ## 事件说明
116
+
117
+ | 事件名 | 参数 | 说明 |
118
+ |--------|------|------|
119
+ | `input` | `formData` | 表单数据变化时触发 |
120
+ | `change` | `{ prop, value }` | 单个字段值变化时触发 |
121
+ | `confirm` | `formData` | 点击确认按钮时触发 |
122
+ | `cancel` | - | 点击取消按钮或关闭时触发 |
123
+
124
+ ## 方法说明
125
+
126
+ | 方法名 | 参数 | 说明 |
127
+ |--------|------|------|
128
+ | `resetFields` | - | 重置表单到默认值 |
129
+
130
+ ## 示例
131
+
132
+ ### 对话框模式
133
+
134
+ ::: demo 对话框模式
135
+ ```vue
136
+ <template>
137
+ <div>
138
+ <XtButton type="primary" @click="showForm = true">高级搜索(对话框)</XtButton>
139
+ <XtFormSchema
140
+ v-model="searchForm"
141
+ :visible.sync="showForm"
142
+ :schema="schema"
143
+ mode="dialog"
144
+ width="600px"
145
+ title="高级搜索"
146
+ @confirm="handleConfirm"
147
+ />
148
+ </div>
149
+ </template>
150
+
151
+ <script>
152
+ export default {
153
+ data() {
154
+ return {
155
+ showForm: false,
156
+ searchForm: {},
157
+ schema: [
158
+ {
159
+ prop: 'name',
160
+ label: '姓名',
161
+ type: 'input',
162
+ placeholder: '请输入姓名'
163
+ },
164
+ {
165
+ prop: 'status',
166
+ label: '状态',
167
+ type: 'select',
168
+ options: [
169
+ { value: 'active', label: '活跃' },
170
+ { value: 'inactive', label: '不活跃' },
171
+ { value: 'pending', label: '待审核' }
172
+ ],
173
+ filterable: true
174
+ }
175
+ ]
176
+ }
177
+ },
178
+ methods: {
179
+ handleConfirm(formData) {
180
+ console.log('搜索条件:', formData)
181
+ }
182
+ }
183
+ }
184
+ </script>
185
+ ```
186
+ :::
187
+
188
+ ### 包含日期范围和多选框
189
+
190
+ ::: demo 包含日期范围和多选框
191
+ ```vue
192
+ <template>
193
+ <div>
194
+ <XtButton type="primary" @click="showForm = true">高级搜索</XtButton>
195
+ <XtFormSchema
196
+ v-model="searchForm"
197
+ :visible.sync="showForm"
198
+ :schema="schema"
199
+ @confirm="handleConfirm"
200
+ />
201
+ </div>
202
+ </template>
203
+
204
+ <script>
205
+ export default {
206
+ data() {
207
+ return {
208
+ showForm: false,
209
+ searchForm: {},
210
+ schema: [
211
+ {
212
+ prop: 'keywords',
213
+ label: '关键词',
214
+ type: 'input',
215
+ placeholder: '请输入关键词'
216
+ },
217
+ {
218
+ prop: 'type',
219
+ label: '类型',
220
+ type: 'checkbox-group',
221
+ options: [
222
+ { value: 'article', label: '文章' },
223
+ { value: 'video', label: '视频' },
224
+ { value: 'image', label: '图片' }
225
+ ]
226
+ },
227
+ {
228
+ prop: 'dateRange',
229
+ label: '发布时间',
230
+ type: 'daterange',
231
+ format: 'yyyy-MM-dd'
232
+ }
233
+ ]
234
+ }
235
+ },
236
+ methods: {
237
+ handleConfirm(formData) {
238
+ console.log('搜索条件:', formData)
239
+ }
240
+ }
241
+ }
242
+ </script>
243
+ ```
244
+ :::
245
+
246
+ ### 完整搜索示例
247
+
248
+ ::: demo 完整搜索示例
249
+ ```vue
250
+ <template>
251
+ <div>
252
+ <XtFlexBox class="search-bar" style="gap: 12px; margin-bottom: 16px;">
253
+ <XtInput v-model="searchForm.name" placeholder="姓名" style="width: 200px;" />
254
+ <XtInput v-model="searchForm.phone" placeholder="手机号" style="width: 200px;" />
255
+ <XtButton type="primary" @click="showForm = true">高级搜索</XtButton>
256
+ <XtButton @click="handleReset">重置</XtButton>
257
+ </XtFlexBox>
258
+
259
+ <XtFormSchema
260
+ ref="formSchema"
261
+ v-model="searchForm"
262
+ :visible.sync="showForm"
263
+ :schema="schema"
264
+ mode="drawer"
265
+ title="高级搜索"
266
+ @confirm="handleSearch"
267
+ />
268
+ </div>
269
+ </template>
270
+
271
+ <script>
272
+ export default {
273
+ data() {
274
+ return {
275
+ showForm: false,
276
+ searchForm: {
277
+ name: '',
278
+ phone: '',
279
+ gender: '',
280
+ department: '',
281
+ dateRange: [],
282
+ status: []
283
+ },
284
+ schema: [
285
+ {
286
+ prop: 'gender',
287
+ label: '性别',
288
+ type: 'select',
289
+ options: [
290
+ { value: 'male', label: '男' },
291
+ { value: 'female', label: '女' }
292
+ ]
293
+ },
294
+ {
295
+ prop: 'department',
296
+ label: '部门',
297
+ type: 'select',
298
+ options: [
299
+ { value: 'tech', label: '技术部' },
300
+ { value: 'sales', label: '销售部' },
301
+ { value: 'hr', label: '人事部' }
302
+ ],
303
+ filterable: true
304
+ },
305
+ {
306
+ prop: 'dateRange',
307
+ label: '入职时间',
308
+ type: 'daterange'
309
+ },
310
+ {
311
+ prop: 'status',
312
+ label: '状态',
313
+ type: 'checkbox-group',
314
+ options: [
315
+ { value: 'active', label: '在职' },
316
+ { value: 'leave', label: '休假' },
317
+ { value: 'resigned', label: '离职' }
318
+ ]
319
+ },
320
+ {
321
+ prop: 'score',
322
+ label: '绩效评分',
323
+ type: 'number',
324
+ min: 0,
325
+ max: 100
326
+ }
327
+ ]
328
+ }
329
+ },
330
+ methods: {
331
+ handleSearch(formData) {
332
+ console.log('搜索条件:', formData)
333
+ },
334
+ handleReset() {
335
+ this.searchForm = {
336
+ name: '',
337
+ phone: '',
338
+ gender: '',
339
+ department: '',
340
+ dateRange: [],
341
+ status: []
342
+ }
343
+ this.$refs.formSchema.resetFields()
344
+ }
345
+ }
346
+ }
347
+ </script>
348
+ ```
349
+ :::
350
+
351
+ ## 注意事项
352
+
353
+ 1. 表单数据通过 `v-model` 双向绑定,页面上的简单搜索字段和组件内的字段会自动同步
354
+ 2. `showSearchTags` 开启后,已选择的条件会自动展示为标签,点击标签右侧的关闭按钮可清除对应条件
355
+ 3. `schema` 中的 `prop` 需要与 `v-model` 对象的 key 对应
356
+ 4. 组件支持通过 `ref` 调用 `resetFields` 方法重置表单
@@ -1,5 +1,3 @@
1
- ## XtGridBox 网格布局组件
2
-
3
1
  基于 CSS Grid 实现的网格布局组件,提供强大的二维布局能力,支持响应式设计和灵活的配置选项。
4
2
 
5
3
  ## 基本用法
@@ -42,10 +40,10 @@
42
40
 
43
41
  | 属性 | 类型 | 默认值 | 可选值 | 说明 |
44
42
  |------|------|--------|--------|------|
45
- | `span` | Number | `1` | >0 | 跨列数 |
46
- | `rowSpan` | Number | `1` | >0 | 跨行数 |
47
- | `start` | Number | `0` | >=0 | 起始列位置 |
48
- | `rowStart` | Number | `0` | >=0 | 起始行位置 |
43
+ | `span` | Number | `1` | >1 | 跨列数 |
44
+ | `rowSpan` | Number | `1` | >1 | 跨行数 |
45
+ | `start` | Number | `0` | >0 | 起始列位置 |
46
+ | `rowStart` | Number | `0` | >0 | 起始行位置 |
49
47
  | `area` | String | - | - | 命名区域名称 |
50
48
  | `justifySelf` | String | `auto` | `auto`、`start`、`end`、`center`、`stretch` | 水平对齐 |
51
49
  | `alignSelf` | String | `auto` | `auto`、`start`、`end`、`center`、`stretch`、`baseline` | 垂直对齐 |
@@ -1,5 +1,3 @@
1
- ## XtIcon 图标组件
2
-
3
1
  图标组件支持多种图标类型:ElementUI 字体图标、SVG Sprite、内联 SVG 和自定义字体图标。
4
2
 
5
3
  ## 基本用法
@@ -1,6 +1,4 @@
1
- ## XtInput 输入框组件
2
-
3
- 输入框组件用于收集用户输入的信息。
1
+ 输入框组件用于收集用户输入的信息,支持多种输入场景和格式校验。
4
2
 
5
3
  ## 基本用法
6
4
 
@@ -23,26 +21,147 @@ export default {
23
21
  :::
24
22
 
25
23
  ## 属性说明
26
- | 属性 | 类型 | 默认值 | 说明 |
27
- |------|------|--------|------|
28
- | `value` | String / Number | - | 输入值(支持 v-model) |
29
- | `placeholder` | String | '请输入内容' | 占位提示文本 |
30
- | `color` | String | - | 自定义聚焦颜色 |
24
+
25
+ | 属性 | 类型 | 默认值 | 可选值 | 说明 |
26
+ |------|------|--------|--------|------|
27
+ | `value` | String / Number | - | - | 输入值(支持 v-model) |
28
+ | `placeholder` | String | '请输入内容' | - | 占位提示文本 |
29
+ | `type` | String | 'text' | 见下表 | 输入类型 |
30
+ | `size` | String | - | 'small'、'medium'、'large' | 输入框尺寸 |
31
+ | `disabled` | Boolean | false | - | 是否禁用 |
32
+ | `readonly` | Boolean | false | - | 是否只读 |
33
+ | `color` | String | - | - | 自定义聚焦颜色 |
34
+ | `precision` | Number | 2 | 0-10 | 小数位数(数字类型) |
35
+ | `min` | Number | undefined | - | 最小值(数字类型) |
36
+ | `max` | Number | undefined | - | 最大值(数字类型) |
37
+ | `allowNegative` | Boolean | false | - | 是否允许负数(数字类型) |
38
+ | `thousandSeparator` | Boolean | false | - | 是否显示千分位分隔符 |
39
+ | `maxlength` | Number | undefined | - | 最大输入长度 |
40
+ | `showWordLimit` | Boolean | false | - | 是否显示字数统计 |
41
+ | `prefixIcon` | String | - | - | 前缀图标 |
42
+ | `suffixIcon` | String | - | - | 后缀图标 |
43
+ | `trim` | Boolean | false | - | 是否自动去除首尾空格 |
44
+
45
+ ## 支持的输入类型
46
+
47
+ | 类型 | 说明 | 特性 |
48
+ |------|------|------|
49
+ | `text` | 普通文本 | 默认类型,支持所有字符 |
50
+ | `number` | 数字输入 | 支持整数和小数,可配置精度 |
51
+ | `integer` | 整数输入 | 仅允许整数,自动过滤小数 |
52
+ | `decimal` | 小数输入 | 支持小数,精度可配置 |
53
+ | `money` | 金额输入 | 支持小数,默认2位精度,适合金额场景 |
54
+ | `phone` | 手机号输入 | 自动过滤非数字,校验手机号格式 |
55
+ | `email` | 邮箱输入 | 实时校验邮箱格式,错误时标红 |
56
+ | `idcard` | 身份证输入 | 自动过滤非法字符,校验身份证格式 |
57
+ | `password` | 密码输入 | 密码隐藏显示 |
58
+ | `textarea` | 多行文本 | 多行输入框 |
59
+
60
+ ## 事件说明
61
+
62
+ | 事件名 | 参数 | 说明 |
63
+ |--------|------|------|
64
+ | `input` | `value` | 输入值变化时触发 |
65
+ | `change` | `value` | 输入框失去焦点且值变化时触发 |
66
+ | `focus` | `event` | 输入框获得焦点时触发 |
67
+ | `blur` | `value, event` | 输入框失去焦点时触发 |
68
+ | `clear` | - | 点击清除按钮时触发 |
31
69
 
32
70
  ## 示例
33
71
 
34
- ### 基础输入框
35
- ::: demo 基础输入框
72
+ ### 整数输入
73
+
74
+ ::: demo 整数输入
75
+ ```vue
76
+ <template>
77
+ <XtInput v-model="count" type="integer" placeholder="请输入整数"></XtInput>
78
+ </template>
79
+
80
+ <script>
81
+ export default {
82
+ data() {
83
+ return {
84
+ count: ''
85
+ }
86
+ }
87
+ }
88
+ </script>
89
+ ```
90
+ :::
91
+
92
+ ### 小数输入(自定义精度)
93
+
94
+ ::: demo 小数输入
95
+ ```vue
96
+ <template>
97
+ <XtInput v-model="price" type="decimal" :precision="4" placeholder="最多4位小数"></XtInput>
98
+ </template>
99
+
100
+ <script>
101
+ export default {
102
+ data() {
103
+ return {
104
+ price: ''
105
+ }
106
+ }
107
+ }
108
+ </script>
109
+ ```
110
+ :::
111
+
112
+ ### 金额输入(带千分位)
113
+
114
+ ::: demo 金额输入
115
+ ```vue
116
+ <template>
117
+ <XtInput v-model="amount" type="money" thousandSeparator placeholder="请输入金额"></XtInput>
118
+ </template>
119
+
120
+ <script>
121
+ export default {
122
+ data() {
123
+ return {
124
+ amount: ''
125
+ }
126
+ }
127
+ }
128
+ </script>
129
+ ```
130
+ :::
131
+
132
+ ### 数字输入(带范围限制)
133
+
134
+ ::: demo 数字输入范围限制
135
+ ```vue
136
+ <template>
137
+ <XtInput v-model="score" type="number" :min="0" :max="100" placeholder="0-100"></XtInput>
138
+ </template>
139
+
140
+ <script>
141
+ export default {
142
+ data() {
143
+ return {
144
+ score: ''
145
+ }
146
+ }
147
+ }
148
+ </script>
149
+ ```
150
+ :::
151
+
152
+ ### 手机号输入
153
+
154
+ ::: demo 手机号输入
36
155
  ```vue
37
156
  <template>
38
- <XtInput v-model="username" placeholder="请输入用户名"></XtInput>
157
+ <XtInput v-model="phone" type="phone" placeholder="请输入手机号"></XtInput>
39
158
  </template>
40
159
 
41
160
  <script>
42
161
  export default {
43
162
  data() {
44
163
  return {
45
- username: ''
164
+ phone: ''
46
165
  }
47
166
  }
48
167
  }
@@ -50,12 +169,12 @@ export default {
50
169
  ```
51
170
  :::
52
171
 
53
- ### 自定义占位符
172
+ ### 邮箱输入(格式校验)
54
173
 
55
- ::: demo 自定义占位符
174
+ ::: demo 邮箱输入
56
175
  ```vue
57
176
  <template>
58
- <XtInput v-model="email" placeholder="请输入您的邮箱地址"></XtInput>
177
+ <XtInput v-model="email" type="email" placeholder="请输入邮箱"></XtInput>
59
178
  </template>
60
179
 
61
180
  <script>
@@ -70,7 +189,68 @@ export default {
70
189
  ```
71
190
  :::
72
191
 
192
+ ### 身份证输入
193
+
194
+ ::: demo 身份证输入
195
+ ```vue
196
+ <template>
197
+ <XtInput v-model="idcard" type="idcard" placeholder="请输入身份证号"></XtInput>
198
+ </template>
199
+
200
+ <script>
201
+ export default {
202
+ data() {
203
+ return {
204
+ idcard: ''
205
+ }
206
+ }
207
+ }
208
+ </script>
209
+ ```
210
+ :::
211
+
212
+ ### 密码输入
213
+
214
+ ::: demo 密码输入
215
+ ```vue
216
+ <template>
217
+ <XtInput v-model="password" type="password" placeholder="请输入密码"></XtInput>
218
+ </template>
219
+
220
+ <script>
221
+ export default {
222
+ data() {
223
+ return {
224
+ password: ''
225
+ }
226
+ }
227
+ }
228
+ </script>
229
+ ```
230
+ :::
231
+
232
+ ### 多行文本
233
+
234
+ ::: demo 多行文本
235
+ ```vue
236
+ <template>
237
+ <XtInput v-model="content" type="textarea" :maxlength="200" showWordLimit placeholder="请输入内容"></XtInput>
238
+ </template>
239
+
240
+ <script>
241
+ export default {
242
+ data() {
243
+ return {
244
+ content: ''
245
+ }
246
+ }
247
+ }
248
+ </script>
249
+ ```
250
+ :::
251
+
73
252
  ### 自定义聚焦颜色
253
+
74
254
  ::: demo 自定义聚焦颜色
75
255
  ```vue
76
256
  <template>
@@ -102,8 +282,8 @@ export default {
102
282
  <template>
103
283
  <div style="display: flex; flex-direction: column; gap: 12px;">
104
284
  <XtInput v-model="name" placeholder="姓名"></XtInput>
105
- <XtInput v-model="phone" placeholder="手机"></XtInput>
106
- <XtInput v-model="address" placeholder="地址"></XtInput>
285
+ <XtInput v-model="phone" type="phone" placeholder="手机"></XtInput>
286
+ <XtInput v-model="email" type="email" placeholder="邮箱"></XtInput>
107
287
  </div>
108
288
  </template>
109
289
 
@@ -113,7 +293,7 @@ export default {
113
293
  return {
114
294
  name: '',
115
295
  phone: '',
116
- address: ''
296
+ email: ''
117
297
  }
118
298
  }
119
299
  }
@@ -121,30 +301,10 @@ export default {
121
301
  ```
122
302
  :::
123
303
 
124
- ### 监听输入事件
304
+ ## 注意事项
125
305
 
126
- ::: demo 监听输入事件
127
- ```vue
128
- <template>
129
- <div>
130
- <XtInput :value="inputValue" placeholder="实时监听输入" @input="handleInput"></XtInput>
131
- <p style="margin-top: 12px;">输入长度: {{ inputValue.length }}</p>
132
- </div>
133
- </template>
134
-
135
- <script>
136
- export default {
137
- data() {
138
- return {
139
- inputValue: ''
140
- }
141
- },
142
- methods: {
143
- handleInput(value) {
144
- this.inputValue = value
145
- }
146
- }
147
- }
148
- </script>
149
- ```
150
- :::
306
+ 1. **数字类型输入**:`type="number"`、`type="integer"`、`type="decimal"`、`type="money"` 返回的是 Number 类型,空值时返回 undefined
307
+ 2. **小数精度**:`precision` 属性控制小数位数,blur 时自动四舍五入
308
+ 3. **千分位显示**:`thousandSeparator` 仅影响显示,实际绑定的值不包含千分位分隔符
309
+ 4. **负数控制**:`allowNegative` 默认 false,数字类型输入不允许负数
310
+ 5. **范围限制**:`min` `max` 在输入时自动限制,超出范围自动修正