@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,681 +0,0 @@
1
- <template>
2
- <div class="editable-table">
3
- <div class="editable-table-view-setting">
4
- <div
5
- v-if="!hideViewSettingBtn"
6
- class="editable-table-view-setting__btn-wrapper"
7
- >
8
- <div
9
- class="editable-table-view-setting__btn btn-pointer"
10
- @click="handleViewSettingShow"
11
- >
12
- <i class="el-icon-setting" />
13
- <div class="editable-table-view-setting__btn-text">
14
- 显示设置
15
- </div>
16
- </div>
17
- </div>
18
-
19
- <biz-view-setting-dialog
20
- ref="bizViewSettingDialogRef"
21
- :props="props"
22
- :actual-columns="actualColumns"
23
- :showing-columns="showingColumns"
24
- :view-setting-drag-sort-options="viewSettingDragSortOptions"
25
- @update:leftFixedColumnCount="(val) => { leftFixedColumnCount = val }"
26
- @update:showingColumns="(val) => { showingColumns = val }"
27
- @update:viewSettingDragSortOptions="(val) => { viewSettingDragSortOptions = val }"
28
- @tableDoLayout="doTableLayout"
29
- />
30
- </div>
31
-
32
- <!-- 列表展示,属性透传,列编辑 -->
33
- <el-table
34
- ref="tableDomRef"
35
- v-loading="loading"
36
- :data="dataList"
37
- :row-style="setRowStyle"
38
- :row-class-name="setRowClassName"
39
- :cell-class-name="setCellClassName"
40
- :show-summary="summaryList.length > 0"
41
- :summary-method="tableSummaryMethod"
42
- v-bind="$attrs"
43
- border
44
- @selection-change="handleSelectionChange"
45
- @cell-mouse-enter="debouncedHoverHandler"
46
- @header-dragend="doTableLayout"
47
- @row-dblclick="handleRowDblClick"
48
- >
49
- <el-table-column
50
- v-if="rowDragAble"
51
- width="30px"
52
- class-name="editable-table__drag-cell no-inner-cell-border"
53
- :fixed="leftFixedColumnCount > 0 ? 'left' : false"
54
- >
55
- <template #default="scope">
56
- <div
57
- class="row-drag-target editable-table__drag-icon"
58
- :data-index="scope.$index"
59
- @mousedown="currScope = scope"
60
- >
61
- <div
62
- :data-index="scope.$index"
63
- class="row-drag-target editable-table-drag-icon"
64
- />
65
- </div>
66
- </template>
67
- </el-table-column>
68
- <!-- 展开行 -->
69
- <el-table-column
70
- v-if="hasExpandRow"
71
- width="30px"
72
- type="expand"
73
- :fixed="leftFixedColumnCount > 0 ? 'left' : false"
74
- class-name="no-inner-cell-border"
75
- >
76
- <template #default="scope">
77
- <slot
78
- name="expand"
79
- v-bind="scope"
80
- />
81
- </template>
82
- </el-table-column>
83
- <!-- 选择列 -->
84
- <el-table-column
85
- v-if="hasSelectionColumn"
86
- width="45px"
87
- align="center"
88
- type="selection"
89
- :fixed="leftFixedColumnCount > 0 ? 'left' : false"
90
- class-name="no-inner-cell-border"
91
- />
92
- <!-- 编号列 -->
93
- <el-table-column
94
- v-if="hasIndexColumn"
95
- min-width="30px"
96
- type="index"
97
- :fixed="leftFixedColumnCount > 0 ? 'left' : false"
98
- class-name="no-inner-cell-border"
99
- />
100
- <!-- 颜色选择列 -->
101
- <el-table-column
102
- v-if="colorList && colorList.length > 0"
103
- width="22px"
104
- class-name="editable-table__color-column no-inner-cell-border"
105
- :fixed="leftFixedColumnCount > 0 ? 'left' : false"
106
- :filtered-value="Array.isArray(filteredValue[colorFilterConfig?.prop]) ? filteredValue[colorFilterConfig?.prop] : []"
107
- >
108
- <template #header>
109
- <biz-table-header-popover
110
- v-if="colorFilterConfig"
111
- :head-active="isColumnHeadActive(colorFilterConfig)"
112
- :column="colorFilterConfig"
113
- :temp-summary-list="tempSummaryList"
114
- :temp-sort-prop="tempSortProp"
115
- :temp-sort-type="tempSortType"
116
- :temp-filtered-value="tempFilteredValue"
117
- @update:tempSummaryList="val => { tempSummaryList = val }"
118
- @update:tempFilteredValue="(key, value) => { $set(tempFilteredValue, key, value) }"
119
- @popover-show="() => handleHeaderPopoverShow(colorFilterConfig)"
120
- @update:sort="handleSort"
121
- @reset="() => handleHeaderOperationReset(colorFilterConfig)"
122
- @confirm="() => handleHeaderOperationConfirm(colorFilterConfig)"
123
- >
124
- <template #custom>
125
- <div class="editable-table__color-icon" />
126
- </template>
127
- </biz-table-header-popover>
128
- <div
129
- v-else
130
- class="editable-table__color-icon"
131
- />
132
- </template>
133
- <template #default="scope">
134
- <biz-color-select
135
- :color-list="colorList"
136
- :scope="scope"
137
- @row-bg-change="(params) => emit('row-bg-change', params)"
138
- />
139
- </template>
140
- </el-table-column>
141
- <!-- 这里的key很重要,必须保证每次生成的key都不一样,这样列排序功能才能生效,否则,即使actualColumns数组元素顺序发生变化,列顺序也不会改变。原因未知 -->
142
- <el-table-column
143
- v-for="(column, index) in actualColumns"
144
- :key="column.prop + index"
145
- resizable
146
- class-name="editable-table__data-column"
147
- :filtered-value="Array.isArray(filteredValue[column.prop]) ? filteredValue[column.prop] : []"
148
- v-bind="getColumnBindProps(column)"
149
- >
150
- <template
151
- #header
152
- v-if="showColumnHeadSortIcon(column)"
153
- >
154
- <biz-table-header-popover
155
- :head-active="isColumnHeadActive(column)"
156
- :column="column"
157
- :temp-summary-list="tempSummaryList"
158
- :temp-sort-prop="tempSortProp"
159
- :temp-sort-type="tempSortType"
160
- :temp-filtered-value="tempFilteredValue"
161
- @update:tempSummaryList="val => { tempSummaryList = val }"
162
- @update:tempFilteredValue="(key, value) => { $set(tempFilteredValue, key, value) }"
163
- @popover-show="() => handleOpenFilter(column)"
164
- @update:sort="handleSort"
165
- @reset="() => handleResetFilter(column)"
166
- @confirm="() => handleConfirmFilter(column)"
167
- >
168
- <template #summay-item>
169
- <slot
170
- :name="column.prop + '-summay-item'"
171
- v-bind="column"
172
- >
173
- {{ column.label }}
174
- </slot>
175
- </template>
176
- <!-- 动态地将父组件传递的所有slot下发给孙子组件(biz-table-header-popover),以实现slot的透传 -->
177
- <template
178
- v-for="(_, name) in $slots"
179
- #[name]="slotProps"
180
- >
181
- <slot
182
- :name="name"
183
- v-bind="slotProps || column"
184
- />
185
- </template>
186
- </biz-table-header-popover>
187
- </template>
188
- <!-- 默认操作按钮,defaultOperations属性不为空数组时展示。编辑状态下隐藏 -->
189
- <template
190
- v-if="column.prop === '$$operation'"
191
- #default="scope"
192
- >
193
- <biz-table-operate-popover
194
- v-if="editingRowIndex !== scope.$index"
195
- ref="operationPopoverRef"
196
- :default-operations="defaultOperations"
197
- :scope="scope"
198
- @edit="() => handleEdit(scope)"
199
- @delete="() => handleDelete(scope.row, scope.$index)"
200
- @rowPinToTop="() => handleRowPinToTop(scope)"
201
- >
202
- <slot
203
- name="custom-operation"
204
- v-bind="scope"
205
- />
206
- </biz-table-operate-popover>
207
-
208
- <div
209
- v-else
210
- class="editable-table-operation-popover__save-cancel"
211
- >
212
- <div
213
- class="btn-pointer editable-table-operation-popover__btn"
214
- @click="handleEditSave(scope.row)"
215
- >
216
- 保存
217
- </div>
218
- <div
219
- class="btn-pointer editable-table-operation-popover__btn"
220
- @click="handleEditCancel(scope.row)"
221
- >
222
- 取消
223
- </div>
224
- </div>
225
- </template>
226
- <!-- 默认渲染、非编辑态,不需要特殊处理,el-table负责渲染 -->
227
- <!-- 自定义插槽 -->
228
- <template
229
- v-else-if="column.slotName"
230
- #default="scope"
231
- >
232
- <!-- 非编辑态 -->
233
- <slot
234
- v-if="scope.$index !== editingRowIndex"
235
- v-bind="scope"
236
- :name="column.slotName"
237
- />
238
- <!-- 编辑态 -->
239
- <template v-else-if="scope.$index === editingRowIndex">
240
- <!-- 自定义编辑 -->
241
- <slot
242
- v-if="column.editSlotName"
243
- v-bind="returnAnyType({ scope, column })"
244
- :name="column.editSlotName"
245
- />
246
- <!-- 内置编辑类型 -->
247
- <biz-edit-cell
248
- v-else-if="column.editType"
249
- :value="editingRowData[column.prop]"
250
- :column="column"
251
- @input="val => { editingRowData[column.prop] = val }"
252
- />
253
- <!-- 不支持编辑 -->
254
- <slot
255
- v-else
256
- v-bind="scope"
257
- :name="column.slotName"
258
- />
259
- </template>
260
- </template>
261
- <!-- 默认渲染列,编辑态 -->
262
- <template
263
- v-else-if="editingRowIndex !== -1"
264
- #default="scope"
265
- >
266
- <!-- 当前行编辑中,内置编辑类型 -->
267
- <biz-edit-cell
268
- v-if="editingRowIndex === scope.$index && column.editType"
269
- :value="editingRowData[column.prop]"
270
- :column="column"
271
- @input="val => { editingRowData[column.prop] = val }"
272
- />
273
- <!-- 当前行编辑中,自定义编辑类型 -->
274
- <slot
275
- v-else-if="column.editSlotName && scope.$index === editingRowIndex"
276
- v-bind="scope"
277
- :name="column.editSlotName"
278
- />
279
- <!-- 当前行非编辑中 -->
280
- <template v-else>
281
- {{ column.formatter ? column.formatter(scope.row, column, scope.row[column.prop], scope.$index) : scope.row[column.prop] }}
282
- </template>
283
- </template>
284
- <!-- hover状态渲染 -->
285
- <template
286
- v-else-if="column.hoverSlotName"
287
- #default="scope"
288
- >
289
- <slot
290
- v-if="scope.$index === hoveringCellInfo.rowIndex && column.prop === hoveringCellInfo.columnProperty"
291
- v-bind="scope"
292
- :name="column.hoverSlotName"
293
- />
294
- <slot
295
- v-else-if="column.slotName"
296
- v-bind="scope"
297
- :name="column.slotName"
298
- />
299
- <template v-else>
300
- {{ column.formatter ? column.formatter(scope.row, column, scope.row[column.prop], scope.$index) : scope.row[column.prop] }}
301
- </template>
302
- </template>
303
- </el-table-column>
304
- </el-table>
305
- <div class="pagination-wrap">
306
- <div>共{{ total }}项数据</div>
307
- <el-pagination
308
- background
309
- layout="sizes, prev, pager, next, jumper"
310
- :page-sizes="pageSizes"
311
- :page-size.sync="pageSize"
312
- :pager-count="pagerCount"
313
- :current-page="currentPage"
314
- :total="total"
315
- @size-change="handlePageSizeChange"
316
- @current-change="handleCurrPageChange"
317
- />
318
- </div>
319
- </div>
320
- </template>
321
-
322
- <script lang="ts" setup>
323
- import BizColorSelect from './features/bizColorSelect.vue';
324
- import BizViewSettingDialog from './features/bizViewSettingDialog.vue'
325
- import BizTableHeaderPopover from './features/bizTableHeaderPopover/index.vue'
326
- import BizEditCell from './features/bizEditCell.vue'
327
- import BizTableOperatePopover from './features/bizTableOperatePopover.vue'
328
-
329
- import { computed, nextTick, ref, watch } from 'vue';
330
- import { Message } from 'element-ui';
331
- import omit from 'lodash/omit';
332
-
333
- import {
334
- usePagination,
335
- useCellHover,
336
- useRowBgColor,
337
- useDefaultOperation,
338
- useColumnHeaderOperation,
339
- useDragSort,
340
- } from './bizHooks'
341
-
342
- import { ITableDataItem, IColumnConfig, IDefaultOperationType, IColorList, SettingStorgeMigrationConfigs } from './types';
343
-
344
- // defineProps泛型参数如果从外部传入,编译报错
345
- interface IProps {
346
- /** 表格数据 */
347
- dataList: ITableDataItem[];
348
- /** 列配置 */
349
- columnConfig: IColumnConfig[];
350
- /** 是否展示展开行 */
351
- hasExpandRow?: boolean;
352
- /** 是否展示序号 */
353
- hasIndexColumn?: boolean;
354
- /** 是否展示选择列 */
355
- hasSelectionColumn?: boolean;
356
- /** 是否支持行拖拽 */
357
- rowDragAble?: boolean;
358
- /** 表格总条数 */
359
- total: number;
360
- /** 自定义列操作,当前支持行编辑(edit),删除(delete),置顶(top) */
361
- defaultOperations?: IDefaultOperationType[];
362
- /** 行背景色列表 */
363
- colorList?: IColorList;
364
- /** 自定义颜色列的表头筛选 */
365
- colorFilterConfig?: IColumnConfig;
366
- /** 左侧固定列数 */
367
- leftFixedCount?: number;
368
- /** 性能优化参数,调整拖拽的范围 */
369
- dragSemiRange?: number;
370
- /** 是否显示加载 */
371
- loading?: boolean;
372
- /** 是否隐藏显示设置按钮 */
373
- hideViewSettingBtn?: boolean
374
- /** 设置的缓存的key */
375
- settingStorgeKey?: string
376
- /** 前端排序,默认关闭 */
377
- localSort?: boolean
378
- /** 前端过滤,默认关闭 */
379
- localFilter?: boolean
380
- /** 页码 */
381
- currentPage: number
382
- pageSizes?: number[]
383
- /** 分页器展示数量 */
384
- pagerCount?: number;
385
- /** 设置的迁移配置 */
386
- settingStorgeMigrationConfigs?: SettingStorgeMigrationConfigs
387
- }
388
-
389
- interface IEmits {
390
- /** 行选中 */
391
- (e: 'selection-change', selection: any): void
392
- /** 修改行背景色 */
393
- (e: 'row-bg-change', param: {colorId: number; row: ITableDataItem; rowIndex: number}): void
394
- /** 行拖拽放置事件 */
395
- (e: 'row-drag-drop', param: { row: any; fromIndex: number; toIndex: number; page: number; size: number;}): void
396
- /** 行删除 */
397
- (e: 'row-delete', param: { row: any; index: number; page: number; size: number; }): void
398
- /** 点击编辑按钮立即触发 */
399
- (e: 'row-edit', param: { row: any, index: number; page: number; size: number;}): void
400
- /** 行置顶 */
401
- (e: 'row-pin-to-top', param: { row: any, rawIndex: number; page: number; size: number;}): void
402
- /** 行编辑保存 */
403
- (e: 'row-edit-save', param: { page: number; size: number; row: any; changedData: Record<string, any>; }): void
404
- /** 行编辑取消 */
405
- (e: 'row-edit-cancel', param: { row: any; page: number; size: number;}): void
406
- /** 页码改变 */
407
- (e: 'page-change', param: { page: number, size: number }): void
408
- /** 查询 */
409
- (e: 'search', param: Record<string, any>): void
410
- /** 排序 */
411
- (e: 'sort-change', param: { order: 'descending' | 'ascending' | null, prop: string }): void
412
- /** 双击某一行 */
413
- (e: 'row-dblclick', param: any): void
414
- /** 筛选条件打开 */
415
- (e: 'open-filter', prop: string): void
416
- /** 重置筛选 */
417
- (e: 'reset-filter', prop: string): void
418
- /** 筛选条件确认 */
419
- (e: 'confirm-filter', prop: string): void
420
- }
421
-
422
- const props = withDefaults(defineProps<IProps>(), {
423
- dataList: () => [],
424
- columnConfig: () => [],
425
- hasExpandRow: false,
426
- hasIndexColumn: false,
427
- hasSelectionColumn: false,
428
- rowDragAble: false,
429
- total: 0,
430
- defaultOperations: () => [],
431
- colorList: () => [],
432
- colorFilterConfig: undefined,
433
- leftFixedCount: 1,
434
- dragSemiRange: 15,
435
- loading: false,
436
- hideViewSettingBtn: false,
437
- settingStorgeKey: '',
438
- localSort: false,
439
- localFilter: false,
440
- currentPage: 1,
441
- pageSizes: () => [10, 15, 30, 60, 100],
442
- pagerCount: 11,
443
- });
444
-
445
- // 同defineProps一样,不支持泛型参数从外部导入
446
- const emit = defineEmits<IEmits>();
447
-
448
- const showingColumns = ref<string[]>([]); // 表格中实际展示的列
449
- const leftFixedColumnCount = ref(0) // 左侧固定列数量
450
- const viewSettingDragSortOptions = ref<IColumnConfig[]>([])
451
-
452
- const returnAnyType = (params): any => {
453
- return params
454
- }
455
-
456
- const actualColumns = computed(() => {
457
- const res: IColumnConfig[] = [];
458
- let cnt = leftFixedColumnCount.value;
459
-
460
- // 列排序和列过滤
461
- for (const prop of showingColumns.value) {
462
- const rawItem = props.columnConfig.find(c => c.prop === prop) ?? {} as IColumnConfig;
463
- const item: IColumnConfig = {
464
- ...rawItem,
465
- isColumnSortable: !!rawItem.sortable,
466
- sortable: inSorting.value ? !!rawItem.sortable : false,
467
- _sortable: rawItem.sortable,
468
- };
469
- if (cnt > 0) {
470
- item.fixed = 'left';
471
- // eslint-disable-next-line no-plusplus
472
- cnt--;
473
- } else {
474
- item.fixed = undefined;
475
- }
476
- res.push(item);
477
- }
478
-
479
- // 使用默认操作项,添加默认操作列。该列在编辑模式下隐藏
480
- if (props.defaultOperations && props.defaultOperations.length > 0) {
481
- res.push({
482
- label: '操作',
483
- prop: '$$operation',
484
- minWidth: '100px',
485
- fixed: 'right'
486
- });
487
- }
488
-
489
- return res;
490
- });
491
-
492
- const tableDomRef = ref<any>(null);
493
- const currScope = ref<any>(null);
494
-
495
- /************ 分页相关 *************/
496
- const beforePageChange = () => {
497
- // searchValue.value = {};
498
- };
499
- const {
500
- pageSize,
501
- handleCurrPageChange,
502
- handlePageSizeChange,
503
- } = usePagination({
504
- emit,
505
- beforePageChange
506
- });
507
-
508
- /************ 表格单元格hover事件相关 ************ */
509
- const {
510
- hoveringCellInfo,
511
- setCellClassName,
512
- debouncedHoverHandler
513
- } = useCellHover(tableDomRef);
514
-
515
- /************ 行背景色设置相关 ************ */
516
- const {
517
- setRowStyle,
518
- } = useRowBgColor({
519
- colorList: props.colorList || [],
520
- emit
521
- });
522
-
523
- /************ 默认的操作相关 ************ */
524
- const {
525
- operationPopoverRef,
526
- editingRowData,
527
- editingRowIndex,
528
- handleDelete,
529
- handleEdit,
530
- handleEditSave,
531
- handleEditCancel,
532
- handleRowPinToTop,
533
- closeAllExpandedRows
534
- } = useDefaultOperation({
535
- emit,
536
- tableDomRef,
537
- pageSize,
538
- props,
539
- hasExpandRow: props.hasExpandRow
540
- });
541
-
542
- /************ 列头部操作相关 ************ */
543
- const {
544
- setSort,
545
- clearSort,
546
- setSearchParams,
547
- isColumnHeadActive,
548
- handleSort,
549
- handleHeaderPopoverShow,
550
- handleHeaderOperationConfirm,
551
- handleHeaderOperationReset,
552
- summaryList,
553
- tableSummaryMethod,
554
- filteredValue,
555
- showColumnHeadSortIcon,
556
- sortProp,
557
- tempFilteredValue,
558
- tempSummaryList,
559
- tempSortType,
560
- tempSortProp,
561
- isColumnFiltering,
562
- inSorting,
563
- } = useColumnHeaderOperation({
564
- tableDomRef,
565
- props,
566
- emit,
567
- showingColumns,
568
- });
569
-
570
- /************ 表格行拖拽和显示设置列拖拽 ************ */
571
- const beforeDragStart = () => {
572
- // 如果有列存在排序,不允许拖拽
573
- if (sortProp.value) {
574
- Message.warning('已有列正在排序,不允许拖拽。');
575
- return false;
576
- }
577
-
578
- // 如果有列存在筛选,不允许拖拽
579
- if (isColumnFiltering.value) {
580
- Message.warning('已有列正在筛选,不允许拖拽。');
581
- return false;
582
- }
583
-
584
- editingRowIndex.value = -1; // 关闭编辑状态
585
-
586
- return true;
587
- };
588
-
589
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
590
- // @ts-ignore ts-plugin存在间歇性抛出「类型实例化过深,且可能无限」的错误
591
- useDragSort({
592
- emit,
593
- props,
594
- viewSettingDragSortOptions,
595
- beforeDragStart,
596
- pageSize,
597
- currScope,
598
- tableDomRef,
599
- });
600
-
601
- const doTableLayout = async () => {
602
- await nextTick();
603
- tableDomRef.value?.doLayout();
604
- };
605
-
606
- // 过滤出自定义属性,将其它属性全部透传给 el-table-column
607
- const getColumnBindProps = (column: IColumnConfig) => {
608
- // 过滤掉自定义属性,只保留 el-table-column 支持的属性
609
- return omit(column, [
610
- 'editType',
611
- 'slotName',
612
- 'inputType',
613
- 'options',
614
- 'filters'
615
- ]);
616
- };
617
-
618
- const setRowClassName = (scope) => {
619
- return `
620
- custom-row-classname
621
- custom-row-classname-${scope.rowIndex}
622
- ${scope.row.isPinned ? 'custom-row-classname-pinned' : ''}
623
- `;
624
- };
625
-
626
- const handleSelectionChange = (e) => {
627
- emit('selection-change', e);
628
- };
629
-
630
- const handleRowDblClick = (e) => {
631
- emit('row-dblclick', e);
632
- };
633
-
634
- const handleOpenFilter = (column: IColumnConfig) => {
635
- emit('open-filter', column.prop);
636
- nextTick(() => {
637
- handleHeaderPopoverShow(column)
638
- })
639
- }
640
-
641
- const handleResetFilter = (column: IColumnConfig) => {
642
- emit('reset-filter', column.prop);
643
- nextTick(() => {
644
- handleHeaderOperationReset(column)
645
- })
646
- }
647
-
648
- const handleConfirmFilter = (column: IColumnConfig) => {
649
- emit('confirm-filter', column.prop);
650
- nextTick(() => {
651
- handleHeaderOperationConfirm(column)
652
- })
653
- }
654
-
655
- const bizViewSettingDialogRef = ref(null as unknown as InstanceType<typeof BizViewSettingDialog>)
656
- const handleViewSettingShow = () => bizViewSettingDialogRef.value.open()
657
-
658
- defineExpose({
659
- closeAllExpandedRows,
660
- openViewSetting: handleViewSettingShow,
661
- elTableRef: tableDomRef,
662
- setSort,
663
- clearSort,
664
- setSearchParams,
665
- });
666
-
667
- // loading 结束和页码变化时滚动到顶部
668
- watch([
669
- () => props.loading,
670
- () => props.currentPage,
671
- () => pageSize,
672
- ], ([loading]) => {
673
- if (loading) return;
674
- tableDomRef.value.$el.querySelector('.el-table__body-wrapper').scrollTop = 0;
675
- });
676
-
677
- </script>
678
-
679
- <style lang="less">
680
- @import './index.less';
681
- </style>