@lx-frontend/wrap-element-ui 1.0.25 → 1.0.26

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 (113) hide show
  1. package/README.md +54 -4
  2. package/dist/auto/index.mjs +21 -0
  3. package/dist/auto/types/index.d.ts +9 -0
  4. package/dist/vue2/index.css +1 -0
  5. package/dist/vue2/index.mjs +3017 -0
  6. package/dist/vue2/types/components/AddMembers/index.vue.d.ts +31 -0
  7. package/dist/vue2/types/components/AuditSteps/index.vue.d.ts +46 -0
  8. package/dist/vue2/types/components/DemoComponent/index.vue.d.ts +2 -0
  9. package/{src/components/EditableTable/bizHooks/index.ts → dist/vue2/types/components/EditableTable/bizHooks/index.d.ts} +1 -1
  10. package/dist/vue2/types/components/EditableTable/bizHooks/useCellHover.d.ts +11 -0
  11. package/dist/vue2/types/components/EditableTable/bizHooks/useColumnHeaderOperation.d.ts +34 -0
  12. package/dist/vue2/types/components/EditableTable/bizHooks/useDefaultOperation.d.ts +22 -0
  13. package/dist/vue2/types/components/EditableTable/bizHooks/useDragSort.d.ts +14 -0
  14. package/dist/vue2/types/components/EditableTable/bizHooks/usePagination.d.ts +12 -0
  15. package/dist/vue2/types/components/EditableTable/bizHooks/useRowBgColor.d.ts +15 -0
  16. package/dist/vue2/types/components/EditableTable/bizHooks/useViewSetting.d.ts +26 -0
  17. package/dist/vue2/types/components/EditableTable/features/bizColorSelect.vue.d.ts +25 -0
  18. package/dist/vue2/types/components/EditableTable/features/bizEditCell.vue.d.ts +21 -0
  19. package/dist/vue2/types/components/EditableTable/features/bizTableHeaderPopover/BizCheckboxFilter.vue.d.ts +21 -0
  20. package/dist/vue2/types/components/EditableTable/features/bizTableHeaderPopover/BizColorRadioFilter.vue.d.ts +21 -0
  21. package/dist/vue2/types/components/EditableTable/features/bizTableHeaderPopover/BizDoubleDatePickerFilter.vue.d.ts +21 -0
  22. package/dist/vue2/types/components/EditableTable/features/bizTableHeaderPopover/BizInputFilter.vue.d.ts +21 -0
  23. package/dist/vue2/types/components/EditableTable/features/bizTableHeaderPopover/BizMonthDayPicker.helper.d.ts +48 -0
  24. package/dist/vue2/types/components/EditableTable/features/bizTableHeaderPopover/BizMonthDayPicker.vue.d.ts +21 -0
  25. package/dist/vue2/types/components/EditableTable/features/bizTableHeaderPopover/BizRadioFilter.vue.d.ts +21 -0
  26. package/dist/vue2/types/components/EditableTable/features/bizTableHeaderPopover/BizSortFilter.vue.d.ts +23 -0
  27. package/dist/vue2/types/components/EditableTable/features/bizTableHeaderPopover/index.vue.d.ts +311 -0
  28. package/dist/vue2/types/components/EditableTable/features/bizTableOperatePopover.vue.d.ts +32 -0
  29. package/dist/vue2/types/components/EditableTable/features/bizViewSettingDialog.vue.d.ts +30 -0
  30. package/dist/vue2/types/components/EditableTable/index.vue.d.ts +472 -0
  31. package/dist/vue2/types/components/EditableTable/types/index.d.ts +235 -0
  32. package/dist/vue2/types/components/Ellipsis/MultilineEllipsis.vue.d.ts +91 -0
  33. package/dist/vue2/types/components/Ellipsis/index.vue.d.ts +89 -0
  34. package/dist/vue2/types/components/LxTable/index.vue.d.ts +2 -0
  35. package/dist/vue2/types/components/PopoverForm/index.vue.d.ts +50 -0
  36. package/dist/vue2/types/components/SearchForm/index.vue.d.ts +116 -0
  37. package/dist/vue2/types/components/SearchForm/types/index.d.ts +65 -0
  38. package/dist/vue2/types/components/SearchSelect/index.vue.d.ts +53 -0
  39. package/dist/vue2/types/components/helper.d.ts +8 -0
  40. package/dist/vue2/types/components/index.d.ts +12 -0
  41. package/dist/vue2/types/components/singleMessage/index.d.ts +4 -0
  42. package/dist/vue2/types/vue2/index.d.ts +1363 -0
  43. package/dist/vue3/index.css +1 -0
  44. package/dist/vue3/index.mjs +2306 -0
  45. package/dist/vue3/index.mjs.map +1 -0
  46. package/dist/vue3/types/components/EditableTable/features/bizColorSelect.vue.d.ts +31 -0
  47. package/dist/vue3/types/components/EditableTable/features/bizTableHeaderPopover/BizCheckboxFilter.vue.d.ts +23 -0
  48. package/dist/vue3/types/components/EditableTable/features/bizTableHeaderPopover/BizColorRadioFilter.vue.d.ts +23 -0
  49. package/dist/vue3/types/components/EditableTable/features/bizTableHeaderPopover/BizDoubleDatePickerFilter.vue.d.ts +23 -0
  50. package/dist/vue3/types/components/EditableTable/features/bizTableHeaderPopover/BizInputFilter.vue.d.ts +23 -0
  51. package/dist/vue3/types/components/EditableTable/features/bizTableHeaderPopover/BizMonthDayPicker.helper.d.ts +48 -0
  52. package/dist/vue3/types/components/EditableTable/features/bizTableHeaderPopover/BizMonthDayPicker.vue.d.ts +23 -0
  53. package/dist/vue3/types/components/EditableTable/features/bizTableHeaderPopover/BizRadioFilter.vue.d.ts +23 -0
  54. package/dist/vue3/types/components/EditableTable/features/bizTableHeaderPopover/BizSortFilter.vue.d.ts +25 -0
  55. package/dist/vue3/types/components/EditableTable/features/bizTableHeaderPopover/index.vue.d.ts +77 -0
  56. package/dist/vue3/types/components/EditableTable/features/bizTableOperatePopover.vue.d.ts +36 -0
  57. package/dist/vue3/types/components/EditableTable/features/bizViewSettingDialog.vue.d.ts +35 -0
  58. package/dist/vue3/types/components/EditableTable/hooks/index.d.ts +9 -0
  59. package/dist/vue3/types/components/EditableTable/hooks/useCellHover.d.ts +19 -0
  60. package/dist/vue3/types/components/EditableTable/hooks/useColumnHeaderOperation.d.ts +37 -0
  61. package/dist/vue3/types/components/EditableTable/hooks/useDefaultOperation.d.ts +22 -0
  62. package/dist/vue3/types/components/EditableTable/hooks/useDragSort.d.ts +15 -0
  63. package/dist/vue3/types/components/EditableTable/hooks/usePagination.d.ts +12 -0
  64. package/dist/vue3/types/components/EditableTable/hooks/useRowBgColor.d.ts +18 -0
  65. package/dist/vue3/types/components/EditableTable/hooks/useRowEdit.d.ts +14 -0
  66. package/dist/vue3/types/components/EditableTable/hooks/useTableRender.d.ts +41 -0
  67. package/dist/vue3/types/components/EditableTable/hooks/useViewSetting.d.ts +26 -0
  68. package/dist/vue3/types/components/EditableTable/index.vue.d.ts +4478 -0
  69. package/dist/vue3/types/components/EditableTable/types.d.ts +419 -0
  70. package/dist/vue3/types/components/helper.d.ts +8 -0
  71. package/dist/vue3/types/index.d.ts +7 -0
  72. package/dist/vue3/types/stories/EditableTable.fake.d.ts +33 -0
  73. package/dist/vue3/types/stories/EditableTable.hook.d.ts +12 -0
  74. package/dist/vue3/types/stories/EditableTable.stories.d.ts +18 -0
  75. package/package.json +38 -8
  76. package/src/components/AddMembers/index.vue +0 -149
  77. package/src/components/AuditSteps/index.vue +0 -140
  78. package/src/components/DemoComponent/index.vue +0 -21
  79. package/src/components/EditableTable/README.md +0 -147
  80. package/src/components/EditableTable/bizHooks/useCellHover.ts +0 -72
  81. package/src/components/EditableTable/bizHooks/useColumnHeaderOperation.ts +0 -339
  82. package/src/components/EditableTable/bizHooks/useDefaultOperation.ts +0 -96
  83. package/src/components/EditableTable/bizHooks/useDragSort.ts +0 -291
  84. package/src/components/EditableTable/bizHooks/usePagination.ts +0 -31
  85. package/src/components/EditableTable/bizHooks/useRowBgColor.ts +0 -44
  86. package/src/components/EditableTable/bizHooks/useViewSetting.ts +0 -206
  87. package/src/components/EditableTable/features/bizColorSelect.vue +0 -63
  88. package/src/components/EditableTable/features/bizEditCell.vue +0 -44
  89. package/src/components/EditableTable/features/bizTableHeaderPopover/BizCheckboxFilter.vue +0 -40
  90. package/src/components/EditableTable/features/bizTableHeaderPopover/BizColorRadioFilter.vue +0 -56
  91. package/src/components/EditableTable/features/bizTableHeaderPopover/BizDoubleDatePickerFilter.vue +0 -94
  92. package/src/components/EditableTable/features/bizTableHeaderPopover/BizInputFilter.vue +0 -26
  93. package/src/components/EditableTable/features/bizTableHeaderPopover/BizMonthDayPicker.helper.ts +0 -131
  94. package/src/components/EditableTable/features/bizTableHeaderPopover/BizMonthDayPicker.vue +0 -115
  95. package/src/components/EditableTable/features/bizTableHeaderPopover/BizRadioFilter.vue +0 -39
  96. package/src/components/EditableTable/features/bizTableHeaderPopover/BizSortFilter.vue +0 -50
  97. package/src/components/EditableTable/features/bizTableHeaderPopover/index.vue +0 -160
  98. package/src/components/EditableTable/features/bizTableOperatePopover.vue +0 -67
  99. package/src/components/EditableTable/features/bizViewSettingDialog.vue +0 -137
  100. package/src/components/EditableTable/index.less +0 -820
  101. package/src/components/EditableTable/index.vue +0 -681
  102. package/src/components/EditableTable/pin-top.png +0 -0
  103. package/src/components/EditableTable/types/index.ts +0 -212
  104. package/src/components/Ellipsis/MultilineEllipsis.vue +0 -141
  105. package/src/components/Ellipsis/index.vue +0 -119
  106. package/src/components/LxTable/index.vue +0 -296
  107. package/src/components/PopoverForm/index.vue +0 -66
  108. package/src/components/SearchForm/index.vue +0 -262
  109. package/src/components/SearchForm/types/index.ts +0 -81
  110. package/src/components/SearchSelect/index.vue +0 -153
  111. package/src/components/helper.ts +0 -37
  112. package/src/components/index.ts +0 -24
  113. package/src/components/singleMessage/index.ts +0 -44
@@ -1,296 +0,0 @@
1
-
2
- <!--
3
- @row-click="handleRowClick" 当某一行被点击时会触发该事件
4
- @cell-click="handleCellClick" 当某个单元格被点击时会触发该事件
5
- @sort-change="sortChange" 排序触发事件
6
- sortable 配置排序
7
- default-sort: prop默认字段 order排序方式
8
- slot='key_header' scopeHeader 支持表头可自定义
9
- highlightCurrentRow 单行选中状态
10
- -->
11
- <template>
12
- <div class="table-content">
13
- <FElTable
14
- ref="lxTableRef"
15
- v-loading="loading"
16
- v-bind="$attrs"
17
- :data="tableData"
18
- :empty-text="(customConfig || {}).emptyText || ''"
19
- :highlight-current-row="highlightCurrentRow"
20
- :row-class-name="tableRowClassName"
21
- :default-sort="(customConfig || {}).sortValue || defaultSort"
22
- @selection-change="handleSelectionChange"
23
- @row-click="handleRowClick"
24
- @cell-click="handleCellClick"
25
- @sort-change="sortChange"
26
- >
27
- <ElTableColumn
28
- v-if="customConfig.selection && customConfig.selection.isOpenSelection"
29
- type="selection"
30
- :width="customConfig.selection.width"
31
- />
32
- <ElTableColumn
33
- v-for="(item, index) in cloumns"
34
- :key="`${item}_${index}`"
35
- :label="item"
36
- :prop="keys[index]"
37
- :sortable="getFieldFromConfig(keys[index], 'sortable')"
38
- :width="getFieldFromConfig(keys[index], 'width')"
39
- :min-width="getFieldFromConfig(keys[index], 'minWidth')"
40
- :fixed="getFieldFromConfig(keys[index], 'fixed')"
41
- >
42
- <template
43
- slot="header"
44
- slot-scope="scope"
45
- >
46
- <slot
47
- v-if="getFieldFromConfig(keys[index], 'scopeHeader')"
48
- template
49
- :name="`${keys[index]}_header`"
50
- :keys="keys[index]"
51
- :row="scope.row"
52
- :lable="scope.column"
53
- :column="scope.$index"
54
- />
55
- <span v-else>
56
- {{ item }}
57
- </span>
58
- </template>
59
- <template slot-scope="scope">
60
- <!-- 支持keys字段为'car.id'或者'id' -->
61
- <div v-if="keys[index].indexOf('.') != -1">
62
- <!-- 一个td需要展示多个字段名 -->
63
- <div v-if="Array.isArray(keys[index])">
64
- <div
65
- v-for="(array, i) in keys[index]"
66
- :key="i"
67
- >
68
- {{ scope.row[array] }}
69
- </div>
70
- </div>
71
- <!-- 字段formatters存在,数据过滤-->
72
- <span
73
- v-else-if="getFieldFromConfig(keys[index], 'formatters')"
74
- >
75
- {{ formatterMethods(scope.row[keys[index].split('.')[0]][keys[index].split('.')[1]], (customConfig[keys[index]].formatters)) }}
76
- </span>
77
- <!-- 复杂情况需要自定义---当前keys存在于customConfig.template数据定义中,传入slot的name作为唯一标识符 -->
78
- <slot
79
- v-else-if="getFieldFromConfig(keys[index], 'template')"
80
- template
81
- :name="keys[index]"
82
- :keys="keys[index]"
83
- :row="scope.row"
84
- :lable="scope.column"
85
- :column="scope.$index"
86
- />
87
- <div v-else>
88
- <!-- 传入不需要截取的列 -->
89
- <span v-if="getFieldFromConfig(keys[index], 'templateCutOut')">
90
- {{ scope.row[keys[index].split('.')[0]][keys[index].split('.')[1]] | formateValue }}
91
- </span>
92
- <Ellipsis
93
- v-else
94
- :popover-name="popoverName"
95
- :line-count="getFieldFromConfig(keys[index], 'lineCount')"
96
- :content="[`${scope.row[keys[index].split('.')[0]][keys[index].split('.')[1]]}`] | formateValue"
97
- >
98
- <div slot="popover">
99
- <div>{{ scope.row[keys[index].split('.')[0]][keys[index].split('.')[1]] | formateValue }}</div>
100
- </div>
101
- </Ellipsis>
102
- </div>
103
- </div>
104
- <div v-else>
105
- <!-- 一个td需要展示多个字段名 -->
106
- <div v-if="Array.isArray(keys[index])">
107
- <div
108
- v-for="(array, i) in keys[index]"
109
- :key="i"
110
- >
111
- {{ scope.row[array] }}
112
- </div>
113
- </div>
114
- <!-- 字段formatters存在,数据过滤-->
115
- <span
116
- v-else-if="getFieldFromConfig(keys[index], 'formatters')"
117
- >
118
- {{ formatterMethods(scope.row[keys[index]], (customConfig[keys[index]].formatters)) }}
119
- </span>
120
- <!-- 复杂情况需要自定义---当前keys存在于customConfig.template数据定义中,传入slot的name作为唯一标识符 -->
121
- <slot
122
- v-else-if="getFieldFromConfig(keys[index], 'template')"
123
- template
124
- :name="keys[index]"
125
- :keys="keys[index]"
126
- :row="scope.row"
127
- :lable="scope.column"
128
- :column="scope.$index"
129
- />
130
- <div v-else>
131
- <!-- 传入不需要截取的列 -->
132
- <span v-if="getFieldFromConfig(keys[index], 'templateCutOut')">
133
- {{ scope.row[keys[index]] | formateValue }}
134
- </span>
135
- <Ellipsis
136
- v-else
137
- :popover-name="popoverName"
138
- :line-count="getFieldFromConfig(keys[index], 'lineCount')"
139
- :content="[`${scope.row[keys[index]]}`] | formateValue"
140
- >
141
- <div slot="popover">
142
- <div>{{ scope.row[keys[index]] | formateValue }}</div>
143
- </div>
144
- </Ellipsis>
145
- </div>
146
- </div>
147
- </template>
148
- </ElTableColumn>
149
- </FElTable>
150
- <ElPagination
151
- :background="background"
152
- v-if="currentPage"
153
- :current-page="currentPage"
154
- :page-size="pageSize"
155
- :total="totals"
156
- layout="total, prev, pager, next, jumper, slot"
157
- @current-change="handleCurrentChange"
158
- />
159
- </div>
160
- </template>
161
- <script>
162
- import Ellipsis from '../Ellipsis';
163
- import { Table } from 'element-ui'
164
- const FElTable = {
165
- extends: Table,
166
- methods: {
167
- doLayout (...args) {
168
- Table.methods.doLayout.call(this, ...args)
169
- this.fixLayout() // Looks like we can do it once?
170
- },
171
- fixLayout () {
172
- // Safari header/content misalign fix (possible other browsers?)
173
- this.columns.forEach(c => {
174
- // element-ui/packages/table/src/layout-observer.js:49
175
- const width = c.realWidth || c.width
176
- const th = this.$el.querySelector(`table.el-table__header th.${c.id}`)
177
- if (th) {
178
- if (th.offsetWidth !== width) {
179
- th.style = `min-width: ${width}px; max-width: ${width}px;`
180
- }
181
- let td
182
- for (td of this.$el.querySelectorAll(`table.el-table__body td.${c.id}`)) {
183
- if (td.offsetWidth === width) break
184
- td.style = `min-width: ${width}px; max-width: ${width}px;`
185
- }
186
- }
187
- })
188
- }
189
- }
190
- }
191
-
192
- export default {
193
- name: 'LxTable',
194
- components: {
195
- Ellipsis,
196
- FElTable
197
- },
198
- filters: {
199
- formateValue (val) {
200
- if (Array.isArray(val) && (val[0] === 'null' || val[0] === '')) {
201
- val = '';
202
- }
203
- return (val || val === 0) ? val : '--';
204
- },
205
- },
206
- props: {
207
- tableData: {
208
- type : Array,
209
- default: () => [],
210
- },
211
- cloumns: {
212
- type : Array,
213
- default: () => [],
214
- },
215
- customConfig: Object,
216
- keys: {
217
- type : Array,
218
- default: () => [],
219
- },
220
- defaultSort: {
221
- prop: '',
222
- order: null,
223
- },
224
- stripe: {
225
- type: Boolean,
226
- default: true,
227
- },
228
- loading: {
229
- type: Boolean,
230
- default: false,
231
- },
232
- background: {
233
- type: Boolean,
234
- default: true,
235
- },
236
- totals: Number,
237
- pageSize: Number,
238
- currentPage: Number,
239
- popoverName: String,
240
- parentFn: {
241
- type : String,
242
- default: '',
243
- },
244
- highlightCurrentRow: {
245
- type: Boolean,
246
- default: true,
247
- },
248
- tableRowClassName: {},
249
- },
250
- data() {
251
- return {
252
- scope: 'scope',
253
- };
254
- },
255
- methods: {
256
- handleCurrentChange(val) {
257
- this.$emit('handleCurrentChange', val);
258
- },
259
- handleSelectionChange(val) {
260
- this.$emit('handleSelectionChange', val);
261
- },
262
- handleRowClick(row, column, cell, event) {
263
- this.$emit('handleRowClick', row, column, cell, event);
264
- },
265
- handleCellClick(row, column, cell, event){
266
- this.$emit('handleCellClick', row, column, cell, event);
267
- },
268
- sortChange(column, prop, order) {
269
- this.$emit('sortChange', column, prop, order);
270
- },
271
- formatterMethods(key, keyData) {
272
- // 返回数据,可类型转换; 可添加单位;
273
- let value = '--';
274
- if (key || key === 0) {
275
- const keyValue = keyData[key] || key;
276
- const unit = keyData.unit || '';
277
- value = `${keyValue}${unit}`;
278
- }
279
- return value;
280
- },
281
- formateValue (val) {
282
- return val || val === 0 ? val : '--';
283
- },
284
- getFieldFromConfig(index, name) {
285
- return this.customConfig && this.customConfig[index] && this.customConfig[index][name];
286
- },
287
- }
288
- }
289
- </script>
290
- <style type="scss">
291
- .table-content .el-pagination {
292
- text-align: right;
293
- padding: 14px 0;
294
- }
295
- </style>
296
-
@@ -1,66 +0,0 @@
1
- <template>
2
- <el-popover :placement="placement" :disabled="isDisabled" :width="width || 300" v-model="show" trigger="click" :visible-arrow="true">
3
- <div class="el-popover__header">
4
- {{title}}
5
- <slot name="title"></slot>
6
- <el-button type="text" icon="el-icon-close" @click="handleClose"></el-button>
7
- </div>
8
- <slot name="form"></slot>
9
-
10
- <div v-if="withSubmitBtn" class="el-popover__footer">
11
- <slot name="footer"></slot>
12
- <el-button type="primary" class="wp100" @click="handleSubmit">{{ okText }}</el-button>
13
- </div>
14
- <span slot='reference'>
15
- <slot name='reference'></slot>
16
- </span>
17
- </el-popover>
18
- </template>
19
- <script>
20
- export default {
21
- name: 'PopoverForm',
22
- props: {
23
- title: String,
24
- width: Number,
25
- placement: {
26
- type: String,
27
- default: 'left',
28
- },
29
- withSubmitBtn: {
30
- type: Boolean,
31
- default: true,
32
- },
33
- isDisabled: {
34
- type: Boolean,
35
- default: false,
36
- },
37
- okText: {
38
- type: String,
39
- default: '确认',
40
- },
41
- },
42
- data() {
43
- return {
44
- show: false,
45
- };
46
- },
47
- methods: {
48
- handleClose() {
49
- this.show = false;
50
- },
51
- handleSubmit() {
52
- this.$emit('on-sure');
53
- },
54
- },
55
- watch: {
56
- show(val) {
57
- this.$emit('on-change', val);
58
- },
59
- },
60
- };
61
- </script>
62
- <style type="scss" scoped>
63
- .wp100{
64
- width: 100%;
65
- }
66
- </style>
@@ -1,262 +0,0 @@
1
- <template>
2
- <el-form
3
- class="search-form"
4
- :inline="isInline"
5
- :label-width="width"
6
- :label-position="labelPosition"
7
- >
8
- <el-form-item
9
- v-for="({
10
- isEmpty = true, key, type, prop, label, labelWidth, placeholder, candidate, filterable=false, withoutAll=false, collapseTags=false,
11
- clearable=false, multiple=false, multipleLimit=0, changeCb, inputLimitCallback, slotName, dateType='date', rangeSeparator,
12
- doubleIsInline = true, maxlength = 255, pickerOptions, limit, required = false
13
- }) in config"
14
- :required="required"
15
- :key="label"
16
- :label="showLabel ? label : ''"
17
- :label-width="labelWidth || width"
18
- style="margin-right: 10px"
19
- >
20
- <el-input
21
- v-if="type === 'input'"
22
- :placeholder="placeholder ? placeholder : showLabel ? '请输入' : label"
23
- :value="formData[prop]"
24
- :maxlength="maxlength"
25
- @input="val => handleInput(val, prop, inputLimitCallback)"
26
- />
27
- <div
28
- v-if="type === 'doubleInput'"
29
- :class="doubleIsInline ? 'form-double-inline': ''"
30
- >
31
- <el-input
32
- @input="val => handleInput(val, prop[0], inputLimitCallback)"
33
- :value="formData[prop[0]]"
34
- :placeholder="(placeholder || [])[0] || '请输入'"
35
- />
36
- <el-input
37
- :placeholder="(placeholder || [])[1] || '请输入'"
38
- :value="formData[prop[1]]"
39
- @input="val => handleInput(val, prop[1], inputLimitCallback)"
40
- />
41
- </div>
42
- <el-select
43
- v-if="type === 'select'"
44
- :value="formData[prop]"
45
- :placeholder="placeholder ? placeholder : showLabel ? '请输入' : label"
46
- :clearable="clearable"
47
- @input="val => handleInput(val, prop)"
48
- @change="(...args) => changeCb && changeCb(...args)"
49
- :filterable="filterable"
50
- :multiple="multiple"
51
- :multiple-limit="multipleLimit"
52
- :collapse-tags="collapseTags"
53
- >
54
- <el-option
55
- v-if="!withoutAll"
56
- value=""
57
- :label="showLabel ? '全部' : label"
58
- />
59
- <el-option
60
- v-for="({name, value, code, id}) in candidate"
61
- :key="value || code || id"
62
- :value="value || code || id"
63
- :label="name"
64
- />
65
- </el-select>
66
- <el-date-picker
67
- v-if="type === 'datePicker'"
68
- @input="val => handleInput(val, prop)"
69
- @change="(...args) => changeCb && changeCb(...args)"
70
- :value="formData[prop]"
71
- format="yyyy-MM-dd"
72
- value-format="yyyy-MM-dd"
73
- :type="dateType"
74
- :range-separator="rangeSeparator || '到'"
75
- :placeholder="dateType == 'date' ? placeholder || '选择日期' : '选择日期范围'"
76
- start-placeholder="开始日期"
77
- end-placeholder="结束日期"
78
- :picker-options="pickerOptions"
79
- />
80
- <div
81
- v-if="type === 'doubleDatePicker'"
82
- :class="doubleIsInline ? 'form-double-inline': ''"
83
- >
84
- <el-date-picker
85
- @input="val => handleInput(val, prop[0], '', key)"
86
- @change="(...args) => changeCb && changeCb(...args)"
87
- :value="formData[prop[0]]"
88
- value-format="yyyy-MM-dd"
89
- format="yyyy-MM-dd"
90
- type="date"
91
- :editable="false"
92
- :placeholder="(placeholder || [])[0] || '开始日期'"
93
- :picker-options="pickerOptions?.start || genStartDateDisabledOptions(formData[prop[1]], limit)"
94
- />
95
- <el-date-picker
96
- @input="val => handleInput(val, prop[1], '', key)"
97
- @change="(...args) => changeCb && changeCb(...args)"
98
- :value="formData[prop[1]]"
99
- value-format="yyyy-MM-dd"
100
- format="yyyy-MM-dd"
101
- type="date"
102
- :editable="false"
103
- :placeholder="(placeholder || [])[1] || '结束日期'"
104
- :picker-options="pickerOptions?.end || genEndDateDisabledOptions(formData[prop[0]], limit)"
105
- />
106
- <el-checkbox
107
- :value="checkedIds[key]"
108
- v-if="isEmpty"
109
- @change="(value) => handelIsEmpty(prop, value, key)"
110
- class="is-empty"
111
- >
112
- 空白
113
- </el-checkbox>
114
- </div>
115
- <slot
116
- v-if="type === 'slot'"
117
- :name="slotName"
118
- />
119
- </el-form-item>
120
- <span v-if="isShowSearchBtn">
121
- <el-button
122
- class="search"
123
- @click="handleSearch"
124
- type="primary"
125
- >{{ searchText }}</el-button>
126
- <el-button
127
- v-if="showClear"
128
- @click="handleClearParams"
129
- >{{ clearText }}</el-button>
130
- </span>
131
- </el-form>
132
- </template>
133
-
134
- <script>
135
- import { genStartDateDisabledOptions, genEndDateDisabledOptions } from '../helper';
136
-
137
- export default {
138
- name: 'SearchForm',
139
- props: {
140
- labelPosition: {
141
- default: 'right',
142
- type: String
143
- },
144
- isShowSearchBtn: {
145
- default: true,
146
- type: Boolean
147
- },
148
- isInline: {
149
- default: false,
150
- type: Boolean
151
- },
152
- config: {
153
- required: true,
154
- type: Array
155
- },
156
- width: {
157
- default: '100px',
158
- type: String
159
- },
160
- formData: {
161
- required: true
162
- },
163
- showClear: {
164
- default: true,
165
- type: Boolean
166
- },
167
- showLabel: {
168
- default: true,
169
- type: Boolean
170
- },
171
- ownerClear: {
172
- type: Function
173
- },
174
- resetCheckedIds: {
175
- type: Boolean
176
- },
177
- searchText: {
178
- default: '搜索',
179
- type: String
180
- },
181
- clearText: {
182
- default: '清除',
183
- type: String
184
- }
185
- },
186
- data () {
187
- return {
188
- visible: true,
189
- initialData: {},
190
- checkedIds: {}
191
- }
192
- },
193
- watch: {
194
- resetCheckedIds () {
195
- this.config.filter(c => c.type === 'doubleDatePicker').map(t => t.key).forEach(k => {
196
- this.$set(this.checkedIds, k, false)
197
- })
198
- }
199
- },
200
- mounted () {
201
- this.initialData = Object.freeze({ ...this.formData })
202
- },
203
- methods: {
204
- genStartDateDisabledOptions,
205
- genEndDateDisabledOptions,
206
- handleInput (val, prop, inputLimitCallback, key) {
207
- if (inputLimitCallback && !inputLimitCallback(val)) return false
208
- if (val) {
209
- this.$set(this.checkedIds, key, false)
210
- }
211
- this.$emit('update:formData', { ...this.formData, [prop]: val })
212
- this.$emit('isPickerEmpty', this.checkedIds)
213
- },
214
-
215
- handleSearch () {
216
- this.$emit('search', this.formData)
217
- },
218
-
219
- handelIsEmpty (prop, value, key) {
220
- if (value) {
221
- // eslint-disable-next-line
222
- this.formData[prop[0]] = '';
223
- // eslint-disable-next-line
224
- this.formData[prop[1]] = '';
225
- }
226
- this.$set(this.checkedIds, key, value)
227
- this.$emit('isPickerEmpty', this.checkedIds)
228
- },
229
-
230
- handleClearParams () { // 父组件可以通过调用 `this.$refs[xx].handleClearParams()` 来清空表单数据
231
- if (this.ownerClear && typeof this.ownerClear === 'function') {
232
- this.ownerClear()
233
- return
234
- }
235
- Object.keys(this.checkedIds).forEach((k) => {
236
- this.checkedIds[k] = false
237
- })
238
- this.$emit('update:formData', { ...this.formData, ...this.initialData })
239
- this.$emit('clear')
240
- },
241
-
242
- handleFormClose () {
243
- this.visible = false;
244
- },
245
- }
246
- }
247
- </script>
248
- <style scoped lang="less">
249
- .form-double-inline {
250
- display: flex;
251
- & .el-input {
252
- &:not(:first-child) {
253
- margin-left: 4px;
254
- }
255
- }
256
- & .el-date-editor{
257
- &:not(:first-child){
258
- margin-left: 4px;
259
- }
260
- }
261
- }
262
- </style>
@@ -1,81 +0,0 @@
1
- import { DatePicker } from "element-ui/types/element-ui"
2
-
3
- type BaseOption = {
4
- label: string
5
- prop: string
6
- labelWidth?: string
7
- clearable?: boolean
8
- placeholder?: string
9
- key?: string
10
- changeCb?: (value: any) => any
11
- }
12
-
13
- type SlotOption = Omit<BaseOption, 'prop'> & {
14
- prop?: string
15
- type: 'slot'
16
- slotName: string
17
- }
18
-
19
- type InputOption = BaseOption & {
20
- type: 'input'
21
- inputLimitCallback?: (value: string) => boolean
22
- maxlength?: number
23
- }
24
-
25
- type SelectOption = BaseOption & {
26
- type: 'select'
27
- multiple?: boolean
28
- filterable?: boolean
29
- multipleLimit?: number
30
- collapseTags?: boolean
31
- withoutAll?: boolean
32
- candidate: {
33
- name: string
34
- value?: string | number
35
- id?: string | number
36
- code?: string | number
37
- }[]
38
- }
39
-
40
- type DatePickerOption = BaseOption & {
41
- type: 'datePicker'
42
- dateType?: string
43
- rangeSeparator?: string
44
- datePickerOptions?: DatePicker['pickerOptions']
45
- }
46
-
47
- type BaseDoubleOption = Omit<BaseOption, 'prop'> & {
48
- doubleIsInline?: boolean
49
- prop: [string, string]
50
- }
51
-
52
- type DoubleInputOption = BaseDoubleOption & {
53
- type: 'doubleInput'
54
- inputLimitCallback?: (value: string) => boolean
55
- }
56
-
57
- type DoubleDatePickerOptionBase = BaseDoubleOption & {
58
- type: 'doubleDatePicker'
59
- isEmpty?: boolean
60
- placeholder?: [string, string]
61
- }
62
-
63
- type DoubleDatePickerOption = DoubleDatePickerOptionBase & {
64
- pickerOptions?: {
65
- start?: DatePicker['pickerOptions']
66
- end?: DatePicker['pickerOptions']
67
- }
68
- }
69
-
70
- type DoubleDatePickerOptionLimit = DoubleDatePickerOptionBase & {
71
- limit?: number
72
- }
73
-
74
- export type SearchFormConfigOption =
75
- | InputOption
76
- | SelectOption
77
- | DatePickerOption
78
- | DoubleInputOption
79
- | DoubleDatePickerOption
80
- | DoubleDatePickerOptionLimit
81
- | SlotOption