@lx-frontend/wrap-element-ui 1.0.24 → 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 +65 -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 -256
  109. package/src/components/SearchForm/types/index.ts +0 -79
  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,256 +0,0 @@
1
- <template>
2
- <el-form
3
- class="search-form"
4
- :inline="isInline"
5
- :label-width="width"
6
- >
7
- <el-form-item
8
- v-for="({
9
- isEmpty = true, key, type, prop, label, placeholder, candidate, filterable=false, withoutAll=false, collapseTags=false,
10
- clearable=false, multiple=false, multipleLimit=0, changeCb, inputLimitCallback, slotName, dateType='date',
11
- doubleIsInline = true, maxlength = 255, pickerOptions, limit, required = false
12
- }) in config"
13
- :required="required"
14
- :key="label"
15
- :label="showLabel ? label : ''"
16
- style="margin-right: 10px"
17
- >
18
- <el-input
19
- v-if="type === 'input'"
20
- :placeholder="placeholder ? placeholder : showLabel ? '请输入' : label"
21
- :value="formData[prop]"
22
- :maxlength="maxlength"
23
- @input="val => handleInput(val, prop, inputLimitCallback)"
24
- />
25
- <div
26
- v-if="type === 'doubleInput'"
27
- :class="doubleIsInline ? 'form-double-inline': ''"
28
- >
29
- <el-input
30
- @input="val => handleInput(val, prop[0], inputLimitCallback)"
31
- :value="formData[prop[0]]"
32
- :placeholder="(placeholder || [])[0] || '请输入'"
33
- />
34
- <el-input
35
- :placeholder="(placeholder || [])[1] || '请输入'"
36
- :value="formData[prop[1]]"
37
- @input="val => handleInput(val, prop[1], inputLimitCallback)"
38
- />
39
- </div>
40
- <el-select
41
- v-if="type === 'select'"
42
- :value="formData[prop]"
43
- :placeholder="placeholder ? placeholder : showLabel ? '请输入' : label"
44
- :clearable="clearable"
45
- @input="val => handleInput(val, prop)"
46
- @change="(...args) => changeCb && changeCb(...args)"
47
- :filterable="filterable"
48
- :multiple="multiple"
49
- :multiple-limit="multipleLimit"
50
- :collapse-tags="collapseTags"
51
- >
52
- <el-option
53
- v-if="!withoutAll"
54
- value=""
55
- :label="showLabel ? '全部' : label"
56
- />
57
- <el-option
58
- v-for="({name, value, code, id}) in candidate"
59
- :key="value || code || id"
60
- :value="value || code || id"
61
- :label="name"
62
- />
63
- </el-select>
64
- <el-date-picker
65
- v-if="type === 'datePicker'"
66
- @input="val => handleInput(val, prop)"
67
- @change="(...args) => changeCb && changeCb(...args)"
68
- :value="formData[prop]"
69
- format="yyyy-MM-dd"
70
- value-format="yyyy-MM-dd"
71
- :type="dateType"
72
- range-separator="到"
73
- :placeholder="dateType == 'date' ? placeholder || '选择日期' : '选择日期范围'"
74
- start-placeholder="开始日期"
75
- end-placeholder="结束日期"
76
- :picker-options="pickerOptions"
77
- />
78
- <div
79
- v-if="type === 'doubleDatePicker'"
80
- :class="doubleIsInline ? 'form-double-inline': ''"
81
- >
82
- <el-date-picker
83
- @input="val => handleInput(val, prop[0], '', key)"
84
- @change="(...args) => changeCb && changeCb(...args)"
85
- :value="formData[prop[0]]"
86
- value-format="yyyy-MM-dd"
87
- format="yyyy-MM-dd"
88
- type="date"
89
- :editable="false"
90
- :placeholder="(placeholder || [])[0] || '开始日期'"
91
- :picker-options="pickerOptions?.start || genStartDateDisabledOptions(formData[prop[1]], limit)"
92
- />
93
- <el-date-picker
94
- @input="val => handleInput(val, prop[1], '', key)"
95
- @change="(...args) => changeCb && changeCb(...args)"
96
- :value="formData[prop[1]]"
97
- value-format="yyyy-MM-dd"
98
- format="yyyy-MM-dd"
99
- type="date"
100
- :editable="false"
101
- :placeholder="(placeholder || [])[1] || '结束日期'"
102
- :picker-options="pickerOptions?.end || genEndDateDisabledOptions(formData[prop[0]], limit)"
103
- />
104
- <el-checkbox
105
- :value="checkedIds[key]"
106
- v-if="isEmpty"
107
- @change="(value) => handelIsEmpty(prop, value, key)"
108
- class="is-empty"
109
- >
110
- 空白
111
- </el-checkbox>
112
- </div>
113
- <slot
114
- v-if="type === 'slot'"
115
- :name="slotName"
116
- />
117
- </el-form-item>
118
- <span v-if="isShowSearchBtn">
119
- <el-button
120
- class="search"
121
- @click="handleSearch"
122
- type="primary"
123
- >{{ searchText }}</el-button>
124
- <el-button
125
- v-if="showClear"
126
- @click="handleClearParams"
127
- >{{ clearText }}</el-button>
128
- </span>
129
- </el-form>
130
- </template>
131
-
132
- <script>
133
- import { genStartDateDisabledOptions, genEndDateDisabledOptions } from '../helper';
134
-
135
- export default {
136
- name: 'SearchForm',
137
- props: {
138
- isShowSearchBtn: {
139
- default: true,
140
- type: Boolean
141
- },
142
- isInline: {
143
- default: false,
144
- type: Boolean
145
- },
146
- config: {
147
- required: true,
148
- type: Array
149
- },
150
- width: {
151
- default: '100px',
152
- type: String
153
- },
154
- formData: {
155
- required: true
156
- },
157
- showClear: {
158
- default: true,
159
- type: Boolean
160
- },
161
- showLabel: {
162
- default: true,
163
- type: Boolean
164
- },
165
- ownerClear: {
166
- type: Function
167
- },
168
- resetCheckedIds: {
169
- type: Boolean
170
- },
171
- searchText: {
172
- default: '搜索',
173
- type: String
174
- },
175
- clearText: {
176
- default: '清除',
177
- type: String
178
- }
179
- },
180
- data () {
181
- return {
182
- visible: true,
183
- initialData: {},
184
- checkedIds: {}
185
- }
186
- },
187
- watch: {
188
- resetCheckedIds () {
189
- this.config.filter(c => c.type === 'doubleDatePicker').map(t => t.key).forEach(k => {
190
- this.$set(this.checkedIds, k, false)
191
- })
192
- }
193
- },
194
- mounted () {
195
- this.initialData = Object.freeze({ ...this.formData })
196
- },
197
- methods: {
198
- genStartDateDisabledOptions,
199
- genEndDateDisabledOptions,
200
- handleInput (val, prop, inputLimitCallback, key) {
201
- if (inputLimitCallback && !inputLimitCallback(val)) return false
202
- if (val) {
203
- this.$set(this.checkedIds, key, false)
204
- }
205
- this.$emit('update:formData', { ...this.formData, [prop]: val })
206
- this.$emit('isPickerEmpty', this.checkedIds)
207
- },
208
-
209
- handleSearch () {
210
- this.$emit('search', this.formData)
211
- },
212
-
213
- handelIsEmpty (prop, value, key) {
214
- if (value) {
215
- // eslint-disable-next-line
216
- this.formData[prop[0]] = '';
217
- // eslint-disable-next-line
218
- this.formData[prop[1]] = '';
219
- }
220
- this.$set(this.checkedIds, key, value)
221
- this.$emit('isPickerEmpty', this.checkedIds)
222
- },
223
-
224
- handleClearParams () { // 父组件可以通过调用 `this.$refs[xx].handleClearParams()` 来清空表单数据
225
- if (this.ownerClear && typeof this.ownerClear === 'function') {
226
- this.ownerClear()
227
- return
228
- }
229
- Object.keys(this.checkedIds).forEach((k) => {
230
- this.checkedIds[k] = false
231
- })
232
- this.$emit('update:formData', { ...this.formData, ...this.initialData })
233
- this.$emit('clear')
234
- },
235
-
236
- handleFormClose () {
237
- this.visible = false;
238
- },
239
- }
240
- }
241
- </script>
242
- <style scoped lang="less">
243
- .form-double-inline {
244
- display: flex;
245
- & .el-input {
246
- &:not(:first-child) {
247
- margin-left: 4px;
248
- }
249
- }
250
- & .el-date-editor{
251
- &:not(:first-child){
252
- margin-left: 4px;
253
- }
254
- }
255
- }
256
- </style>
@@ -1,79 +0,0 @@
1
- import { DatePicker } from "element-ui/types/element-ui"
2
-
3
- type BaseOption = {
4
- label: string
5
- prop: string
6
- clearable?: boolean
7
- placeholder?: string
8
- key?: string
9
- changeCb?: (value: any) => any
10
- }
11
-
12
- type SlotOption = Omit<BaseOption, 'prop'> & {
13
- prop?: string
14
- type: 'slot'
15
- slotName: string
16
- }
17
-
18
- type InputOption = BaseOption & {
19
- type: 'input'
20
- inputLimitCallback?: (value: string) => boolean
21
- maxlength?: number
22
- }
23
-
24
- type SelectOption = BaseOption & {
25
- type: 'select'
26
- multiple?: boolean
27
- filterable?: boolean
28
- multipleLimit?: number
29
- collapseTags?: boolean
30
- withoutAll?: boolean
31
- candidate: {
32
- name: string
33
- value?: string | number
34
- id?: string | number
35
- code?: string | number
36
- }[]
37
- }
38
-
39
- type DatePickerOption = BaseOption & {
40
- type: 'datePicker'
41
- dateType?: string
42
- datePickerOptions?: DatePicker['pickerOptions']
43
- }
44
-
45
- type BaseDoubleOption = Omit<BaseOption, 'prop'> & {
46
- doubleIsInline?: boolean
47
- prop: [string, string]
48
- }
49
-
50
- type DoubleInputOption = BaseDoubleOption & {
51
- type: 'doubleInput'
52
- inputLimitCallback?: (value: string) => boolean
53
- }
54
-
55
- type DoubleDatePickerOptionBase = BaseDoubleOption & {
56
- type: 'doubleDatePicker'
57
- isEmpty?: boolean
58
- placeholder?: [string, string]
59
- }
60
-
61
- type DoubleDatePickerOption = DoubleDatePickerOptionBase & {
62
- pickerOptions?: {
63
- start?: DatePicker['pickerOptions']
64
- end?: DatePicker['pickerOptions']
65
- }
66
- }
67
-
68
- type DoubleDatePickerOptionLimit = DoubleDatePickerOptionBase & {
69
- limit?: number
70
- }
71
-
72
- export type SearchFormConfigOption =
73
- | InputOption
74
- | SelectOption
75
- | DatePickerOption
76
- | DoubleInputOption
77
- | DoubleDatePickerOption
78
- | DoubleDatePickerOptionLimit
79
- | SlotOption