sh-view 1.7.5 → 2.0.0

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 (206) hide show
  1. package/.eslintrc.js +20 -21
  2. package/package.json +10 -10
  3. package/packages/assets/css/animated.scss +167 -2
  4. package/packages/assets/css/loader.scss +42 -42
  5. package/packages/assets/css/main.scss +41 -21
  6. package/packages/assets/css/theme.scss +83 -44
  7. package/packages/components/global-components/sh-alert/index.vue +173 -0
  8. package/packages/components/global-components/sh-badge/index.vue +227 -0
  9. package/packages/components/global-components/sh-card/index.vue +140 -122
  10. package/packages/components/global-components/sh-code-editor/index.vue +260 -260
  11. package/packages/components/global-components/sh-col/css/index.scss +76 -0
  12. package/packages/components/global-components/sh-col/index.vue +83 -0
  13. package/packages/components/global-components/sh-corner/index.vue +1 -9
  14. package/packages/components/global-components/sh-count-to/index.vue +102 -46
  15. package/packages/components/global-components/sh-date/index.vue +40 -0
  16. package/packages/components/global-components/sh-drawer/index.vue +518 -0
  17. package/packages/components/global-components/sh-drawer/scrollbar.js +76 -0
  18. package/packages/components/global-components/sh-empty/index.vue +43 -43
  19. package/packages/components/global-components/{sh-vxe-form → sh-form}/css/index.scss +6 -6
  20. package/packages/components/global-components/{sh-vxe-form → sh-form}/index.vue +114 -115
  21. package/packages/components/global-components/sh-form/js/methods.js +146 -0
  22. package/packages/components/global-components/{sh-vxe-form → sh-form}/mixin/defaultData.js +32 -33
  23. package/packages/components/global-components/sh-header/index.vue +293 -269
  24. package/packages/components/global-components/sh-icon/css/default/fonts/ionicons.svg +870 -0
  25. package/packages/components/global-components/sh-icon/css/default/fonts/ionicons.ttf +0 -0
  26. package/packages/components/global-components/sh-icon/css/default/fonts/ionicons.woff +0 -0
  27. package/packages/components/global-components/sh-icon/css/default/fonts/ionicons.woff2 +0 -0
  28. package/packages/components/global-components/sh-icon/css/default/icons.scss +2583 -0
  29. package/packages/components/global-components/sh-icon/css/default/index.scss +27 -0
  30. package/packages/components/global-components/sh-icon/css/font/fonts/iconfont.js +1 -0
  31. package/packages/components/global-components/sh-icon/css/font/fonts/iconfont.json +247 -0
  32. package/packages/components/global-components/sh-icon/css/font/fonts/iconfont.ttf +0 -0
  33. package/packages/components/global-components/sh-icon/css/font/fonts/iconfont.woff +0 -0
  34. package/packages/components/global-components/sh-icon/css/font/fonts/iconfont.woff2 +0 -0
  35. package/packages/components/global-components/sh-icon/css/font/icons.scss +135 -0
  36. package/packages/components/global-components/sh-icon/css/font/index.scss +16 -0
  37. package/packages/components/global-components/sh-icon/icon-default.vue +32 -0
  38. package/packages/components/global-components/sh-icon/{icons.vue → icon-font.vue} +32 -32
  39. package/packages/components/global-components/sh-icon/index.vue +28 -27
  40. package/packages/components/global-components/sh-image/index.vue +123 -0
  41. package/packages/components/global-components/sh-list/index.vue +141 -0
  42. package/packages/components/global-components/sh-loading/index.vue +49 -42
  43. package/packages/components/global-components/{sh-vxe-modal → sh-modal}/index.vue +209 -209
  44. package/packages/components/global-components/sh-noticebar/index.vue +201 -201
  45. package/packages/components/global-components/sh-poptip/index.vue +479 -0
  46. package/packages/components/global-components/sh-poptip/popper.js +115 -0
  47. package/packages/components/global-components/sh-progress/index.vue +290 -0
  48. package/packages/components/global-components/sh-pull-refresh/index.vue +290 -290
  49. package/packages/components/global-components/{sh-vxe-query → sh-query}/index.vue +317 -286
  50. package/packages/components/global-components/sh-result/index.vue +110 -88
  51. package/packages/components/global-components/sh-row/css/index.scss +21 -0
  52. package/packages/components/global-components/sh-row/index.vue +63 -0
  53. package/packages/components/global-components/sh-split/components/trigger.vue +33 -0
  54. package/packages/components/global-components/sh-split/index.vue +334 -0
  55. package/packages/components/global-components/sh-table/components/importModal.vue +351 -0
  56. package/packages/components/global-components/{sh-vxe-table → sh-table}/css/index.scss +4 -22
  57. package/packages/components/global-components/{sh-vxe-table → sh-table}/index.vue +329 -351
  58. package/packages/components/global-components/{sh-vxe-table → sh-table}/js/methods.js +91 -153
  59. package/packages/components/global-components/{sh-vxe-table → sh-table}/js/props.js +304 -313
  60. package/packages/components/global-components/{sh-vxe-table → sh-table}/mixin/defaultData.js +94 -116
  61. package/packages/components/global-components/sh-tabs/index.vue +315 -0
  62. package/packages/components/global-components/sh-tag/index.vue +163 -0
  63. package/packages/components/global-components/{sh-vxe-toolbar → sh-toolbar}/index.vue +177 -172
  64. package/packages/components/global-components/sh-tree/components/table-tree.vue +280 -0
  65. package/packages/components/global-components/sh-tree/css/index.scss +54 -0
  66. package/packages/components/global-components/sh-tree/index.vue +195 -0
  67. package/packages/components/global-components/sh-tree/mixin/treeProps.js +124 -0
  68. package/packages/components/global-components/sh-upload/index.vue +278 -418
  69. package/packages/components/global-components/sh-upload/js/ajax.js +80 -0
  70. package/packages/components/global-components/sh-upload/js/mixin.js +257 -0
  71. package/packages/components/global-components/sh-water-fall/index.vue +87 -87
  72. package/packages/components/index.js +85 -59
  73. package/packages/components/other-components/sh-cron-modal/css/index.scss +2 -2
  74. package/packages/components/other-components/sh-menu-card/index.vue +224 -224
  75. package/packages/css/index.js +4 -6
  76. package/packages/directive/index.js +19 -19
  77. package/packages/directive/module/click-out.js +14 -0
  78. package/packages/directive/module/draggable.js +42 -42
  79. package/packages/directive/module/line-clamp.js +22 -0
  80. package/packages/directive/module/prevent-click.js +18 -0
  81. package/packages/directive/module/resize.js +19 -0
  82. package/packages/directive/module/ripple.js +166 -0
  83. package/packages/index.js +39 -40
  84. package/packages/utils/transfer-queue.js +12 -0
  85. package/packages/vxeTable/css/index.scss +12 -98
  86. package/packages/vxeTable/css/variable.scss +7 -265
  87. package/packages/vxeTable/index.js +184 -184
  88. package/packages/vxeTable/plugins/export.js +450 -0
  89. package/packages/vxeTable/render/cell/vxe-render-checkgroup.vue +36 -36
  90. package/packages/vxeTable/render/cell/vxe-render-goption.vue +94 -93
  91. package/packages/vxeTable/render/cell/vxe-render-img.vue +21 -28
  92. package/packages/vxeTable/render/cell/vxe-render-input.vue +51 -51
  93. package/packages/vxeTable/render/cell/vxe-render-progress.vue +19 -19
  94. package/packages/vxeTable/render/cell/vxe-render-radiogroup.vue +36 -36
  95. package/packages/vxeTable/render/cell/vxe-render-select.vue +36 -36
  96. package/packages/vxeTable/render/cell/vxe-render-tree.vue +59 -59
  97. package/packages/vxeTable/render/globalRenders.jsx +498 -491
  98. package/packages/assets/icons/demo.css +0 -539
  99. package/packages/assets/icons/iconfont.css +0 -415
  100. package/packages/assets/icons/iconfont.js +0 -1
  101. package/packages/assets/icons/iconfont.json +0 -709
  102. package/packages/assets/icons/iconfont.ttf +0 -0
  103. package/packages/assets/icons/iconfont.woff +0 -0
  104. package/packages/assets/icons/iconfont.woff2 +0 -0
  105. package/packages/assets/img/image-error.png +0 -0
  106. package/packages/assets/img/square-image.png +0 -0
  107. package/packages/components/global-components/sh-iv-form/components/iv-group-item.vue +0 -57
  108. package/packages/components/global-components/sh-iv-form/components/iv-single-item.vue +0 -76
  109. package/packages/components/global-components/sh-iv-form/index.vue +0 -255
  110. package/packages/components/global-components/sh-layout/index.vue +0 -142
  111. package/packages/components/global-components/sh-upload/components/u-img.vue +0 -63
  112. package/packages/components/global-components/sh-upload/components/u-list.vue +0 -100
  113. package/packages/components/global-components/sh-vxe-form/js/methods.js +0 -170
  114. package/packages/components/global-components/sh-vxe-list/index.vue +0 -129
  115. package/packages/components/global-components/sh-vxe-table/components/importModal.vue +0 -377
  116. package/packages/components/global-components/sh-vxe-tree/components/table-tree.vue +0 -233
  117. package/packages/components/global-components/sh-vxe-tree/css/index.scss +0 -20
  118. package/packages/components/global-components/sh-vxe-tree/index.vue +0 -85
  119. package/packages/components/global-components/sh-vxe-tree/js/props.js +0 -120
  120. package/packages/components/global-components/sh-vxe-tree/js/treeMethods.js +0 -169
  121. package/packages/components/global-components/sh-vxe-tree/mixin/defaultData.js +0 -54
  122. package/packages/components/global-components/sh-vxe-tree/vxe-direct-tree.vue +0 -203
  123. package/packages/components/global-components/sh-vxe-tree/vxe-select-tree.vue +0 -291
  124. package/packages/components/other-components/sh-markdown/tinymce/langs/ar.js +0 -7
  125. package/packages/components/other-components/sh-markdown/tinymce/langs/az.js +0 -7
  126. package/packages/components/other-components/sh-markdown/tinymce/langs/bg_BG.js +0 -7
  127. package/packages/components/other-components/sh-markdown/tinymce/langs/bn_BD.js +0 -7
  128. package/packages/components/other-components/sh-markdown/tinymce/langs/ca.js +0 -7
  129. package/packages/components/other-components/sh-markdown/tinymce/langs/cs.js +0 -7
  130. package/packages/components/other-components/sh-markdown/tinymce/langs/cy.js +0 -7
  131. package/packages/components/other-components/sh-markdown/tinymce/langs/da.js +0 -7
  132. package/packages/components/other-components/sh-markdown/tinymce/langs/de.js +0 -7
  133. package/packages/components/other-components/sh-markdown/tinymce/langs/dv.js +0 -7
  134. package/packages/components/other-components/sh-markdown/tinymce/langs/el.js +0 -7
  135. package/packages/components/other-components/sh-markdown/tinymce/langs/eo.js +0 -7
  136. package/packages/components/other-components/sh-markdown/tinymce/langs/es.js +0 -7
  137. package/packages/components/other-components/sh-markdown/tinymce/langs/es_MX.js +0 -7
  138. package/packages/components/other-components/sh-markdown/tinymce/langs/et.js +0 -7
  139. package/packages/components/other-components/sh-markdown/tinymce/langs/eu.js +0 -7
  140. package/packages/components/other-components/sh-markdown/tinymce/langs/fa.js +0 -7
  141. package/packages/components/other-components/sh-markdown/tinymce/langs/fi.js +0 -7
  142. package/packages/components/other-components/sh-markdown/tinymce/langs/fr_FR.js +0 -7
  143. package/packages/components/other-components/sh-markdown/tinymce/langs/ga.js +0 -7
  144. package/packages/components/other-components/sh-markdown/tinymce/langs/gl.js +0 -7
  145. package/packages/components/other-components/sh-markdown/tinymce/langs/he_IL.js +0 -7
  146. package/packages/components/other-components/sh-markdown/tinymce/langs/hi.js +0 -7
  147. package/packages/components/other-components/sh-markdown/tinymce/langs/hr.js +0 -7
  148. package/packages/components/other-components/sh-markdown/tinymce/langs/hu_HU.js +0 -7
  149. package/packages/components/other-components/sh-markdown/tinymce/langs/hy.js +0 -7
  150. package/packages/components/other-components/sh-markdown/tinymce/langs/id.js +0 -7
  151. package/packages/components/other-components/sh-markdown/tinymce/langs/is_IS.js +0 -7
  152. package/packages/components/other-components/sh-markdown/tinymce/langs/it.js +0 -7
  153. package/packages/components/other-components/sh-markdown/tinymce/langs/ja.js +0 -7
  154. package/packages/components/other-components/sh-markdown/tinymce/langs/kab.js +0 -7
  155. package/packages/components/other-components/sh-markdown/tinymce/langs/kk.js +0 -7
  156. package/packages/components/other-components/sh-markdown/tinymce/langs/ko_KR.js +0 -7
  157. package/packages/components/other-components/sh-markdown/tinymce/langs/ku.js +0 -7
  158. package/packages/components/other-components/sh-markdown/tinymce/langs/lt.js +0 -7
  159. package/packages/components/other-components/sh-markdown/tinymce/langs/lv.js +0 -7
  160. package/packages/components/other-components/sh-markdown/tinymce/langs/nb_NO.js +0 -7
  161. package/packages/components/other-components/sh-markdown/tinymce/langs/ne.js +0 -7
  162. package/packages/components/other-components/sh-markdown/tinymce/langs/nl.js +0 -7
  163. package/packages/components/other-components/sh-markdown/tinymce/langs/nl_BE.js +0 -7
  164. package/packages/components/other-components/sh-markdown/tinymce/langs/oc.js +0 -7
  165. package/packages/components/other-components/sh-markdown/tinymce/langs/pl.js +0 -7
  166. package/packages/components/other-components/sh-markdown/tinymce/langs/pt_BR.js +0 -7
  167. package/packages/components/other-components/sh-markdown/tinymce/langs/ro.js +0 -7
  168. package/packages/components/other-components/sh-markdown/tinymce/langs/ru.js +0 -7
  169. package/packages/components/other-components/sh-markdown/tinymce/langs/sk.js +0 -7
  170. package/packages/components/other-components/sh-markdown/tinymce/langs/sl_SI.js +0 -7
  171. package/packages/components/other-components/sh-markdown/tinymce/langs/sq.js +0 -7
  172. package/packages/components/other-components/sh-markdown/tinymce/langs/sr.js +0 -7
  173. package/packages/components/other-components/sh-markdown/tinymce/langs/sv_SE.js +0 -7
  174. package/packages/components/other-components/sh-markdown/tinymce/langs/ta.js +0 -7
  175. package/packages/components/other-components/sh-markdown/tinymce/langs/tg.js +0 -7
  176. package/packages/components/other-components/sh-markdown/tinymce/langs/th_TH.js +0 -7
  177. package/packages/components/other-components/sh-markdown/tinymce/langs/tr.js +0 -7
  178. package/packages/components/other-components/sh-markdown/tinymce/langs/ug.js +0 -7
  179. package/packages/components/other-components/sh-markdown/tinymce/langs/uk.js +0 -7
  180. package/packages/components/other-components/sh-markdown/tinymce/langs/vi.js +0 -7
  181. package/packages/components/other-components/sh-markdown/tinymce/skins/content/dark/content.css +0 -72
  182. package/packages/components/other-components/sh-markdown/tinymce/skins/content/dark/content.min.css +0 -7
  183. package/packages/components/other-components/sh-markdown/tinymce/skins/content/default/content.min.css +0 -7
  184. package/packages/components/other-components/sh-markdown/tinymce/skins/content/document/content.css +0 -72
  185. package/packages/components/other-components/sh-markdown/tinymce/skins/content/document/content.min.css +0 -7
  186. package/packages/components/other-components/sh-markdown/tinymce/skins/content/writer/content.css +0 -68
  187. package/packages/components/other-components/sh-markdown/tinymce/skins/content/writer/content.min.css +0 -7
  188. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/content.css +0 -714
  189. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/content.inline.css +0 -726
  190. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/content.inline.min.css +0 -7
  191. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/content.min.css +0 -7
  192. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/content.mobile.css +0 -29
  193. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/content.mobile.min.css +0 -7
  194. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff +0 -0
  195. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/skin.css +0 -3047
  196. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/skin.min.css +0 -7
  197. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/skin.mobile.css +0 -673
  198. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/skin.mobile.min.css +0 -7
  199. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/skin.shadowdom.css +0 -37
  200. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css +0 -7
  201. package/packages/directive/directives.js +0 -27
  202. package/packages/iview/css/index.scss +0 -32
  203. package/packages/iview/index.js +0 -25
  204. /package/packages/components/global-components/{sh-vxe-form → sh-form}/components/form-item.vue +0 -0
  205. /package/packages/components/global-components/{sh-vxe-form → sh-form}/js/props.js +0 -0
  206. /package/packages/components/global-components/{sh-vxe-table → sh-table}/js/excel_to_json.js +0 -0
@@ -1,351 +1,329 @@
1
- <template>
2
- <div class="sh-vxe-table" :class="{ 'sh-table-ghost': tableGlobalConfig.ghost }" :style="{ height: shVxeTableHeight }">
3
- <vxe-grid
4
- :id="id"
5
- ref="vxeGrid"
6
- :key="renderKey"
7
- :class="{ 'is--hasfooter': showFooter }"
8
- :columns="tableColumns"
9
- :data="tableFilterData || dataSourse"
10
- :width="width"
11
- :height="height"
12
- :min-height="minHeight"
13
- :max-height="maxHeight"
14
- :auto-resize="autoResize"
15
- :sync-resize="syncResize"
16
- :stripe="stripe && !tableTreeConfig"
17
- :border="border"
18
- :round="round"
19
- :size="size"
20
- :loading="loading"
21
- :align="align"
22
- :header-align="headerAlign"
23
- :show-header="showHeader"
24
- :row-class-name="rowClassName"
25
- :cell-class-name="cellClassName"
26
- :header-row-class-name="headerRowClassName"
27
- :header-cell-class-name="headerCellClassName"
28
- :footer-row-class-name="footerRowClassName"
29
- :footer-cell-class-name="footerCellClassName"
30
- :show-footer="showFooter"
31
- :footer-method="footerMethod || tableFooterMethod"
32
- :footer-span-method="footerSpanMethod || tableFooterSpanMethod"
33
- :merge-cells="mergeCells"
34
- :merge-footer-items="mergeFooterItems"
35
- :show-overflow="showOverflow"
36
- :show-header-overflow="showHeaderOverflow"
37
- :show-footer-overflow="showFooterOverflow"
38
- :keep-source="keepSource"
39
- :empty-text="noDataText"
40
- :row-config="rowConfig"
41
- :column-config="tableColumnConfig"
42
- :checkbox-config="tableCheckboxConfig"
43
- :radio-config="radioConfig"
44
- :tree-config="tableTreeConfig"
45
- :seq-config="seqConfig"
46
- :expand-config="expandConfig"
47
- :tooltip-config="tooltipConfig"
48
- :edit-config="tableEditConfig"
49
- :valid-config="validConfig"
50
- :edit-rules="tableEditRules"
51
- :toolbar-config="toolbarConfig"
52
- :pager-config="tablePagerConfig"
53
- :keyboard-config="keyboardConfig"
54
- :sort-config="sortConfig"
55
- :mouse-config="mouseConfig"
56
- :custom-config="customConfig"
57
- :export-config="tableExportConfig"
58
- :print-config="tablePrintConfig"
59
- :scroll-x="scrollX"
60
- :scroll-y="tableScrollY"
61
- @current-change="onCurrentChange"
62
- @radio-change="onRadioChange"
63
- @checkbox-change="onSelectionChange"
64
- @checkbox-all="onSelectionChange"
65
- @checkbox-range-end="onSelectionChange"
66
- @cell-click="onCellClick"
67
- @cell-dblclick="onCellDblClick"
68
- @header-cell-click="onHeaderCellClick"
69
- @sort-change="onSortChange"
70
- @filter-change="onFilterChange"
71
- @toggle-row-expand="onToggleRowExpand"
72
- @toggle-tree-expand="onToggleTreeExpand"
73
- @edit-closed="onEditClosed"
74
- @edit-actived="onEditActived"
75
- @scroll="onScroll"
76
- @custom="onCustom"
77
- @page-change="onPageChange"
78
- @toolbar-button-click="onToolbarButtonClick"
79
- @toolbar-tool-click="onToolbarToolClick"
80
- @option-click="handleGoptionClick">
81
- <template #form>
82
- <slot name="head"></slot>
83
- <slot name="form">
84
- <sh-query
85
- v-if="tableGlobalConfig.search"
86
- ref="vxeGridForm"
87
- :size="size"
88
- :data="queryData"
89
- :items="tableFormItems"
90
- :rules="tableEditRules"
91
- :valid-config="validConfig"
92
- :global-config="tableGlobalConfig"
93
- :transformitem="false"
94
- @submit="onFormSubmit"
95
- @reset="onFormReset"
96
- @collapsed="onFormCollapsed"
97
- @edit-closed="onFormEditClosed">
98
- <template #footLeft><slot name="formLeft"></slot></template>
99
- <template #footRight><slot name="formRight"></slot></template>
100
- </sh-query>
101
- </slot>
102
- </template>
103
- <template #toolbar>
104
- <div class="sh-table-toolbar-wrap">
105
- <div class="sh-table-toolbar-left">
106
- <div v-if="tableGlobalConfig.title" class="sh-table-toolbar-item">
107
- <h3 class="tableName">{{ tableGlobalConfig.tableName }}</h3>
108
- </div>
109
- <!--ps:全表搜索不支持反转-->
110
- <div v-if="tableGlobalConfig.globalFilter && !reverse" class="sh-table-toolbar-item">
111
- <vxe-input
112
- v-model="tableFilterText"
113
- :size="size"
114
- clearable
115
- type="search"
116
- placeholder="全局关键字搜索"
117
- @blur="handleTableFilter"
118
- @clear="handleTableFilter"
119
- @search-click="handleTableFilter" />
120
- <span v-if="tableFilterData">
121
- 共搜索到 <strong>{{ tableFilterData.length }}</strong> 条数据
122
- </span>
123
- </div>
124
- <div v-if="$slots.toolbarLeft" class="sh-table-toolbar-item">
125
- <slot name="toolbarLeft"></slot>
126
- </div>
127
- </div>
128
- <div class="sh-table-toolbar-right">
129
- <div v-if="$slots.toolbarRight" class="sh-table-toolbar-item">
130
- <slot name="toolbarRight"></slot>
131
- </div>
132
- <div v-if="tableGlobalConfig.addRow" class="sh-table-toolbar-item">
133
- <vxe-button v-ripple status="primary" :size="size" @click="handleTableAddRow(null, undefined, true)">新增行</vxe-button>
134
- </div>
135
- <div v-if="tableGlobalConfig.deleteRow" class="sh-table-toolbar-item">
136
- <vxe-button v-ripple status="danger" :size="size" @click="handleTableDeleteRow(null, true)">删除行</vxe-button>
137
- </div>
138
- <div v-if="tableGlobalConfig.zoom && tableIsHeight" class="sh-table-toolbar-item">
139
- <vxe-button v-if="!tableIsFullscreen" v-ripple icon="vxe-icon-zoom-out" @click="handleTableZoomBtn(true)">全屏</vxe-button>
140
- <vxe-button v-else v-ripple :size="size" icon="vxe-icon-zoom-in" @click="handleTableZoomBtn(false)">退出全屏</vxe-button>
141
- </div>
142
- <div v-if="tableGlobalConfig.import" class="sh-table-toolbar-item">
143
- <vxe-button v-ripple :size="size" status="primary" icon="vxe-icon-upload" @click="handleTableImportBtn">导入</vxe-button>
144
- </div>
145
- <div v-if="tableGlobalConfig.export" class="sh-table-toolbar-item">
146
- <vxe-button v-ripple :size="size" status="success" icon="vxe-icon-download" @click="handleTableExportBtn()">导出</vxe-button>
147
- </div>
148
- <div v-if="tableGlobalConfig.print" class="sh-table-toolbar-item">
149
- <vxe-button v-ripple :size="size" status="warning" icon="vxe-icon-print" @click="handleTablePrintBtn()">打印</vxe-button>
150
- </div>
151
- </div>
152
- </div>
153
- </template>
154
- <template #pagerLeftSlot>
155
- <div class="sh-table-footer-info">
156
- <span v-if="selectionRows.length > 0">
157
- 已选择 <strong>{{ selectionRows.length }}</strong> 项
158
- </span>
159
- </div>
160
- <slot name="pagerLeft"></slot>
161
- </template>
162
- <template #pagerRightSlot>
163
- <slot name="pagerRight"></slot>
164
- </template>
165
- <template #empty>
166
- <sh-empty :no-data-icon="noDataIcon" :no-data-text="noDataText"></sh-empty>
167
- </template>
168
- <template v-for="slot in tableSlots" #[slot]="scope">
169
- <!-- 以之前的名字命名插槽,同时把数据原样绑定 -->
170
- <slot :name="slot" v-bind="scope"></slot>
171
- </template>
172
- </vxe-grid>
173
- <!--导入弹窗-->
174
- <importModal v-if="importModal" v-model:visible="importModal" need-validate :columns="tableColumns" :import-rules="tableEditRules" @confirm="setImportData"></importModal>
175
- </div>
176
- </template>
177
-
178
- <script>
179
- import defaultData from './mixin/defaultData'
180
- import props from './js/props'
181
- import methods from './js/methods'
182
- import importModal from './components/importModal.vue'
183
- export default {
184
- name: 'ShTable',
185
- components: {
186
- importModal
187
- },
188
- mixins: [defaultData],
189
- props: {
190
- ...props
191
- },
192
- emits: [
193
- 'current-change',
194
- 'radio-change',
195
- 'selection-change',
196
- 'cell-click',
197
- 'cell-dblclick',
198
- 'header-cell-click',
199
- 'sort-change',
200
- 'filter-change',
201
- 'toggle-row-expand',
202
- 'toggle-tree-expand',
203
- 'edit-closed',
204
- 'edit-actived',
205
- 'scroll',
206
- 'custom',
207
- 'page-change',
208
- 'toolbar-button-click',
209
- 'toolbar-tool-click',
210
-
211
- 'form-submit',
212
- 'form-reset',
213
- 'form-edit-closed',
214
- 'form-submit-invalid',
215
- 'import-confirm',
216
- 'globaloption',
217
- 'toolbaroption'
218
- ],
219
- data() {
220
- return {
221
- // 渲染key值
222
- renderKey: 1,
223
- // 全选状态
224
- isAllChecked: false,
225
- // 半选状态
226
- isIndeterminate: false,
227
- // table选中keys
228
- selectedRowKeys: [],
229
- // table选中records
230
- selectionRows: [],
231
- // table分页器
232
- tablePagerConfig: {},
233
- // 表格格式化后表头
234
- tableColumnsFixed: [],
235
- // 表格全表搜索数据
236
- tableFilterData: null,
237
- // 多层转一维后表头
238
- tableColumnsFlat: [],
239
- // 根据表格表头生成表单项配置
240
- tableFormItems: [],
241
- // 表格根据表头自动生成验证规则
242
- tableEditRules: {},
243
- // 全局过滤关键字
244
- tableFilterText: '',
245
- // 表格当前高亮行
246
- tableCurrentRowData: null,
247
- // 导出入弹窗开关
248
- importModal: false,
249
- // 表格是否全屏显示状态
250
- tableIsFullscreen: false,
251
- // 根据表头生成行默认值
252
- tableRowDefaultData: {}
253
- }
254
- },
255
- computed: {
256
- tableReverse() {
257
- return this.reverse
258
- },
259
- tableGlobalConfig() {
260
- return Object.assign({}, this.globalConfigDefault, this.globalConfig)
261
- },
262
- tableColumns() {
263
- let defaultColumns = this.columnsConfigDefault.filter(item => this.tableGlobalConfig[item.type])
264
- return defaultColumns.concat(this.tableColumnsFixed)
265
- },
266
- tableColumnConfig() {
267
- return Object.assign({}, this.columnConfigDefault, this.columnConfig)
268
- },
269
- tableCheckboxConfig() {
270
- let hasTree = this.columns.some(_ => _.treeNode)
271
- return Object.assign({ range: !hasTree }, this.checkboxConfig)
272
- },
273
- tableTreeConfig() {
274
- let hasTree = this.columns.some(_ => _.treeNode)
275
- return hasTree ? Object.assign({}, this.treeConfig) : null
276
- },
277
- tableExportConfig() {
278
- return Object.assign({ filename: this.tableGlobalConfig.tableName, sheetName: 'sheet1' }, this.exportConfigDefault, this.exportConfig)
279
- },
280
- tablePrintConfig() {
281
- return Object.assign({ filename: this.tableGlobalConfig.tableName, sheetName: this.tableGlobalConfig.tableName }, this.printConfigDefault, this.printConfig)
282
- },
283
- tableEditConfig() {
284
- return Object.assign({ enabled: !this.disabled, showStatus: !this.disabled, showUpdateStatus: !this.disabled, showInsertStatus: !this.disabled }, this.editConfig)
285
- },
286
- tableIsHeight() {
287
- return this.height || this.maxHeight
288
- },
289
- tableScrollY() {
290
- return Object.assign({ enabled: !!this.tableIsHeight, gt: 100, oSize: 0 }, this.scrollY)
291
- },
292
- tableVitualScroll() {
293
- return this.tableScrollY.enabled
294
- },
295
- tableSlots() {
296
- let disSlots = ['form']
297
- return Object.keys(this.$slots).filter(key => !disSlots.includes(key))
298
- },
299
- shVxeTableHeight() {
300
- return this.height === '100%' || this.height === 'auto' ? '100%' : 'auto'
301
- }
302
- },
303
- watch: {
304
- pagerConfig: {
305
- handler(newvalue, oldValue) {
306
- this.initPagerConfig()
307
- },
308
- deep: true,
309
- immediate: true
310
- },
311
- columns: {
312
- handler(newvalue, oldValue) {
313
- this.initTableColumns(newvalue)
314
- },
315
- deep: true,
316
- immediate: true
317
- },
318
- dataSourse: {
319
- handler(newvalue, oldValue) {
320
- this.initColsDefaultValue()
321
- this.selectionRows = []
322
- },
323
- immediate: true
324
- },
325
- editRules: {
326
- handler(newvalue, oldValue) {
327
- this.initEditRules(newvalue)
328
- },
329
- deep: true,
330
- immediate: true
331
- }
332
- },
333
- created() {
334
- this.initCreated()
335
- },
336
- mounted() {},
337
- methods: {
338
- tableRef() {
339
- return this.$refs.vxeGrid
340
- },
341
- tableFormRef() {
342
- return this.$refs.vxeGridForm
343
- },
344
- ...methods
345
- }
346
- }
347
- </script>
348
-
349
- <style lang="scss">
350
- @import './css/index.scss';
351
- </style>
1
+ <template>
2
+ <div class="sh-vxe-table" :class="{ 'sh-table-ghost': tableGlobalConfig.ghost }" :style="{ height: wrapHeight }">
3
+ <vxe-grid
4
+ :id="id"
5
+ ref="vxeGrid"
6
+ :key="renderKey"
7
+ :class="{ 'is--hasfooter': showFooter }"
8
+ :columns="tableColumns"
9
+ :data="tableFilterData || dataSourse"
10
+ :width="width"
11
+ :height="height"
12
+ :min-height="minHeight"
13
+ :max-height="maxHeight"
14
+ :auto-resize="autoResize"
15
+ :sync-resize="syncResize"
16
+ :stripe="stripe && !tableTreeConfig"
17
+ :border="border"
18
+ :round="round"
19
+ :size="size"
20
+ :loading="loading"
21
+ :align="align"
22
+ :header-align="headerAlign"
23
+ :show-header="showHeader"
24
+ :row-class-name="rowClassName"
25
+ :cell-class-name="cellClassName"
26
+ :header-row-class-name="headerRowClassName"
27
+ :header-cell-class-name="headerCellClassName"
28
+ :footer-row-class-name="footerRowClassName"
29
+ :footer-cell-class-name="footerCellClassName"
30
+ :show-footer="showFooter"
31
+ :footer-method="footerMethod || tableFooterMethod"
32
+ :footer-span-method="footerSpanMethod || tableFooterSpanMethod"
33
+ :merge-cells="mergeCells"
34
+ :merge-footer-items="mergeFooterItems"
35
+ :show-overflow="showOverflow"
36
+ :show-header-overflow="showHeaderOverflow"
37
+ :show-footer-overflow="showFooterOverflow"
38
+ :keep-source="keepSource"
39
+ :empty-text="emptyText"
40
+ :row-config="rowConfig"
41
+ :column-config="tableColumnConfig"
42
+ :checkbox-config="tableCheckboxConfig"
43
+ :radio-config="radioConfig"
44
+ :tree-config="tableTreeConfig"
45
+ :seq-config="seqConfig"
46
+ :expand-config="expandConfig"
47
+ :tooltip-config="tooltipConfig"
48
+ :edit-config="tableEditConfig"
49
+ :valid-config="validConfig"
50
+ :edit-rules="tableEditRules"
51
+ :toolbar-config="toolbarConfig"
52
+ :pager-config="tablePagerConfig"
53
+ :keyboard-config="keyboardConfig"
54
+ :sort-config="sortConfig"
55
+ :mouse-config="mouseConfig"
56
+ :custom-config="customConfig"
57
+ :export-config="tableExportConfig"
58
+ :print-config="tablePrintConfig"
59
+ :scroll-x="scrollX"
60
+ :scroll-y="scrollY"
61
+ @current-change="onCurrentChange"
62
+ @radio-change="onRadioChange"
63
+ @checkbox-change="onSelectionChange"
64
+ @checkbox-all="onSelectionChange"
65
+ @checkbox-range-end="onSelectionChange"
66
+ @cell-click="onCellClick"
67
+ @cell-dblclick="onCellDblClick"
68
+ @header-cell-click="onHeaderCellClick"
69
+ @sort-change="onSortChange"
70
+ @filter-change="onFilterChange"
71
+ @toggle-row-expand="onToggleRowExpand"
72
+ @toggle-tree-expand="onToggleTreeExpand"
73
+ @edit-closed="onEditClosed"
74
+ @edit-actived="onEditActived"
75
+ @scroll="onScroll"
76
+ @custom="onCustom"
77
+ @page-change="onPageChange"
78
+ @toolbar-button-click="onToolbarButtonClick"
79
+ @toolbar-tool-click="onToolbarToolClick"
80
+ @option-click="handleGoptionClick">
81
+ <template #form>
82
+ <slot name="head"></slot>
83
+ <slot name="form">
84
+ <sh-query v-if="tableGlobalConfig.search" v-bind="tableQueryConfig" @submit="onFormSubmit" @reset="onFormReset" @collapsed="onFormCollapsed" @edit-closed="onFormEditClosed">
85
+ <template #footLeft><slot name="formLeft"></slot></template>
86
+ <template #footRight><slot name="formRight"></slot></template>
87
+ </sh-query>
88
+ </slot>
89
+ </template>
90
+ <template #toolbar>
91
+ <div class="sh-table-toolbar-wrap">
92
+ <div class="sh-table-toolbar-left">
93
+ <div v-if="tableGlobalConfig.title" class="sh-table-toolbar-item">
94
+ <h3 class="tableName">{{ tableGlobalConfig.tableName }}</h3>
95
+ </div>
96
+ <!--ps:全表搜索不支持反转-->
97
+ <div v-if="tableGlobalConfig.globalFilter" class="sh-table-toolbar-item">
98
+ <vxe-input v-model="tableFilterText" v-bind="tableFilterConfig" @blur="handleTableFilter" @clear="handleTableFilter" @search-click="handleTableFilter" />
99
+ <span v-if="tableFilterData">
100
+ 共搜索到 <strong>{{ tableFilterData.length }}</strong> 条数据
101
+ </span>
102
+ </div>
103
+ <div v-if="$slots.toolbarLeft" class="sh-table-toolbar-item">
104
+ <slot name="toolbarLeft"></slot>
105
+ </div>
106
+ </div>
107
+ <div class="sh-table-toolbar-right">
108
+ <div v-if="$slots.toolbarRight" class="sh-table-toolbar-item">
109
+ <slot name="toolbarRight"></slot>
110
+ </div>
111
+ <div v-if="tableGlobalConfig.zoom" class="sh-table-toolbar-item">
112
+ <vxe-button v-if="!tableIsFullscreen" v-ripple icon="vxe-icon-zoom-out" @click="handleTableZoomBtn(true)">全屏</vxe-button>
113
+ <vxe-button v-else v-ripple :size="size" icon="vxe-icon-zoom-in" @click="handleTableZoomBtn(false)">退出全屏</vxe-button>
114
+ </div>
115
+ <template v-for="(tool, toolIndex) in tableTools" :key="toolIndex">
116
+ <div class="sh-table-toolbar-item">
117
+ <vxe-button v-ripple :size="size" v-bind="tool" @click="handleTableTool(tool)"></vxe-button>
118
+ </div>
119
+ </template>
120
+ </div>
121
+ </div>
122
+ </template>
123
+ <template #pagerLeft>
124
+ <div v-if="selectionRows.length" class="sh-table-footer-info">
125
+ 已选择 <strong>{{ selectionRows.length }}</strong>
126
+ </div>
127
+ <slot name="pagerLeft"></slot>
128
+ </template>
129
+ <template #pagerRight>
130
+ <slot name="pagerRight"></slot>
131
+ </template>
132
+ <template #empty>
133
+ <sh-empty :icon="emptyIcon" :content="emptyText"></sh-empty>
134
+ </template>
135
+ <template v-for="slot in tableSlots" #[slot]="scope">
136
+ <!-- 以之前的名字命名插槽,同时把数据原样绑定 -->
137
+ <slot :name="slot" v-bind="scope"></slot>
138
+ </template>
139
+ </vxe-grid>
140
+ <!--导入弹窗-->
141
+ <importModal
142
+ v-if="importModal"
143
+ v-model:visible="importModal"
144
+ need-validate
145
+ :columns="tableColumns"
146
+ :import-config="importConfig"
147
+ :import-rules="tableEditRules"
148
+ @confirm="setImportData"></importModal>
149
+ </div>
150
+ </template>
151
+
152
+ <script>
153
+ import defaultData from './mixin/defaultData'
154
+ import props from './js/props'
155
+ import methods from './js/methods'
156
+ import importModal from './components/importModal.vue'
157
+ const toolsList = [
158
+ { status: 'primary', code: 'addRow', content: '新增行' },
159
+ { status: 'danger', code: 'deleteRow', content: '删除行' },
160
+ { status: 'primary', code: 'import', icon: 'vxe-icon-upload', content: '导入' },
161
+ { status: 'success', code: 'export', icon: 'vxe-icon-download', content: '导出' },
162
+ { status: 'warning', code: 'print', icon: 'vxe-icon-print', content: '打印' }
163
+ ]
164
+ export default {
165
+ name: 'ShTable',
166
+ components: {
167
+ importModal
168
+ },
169
+ mixins: [defaultData],
170
+ props: {
171
+ ...props
172
+ },
173
+ emits: [
174
+ 'current-change',
175
+ 'radio-change',
176
+ 'selection-change',
177
+ 'cell-click',
178
+ 'cell-dblclick',
179
+ 'header-cell-click',
180
+ 'sort-change',
181
+ 'filter-change',
182
+ 'toggle-row-expand',
183
+ 'toggle-tree-expand',
184
+ 'edit-closed',
185
+ 'edit-actived',
186
+ 'scroll',
187
+ 'custom',
188
+ 'page-change',
189
+ 'toolbar-button-click',
190
+ 'toolbar-tool-click',
191
+
192
+ 'form-submit',
193
+ 'form-reset',
194
+ 'form-edit-closed',
195
+ 'form-submit-invalid',
196
+ 'import-confirm',
197
+ 'globaloption',
198
+ 'toolbaroption'
199
+ ],
200
+ data() {
201
+ return {
202
+ // 渲染key值
203
+ renderKey: 1,
204
+ // 全选状态
205
+ isAllChecked: false,
206
+ // 半选状态
207
+ isIndeterminate: false,
208
+ // table选中keys
209
+ selectedRowKeys: [],
210
+ // table选中records
211
+ selectionRows: [],
212
+ // 表格格式化后表头
213
+ tableColumnsFixed: [],
214
+ // 表格全表搜索数据
215
+ tableFilterData: null,
216
+ // 多层转一维后表头
217
+ tableColumnsFlat: [],
218
+ // 根据表格表头生成表单项配置
219
+ tableFormItems: [],
220
+ // 表格根据表头自动生成验证规则
221
+ tableEditRules: {},
222
+ // 全局过滤关键字
223
+ tableFilterText: '',
224
+ // 表格当前高亮行
225
+ tableCurrentRowData: null,
226
+ // 导出入弹窗开关
227
+ importModal: false,
228
+ // 表格是否全屏显示状态
229
+ tableIsFullscreen: false,
230
+ // 根据表头生成行默认值
231
+ tableRowDefaultData: {}
232
+ }
233
+ },
234
+ computed: {
235
+ wrapHeight() {
236
+ return [100, '100%', 'auto'].includes(this.height) ? '100%' : 'auto'
237
+ },
238
+ tableVmConfig() {
239
+ return { size: this.size }
240
+ },
241
+ tableGlobalConfig() {
242
+ return Object.assign({}, this.globalConfigDefault, this.globalConfig)
243
+ },
244
+ tableTools() {
245
+ let tools = this.globalConfig?.tools || []
246
+ return toolsList.filter(tool => tools.includes(tool.code))
247
+ },
248
+ tableColumns() {
249
+ let defaultColumns = this.columnsConfigDefault.filter(item => this.tableGlobalConfig[item.type])
250
+ return defaultColumns.concat(this.tableColumnsFixed)
251
+ },
252
+ tableColumnConfig() {
253
+ return Object.assign({ isCurrent: false, isHover: true, resizable: true }, this.columnConfig)
254
+ },
255
+ tablePagerConfig() {
256
+ return Object.assign({ enabled: this.pagerConfig, total: 0, className: 'sh-table-footer', slots: { left: 'pagerLeft', right: 'pagerRight' } }, this.pagerConfig)
257
+ },
258
+ tableCheckboxConfig() {
259
+ let hasTree = this.columns.some(_ => _.treeNode)
260
+ return Object.assign({ range: !hasTree }, this.checkboxConfig)
261
+ },
262
+ tableTreeConfig() {
263
+ let hasTree = this.columns.some(_ => _.treeNode)
264
+ return hasTree ? Object.assign({}, this.treeConfig) : null
265
+ },
266
+ tableExportConfig() {
267
+ return Object.assign({ filename: this.tableGlobalConfig.tableName, sheetName: 'sheet1' }, this.exportConfigDefault, this.exportConfig)
268
+ },
269
+ tablePrintConfig() {
270
+ return Object.assign({ filename: this.tableGlobalConfig.tableName, sheetName: this.tableGlobalConfig.tableName }, this.printConfigDefault, this.printConfig)
271
+ },
272
+ tableEditConfig() {
273
+ return Object.assign({ enabled: !this.disabled, showStatus: !this.disabled, showUpdateStatus: !this.disabled, showInsertStatus: !this.disabled }, this.editConfig)
274
+ },
275
+ tableQueryConfig() {
276
+ // 高级查询
277
+ return Object.assign(
278
+ { data: this.queryData, items: this.tableFormItems, rules: this.tableEditRules, validConfig: this.validConfig, globalConfig: this.tableGlobalConfig, transformitem: false },
279
+ this.tableVmConfig
280
+ )
281
+ },
282
+ tableFilterConfig() {
283
+ // 模糊搜索
284
+ return Object.assign({ size: this.size, clearable: true, type: 'search', placeholder: '全局关键字搜索' }, this.tableVmConfig)
285
+ },
286
+ tableSlots() {
287
+ let disSlots = ['head', 'form', 'formLeft', 'formRight', 'toolbar', 'toolbarLeft', 'toolbarRight', 'pagerLeft', 'pagerRight']
288
+ return Object.keys(this.$slots).filter(key => !disSlots.includes(key))
289
+ }
290
+ },
291
+ watch: {
292
+ columns: {
293
+ handler(newvalue, oldValue) {
294
+ this.initTableColumns(newvalue)
295
+ },
296
+ deep: true,
297
+ immediate: true
298
+ },
299
+ dataSourse: {
300
+ handler(newvalue, oldValue) {
301
+ this.initColsDefaultValue()
302
+ this.selectionRows = []
303
+ },
304
+ immediate: true
305
+ },
306
+ editRules: {
307
+ handler(newvalue, oldValue) {
308
+ this.initEditRules(newvalue)
309
+ },
310
+ deep: true,
311
+ immediate: true
312
+ }
313
+ },
314
+ created() {
315
+ this.initCreated()
316
+ },
317
+ mounted() {},
318
+ methods: {
319
+ tableRef() {
320
+ return this.$refs.vxeGrid
321
+ },
322
+ ...methods
323
+ }
324
+ }
325
+ </script>
326
+
327
+ <style lang="scss">
328
+ @import './css/index.scss';
329
+ </style>