newtv-ui-3.0 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/README.md +55 -0
  2. package/lib/asserts/fonts/iconfont.539b8438.woff +0 -0
  3. package/lib/asserts/fonts/iconfont.5ee3b92b.ttf +0 -0
  4. package/lib/asserts/fonts/iconfont.b5b01d3e.woff2 +0 -0
  5. package/lib/asserts/img/gaoding.59d9deae.png +0 -0
  6. package/lib/asserts/img/zhihui.edef9d17.png +0 -0
  7. package/lib/demo.html +10 -0
  8. package/lib/newtv-ui-3.0.common.js +110261 -0
  9. package/lib/newtv-ui-3.0.css +1 -0
  10. package/lib/newtv-ui-3.0.umd.js +110271 -0
  11. package/lib/newtv-ui-3.0.umd.min.js +47 -0
  12. package/package.json +42 -0
  13. package/packages/assets/iconfont/iconfont.css +435 -0
  14. package/packages/assets/iconfont/iconfont.js +1 -0
  15. package/packages/assets/iconfont/iconfont.json +744 -0
  16. package/packages/assets/iconfont/iconfont.ttf +0 -0
  17. package/packages/assets/iconfont/iconfont.woff +0 -0
  18. package/packages/assets/iconfont/iconfont.woff2 +0 -0
  19. package/packages/assets/iconfont/iconfontSVG.js +1 -0
  20. package/packages/assets/images/bg.png +0 -0
  21. package/packages/assets/images/danger-bg.png +0 -0
  22. package/packages/assets/images/empty-bg.png +0 -0
  23. package/packages/assets/images/error-poster.png +0 -0
  24. package/packages/assets/images/error_img.png +0 -0
  25. package/packages/assets/images/logo.png +0 -0
  26. package/packages/assets/images/logo2.png +0 -0
  27. package/packages/assets/images/no_img.png +0 -0
  28. package/packages/assets/images/primary-bg.png +0 -0
  29. package/packages/assets/images/save.svg +3 -0
  30. package/packages/assets/images/state-Unpass.png +0 -0
  31. package/packages/assets/images/state-ing.png +0 -0
  32. package/packages/assets/images/state-ms.png +0 -0
  33. package/packages/assets/images/state-non.png +0 -0
  34. package/packages/assets/images/state-pass.png +0 -0
  35. package/packages/assets/images/success-bg.png +0 -0
  36. package/packages/assets/images/thumbnail-empty.png +0 -0
  37. package/packages/assets/images/versionIcon.png +0 -0
  38. package/packages/assets/images/warning-bg.png +0 -0
  39. package/packages/avatar-upload/index.js +10 -0
  40. package/packages/avatar-upload/src/error-poster.png +0 -0
  41. package/packages/avatar-upload/src/gaoding.png +0 -0
  42. package/packages/avatar-upload/src/previewDialog.vue +96 -0
  43. package/packages/avatar-upload/src/upload.vue +640 -0
  44. package/packages/avatar-upload/src/zhihui.png +0 -0
  45. package/packages/avatar-upload/src/zhihui_2.png +0 -0
  46. package/packages/cardTable/index.js +10 -0
  47. package/packages/cardTable/src/cardTable.vue +151 -0
  48. package/packages/form/index.js +10 -0
  49. package/packages/form/src/EllipsisTooltip.vue +31 -0
  50. package/packages/form/src/TextOverflow.vue +122 -0
  51. package/packages/form/src/form-item.vue +395 -0
  52. package/packages/form/src/form.js +46 -0
  53. package/packages/form/src/form.vue +233 -0
  54. package/packages/icon-tips/index.js +10 -0
  55. package/packages/icon-tips/src/icon-tips.vue +49 -0
  56. package/packages/index.js +49 -0
  57. package/packages/menu/index.js +10 -0
  58. package/packages/menu/src/menu.js +27 -0
  59. package/packages/menu/src/menu.vue +84 -0
  60. package/packages/menu/src/sub-item.vue +108 -0
  61. package/packages/pagination/index.js +10 -0
  62. package/packages/pagination/src/pagination.vue +134 -0
  63. package/packages/table/index.js +10 -0
  64. package/packages/table/src/table.vue +797 -0
  65. package/packages/tags/index.js +10 -0
  66. package/packages/tags/src/tag.vue +179 -0
  67. package/theme/pool_style.scss +598 -0
  68. package/theme/skyStyle/config.scss +19 -0
  69. package/theme/sky_style.scss +268 -0
  70. package/types/component.d.ts +7 -0
  71. package/types/dashboard.d.ts +10 -0
  72. package/types/form.d.ts +12 -0
  73. package/types/header.d.ts +10 -0
  74. package/types/index.d.ts +4 -0
  75. package/types/leftMenu.d.ts +14 -0
  76. package/types/list.d.ts +8 -0
  77. package/types/newtv-ui.d.ts +23 -0
  78. package/types/secondNav.d.ts +13 -0
  79. package/types/table.d.ts +14 -0
@@ -0,0 +1,797 @@
1
+ <template>
2
+ <div class="fg-table-body">
3
+ <el-table
4
+ ref="table"
5
+ :data="tableData"
6
+ :stripe="stripe"
7
+ :border="border"
8
+ :row-class-name="rowClassName"
9
+ :row-style="rowStyle"
10
+ :cell-class-name="cellClassName"
11
+ :cell-style="cellStyle"
12
+ :default-sort="defaultSort"
13
+ :show-header="showHeader"
14
+ @row-click="rowClick"
15
+ @row-dblclick="rowDblclick"
16
+ @select="select"
17
+ @select-all="selectAll"
18
+ @selection-change="selectionChange"
19
+ @filter-change="filterChange"
20
+ :span-method="spanMethod"
21
+ @sort-change="sortChange"
22
+ :row-key="rowKey"
23
+ :empty-text="empty"
24
+ :highlight-current-row="highlightCurrentRow"
25
+ @current-change="currentChange"
26
+ :height="height"
27
+ :key="tableRandom"
28
+ >
29
+ <template #empty>
30
+ <slot name="empty"></slot>
31
+ </template>
32
+ <template v-for="(col, index) in tableCols">
33
+ <el-table-column
34
+ v-if="col.type === 'slot' || col.type == 'expand'"
35
+ :key="`table_special${index}`"
36
+ :align="col.align || 'left'"
37
+ :header-align="col['header-align'] || 'left'"
38
+ :show-overflow-tooltip="col.showOverflowTooltip || showOverflowTooltip"
39
+ :label="col.label"
40
+ :width="col.width"
41
+ :min-width="col.minWidth"
42
+ :fixed="col.fixed"
43
+ :formatter="col.formatter"
44
+ :type="col.type == 'slot' ? '' : col.type"
45
+ :sortable="col.sortable || false"
46
+ :sort-method="col.sortMethod"
47
+ :sort-by="col.sortBy"
48
+ :sort-orders="col.sortOrders || ['ascending', 'descending', null]"
49
+ :reserve-selection="reserveSelection"
50
+ :class-name="col.className"
51
+ >
52
+ <template #default="scope">
53
+ <slot :name="col.prop" :row="scope.row" :$index="scope.$index"></slot>
54
+ </template>
55
+ </el-table-column>
56
+ <el-table-column
57
+ v-else-if="col.type === 'spbtn'"
58
+ :key="`table_spbtn${index}`"
59
+ :align="col.align || 'left'"
60
+ :header-align="col['header-align'] || 'left'"
61
+ :show-overflow-tooltip="col.showOverflowTooltip || showOverflowTooltip"
62
+ :label="col.label"
63
+ :width="col.width"
64
+ :min-width="col.minWidth"
65
+ :fixed="col.fixed"
66
+ :formatter="col.formatter"
67
+ class-name="table-right-btnGroup"
68
+ >
69
+ <template #default="scope">
70
+ <template
71
+ v-if="
72
+ col.groups.filter((group) =>
73
+ typeof group.isShow === 'boolean' ? group.isShow : group.isShow(scope.row),
74
+ ).length > 4
75
+ "
76
+ >
77
+ <template
78
+ v-for="(item, index) in col.groups
79
+ .filter((group) =>
80
+ typeof group.isShow === 'boolean' ? group.isShow : group.isShow(scope.row),
81
+ )
82
+ .splice(0, 3)"
83
+ >
84
+ <el-tooltip
85
+ v-if="!col.hideTitle && index < 4"
86
+ :key="`btn${index}`"
87
+ :disabled="!col.openTooltip"
88
+ class="item"
89
+ :effect="col.effect || 'dark'"
90
+ :content="typeof item.title === 'function' ? item.title(scope.row) : item.title"
91
+ placement="top"
92
+ >
93
+ <el-button
94
+ :type="item.type"
95
+ :size="col.size || 'small'"
96
+ :style="item.style"
97
+ @click.stop="() => item.clickHandler && item.clickHandler(scope.row)"
98
+ :circle="col.shape === 'circle'"
99
+ :plain="col.shape === 'plain'"
100
+ :round="col.shape === 'round'"
101
+ :disabled="
102
+ typeof item.disabled === 'function' ? item.disabled(scope.row) : item.disabled
103
+ "
104
+ >
105
+ {{ typeof item.title === 'function' ? item.title(scope.row) : item.title }}
106
+ </el-button>
107
+ </el-tooltip>
108
+ <el-tooltip
109
+ v-if="col.hideTitle && index < 3"
110
+ :key="`btn${index}`"
111
+ :disabled="!col.openTooltip"
112
+ class="item"
113
+ :effect="col.effect || 'dark'"
114
+ :content="typeof item.title === 'function' ? item.title(scope.row) : item.title"
115
+ placement="top"
116
+ >
117
+ <span v-if="item.isShowTitle" :style="item.style">
118
+ {{
119
+ typeof item.title === 'function' ? item.title(scope.row) : item.title
120
+ }}</span
121
+ >
122
+ <el-button
123
+ v-if="item.isHideIcon"
124
+ :class="{ hideBtn: isHideBtn && scope.row.isHideBtn }"
125
+ :type="item.type"
126
+ :size="col.size || 'small'"
127
+ :style="item.style"
128
+ @click.stop="() => item.clickHandler && item.clickHandler(scope.row)"
129
+ :circle="col.shape === 'circle'"
130
+ :plain="col.shape === 'plain'"
131
+ :round="col.shape === 'round'"
132
+ :disabled="
133
+ typeof item.disabled === 'function' ? item.disabled(scope.row) : item.disabled
134
+ "
135
+ >
136
+ </el-button>
137
+ <el-icon
138
+ :size="20"
139
+ :class="{ hideBtn: isHideBtn && scope.row.isHideBtn }"
140
+ v-if="!item.isIconFont && !item.isHideIcon"
141
+ @click.stop="() => item.clickHandler && item.clickHandler(scope.row)"
142
+ :style="item.style"
143
+ >
144
+ <component :is="item.icon"></component>
145
+ </el-icon>
146
+ <i
147
+ class="iconfont"
148
+ :class="[{ hideBtn: isHideBtn && scope.row.isHideBtn }, item.icon]"
149
+ v-if="item.isIconFont && !item.isHideIcon"
150
+ :style="item.style"
151
+ @click.stop="() => item.clickHandler && item.clickHandler(scope.row)"
152
+ ></i>
153
+ </el-tooltip>
154
+ </template>
155
+ <el-dropdown
156
+ style="color: #3e89fa"
157
+ :class="{ hideBtn: isHideBtn && scope.row.isHideBtn }"
158
+ >
159
+ <i class="iconfont icon-tubiao-gengduo"></i>
160
+ <template #dropdown>
161
+ <el-dropdown-menu>
162
+ <el-dropdown-item
163
+ v-for="(list, index) in col.groups
164
+ .filter((group) =>
165
+ typeof group.isShow === 'boolean'
166
+ ? group.isShow
167
+ : group.isShow(scope.row),
168
+ )
169
+ .slice(3)"
170
+ :command="{ fn: list.clickHandler, row: scope.row }"
171
+ :key="`btngroup${index}`"
172
+ @mouseenter="mouseEnter(col, scope.row)"
173
+ @mouseleave="mouseLeave(col, scope.row)"
174
+ >
175
+ <span
176
+ :style="list.style"
177
+ @click.stop="() => list.clickHandler && list.clickHandler(scope.row)"
178
+ >{{ list.title }}</span
179
+ >
180
+ </el-dropdown-item>
181
+ </el-dropdown-menu>
182
+ </template>
183
+ </el-dropdown>
184
+ </template>
185
+
186
+ <template
187
+ v-else
188
+ v-for="(item, index) in col.groups.filter((group) =>
189
+ typeof group.isShow === 'boolean' ? group.isShow : group.isShow(scope.row),
190
+ )"
191
+ >
192
+ <el-tooltip
193
+ v-if="!col.hideTitle"
194
+ :key="`btn${index}`"
195
+ :disabled="!col.openTooltip"
196
+ class="item"
197
+ :effect="col.effect || 'dark'"
198
+ :content="typeof item.title === 'function' ? item.title(scope.row) : item.title"
199
+ placement="top"
200
+ >
201
+ <span v-if="item.isShowTitle" :style="item.style" @click.stop="() => item.clickHandler && item.clickHandler(scope.row)">
202
+ {{ typeof item.title === 'function' ? item.title(scope.row) : item.title }}</span>
203
+ <el-button
204
+ v-else
205
+ :class="{ hideBtn: isHideBtn }"
206
+ :type="item.type"
207
+ :size="col.size || 'small'"
208
+ :style="item.style"
209
+ @click.stop="() => item.clickHandler && item.clickHandler(scope.row)"
210
+ :circle="col.shape === 'circle'"
211
+ :plain="col.shape === 'plain'"
212
+ :round="col.shape === 'round'"
213
+ :disabled="
214
+ typeof item.disabled === 'function' ? item.disabled(scope.row) : item.disabled
215
+ "
216
+ >
217
+ {{ typeof item.title === 'function' ? item.title(scope.row) : item.title }}
218
+ </el-button>
219
+ </el-tooltip>
220
+ <el-tooltip
221
+ v-else
222
+ :key="`btn${index}`"
223
+ :disabled="!col.openTooltip"
224
+ class="item"
225
+ :effect="col.effect || 'dark'"
226
+ :content="typeof item.title === 'function' ? item.title(scope.row) : item.title"
227
+ placement="top"
228
+ >
229
+ <span v-if="item.isShowTitle" :style="item.style" @click.stop="() => item.clickHandler && item.clickHandler(scope.row)">
230
+ {{ typeof item.title === 'function' ? item.title(scope.row) : item.title }}</span
231
+ >
232
+ <el-button
233
+ v-if="item.isHideIcon"
234
+ :class="{ hideBtn: isHideBtn }"
235
+ :type="item.type"
236
+ :size="col.size || 'small'"
237
+ :style="item.style"
238
+ @click.stop="() => item.clickHandler && item.clickHandler(scope.row)"
239
+ :circle="col.shape === 'circle'"
240
+ :plain="col.shape === 'plain'"
241
+ :round="col.shape === 'round'"
242
+ :disabled="
243
+ typeof item.disabled === 'function' ? item.disabled(scope.row) : item.disabled
244
+ "
245
+ >
246
+ </el-button>
247
+ <el-icon
248
+ :size="20"
249
+ :class="{ hideBtn: isHideBtn }"
250
+ v-if="!item.isIconFont && !item.isHideIcon"
251
+ @click.stop="() => item.clickHandler && item.clickHandler(scope.row)"
252
+ :style="item.style"
253
+ >
254
+ <component :is="item.icon"></component>
255
+ </el-icon>
256
+ <i
257
+ class="iconfont"
258
+ :class="[{ hideBtn: isHideBtn }, item.icon]"
259
+ v-if="item.isIconFont && !item.isHideIcon"
260
+ :style="item.style"
261
+ @click.stop="() => item.clickHandler && item.clickHandler(scope.row)"
262
+ ></i>
263
+ </el-tooltip>
264
+ </template>
265
+ </template>
266
+ </el-table-column>
267
+ <el-table-column
268
+ v-else-if="col.type === 'selection'"
269
+ :key="`table_selection${index}`"
270
+ :prop="col.prop"
271
+ :label="col.label"
272
+ :width="col.width"
273
+ :min-width="col.minWidth"
274
+ :align="col.align || 'left'"
275
+ :header-align="col['header-align'] || 'left'"
276
+ :type="col.type || ''"
277
+ :show-overflow-tooltip="col.showOverflowTooltip || showOverflowTooltip"
278
+ :formatter="col.formatter"
279
+ :fixed="col.fixed"
280
+ :sortable="col.sortable || false"
281
+ :sort-method="col.sortMethod"
282
+ :sort-by="col.sortBy"
283
+ :sort-orders="col.sortOrders || ['ascending', 'descending', null]"
284
+ :reserve-selection="reserveSelection"
285
+ :selectable="col.selectable"
286
+ >
287
+ </el-table-column>
288
+ <el-table-column
289
+ v-else-if="col.type === 'multilevel' && col.children"
290
+ :key="`table_multilevel${index}`"
291
+ :prop="col.prop"
292
+ :label="col.label"
293
+ :width="col.width"
294
+ :min-width="col.minWidth"
295
+ :align="col.align || 'left'"
296
+ :header-align="col['header-align'] || 'left'"
297
+ :type="col.type || ''"
298
+ :show-overflow-tooltip="col.showOverflowTooltip || showOverflowTooltip"
299
+ :formatter="col.formatter"
300
+ :fixed="col.fixed"
301
+ :sortable="col.sortable || false"
302
+ :sort-method="col.sortMethod"
303
+ :sort-by="col.sortBy"
304
+ :sort-orders="col.sortOrders || ['ascending', 'descending', null]"
305
+ >
306
+ <el-table-column
307
+ v-for="(item, idx) of col.children"
308
+ :prop="item.prop"
309
+ :label="item.label"
310
+ :align="item.align || 'left'"
311
+ :width="item.width"
312
+ :key="`multilevel${idx}`"
313
+ >
314
+ </el-table-column>
315
+ </el-table-column>
316
+ <el-table-column
317
+ class="filter-column"
318
+ v-else-if="col.type == 'filters'"
319
+ :key="`table_filters${index}`"
320
+ :prop="col.prop"
321
+ :label="col.label"
322
+ :width="col.width"
323
+ :min-width="col.minWidth"
324
+ :align="col.align || 'left'"
325
+ :header-align="col['header-align'] || 'left'"
326
+ :show-overflow-tooltip="col.showOverflowTooltip || showOverflowTooltip"
327
+ :type="col.type || ''"
328
+ :fixed="col.fixed"
329
+ :formatter="col.formatter"
330
+ :column-key="col.prop"
331
+ :sortable="col.sortable || false"
332
+ :sort-method="col.sortMethod"
333
+ :sort-by="col.sortBy"
334
+ :sort-orders="col.sortOrders || ['ascending', 'descending', null]"
335
+ :filters="col.filters"
336
+ :filter-placement="col.filterPlacement"
337
+ :filter-multiple="col.filterMultiple || true"
338
+ :filter-method="col.filterMethod"
339
+ :filtered-value="col.filteredValue"
340
+ >
341
+ <template #default="scope">
342
+ <slot :name="col.prop" :row="scope.row" :$index="scope.$index"></slot>
343
+ </template>
344
+ </el-table-column>
345
+ <el-table-column
346
+ v-else-if="col.isFormatter"
347
+ :key="`table_formatter${index}`"
348
+ :prop="col.prop"
349
+ :label="col.label"
350
+ :width="col.width"
351
+ :min-width="col.minWidth"
352
+ :align="col.align || 'left'"
353
+ :header-align="col['header-align'] || 'left'"
354
+ :show-overflow-tooltip="col.showOverflowTooltip || showOverflowTooltip"
355
+ :type="col.type || ''"
356
+ :formatter="col.formatter"
357
+ :fixed="col.fixed"
358
+ :sortable="col.sortable || false"
359
+ :sort-method="col.sortMethod"
360
+ :sort-by="col.sortBy"
361
+ :sort-orders="col.sortOrders || ['ascending', 'descending', null]"
362
+ >
363
+ </el-table-column>
364
+ <el-table-column
365
+ v-else
366
+ :key="`table${index}`"
367
+ :prop="col.prop"
368
+ :label="col.label"
369
+ :width="col.width"
370
+ :min-width="col.minWidth"
371
+ :align="col.align || 'left'"
372
+ :header-align="col['header-align'] || 'left'"
373
+ :type="col.type || ''"
374
+ :formatter="col.formatter"
375
+ :fixed="col.fixed"
376
+ :sortable="col.sortable || false"
377
+ :sort-method="col.sortMethod"
378
+ :sort-by="col.sortBy"
379
+ :render-header="col.renderHeader"
380
+ :sort-orders="col.sortOrders || ['ascending', 'descending', null]"
381
+ >
382
+ <template #default="scope">
383
+ <el-tooltip
384
+ v-model="scope.row.showTooltip"
385
+ :key="`btn${index}`"
386
+ :effect="col.effect || 'dark'"
387
+ :content="scope.row[col.prop] + ''"
388
+ :disabled="!scope.row.showTooltip"
389
+ placement="top"
390
+ popper-class="tooltip__popper"
391
+ :hide-after="200000"
392
+ >
393
+ <p
394
+ class="breakTitle"
395
+ :style="typeof col.style === 'function' ? col.style(scope.row) : col.style"
396
+ :class="{ isClick: col.isClick, isPionter: col.clickFlag }"
397
+ @mouseenter="showTips($event, scope.row, scope.row[col.prop])"
398
+ @mouseleave="hideTips($event, scope.row, scope.row[col.prop])"
399
+ @click="() => col.clickHandler && col.clickHandler(scope.row)"
400
+ >
401
+ {{
402
+ scope.row[col.prop] === null || scope.row[col.prop] === ''
403
+ ? '--'
404
+ : Array.isArray(scope.row[col.prop]) ? scope.row[col.prop].join(',') : scope.row[col.prop]
405
+ }}
406
+ </p>
407
+ </el-tooltip>
408
+ </template>
409
+ </el-table-column>
410
+ </template>
411
+ </el-table>
412
+
413
+ <div class="footer-pagination" v-if="showPagination">
414
+ <el-pagination
415
+ :small="pageOptions['small']"
416
+ :background="pageOptions['background']"
417
+ :page-sizes="pageOptions['page-sizes']"
418
+ :page-size="pageOptions['page-size']"
419
+ :total="pageOptions['total']"
420
+ :pager-count="pageOptions['pager-count']"
421
+ :current-page="pageOptions['current-page']"
422
+ :layout="pageOptions['layout']"
423
+ :popper-class="pageOptions['popper-class']"
424
+ :prev-text="pageOptions['prev-text']"
425
+ :next-text="pageOptions['next-text']"
426
+ :disabled="pageOptions['disabled']"
427
+ :hide-on-single-page="pageOptions['hide-on-single-page']"
428
+ @size-change="handleSizeChange"
429
+ @current-change="handleCurrentChange"
430
+ @prev-click="handlePrevClick"
431
+ @next-click="handleNextClick"
432
+ >
433
+ <span class="totle-page">
434
+ 共 {{ pageOptions['total'] }} 条记录 第 {{ pageOptions['current-page'] }} /
435
+ {{ Math.ceil(pageOptions['total'] / pageOptions['page-size']) }} 页
436
+ </span>
437
+ </el-pagination>
438
+ </div>
439
+ </div>
440
+ </template>
441
+
442
+ <script>
443
+ import { ref, toRefs, defineComponent, reactive, toRef, onMounted, watch } from 'vue'
444
+ import ElTableInfiniteScroll from 'el-table-infinite-scroll'
445
+ export default defineComponent({
446
+ name: 'fgTable',
447
+ directives: {
448
+ 'el-table-infinite-scroll': ElTableInfiniteScroll,
449
+ },
450
+ props: {
451
+ disabled: {
452
+ type: Boolean,
453
+ default: true,
454
+ },
455
+ scrollLoading: {
456
+ type: Boolean,
457
+ required: false,
458
+ },
459
+ defaultSort: {
460
+ type: Object,
461
+ default: () => {},
462
+ },
463
+ tableCols: {
464
+ type: Array,
465
+ default: () => [],
466
+ },
467
+ tableData: {
468
+ type: Array,
469
+ default: () => [],
470
+ },
471
+ showHeader: {
472
+ type: Boolean,
473
+ default: true,
474
+ },
475
+ reserveSelection: {
476
+ type: Boolean,
477
+ default: false,
478
+ },
479
+ rowClassName: {
480
+ type: Function,
481
+ default: () => {},
482
+ },
483
+ rowStyle: {
484
+ type: Function,
485
+ default: () => {},
486
+ },
487
+ cellClassName: {
488
+ type: Function,
489
+ default: () => {},
490
+ },
491
+ cellStyle: {
492
+ type: Function,
493
+ default: () => {},
494
+ },
495
+ stripe: {
496
+ type: Boolean,
497
+ default: true,
498
+ },
499
+ border: {
500
+ type: Boolean,
501
+ default: true,
502
+ },
503
+ showOverflowTooltip: {
504
+ type: Boolean,
505
+ default: true,
506
+ },
507
+ showPagination: {
508
+ type: Boolean,
509
+ default: false,
510
+ },
511
+ paginationOption: {
512
+ type: Object,
513
+ default: {},
514
+ },
515
+ spanMethod: {
516
+ type: Function,
517
+ default: () => {},
518
+ },
519
+ rowKey: {
520
+ type: [Function, String],
521
+ default: '',
522
+ },
523
+ empty: {
524
+ type: String,
525
+ default: '暂无数据',
526
+ },
527
+ //是否显示按钮
528
+ isHideBtn: {
529
+ type: Boolean,
530
+ default: false,
531
+ },
532
+ height: {
533
+ type: [Number, String],
534
+ default: null,
535
+ },
536
+ highlightCurrentRow: {
537
+ type: Boolean,
538
+ default: false,
539
+ },
540
+ //解决多选框动态不显示问题
541
+ tableRandom:{
542
+ type: [Number, String],
543
+ default: null,
544
+ }
545
+ },
546
+ emits: [
547
+ 'row-click',
548
+ 'row-dblclick',
549
+ 'select',
550
+ 'select-all',
551
+ 'selection-change',
552
+ 'sort-change',
553
+ 'handleCommand',
554
+ 'size-change',
555
+ 'current-change',
556
+ 'prev-click',
557
+ 'next-click',
558
+ 'page-current-change',
559
+ 'filter-change',
560
+ ],
561
+ setup(props, ctx) {
562
+ const table = ref(null)
563
+ const state = reactive({
564
+ pageOptions: {
565
+ small: false,
566
+ background: true,
567
+ 'page-sizes': [10, 20, 50, 100],
568
+ 'page-size': 10,
569
+ total: 10,
570
+ 'pager-count': 7,
571
+ 'current-page': 1,
572
+ layout: 'slot, prev, pager, next, sizes, jumper',
573
+ 'popper-class': null,
574
+ 'prev-text': null,
575
+ 'next-text': null,
576
+ disabled: false,
577
+ 'hide-on-single-page': false,
578
+ },
579
+ })
580
+
581
+ onMounted(() => {
582
+ if (document.getElementsByClassName('el-pagination__jump')[0]) {
583
+ document.getElementsByClassName('el-pagination__jump')[0].childNodes[0].nodeValue = '跳至'
584
+ }
585
+ })
586
+ const methods = {
587
+ rowClick(row, column, event) {
588
+ ctx.emit('row-click', row, column, event)
589
+ },
590
+ rowDblclick(row, column, event) {
591
+ ctx.emit('row-dblclick', row, column, event)
592
+ },
593
+ select(selection, row) {
594
+ ctx.emit('select', selection, row)
595
+ },
596
+ selectAll(selection, row) {
597
+ ctx.emit('select-all', selection, row)
598
+ },
599
+ selectionChange(selection) {
600
+ ctx.emit('selection-change', selection)
601
+ },
602
+ currentChange(currentRow, oldCurrentRow) {
603
+ ctx.emit('current-change', currentRow, oldCurrentRow)
604
+ },
605
+ sortChange({ column, prop, order }) {
606
+ ctx.emit('sort-change', { column, prop, order })
607
+ },
608
+ clearSelection() {
609
+ table.value.clearSelection()
610
+ },
611
+ toggleRowSelection(row, selected) {
612
+ table.value.toggleRowSelection(row, selected)
613
+ },
614
+ toggleAllSelection() {
615
+ table.value.toggleAllSelection()
616
+ },
617
+ handleCommand(command) {
618
+ command.fn && command.fn(command.row)
619
+ },
620
+ // pageSize 改变时会触发
621
+ handleSizeChange(val) {
622
+ /* state.pageOptions = {
623
+ ...state.pageOptions,
624
+ 'current-page': 1,
625
+ }; */
626
+ ctx.emit('size-change', val)
627
+ },
628
+ // currentPage 改变时会触发
629
+ handleCurrentChange(val) {
630
+ ctx.emit('page-current-change', val)
631
+ },
632
+ // 用户点击上一页按钮改变当前页后触发
633
+ handlePrevClick(val) {
634
+ ctx.emit('prev-click', val)
635
+ },
636
+ // 用户点击下一页按钮改变当前页后触发
637
+ handleNextClick(val) {
638
+ ctx.emit('next-click', val)
639
+ },
640
+ filterChange(filters) {
641
+ ctx.emit('filter-change', filters)
642
+ },
643
+ clearFilter() {
644
+ table.value.clearFilter()
645
+ },
646
+ mouseEnter(col, row) {
647
+ if (props.isHideBtn) {
648
+ row.isHideBtn = false
649
+ console.log(col, row)
650
+ }
651
+ },
652
+ mouseLeave(col, row) {
653
+ if (props.isHideBtn) {
654
+ row.isHideBtn = true
655
+ }
656
+ },
657
+ }
658
+ const getSelectionRows = () => {
659
+ return table.value.getSelectionRows()
660
+ }
661
+ const showTips = (obj, row, rowText) => {
662
+ if (!props.showOverflowTooltip) {
663
+ return
664
+ }
665
+ /*obj为鼠标移入时的事件对象*/
666
+ /*currentWidth 为文本在页面中所占的宽度,创建标签,加入到页面,获取currentWidth ,最后在移除*/
667
+ let TemporaryTag = document.createElement('span')
668
+ TemporaryTag.innerText = rowText
669
+ TemporaryTag.className = 'getTextWidth'
670
+ document.querySelector('body').appendChild(TemporaryTag)
671
+ let currentWidth = document.querySelector('.getTextWidth').offsetWidth
672
+ document.querySelector('.getTextWidth').remove()
673
+ // /*cellWidth为表格容器的宽度*/
674
+ const cellWidth = obj.target.offsetWidth
675
+ // /*当文本宽度小于||等于容器宽度两倍时,代表文本显示未超过两行*/
676
+ currentWidth <= 2 * cellWidth ? (row.showTooltip = false) : (row.showTooltip = true)
677
+ }
678
+ const hideTips = (obj, row, rowText) => {
679
+ if (!props.showOverflowTooltip) {
680
+ return false
681
+ }
682
+ row.showTooltip = false
683
+ }
684
+
685
+ if (props.showPagination) {
686
+ const _paginationOption = toRefs(props.paginationOption)
687
+ for (let k in _paginationOption) {
688
+ state.pageOptions[k] = _paginationOption[k]
689
+ }
690
+ }
691
+
692
+ watch(
693
+ () => props.showPagination,
694
+ (newData) => {
695
+ if (newData) {
696
+ const _paginationOption = toRefs(props.paginationOption)
697
+ for (let k in _paginationOption) {
698
+ state.pageOptions[k] = _paginationOption[k]
699
+ }
700
+ }
701
+ },
702
+ )
703
+
704
+ return {
705
+ ...toRefs(state),
706
+ table,
707
+ ...methods,
708
+ getSelectionRows,
709
+ showTips,
710
+ hideTips,
711
+ }
712
+ },
713
+ })
714
+ </script>
715
+ <style>
716
+ .el-table-filter__bottom {
717
+ display: flex !important;
718
+ justify-content: space-between !important;
719
+ }
720
+
721
+ .tooltip__popper {
722
+ max-width: 80% !important;
723
+ position: fixed !important;
724
+ z-index: 9999;
725
+ }
726
+ </style>
727
+ <style scoped lang="scss">
728
+ .fg-table-body {
729
+ .iconfont {
730
+ margin: 0 5px;
731
+ cursor: pointer;
732
+ font-size: 20px;
733
+ }
734
+
735
+ .el-icon {
736
+ vertical-align: middle;
737
+ }
738
+ }
739
+
740
+ .totle-page {
741
+ padding: 0 15px 0 5px;
742
+ }
743
+
744
+ :deep(.el-pagination__sizes) {
745
+ margin: 0 0 0 16px;
746
+ }
747
+
748
+ .hideBtn {
749
+ display: none;
750
+ }
751
+
752
+ :deep(.el-table) {
753
+ color: #253555 !important;
754
+ }
755
+
756
+ :deep(.el-table thead) {
757
+ color: #253555 !important;
758
+ }
759
+
760
+ .el-table__body tr:hover {
761
+ .hideBtn {
762
+ display: inline;
763
+ }
764
+ }
765
+
766
+ .col-disabled {
767
+ opacity: 0.4;
768
+ }
769
+
770
+ .breakTitle {
771
+ overflow: hidden;
772
+ text-overflow: ellipsis;
773
+ display: -webkit-box;
774
+ -webkit-line-clamp: 2;
775
+ -webkit-box-orient: vertical;
776
+ word-break: break-all;
777
+ }
778
+
779
+ /*:deep(.el-table .cell) {
780
+ padding: 0 20px;
781
+ }*/
782
+
783
+ .isClick {
784
+ cursor: pointer;
785
+ }
786
+ /*筛选图标替换*/
787
+ :deep(th .cell .el-icon:before) {
788
+ font-family: 'iconfont' !important;
789
+ -webkit-font-smoothing: antialiased;
790
+ -moz-osx-font-smoothing: grayscale;
791
+ font-style: normal;
792
+ content: '\e654';
793
+ }
794
+ .isPionter {
795
+ cursor: pointer;
796
+ }
797
+ </style>