xt-element-ui 2.1.4 → 2.1.6
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-date-picker.md +127 -37
- package/docs/components/base/xt-form-schema.md +358 -0
- package/docs/components/base/xt-grid-box.md +4 -4
- package/docs/components/base/xt-input.md +204 -42
- package/docs/components/base/xt-list.md +458 -458
- package/docs/components/base/xt-text.md +1 -0
- package/docs/components/base/xt-transfer-tree.md +272 -0
- package/docs/components/utils/config.md +285 -0
- package/docs/components/utils/format.md +445 -0
- package/lib/index.common.js +93128 -112769
- package/lib/index.css +1 -1
- package/lib/index.umd.js +93128 -112769
- package/lib/index.umd.min.js +1 -34
- package/package.json +4 -2
- package/src/components/xt-date-picker/component/Picker.vue +196 -0
- package/src/components/xt-date-picker/component/RangeDate.vue +136 -0
- package/src/components/xt-date-picker/index.vue +164 -144
- package/src/components/xt-flex-box/index.vue +1 -1
- package/src/components/xt-form-schema/index.js +8 -0
- package/src/components/xt-form-schema/index.vue +328 -0
- package/src/components/xt-grid-item/index.vue +2 -2
- package/src/components/xt-input/index.vue +224 -28
- package/src/components/xt-input/style/index.scss +10 -0
- package/src/components/xt-list/index.js +7 -7
- package/src/components/xt-list/index.vue +885 -885
- package/src/components/xt-text/index.vue +16 -4
- package/src/components/xt-transfer-tree/index.js +8 -0
- package/src/components/xt-transfer-tree/index.vue +494 -0
- package/src/index.js +8 -2
- package/src/utils/index.js +278 -1
- package/src/components/xt-date-picker/SearchDate.vue +0 -45
- package/src/components/xt-date-picker/quarter.vue +0 -154
- package/src/components/xt-table/index copy.vue +0 -663
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
## 基本用法
|
|
6
6
|
|
|
7
|
-
::: demo
|
|
7
|
+
::: demo 基本用法(日期范围)
|
|
8
8
|
```vue
|
|
9
9
|
<template>
|
|
10
10
|
<XtDatePicker v-model="dateRange" />
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
export default {
|
|
15
15
|
data() {
|
|
16
16
|
return {
|
|
17
|
-
dateRange:
|
|
17
|
+
dateRange: ""
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
}
|
|
@@ -26,47 +26,100 @@ export default {
|
|
|
26
26
|
|
|
27
27
|
| 属性 | 类型 | 默认值 | 可选值 | 说明 |
|
|
28
28
|
|------|------|--------|--------|------|
|
|
29
|
-
| `value` / `v-model` | Array /
|
|
29
|
+
| `value` / `v-model` | Array / String | - | - | 日期范围 `[start, end]` 或单个日期字符串 |
|
|
30
30
|
| `dateType` | String | `date` | `date`、`datetime`、`month`、`year`、`quarter`、`week` | 日期类型 |
|
|
31
|
-
| `separator` | String | `至` | - |
|
|
31
|
+
| `separator` | String | `至` | - | 范围选择时的分隔符文本 |
|
|
32
32
|
| `disabled` | Boolean | `false` | - | 是否禁用 |
|
|
33
|
-
| `width` | String | `100%` | - |
|
|
33
|
+
| `width` | String | `100%` | - | 组件宽度,如 `'500px'` |
|
|
34
34
|
| `rangeMode` | Boolean | `true` | - | 是否为范围选择模式,false 时为单选 |
|
|
35
|
-
| `showDimension` | Boolean | `false` | - |
|
|
36
|
-
| `dimension` | String | `
|
|
35
|
+
| `showDimension` | Boolean | `false` | - | 是否显示时间维度选择器(日/月/年/自定义) |
|
|
36
|
+
| `dimension` | String | `date` | `date`、`month`、`year`、`daterange` | 当前时间维度 |
|
|
37
|
+
| `immediate` | Boolean | `true` | - | 切换维度后是否立即触发事件 |
|
|
37
38
|
|
|
38
|
-
##
|
|
39
|
+
## 事件说明
|
|
39
40
|
|
|
40
|
-
| 事件名 |
|
|
41
|
+
| 事件名 | 参数 | 说明 |
|
|
41
42
|
|--------|------|------|
|
|
42
|
-
| `change` |
|
|
43
|
-
| `dimension-change` |
|
|
44
|
-
| `focus` |
|
|
45
|
-
| `blur` |
|
|
43
|
+
| `change` | `value` | 日期值改变时触发 |
|
|
44
|
+
| `dimension-change` | `{ dimension, value }` | 时间维度或值变化时触发 |
|
|
45
|
+
| `focus` | - | 输入框获得焦点时触发 |
|
|
46
|
+
| `blur` | - | 输入框失去焦点时触发 |
|
|
46
47
|
|
|
47
48
|
## 示例
|
|
48
49
|
|
|
49
|
-
###
|
|
50
|
+
### 日期范围选择
|
|
51
|
+
|
|
52
|
+
::: demo 日期范围选择
|
|
53
|
+
```vue
|
|
54
|
+
<template>
|
|
55
|
+
<XtDatePicker v-model="dateRange" rangeMode="true" />
|
|
56
|
+
</template>
|
|
57
|
+
|
|
58
|
+
<script>
|
|
59
|
+
export default {
|
|
60
|
+
data() {
|
|
61
|
+
return {
|
|
62
|
+
dateRange: []
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
</script>
|
|
67
|
+
```
|
|
68
|
+
:::
|
|
69
|
+
|
|
70
|
+
### 月份范围选择
|
|
50
71
|
|
|
51
|
-
::: demo
|
|
72
|
+
::: demo 月份范围选择
|
|
52
73
|
```vue
|
|
53
74
|
<template>
|
|
54
|
-
<
|
|
55
|
-
<XtDatePicker v-model="dateRange" dateType="date" />
|
|
56
|
-
<XtDatePicker v-model="monthRange" dateType="month" />
|
|
57
|
-
<XtDatePicker v-model="yearRange" dateType="year" />
|
|
58
|
-
<XtDatePicker v-model="quarterRange" dateType="quarter" />
|
|
59
|
-
</div>
|
|
75
|
+
<XtDatePicker v-model="monthRange" dateType="month" />
|
|
60
76
|
</template>
|
|
61
77
|
|
|
62
78
|
<script>
|
|
63
79
|
export default {
|
|
64
80
|
data() {
|
|
65
81
|
return {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
82
|
+
monthRange: ""
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
</script>
|
|
87
|
+
```
|
|
88
|
+
:::
|
|
89
|
+
|
|
90
|
+
### 年份范围选择
|
|
91
|
+
|
|
92
|
+
::: demo 年份范围选择
|
|
93
|
+
```vue
|
|
94
|
+
<template>
|
|
95
|
+
<XtDatePicker v-model="yearRange" dateType="year" />
|
|
96
|
+
</template>
|
|
97
|
+
|
|
98
|
+
<script>
|
|
99
|
+
export default {
|
|
100
|
+
data() {
|
|
101
|
+
return {
|
|
102
|
+
yearRange: ""
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
</script>
|
|
107
|
+
```
|
|
108
|
+
:::
|
|
109
|
+
|
|
110
|
+
### 季度选择
|
|
111
|
+
|
|
112
|
+
::: demo 季度选择
|
|
113
|
+
```vue
|
|
114
|
+
<template>
|
|
115
|
+
<XtDatePicker v-model="quarterRange" dateType="quarter" />
|
|
116
|
+
</template>
|
|
117
|
+
|
|
118
|
+
<script>
|
|
119
|
+
export default {
|
|
120
|
+
data() {
|
|
121
|
+
return {
|
|
122
|
+
quarterRange: ""
|
|
70
123
|
}
|
|
71
124
|
}
|
|
72
125
|
}
|
|
@@ -103,7 +156,6 @@ export default {
|
|
|
103
156
|
v-model="dateRange"
|
|
104
157
|
:show-dimension="true"
|
|
105
158
|
:dimension="currentDimension"
|
|
106
|
-
@update:dimension="currentDimension = $event"
|
|
107
159
|
@dimension-change="handleDimensionChange"
|
|
108
160
|
/>
|
|
109
161
|
</template>
|
|
@@ -112,12 +164,13 @@ export default {
|
|
|
112
164
|
export default {
|
|
113
165
|
data() {
|
|
114
166
|
return {
|
|
115
|
-
dateRange:
|
|
116
|
-
currentDimension: '
|
|
167
|
+
dateRange: "",
|
|
168
|
+
currentDimension: 'date'
|
|
117
169
|
}
|
|
118
170
|
},
|
|
119
171
|
methods: {
|
|
120
172
|
handleDimensionChange({ dimension, value }) {
|
|
173
|
+
this.currentDimension = dimension
|
|
121
174
|
console.log('维度:', dimension, '值:', value)
|
|
122
175
|
}
|
|
123
176
|
}
|
|
@@ -138,7 +191,7 @@ export default {
|
|
|
138
191
|
export default {
|
|
139
192
|
data() {
|
|
140
193
|
return {
|
|
141
|
-
dateRange:
|
|
194
|
+
dateRange: ""
|
|
142
195
|
}
|
|
143
196
|
}
|
|
144
197
|
}
|
|
@@ -158,7 +211,27 @@ export default {
|
|
|
158
211
|
export default {
|
|
159
212
|
data() {
|
|
160
213
|
return {
|
|
161
|
-
dateRange:
|
|
214
|
+
dateRange: ""
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
</script>
|
|
219
|
+
```
|
|
220
|
+
:::
|
|
221
|
+
|
|
222
|
+
### 自定义宽度
|
|
223
|
+
|
|
224
|
+
::: demo 自定义宽度
|
|
225
|
+
```vue
|
|
226
|
+
<template>
|
|
227
|
+
<XtDatePicker v-model="dateRange" width="600" />
|
|
228
|
+
</template>
|
|
229
|
+
|
|
230
|
+
<script>
|
|
231
|
+
export default {
|
|
232
|
+
data() {
|
|
233
|
+
return {
|
|
234
|
+
dateRange: ""
|
|
162
235
|
}
|
|
163
236
|
}
|
|
164
237
|
}
|
|
@@ -170,11 +243,28 @@ export default {
|
|
|
170
243
|
|
|
171
244
|
当启用 `showDimension` 后,选择不同维度会有以下效果:
|
|
172
245
|
|
|
173
|
-
| 维度 | 日期类型 |
|
|
174
|
-
|
|
175
|
-
| `
|
|
176
|
-
| `month` | month |
|
|
177
|
-
| `year` | year |
|
|
178
|
-
| `
|
|
246
|
+
| 维度 | 日期类型 | 格式 | 说明 |
|
|
247
|
+
|------|----------|------|------|
|
|
248
|
+
| `date` | date | yyyy-MM-dd | 日维度,选择日期范围 |
|
|
249
|
+
| `month` | month | yyyy-MM | 月维度,选择月份范围 |
|
|
250
|
+
| `year` | year | yyyy | 年维度,选择年份范围 |
|
|
251
|
+
| `daterange` | date | yyyy-MM-dd | 自定义区间,选择日期范围 |
|
|
252
|
+
|
|
253
|
+
## 日期类型格式
|
|
254
|
+
|
|
255
|
+
| 类型 | 显示格式 | 说明 |
|
|
256
|
+
|------|----------|------|
|
|
257
|
+
| `date` | yyyy-MM-dd | 日期 |
|
|
258
|
+
| `month` | yyyy-MM | 月份 |
|
|
259
|
+
| `year` | yyyy | 年份 |
|
|
260
|
+
| `quarter` | yyyy-Qq | 季度(如 2026-Q3) |
|
|
261
|
+
| `week` | yyyy-WW | 周 |
|
|
262
|
+
| `datetime` | yyyy-MM-dd HH:mm | 日期时间 |
|
|
263
|
+
|
|
264
|
+
## 注意事项
|
|
179
265
|
|
|
180
|
-
|
|
266
|
+
1. **范围模式**:默认开启范围选择(`rangeMode: true`),返回值为数组 `[start, end]`
|
|
267
|
+
2. **单选模式**:设置 `rangeMode: false` 后,返回值为单个日期字符串
|
|
268
|
+
3. **维度切换**:切换维度时会自动关闭下拉面板,避免页面布局跳动
|
|
269
|
+
4. **季度格式**:季度类型使用自定义格式 `yyyy-Qq`,如 `2026-Q3`
|
|
270
|
+
5. **值类型**:所有日期值均为字符串类型,便于后端交互
|
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
## XtFormSchema 表单配置化搜索组件
|
|
2
|
+
|
|
3
|
+
用于解决大量检索条件场景下的表单使用,支持使用抽屉或对话框显示高级搜索表单,自动展示已检索标签。
|
|
4
|
+
|
|
5
|
+
## 基本用法
|
|
6
|
+
|
|
7
|
+
::: demo 基本用法(抽屉模式)
|
|
8
|
+
```vue
|
|
9
|
+
<template>
|
|
10
|
+
<div>
|
|
11
|
+
<XtButton type="primary" @click="showForm = true">高级搜索</XtButton>
|
|
12
|
+
<XtFormSchema
|
|
13
|
+
v-model="searchForm"
|
|
14
|
+
:visible.sync="showForm"
|
|
15
|
+
:schema="schema"
|
|
16
|
+
mode="drawer"
|
|
17
|
+
title="高级搜索"
|
|
18
|
+
@confirm="handleConfirm"
|
|
19
|
+
/>
|
|
20
|
+
</div>
|
|
21
|
+
</template>
|
|
22
|
+
|
|
23
|
+
<script>
|
|
24
|
+
export default {
|
|
25
|
+
data() {
|
|
26
|
+
return {
|
|
27
|
+
showForm: false,
|
|
28
|
+
searchForm: {},
|
|
29
|
+
schema: [
|
|
30
|
+
{
|
|
31
|
+
prop: 'name',
|
|
32
|
+
label: '姓名',
|
|
33
|
+
type: 'input',
|
|
34
|
+
placeholder: '请输入姓名'
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
prop: 'gender',
|
|
38
|
+
label: '性别',
|
|
39
|
+
type: 'select',
|
|
40
|
+
options: [
|
|
41
|
+
{ value: 'male', label: '男' },
|
|
42
|
+
{ value: 'female', label: '女' }
|
|
43
|
+
]
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
prop: 'dateRange',
|
|
47
|
+
label: '时间范围',
|
|
48
|
+
type: 'daterange'
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
methods: {
|
|
54
|
+
handleConfirm(formData) {
|
|
55
|
+
console.log('搜索条件:', formData)
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
</script>
|
|
60
|
+
```
|
|
61
|
+
:::
|
|
62
|
+
|
|
63
|
+
## 属性说明
|
|
64
|
+
|
|
65
|
+
| 属性 | 类型 | 默认值 | 可选值 | 说明 |
|
|
66
|
+
|------|------|--------|--------|------|
|
|
67
|
+
| `value / v-model` | Object | {} | - | 表单数据对象 |
|
|
68
|
+
| `visible` | Boolean | false | - | 是否显示弹窗/抽屉 |
|
|
69
|
+
| `schema` | Array | [] | - | 表单字段配置数组 |
|
|
70
|
+
| `mode` | String | drawer | `dialog`、`drawer` | 展示模式:对话框或抽屉 |
|
|
71
|
+
| `title` | String | 高级搜索 | - | 弹窗/抽屉标题 |
|
|
72
|
+
| `width` | String / Number | 500px | - | 弹窗/抽屉宽度 |
|
|
73
|
+
| `direction` | String | rtl | `ltr`、`rtl`、`ttb`、`btt` | 抽屉弹出方向 |
|
|
74
|
+
| `showSearchTags` | Boolean | true | - | 是否显示已检索标签 |
|
|
75
|
+
| `simpleFields` | Array | [] | - | 页面上简单展示的字段 |
|
|
76
|
+
|
|
77
|
+
## schema 字段配置说明
|
|
78
|
+
|
|
79
|
+
| 属性 | 类型 | 必填 | 说明 |
|
|
80
|
+
|------|------|------|------|
|
|
81
|
+
| `prop` | String | 是 | 字段名,对应表单数据的 key |
|
|
82
|
+
| `label` | String | 是 | 字段标签 |
|
|
83
|
+
| `type` | String | 是 | 字段类型,见下表 |
|
|
84
|
+
| `placeholder` | String | 否 | 占位提示 |
|
|
85
|
+
| `defaultValue` | Any | 否 | 默认值 |
|
|
86
|
+
| `options` | Array | 否 | 下拉选项,用于 select/radio-group/checkbox-group |
|
|
87
|
+
| `disabled` | Boolean | 否 | 是否禁用 |
|
|
88
|
+
| `size` | String | 否 | 字段尺寸 |
|
|
89
|
+
| `filterable` | Boolean | 否 | 是否可搜索(select) |
|
|
90
|
+
| `multiple` | Boolean | 否 | 是否多选(select) |
|
|
91
|
+
| `format` | String | 否 | 日期格式化(date-picker) |
|
|
92
|
+
| `valueFormat` | String | 否 | 日期值格式(date-picker) |
|
|
93
|
+
| `dateType` | String | 否 | 日期类型(date-picker) |
|
|
94
|
+
| `min` | Number | 否 | 最小值(number) |
|
|
95
|
+
| `max` | Number | 否 | 最大值(number) |
|
|
96
|
+
| `step` | Number | 否 | 步长(number) |
|
|
97
|
+
| `rows` | Number | 否 | 行数(textarea) |
|
|
98
|
+
|
|
99
|
+
## 支持的字段类型
|
|
100
|
+
|
|
101
|
+
| 类型 | 说明 | 对应 Element 组件 |
|
|
102
|
+
|------|------|-------------------|
|
|
103
|
+
| `input` | 文本输入 | el-input |
|
|
104
|
+
| `textarea` | 多行文本 | el-input(type="textarea") |
|
|
105
|
+
| `select` | 下拉选择 | el-select |
|
|
106
|
+
| `checkbox` | 单选框 | el-checkbox |
|
|
107
|
+
| `checkbox-group` | 多选框组 | el-checkbox-group |
|
|
108
|
+
| `radio` | 单选按钮 | el-radio |
|
|
109
|
+
| `radio-group` | 单选按钮组 | el-radio-group |
|
|
110
|
+
| `date` | 日期选择 | el-date-picker |
|
|
111
|
+
| `daterange` | 日期范围 | el-date-picker(type="daterange") |
|
|
112
|
+
| `datetime` | 日期时间 | el-date-picker(type="datetime") |
|
|
113
|
+
| `datetime-range` | 日期时间范围 | el-date-picker(type="datetimerange") |
|
|
114
|
+
| `number` | 数字输入 | el-input-number |
|
|
115
|
+
| `switch` | 开关 | el-switch |
|
|
116
|
+
|
|
117
|
+
## 事件说明
|
|
118
|
+
|
|
119
|
+
| 事件名 | 参数 | 说明 |
|
|
120
|
+
|--------|------|------|
|
|
121
|
+
| `input` | `formData` | 表单数据变化时触发 |
|
|
122
|
+
| `change` | `{ prop, value }` | 单个字段值变化时触发 |
|
|
123
|
+
| `confirm` | `formData` | 点击确认按钮时触发 |
|
|
124
|
+
| `cancel` | - | 点击取消按钮或关闭时触发 |
|
|
125
|
+
|
|
126
|
+
## 方法说明
|
|
127
|
+
|
|
128
|
+
| 方法名 | 参数 | 说明 |
|
|
129
|
+
|--------|------|------|
|
|
130
|
+
| `resetFields` | - | 重置表单到默认值 |
|
|
131
|
+
|
|
132
|
+
## 示例
|
|
133
|
+
|
|
134
|
+
### 对话框模式
|
|
135
|
+
|
|
136
|
+
::: demo 对话框模式
|
|
137
|
+
```vue
|
|
138
|
+
<template>
|
|
139
|
+
<div>
|
|
140
|
+
<XtButton type="primary" @click="showForm = true">高级搜索(对话框)</XtButton>
|
|
141
|
+
<XtFormSchema
|
|
142
|
+
v-model="searchForm"
|
|
143
|
+
:visible.sync="showForm"
|
|
144
|
+
:schema="schema"
|
|
145
|
+
mode="dialog"
|
|
146
|
+
width="600px"
|
|
147
|
+
title="高级搜索"
|
|
148
|
+
@confirm="handleConfirm"
|
|
149
|
+
/>
|
|
150
|
+
</div>
|
|
151
|
+
</template>
|
|
152
|
+
|
|
153
|
+
<script>
|
|
154
|
+
export default {
|
|
155
|
+
data() {
|
|
156
|
+
return {
|
|
157
|
+
showForm: false,
|
|
158
|
+
searchForm: {},
|
|
159
|
+
schema: [
|
|
160
|
+
{
|
|
161
|
+
prop: 'name',
|
|
162
|
+
label: '姓名',
|
|
163
|
+
type: 'input',
|
|
164
|
+
placeholder: '请输入姓名'
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
prop: 'status',
|
|
168
|
+
label: '状态',
|
|
169
|
+
type: 'select',
|
|
170
|
+
options: [
|
|
171
|
+
{ value: 'active', label: '活跃' },
|
|
172
|
+
{ value: 'inactive', label: '不活跃' },
|
|
173
|
+
{ value: 'pending', label: '待审核' }
|
|
174
|
+
],
|
|
175
|
+
filterable: true
|
|
176
|
+
}
|
|
177
|
+
]
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
methods: {
|
|
181
|
+
handleConfirm(formData) {
|
|
182
|
+
console.log('搜索条件:', formData)
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
</script>
|
|
187
|
+
```
|
|
188
|
+
:::
|
|
189
|
+
|
|
190
|
+
### 包含日期范围和多选框
|
|
191
|
+
|
|
192
|
+
::: demo 包含日期范围和多选框
|
|
193
|
+
```vue
|
|
194
|
+
<template>
|
|
195
|
+
<div>
|
|
196
|
+
<XtButton type="primary" @click="showForm = true">高级搜索</XtButton>
|
|
197
|
+
<XtFormSchema
|
|
198
|
+
v-model="searchForm"
|
|
199
|
+
:visible.sync="showForm"
|
|
200
|
+
:schema="schema"
|
|
201
|
+
@confirm="handleConfirm"
|
|
202
|
+
/>
|
|
203
|
+
</div>
|
|
204
|
+
</template>
|
|
205
|
+
|
|
206
|
+
<script>
|
|
207
|
+
export default {
|
|
208
|
+
data() {
|
|
209
|
+
return {
|
|
210
|
+
showForm: false,
|
|
211
|
+
searchForm: {},
|
|
212
|
+
schema: [
|
|
213
|
+
{
|
|
214
|
+
prop: 'keywords',
|
|
215
|
+
label: '关键词',
|
|
216
|
+
type: 'input',
|
|
217
|
+
placeholder: '请输入关键词'
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
prop: 'type',
|
|
221
|
+
label: '类型',
|
|
222
|
+
type: 'checkbox-group',
|
|
223
|
+
options: [
|
|
224
|
+
{ value: 'article', label: '文章' },
|
|
225
|
+
{ value: 'video', label: '视频' },
|
|
226
|
+
{ value: 'image', label: '图片' }
|
|
227
|
+
]
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
prop: 'dateRange',
|
|
231
|
+
label: '发布时间',
|
|
232
|
+
type: 'daterange',
|
|
233
|
+
format: 'yyyy-MM-dd'
|
|
234
|
+
}
|
|
235
|
+
]
|
|
236
|
+
}
|
|
237
|
+
},
|
|
238
|
+
methods: {
|
|
239
|
+
handleConfirm(formData) {
|
|
240
|
+
console.log('搜索条件:', formData)
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
</script>
|
|
245
|
+
```
|
|
246
|
+
:::
|
|
247
|
+
|
|
248
|
+
### 完整搜索示例
|
|
249
|
+
|
|
250
|
+
::: demo 完整搜索示例
|
|
251
|
+
```vue
|
|
252
|
+
<template>
|
|
253
|
+
<div>
|
|
254
|
+
<XtFlexBox class="search-bar" style="gap: 12px; margin-bottom: 16px;">
|
|
255
|
+
<XtInput v-model="searchForm.name" placeholder="姓名" style="width: 200px;" />
|
|
256
|
+
<XtInput v-model="searchForm.phone" placeholder="手机号" style="width: 200px;" />
|
|
257
|
+
<XtButton type="primary" @click="showForm = true">高级搜索</XtButton>
|
|
258
|
+
<XtButton @click="handleReset">重置</XtButton>
|
|
259
|
+
</XtFlexBox>
|
|
260
|
+
|
|
261
|
+
<XtFormSchema
|
|
262
|
+
ref="formSchema"
|
|
263
|
+
v-model="searchForm"
|
|
264
|
+
:visible.sync="showForm"
|
|
265
|
+
:schema="schema"
|
|
266
|
+
mode="drawer"
|
|
267
|
+
title="高级搜索"
|
|
268
|
+
@confirm="handleSearch"
|
|
269
|
+
/>
|
|
270
|
+
</div>
|
|
271
|
+
</template>
|
|
272
|
+
|
|
273
|
+
<script>
|
|
274
|
+
export default {
|
|
275
|
+
data() {
|
|
276
|
+
return {
|
|
277
|
+
showForm: false,
|
|
278
|
+
searchForm: {
|
|
279
|
+
name: '',
|
|
280
|
+
phone: '',
|
|
281
|
+
gender: '',
|
|
282
|
+
department: '',
|
|
283
|
+
dateRange: [],
|
|
284
|
+
status: []
|
|
285
|
+
},
|
|
286
|
+
schema: [
|
|
287
|
+
{
|
|
288
|
+
prop: 'gender',
|
|
289
|
+
label: '性别',
|
|
290
|
+
type: 'select',
|
|
291
|
+
options: [
|
|
292
|
+
{ value: 'male', label: '男' },
|
|
293
|
+
{ value: 'female', label: '女' }
|
|
294
|
+
]
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
prop: 'department',
|
|
298
|
+
label: '部门',
|
|
299
|
+
type: 'select',
|
|
300
|
+
options: [
|
|
301
|
+
{ value: 'tech', label: '技术部' },
|
|
302
|
+
{ value: 'sales', label: '销售部' },
|
|
303
|
+
{ value: 'hr', label: '人事部' }
|
|
304
|
+
],
|
|
305
|
+
filterable: true
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
prop: 'dateRange',
|
|
309
|
+
label: '入职时间',
|
|
310
|
+
type: 'daterange'
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
prop: 'status',
|
|
314
|
+
label: '状态',
|
|
315
|
+
type: 'checkbox-group',
|
|
316
|
+
options: [
|
|
317
|
+
{ value: 'active', label: '在职' },
|
|
318
|
+
{ value: 'leave', label: '休假' },
|
|
319
|
+
{ value: 'resigned', label: '离职' }
|
|
320
|
+
]
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
prop: 'score',
|
|
324
|
+
label: '绩效评分',
|
|
325
|
+
type: 'number',
|
|
326
|
+
min: 0,
|
|
327
|
+
max: 100
|
|
328
|
+
}
|
|
329
|
+
]
|
|
330
|
+
}
|
|
331
|
+
},
|
|
332
|
+
methods: {
|
|
333
|
+
handleSearch(formData) {
|
|
334
|
+
console.log('搜索条件:', formData)
|
|
335
|
+
},
|
|
336
|
+
handleReset() {
|
|
337
|
+
this.searchForm = {
|
|
338
|
+
name: '',
|
|
339
|
+
phone: '',
|
|
340
|
+
gender: '',
|
|
341
|
+
department: '',
|
|
342
|
+
dateRange: [],
|
|
343
|
+
status: []
|
|
344
|
+
}
|
|
345
|
+
this.$refs.formSchema.resetFields()
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
</script>
|
|
350
|
+
```
|
|
351
|
+
:::
|
|
352
|
+
|
|
353
|
+
## 注意事项
|
|
354
|
+
|
|
355
|
+
1. 表单数据通过 `v-model` 双向绑定,页面上的简单搜索字段和组件内的字段会自动同步
|
|
356
|
+
2. `showSearchTags` 开启后,已选择的条件会自动展示为标签,点击标签右侧的关闭按钮可清除对应条件
|
|
357
|
+
3. `schema` 中的 `prop` 需要与 `v-model` 对象的 key 对应
|
|
358
|
+
4. 组件支持通过 `ref` 调用 `resetFields` 方法重置表单
|
|
@@ -42,10 +42,10 @@
|
|
|
42
42
|
|
|
43
43
|
| 属性 | 类型 | 默认值 | 可选值 | 说明 |
|
|
44
44
|
|------|------|--------|--------|------|
|
|
45
|
-
| `span` | Number | `1` | >
|
|
46
|
-
| `rowSpan` | Number | `1` | >
|
|
47
|
-
| `start` | Number | `0` |
|
|
48
|
-
| `rowStart` | Number | `0` |
|
|
45
|
+
| `span` | Number | `1` | >1 | 跨列数 |
|
|
46
|
+
| `rowSpan` | Number | `1` | >1 | 跨行数 |
|
|
47
|
+
| `start` | Number | `0` | >0 | 起始列位置 |
|
|
48
|
+
| `rowStart` | Number | `0` | >0 | 起始行位置 |
|
|
49
49
|
| `area` | String | - | - | 命名区域名称 |
|
|
50
50
|
| `justifySelf` | String | `auto` | `auto`、`start`、`end`、`center`、`stretch` | 水平对齐 |
|
|
51
51
|
| `alignSelf` | String | `auto` | `auto`、`start`、`end`、`center`、`stretch`、`baseline` | 垂直对齐 |
|