sh-view 1.7.6 → 2.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 (256) hide show
  1. package/.eslintrc.js +20 -21
  2. package/dist/css/227.45fab5b7.css +1 -0
  3. package/dist/css/291.e7facf7d.css +1 -0
  4. package/dist/css/299.e98df6ce.css +1 -0
  5. package/dist/css/358.e641c5d1.css +1 -0
  6. package/dist/css/534.726e6699.css +1 -0
  7. package/dist/css/769.8008ac6c.css +1 -0
  8. package/dist/css/index.2bd4fb37.css +1 -0
  9. package/dist/css/index.2bd4fb37.css.gz +0 -0
  10. package/dist/fonts/iconfont.03e5a9f9.ttf +0 -0
  11. package/dist/fonts/iconfont.03e5a9f9.ttf.gz +0 -0
  12. package/dist/fonts/ionicons.31fd4446.ttf +0 -0
  13. package/dist/fonts/ionicons.31fd4446.ttf.gz +0 -0
  14. package/dist/fonts/ionicons.d03f2836.woff2 +0 -0
  15. package/dist/fonts/ionicons.dacd136b.woff +0 -0
  16. package/dist/fonts/ionicons.dacd136b.woff.gz +0 -0
  17. package/dist/img/ionicons.6e8059e8.svg +870 -0
  18. package/dist/img/ionicons.6e8059e8.svg.gz +0 -0
  19. package/dist/js/152.588ca5b4.js +1 -0
  20. package/dist/js/165.f026fdcd.js +1 -0
  21. package/dist/js/227.6d340a71.js +1 -0
  22. package/dist/js/257.285f071f.js +1 -0
  23. package/dist/js/264.32b3a9a5.js +1 -0
  24. package/dist/js/291.e100da5e.js +1 -0
  25. package/dist/js/299.2062f9ff.js +1 -0
  26. package/dist/js/322.ff97ab5e.js +1 -0
  27. package/dist/js/333.da633859.js +1 -0
  28. package/dist/js/341.d4433549.js +1 -0
  29. package/dist/js/358.81429379.js +1 -0
  30. package/dist/js/387.7b1e3b8a.js +1 -0
  31. package/dist/js/392.c53bf6c9.js +1 -0
  32. package/dist/js/400.03e3be15.js +1 -0
  33. package/dist/js/41.fca2504e.js +1 -0
  34. package/dist/js/444.a0350517.js +1 -0
  35. package/dist/js/452.7f75d556.js +2 -0
  36. package/dist/js/452.7f75d556.js.gz +0 -0
  37. package/dist/js/497.06080ae1.js +1 -0
  38. package/dist/js/514.2ea0055a.js +1 -0
  39. package/dist/js/534.40a67536.js +1 -0
  40. package/dist/js/558.6175bf20.js +15 -0
  41. package/dist/js/558.6175bf20.js.gz +0 -0
  42. package/dist/js/586.098ab36d.js +1 -0
  43. package/dist/js/593.df7d7c2e.js +1 -0
  44. package/dist/js/601.abf6f256.js +1 -0
  45. package/dist/js/654.99b45cd4.js +18 -0
  46. package/dist/js/654.99b45cd4.js.gz +0 -0
  47. package/dist/js/668.a15a0058.js +1 -0
  48. package/dist/js/704.52e87fec.js +1 -0
  49. package/dist/js/720.aceca876.js +1 -0
  50. package/dist/js/769.1376ca7f.js +1 -0
  51. package/dist/js/875.975891f5.js +1 -0
  52. package/dist/js/89.c7317ccb.js +1 -0
  53. package/dist/js/94.d54e8b09.js +1 -0
  54. package/dist/js/chunk-vendors.e05ef0ac.js +438 -0
  55. package/dist/js/chunk-vendors.e05ef0ac.js.gz +0 -0
  56. package/dist/js/index.b31868df.js +1 -0
  57. package/dist/js/index.b31868df.js.gz +0 -0
  58. package/package.json +10 -10
  59. package/packages/assets/css/animated.scss +167 -2
  60. package/packages/assets/css/loader.scss +42 -42
  61. package/packages/assets/css/main.scss +41 -21
  62. package/packages/assets/css/theme.scss +83 -44
  63. package/packages/components/global-components/sh-alert/index.vue +173 -0
  64. package/packages/components/global-components/sh-badge/index.vue +227 -0
  65. package/packages/components/global-components/sh-card/index.vue +140 -122
  66. package/packages/components/global-components/sh-code-editor/index.vue +260 -260
  67. package/packages/components/global-components/sh-col/css/index.scss +76 -0
  68. package/packages/components/global-components/sh-col/index.vue +83 -0
  69. package/packages/components/global-components/sh-corner/index.vue +1 -9
  70. package/packages/components/global-components/sh-count-to/index.vue +102 -46
  71. package/packages/components/global-components/sh-date/index.vue +40 -0
  72. package/packages/components/global-components/sh-drawer/index.vue +518 -0
  73. package/packages/components/global-components/sh-drawer/scrollbar.js +76 -0
  74. package/packages/components/global-components/sh-empty/index.vue +43 -43
  75. package/packages/components/global-components/{sh-vxe-form → sh-form}/css/index.scss +6 -6
  76. package/packages/components/global-components/{sh-vxe-form → sh-form}/index.vue +114 -115
  77. package/packages/components/global-components/{sh-vxe-form → sh-form}/js/methods.js +146 -157
  78. package/packages/components/global-components/{sh-vxe-form → sh-form}/mixin/defaultData.js +32 -33
  79. package/packages/components/global-components/sh-header/index.vue +293 -269
  80. package/packages/components/global-components/sh-icon/css/default/fonts/ionicons.svg +870 -0
  81. package/packages/components/global-components/sh-icon/css/default/fonts/ionicons.ttf +0 -0
  82. package/packages/components/global-components/sh-icon/css/default/fonts/ionicons.woff +0 -0
  83. package/packages/components/global-components/sh-icon/css/default/fonts/ionicons.woff2 +0 -0
  84. package/packages/components/global-components/sh-icon/css/default/icons.scss +2583 -0
  85. package/packages/components/global-components/sh-icon/css/default/index.scss +27 -0
  86. package/packages/components/global-components/sh-icon/css/font/fonts/iconfont.js +1 -0
  87. package/packages/components/global-components/sh-icon/css/font/fonts/iconfont.json +247 -0
  88. package/packages/components/global-components/sh-icon/css/font/fonts/iconfont.ttf +0 -0
  89. package/packages/components/global-components/sh-icon/css/font/fonts/iconfont.woff +0 -0
  90. package/packages/components/global-components/sh-icon/css/font/fonts/iconfont.woff2 +0 -0
  91. package/packages/components/global-components/sh-icon/css/font/icons.scss +135 -0
  92. package/packages/components/global-components/sh-icon/css/font/index.scss +16 -0
  93. package/packages/components/global-components/sh-icon/icon-default.vue +32 -0
  94. package/packages/components/global-components/sh-icon/{icons.vue → icon-font.vue} +32 -32
  95. package/packages/components/global-components/sh-icon/index.vue +28 -27
  96. package/packages/components/global-components/sh-image/index.vue +123 -0
  97. package/packages/components/global-components/sh-list/index.vue +141 -0
  98. package/packages/components/global-components/sh-loading/index.vue +49 -42
  99. package/packages/components/global-components/{sh-vxe-modal → sh-modal}/index.vue +209 -209
  100. package/packages/components/global-components/sh-noticebar/index.vue +201 -201
  101. package/packages/components/global-components/sh-poptip/index.vue +479 -0
  102. package/packages/components/global-components/sh-poptip/popper.js +115 -0
  103. package/packages/components/global-components/sh-progress/index.vue +290 -0
  104. package/packages/components/global-components/sh-pull-refresh/index.vue +290 -290
  105. package/packages/components/global-components/{sh-vxe-query → sh-query}/index.vue +317 -310
  106. package/packages/components/global-components/sh-result/index.vue +110 -88
  107. package/packages/components/global-components/sh-row/css/index.scss +21 -0
  108. package/packages/components/global-components/sh-row/index.vue +63 -0
  109. package/packages/components/global-components/sh-split/components/trigger.vue +33 -0
  110. package/packages/components/global-components/sh-split/index.vue +334 -142
  111. package/packages/components/global-components/sh-table/components/importModal.vue +351 -0
  112. package/packages/components/global-components/{sh-vxe-table → sh-table}/css/index.scss +4 -22
  113. package/packages/components/global-components/{sh-vxe-table → sh-table}/index.vue +329 -351
  114. package/packages/components/global-components/{sh-vxe-table → sh-table}/js/methods.js +33 -88
  115. package/packages/components/global-components/{sh-vxe-table → sh-table}/js/props.js +304 -313
  116. package/packages/components/global-components/{sh-vxe-table → sh-table}/mixin/defaultData.js +94 -116
  117. package/packages/components/global-components/sh-tabs/index.vue +322 -0
  118. package/packages/components/global-components/sh-tag/index.vue +163 -0
  119. package/packages/components/global-components/{sh-vxe-toolbar → sh-toolbar}/index.vue +177 -172
  120. package/packages/components/global-components/sh-tree/components/table-tree.vue +280 -0
  121. package/packages/components/global-components/sh-tree/css/index.scss +54 -0
  122. package/packages/components/global-components/sh-tree/index.vue +195 -0
  123. package/packages/components/global-components/sh-tree/mixin/treeProps.js +124 -0
  124. package/packages/components/global-components/sh-upload/index.vue +278 -275
  125. package/packages/components/global-components/sh-water-fall/index.vue +87 -87
  126. package/packages/components/index.js +85 -59
  127. package/packages/components/other-components/sh-cron-modal/css/index.scss +2 -2
  128. package/packages/components/other-components/sh-menu-card/index.vue +224 -224
  129. package/packages/css/index.js +4 -6
  130. package/packages/directive/index.js +19 -19
  131. package/packages/directive/module/click-out.js +14 -0
  132. package/packages/directive/module/draggable.js +42 -42
  133. package/packages/directive/module/line-clamp.js +22 -0
  134. package/packages/directive/module/prevent-click.js +18 -0
  135. package/packages/directive/module/resize.js +19 -0
  136. package/packages/directive/module/ripple.js +166 -0
  137. package/packages/index.js +39 -40
  138. package/packages/utils/transfer-queue.js +12 -0
  139. package/packages/vxeTable/css/index.scss +12 -98
  140. package/packages/vxeTable/css/variable.scss +7 -265
  141. package/packages/vxeTable/index.js +184 -183
  142. package/packages/vxeTable/plugins/export.js +450 -0
  143. package/packages/vxeTable/render/cell/vxe-render-checkgroup.vue +36 -36
  144. package/packages/vxeTable/render/cell/vxe-render-goption.vue +94 -93
  145. package/packages/vxeTable/render/cell/vxe-render-img.vue +21 -28
  146. package/packages/vxeTable/render/cell/vxe-render-input.vue +51 -51
  147. package/packages/vxeTable/render/cell/vxe-render-progress.vue +19 -19
  148. package/packages/vxeTable/render/cell/vxe-render-radiogroup.vue +36 -36
  149. package/packages/vxeTable/render/cell/vxe-render-select.vue +36 -36
  150. package/packages/vxeTable/render/cell/vxe-render-tree.vue +59 -59
  151. package/packages/vxeTable/render/globalRenders.jsx +498 -491
  152. package/packages/assets/icons/demo.css +0 -539
  153. package/packages/assets/icons/iconfont.css +0 -415
  154. package/packages/assets/icons/iconfont.js +0 -1
  155. package/packages/assets/icons/iconfont.json +0 -709
  156. package/packages/assets/icons/iconfont.ttf +0 -0
  157. package/packages/assets/icons/iconfont.woff +0 -0
  158. package/packages/assets/icons/iconfont.woff2 +0 -0
  159. package/packages/assets/img/image-error.png +0 -0
  160. package/packages/assets/img/square-image.png +0 -0
  161. package/packages/components/global-components/sh-iv-form/components/iv-group-item.vue +0 -57
  162. package/packages/components/global-components/sh-iv-form/components/iv-single-item.vue +0 -76
  163. package/packages/components/global-components/sh-iv-form/index.vue +0 -255
  164. package/packages/components/global-components/sh-vxe-list/index.vue +0 -149
  165. package/packages/components/global-components/sh-vxe-table/components/importModal.vue +0 -377
  166. package/packages/components/global-components/sh-vxe-tree/components/table-tree.vue +0 -233
  167. package/packages/components/global-components/sh-vxe-tree/css/index.scss +0 -20
  168. package/packages/components/global-components/sh-vxe-tree/index.vue +0 -85
  169. package/packages/components/global-components/sh-vxe-tree/js/props.js +0 -120
  170. package/packages/components/global-components/sh-vxe-tree/js/treeMethods.js +0 -169
  171. package/packages/components/global-components/sh-vxe-tree/mixin/defaultData.js +0 -54
  172. package/packages/components/global-components/sh-vxe-tree/vxe-direct-tree.vue +0 -203
  173. package/packages/components/global-components/sh-vxe-tree/vxe-select-tree.vue +0 -291
  174. package/packages/components/other-components/sh-markdown/tinymce/langs/ar.js +0 -7
  175. package/packages/components/other-components/sh-markdown/tinymce/langs/az.js +0 -7
  176. package/packages/components/other-components/sh-markdown/tinymce/langs/bg_BG.js +0 -7
  177. package/packages/components/other-components/sh-markdown/tinymce/langs/bn_BD.js +0 -7
  178. package/packages/components/other-components/sh-markdown/tinymce/langs/ca.js +0 -7
  179. package/packages/components/other-components/sh-markdown/tinymce/langs/cs.js +0 -7
  180. package/packages/components/other-components/sh-markdown/tinymce/langs/cy.js +0 -7
  181. package/packages/components/other-components/sh-markdown/tinymce/langs/da.js +0 -7
  182. package/packages/components/other-components/sh-markdown/tinymce/langs/de.js +0 -7
  183. package/packages/components/other-components/sh-markdown/tinymce/langs/dv.js +0 -7
  184. package/packages/components/other-components/sh-markdown/tinymce/langs/el.js +0 -7
  185. package/packages/components/other-components/sh-markdown/tinymce/langs/eo.js +0 -7
  186. package/packages/components/other-components/sh-markdown/tinymce/langs/es.js +0 -7
  187. package/packages/components/other-components/sh-markdown/tinymce/langs/es_MX.js +0 -7
  188. package/packages/components/other-components/sh-markdown/tinymce/langs/et.js +0 -7
  189. package/packages/components/other-components/sh-markdown/tinymce/langs/eu.js +0 -7
  190. package/packages/components/other-components/sh-markdown/tinymce/langs/fa.js +0 -7
  191. package/packages/components/other-components/sh-markdown/tinymce/langs/fi.js +0 -7
  192. package/packages/components/other-components/sh-markdown/tinymce/langs/fr_FR.js +0 -7
  193. package/packages/components/other-components/sh-markdown/tinymce/langs/ga.js +0 -7
  194. package/packages/components/other-components/sh-markdown/tinymce/langs/gl.js +0 -7
  195. package/packages/components/other-components/sh-markdown/tinymce/langs/he_IL.js +0 -7
  196. package/packages/components/other-components/sh-markdown/tinymce/langs/hi.js +0 -7
  197. package/packages/components/other-components/sh-markdown/tinymce/langs/hr.js +0 -7
  198. package/packages/components/other-components/sh-markdown/tinymce/langs/hu_HU.js +0 -7
  199. package/packages/components/other-components/sh-markdown/tinymce/langs/hy.js +0 -7
  200. package/packages/components/other-components/sh-markdown/tinymce/langs/id.js +0 -7
  201. package/packages/components/other-components/sh-markdown/tinymce/langs/is_IS.js +0 -7
  202. package/packages/components/other-components/sh-markdown/tinymce/langs/it.js +0 -7
  203. package/packages/components/other-components/sh-markdown/tinymce/langs/ja.js +0 -7
  204. package/packages/components/other-components/sh-markdown/tinymce/langs/kab.js +0 -7
  205. package/packages/components/other-components/sh-markdown/tinymce/langs/kk.js +0 -7
  206. package/packages/components/other-components/sh-markdown/tinymce/langs/ko_KR.js +0 -7
  207. package/packages/components/other-components/sh-markdown/tinymce/langs/ku.js +0 -7
  208. package/packages/components/other-components/sh-markdown/tinymce/langs/lt.js +0 -7
  209. package/packages/components/other-components/sh-markdown/tinymce/langs/lv.js +0 -7
  210. package/packages/components/other-components/sh-markdown/tinymce/langs/nb_NO.js +0 -7
  211. package/packages/components/other-components/sh-markdown/tinymce/langs/ne.js +0 -7
  212. package/packages/components/other-components/sh-markdown/tinymce/langs/nl.js +0 -7
  213. package/packages/components/other-components/sh-markdown/tinymce/langs/nl_BE.js +0 -7
  214. package/packages/components/other-components/sh-markdown/tinymce/langs/oc.js +0 -7
  215. package/packages/components/other-components/sh-markdown/tinymce/langs/pl.js +0 -7
  216. package/packages/components/other-components/sh-markdown/tinymce/langs/pt_BR.js +0 -7
  217. package/packages/components/other-components/sh-markdown/tinymce/langs/ro.js +0 -7
  218. package/packages/components/other-components/sh-markdown/tinymce/langs/ru.js +0 -7
  219. package/packages/components/other-components/sh-markdown/tinymce/langs/sk.js +0 -7
  220. package/packages/components/other-components/sh-markdown/tinymce/langs/sl_SI.js +0 -7
  221. package/packages/components/other-components/sh-markdown/tinymce/langs/sq.js +0 -7
  222. package/packages/components/other-components/sh-markdown/tinymce/langs/sr.js +0 -7
  223. package/packages/components/other-components/sh-markdown/tinymce/langs/sv_SE.js +0 -7
  224. package/packages/components/other-components/sh-markdown/tinymce/langs/ta.js +0 -7
  225. package/packages/components/other-components/sh-markdown/tinymce/langs/tg.js +0 -7
  226. package/packages/components/other-components/sh-markdown/tinymce/langs/th_TH.js +0 -7
  227. package/packages/components/other-components/sh-markdown/tinymce/langs/tr.js +0 -7
  228. package/packages/components/other-components/sh-markdown/tinymce/langs/ug.js +0 -7
  229. package/packages/components/other-components/sh-markdown/tinymce/langs/uk.js +0 -7
  230. package/packages/components/other-components/sh-markdown/tinymce/langs/vi.js +0 -7
  231. package/packages/components/other-components/sh-markdown/tinymce/skins/content/dark/content.css +0 -72
  232. package/packages/components/other-components/sh-markdown/tinymce/skins/content/dark/content.min.css +0 -7
  233. package/packages/components/other-components/sh-markdown/tinymce/skins/content/default/content.min.css +0 -7
  234. package/packages/components/other-components/sh-markdown/tinymce/skins/content/document/content.css +0 -72
  235. package/packages/components/other-components/sh-markdown/tinymce/skins/content/document/content.min.css +0 -7
  236. package/packages/components/other-components/sh-markdown/tinymce/skins/content/writer/content.css +0 -68
  237. package/packages/components/other-components/sh-markdown/tinymce/skins/content/writer/content.min.css +0 -7
  238. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/content.css +0 -714
  239. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/content.inline.css +0 -726
  240. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/content.inline.min.css +0 -7
  241. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/content.min.css +0 -7
  242. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/content.mobile.css +0 -29
  243. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/content.mobile.min.css +0 -7
  244. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff +0 -0
  245. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/skin.css +0 -3047
  246. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/skin.min.css +0 -7
  247. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/skin.mobile.css +0 -673
  248. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/skin.mobile.min.css +0 -7
  249. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/skin.shadowdom.css +0 -37
  250. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css +0 -7
  251. package/packages/directive/directives.js +0 -27
  252. package/packages/iview/css/index.scss +0 -32
  253. package/packages/iview/index.js +0 -25
  254. /package/packages/components/global-components/{sh-vxe-form → sh-form}/components/form-item.vue +0 -0
  255. /package/packages/components/global-components/{sh-vxe-form → sh-form}/js/props.js +0 -0
  256. /package/packages/components/global-components/{sh-vxe-table → sh-table}/js/excel_to_json.js +0 -0
@@ -0,0 +1,351 @@
1
+ <template>
2
+ <sh-modal :visible="visible" title="导入报表" width="900" :loading="modalLoading" :show-footer="false" :transfer="false" @close="onModalClose">
3
+ <div class="import-template-top">
4
+ <transition name="fade">
5
+ <sh-progress v-if="showProgress" :percent="progressPercent" :stroke-width="2">
6
+ <template v-if="progressPercent === 100"><span>上传成功</span></template>
7
+ </sh-progress>
8
+ </transition>
9
+ </div>
10
+ <div class="import-template-head">
11
+ <sh-button :size="size" @click="handleDownloadTemplateBtn">下载导入模板</sh-button>
12
+ <sh-button :size="size" status="primary" @click="handleImportFileBtn">选择导入文件</sh-button>
13
+ <div class="floatright">
14
+ <sh-poptip v-if="importErrorData.length > 0" trigger="click" title="错误信息" placement="bottom-end">
15
+ <sh-button :size="size" status="danger">
16
+ 共发现 <strong>{{ importErrorData.length }}</strong> 条不符合规范数据
17
+ </sh-button>
18
+ <template #content>
19
+ <div class="import-template-error-list">
20
+ <div v-for="(errData, errDataIndex) in importErrorData" :key="errDataIndex" class="error-item">
21
+ 第 <strong class="red">{{ errData.rowIndex }}</strong> 行,错误:<span class="red">{{ errData.errMsg }}</span>
22
+ </div>
23
+ </div>
24
+ </template>
25
+ </sh-poptip>
26
+ </div>
27
+ </div>
28
+ <div class="import-template-body">
29
+ <sh-table
30
+ ref="shtable"
31
+ :height="height"
32
+ :size="size"
33
+ :columns="tableColumns"
34
+ :data-sourse="importTableData"
35
+ :global-config="tableGlobalConfig"
36
+ :edit-rules="importRules"
37
+ :pager-config="false"
38
+ :disabled="false"></sh-table>
39
+ </div>
40
+ <div class="import-template-foot">
41
+ <div class="foot-left"></div>
42
+ <div class="foot-right">
43
+ <sh-button :size="size" @click="onModalClose">取消</sh-button>
44
+ <sh-button :size="size" status="primary" @click="handleImportDataBtn('all')">全部导入</sh-button>
45
+ <sh-button v-if="tableGlobalConfig.checkbox || tableGlobalConfig.radio" :size="size" status="warning" @click="handleImportDataBtn('select')">导入选中</sh-button>
46
+ </div>
47
+ </div>
48
+ </sh-modal>
49
+ </template>
50
+
51
+ <script>
52
+ import excelToJson from '../js/excel_to_json'
53
+ import ExcelJS from 'exceljs'
54
+ export default {
55
+ name: 'TableImport',
56
+ props: {
57
+ visible: {
58
+ type: Boolean
59
+ },
60
+ columns: {
61
+ type: Array
62
+ },
63
+ height: {
64
+ type: [Number, String],
65
+ default: 360
66
+ },
67
+ needValidate: {
68
+ type: Boolean
69
+ },
70
+ importRules: {
71
+ type: Object,
72
+ default() {
73
+ return {}
74
+ }
75
+ },
76
+ importConfig: {
77
+ type: Object,
78
+ default() {
79
+ return {}
80
+ }
81
+ },
82
+ globalConfig: {
83
+ type: Object,
84
+ default() {
85
+ return {}
86
+ }
87
+ },
88
+ size: {
89
+ type: String,
90
+ default: 'mini' // medium / small / mini
91
+ },
92
+ importFileCallback: {
93
+ type: Function
94
+ },
95
+ importFileFinished: {
96
+ type: Function
97
+ },
98
+ downloadTemplateCallback: {
99
+ type: Function
100
+ },
101
+ downloadTemplateFinished: {
102
+ type: Function
103
+ }
104
+ },
105
+ emits: ['confirm', 'update:visible'],
106
+ data() {
107
+ return {
108
+ importTableData: [],
109
+ importErrorData: [],
110
+ modalLoading: false,
111
+ showProgress: false,
112
+ progressPercent: 0
113
+ }
114
+ },
115
+ computed: {
116
+ tableGlobalConfig() {
117
+ return Object.assign({ checkbox: false, seq: true, zoom: false, title: true, tableName: '导入预览' }, this.globalConfig)
118
+ },
119
+ tableColumns() {
120
+ return this.columns.filter(item => !(['seq', 'checkbox', 'radio'].includes(item.type) || item.renderName === '$vGlobalOption'))
121
+ }
122
+ },
123
+ watch: {},
124
+ created() {
125
+ this.initCreated()
126
+ },
127
+ mounted() {},
128
+ beforeUnmount() {},
129
+ methods: {
130
+ // 初始化
131
+ initCreated() {
132
+ this.showProgress = false
133
+ this.progressPercent = 0
134
+ this.importTableData = []
135
+ },
136
+ // 弹窗关闭
137
+ onModalClose() {
138
+ this.$emit('update:visible', false)
139
+ },
140
+ // 确认导入数据按钮
141
+ async handleImportDataBtn(type = 'all') {
142
+ let importData = type === 'all' ? this.importTableData : this.$refs.shtable.getSelectionData()
143
+ if (!importData || !Array.isArray(importData) || importData.length < 1) {
144
+ this.msginfo('未导入数据')
145
+ return false
146
+ }
147
+ if (this.needValidate) {
148
+ let validateErrMap = await this.handleImportDataValidate(importData)
149
+ if (validateErrMap) {
150
+ this.msgerror('导入校验失败,请检查数据')
151
+ return validateErrMap
152
+ }
153
+ }
154
+ this.$emit('confirm', importData)
155
+ this.onModalClose()
156
+ },
157
+ // 导入数据验证
158
+ async handleImportDataValidate(rows) {
159
+ return this.$refs.shtable.validate(rows)
160
+ },
161
+ // 下载导入模板按钮
162
+ handleDownloadTemplateBtn() {
163
+ const parentTable = this.$refs.shtable.tableRef()
164
+ if (typeof this.downloadTemplateCallback === 'function') {
165
+ this.downloadTemplateCallback()
166
+ }
167
+ let defaultOption = {
168
+ filename: '模板',
169
+ sheetName: this.globalConfig.filename || '模板',
170
+ type: 'xlsx',
171
+ original: false,
172
+ download: true,
173
+ message: false,
174
+ useStyle: false,
175
+ columns: parentTable.getColumns().filter(item => item.type !== 'seq'),
176
+ data: [],
177
+ afterExportMethod: options => {
178
+ this.handleDownloadTemplateFinished(options)
179
+ }
180
+ }
181
+ parentTable.exportData(Object.assign(defaultOption, this.importOption))
182
+ },
183
+ // 下载导入模板成功回调
184
+ handleDownloadTemplateFinished(options) {
185
+ if (typeof this.downloadTemplateFinished === 'function') {
186
+ this.downloadTemplateFinished(options)
187
+ }
188
+ this.msgsuccess('下载模板完成!')
189
+ },
190
+ // 选择导入文件按钮
191
+ async handleImportFileBtn() {
192
+ try {
193
+ const { file } = await this.$vTable.readFile({
194
+ types: ['xlsx', 'xls']
195
+ })
196
+ if (typeof this.importFileCallback === 'function') {
197
+ this.importFileCallback(file)
198
+ }
199
+ let fileRes = await this.readFile(file)
200
+ let { results, errDatas } = this.dealImportTableData(this.tableColumns, fileRes)
201
+ this.importTableData = results
202
+ this.importErrorData = errDatas
203
+ setTimeout(() => {
204
+ this.showProgress = false
205
+ }, 2000)
206
+ if (typeof this.importFileFinished === 'function') {
207
+ this.importFileFinished(options)
208
+ }
209
+ this.msgsuccess('导入完成!')
210
+ } catch (e) {
211
+ this.msgerror(e.message || e)
212
+ }
213
+ },
214
+ // 读取文件
215
+ async readFile(file) {
216
+ return new Promise((resolve, reject) => {
217
+ const reader = new FileReader()
218
+ reader.readAsArrayBuffer(file)
219
+ reader.onloadstart = e => {
220
+ this.modalLoading = true
221
+ this.showProgress = true
222
+ }
223
+ reader.onprogress = e => {
224
+ this.progressPercent = Math.round((e.loaded / e.total) * 100)
225
+ }
226
+ reader.onerror = e => {
227
+ reject(new Error('文件读取出错'))
228
+ }
229
+ reader.onload = e => {
230
+ this.modalLoading = false
231
+ const workbook = new ExcelJS.Workbook()
232
+ const data = e.target.result
233
+ workbook.xlsx.load(data).then(wb => {
234
+ const firstSheet = wb.worksheets[0]
235
+ if (!firstSheet) {
236
+ reject(new Error('文件读取出错'))
237
+ }
238
+ let headerRowCount = 1
239
+ if (firstSheet.views?.length) {
240
+ const frozenViews = firstSheet.views.filter(vm => vm.state === 'frozen')
241
+ if (frozenViews.length) headerRowCount = frozenViews[0].ySplit
242
+ }
243
+ const sheetValues = firstSheet.getSheetValues()
244
+ const dataValues = sheetValues.filter(a => !!a).slice(headerRowCount)
245
+ resolve(dataValues)
246
+ })
247
+ }
248
+ })
249
+ },
250
+ // 根据表格读取数据生成表格数据
251
+ dealImportTableData(columns, records) {
252
+ const { $vUtils } = this
253
+ let fields = this.generateColumnsAll(columns)
254
+ let errDatas = []
255
+ let results = records.map((row, rowIndex) => {
256
+ const item = {}
257
+ row.forEach((cellValue, cIndex) => {
258
+ let column = fields[cIndex - 1]
259
+ const { field, title, renderName, renderProps } = column
260
+ let fieldValue = cellValue
261
+ let split = renderProps?.split || ','
262
+ let valueKey = renderName === '$vTree' ? renderProps?.nodeKey || 'id' : 'value'
263
+ let labelKey = renderProps?.labelField || 'label'
264
+ switch (renderName) {
265
+ case '$vSelect':
266
+ case '$vSwitch':
267
+ case '$vCheckgroup':
268
+ case '$vRadiogroup':
269
+ case '$vTree':
270
+ if (cellValue && renderProps.options && Array.isArray(renderProps.options)) {
271
+ // 如果匹配到选择项则保留,否则删除掉不规范数据
272
+ // 判断导入值为数据源的key or value 去匹配
273
+ if (renderProps.multiple || ['$vSelect', '$vCheckgroup', '$vTree'].includes(renderName)) {
274
+ let oriArray = cellValue ? cellValue.split(split).filter(_ => _ && _ !== 'undefined') : []
275
+ let values = oriArray.map(orv => {
276
+ let opt = renderProps.options.find(opt => String(orv) === String(opt[valueKey]) || String(orv) === opt[labelKey])
277
+ return opt[valueKey]
278
+ })
279
+ fieldValue = values.join(split)
280
+ } else {
281
+ let opt = renderProps.options.find(opt => String(cellValue) === String(opt[valueKey]) || String(cellValue) === opt[labelKey])
282
+ fieldValue = opt[valueKey]
283
+ }
284
+ if (!fieldValue || fieldValue.includes(undefined)) {
285
+ errDatas.push({ rowIndex: rowIndex + 1, errMsg: `字段【${title}】不符合数据源规范,已被清空` })
286
+ fieldValue = ''
287
+ }
288
+ }
289
+ break
290
+ default:
291
+ break
292
+ }
293
+ $vUtils.set(item, field, fieldValue)
294
+ })
295
+ return item
296
+ })
297
+ return { results, errDatas }
298
+ },
299
+ // 生成全表头
300
+ generateColumnsAll(columns, resultColumns = []) {
301
+ columns.forEach((column, index) => {
302
+ if (column.children && Array.isArray(column.children) && column.children.length) {
303
+ this.generateColumnsAll(column.children, resultColumns)
304
+ } else {
305
+ if (column.field) {
306
+ resultColumns.push({
307
+ title: column.title,
308
+ field: column.field,
309
+ renderName: column.renderName,
310
+ renderProps: column.renderProps
311
+ })
312
+ }
313
+ }
314
+ })
315
+ return resultColumns
316
+ }
317
+ }
318
+ }
319
+ </script>
320
+
321
+ <style lang="scss" scoped>
322
+ .import-template-head {
323
+ + .import-template-body,
324
+ + .import-template-foot {
325
+ margin-top: 10px;
326
+ }
327
+ .floatright {
328
+ float: right;
329
+ }
330
+ }
331
+ .import-template-body {
332
+ + .import-template-foot,
333
+ + .import-template-error {
334
+ margin-top: 10px;
335
+ }
336
+ }
337
+ .import-template-foot {
338
+ display: flex;
339
+ align-items: center;
340
+ justify-content: space-between;
341
+ }
342
+ .import-template-error-list {
343
+ max-height: 300px;
344
+ overflow: auto;
345
+ font-size: 13px;
346
+ .error-item {
347
+ display: block;
348
+ margin-bottom: 5px;
349
+ }
350
+ }
351
+ </style>
@@ -1,5 +1,7 @@
1
1
  .sh-vxe-table{
2
2
  position: relative;
3
+ width: 100%;
4
+ overflow: hidden;
3
5
  // 透明表格
4
6
  &.sh-table-ghost{
5
7
  background: transparent;
@@ -14,7 +16,7 @@
14
16
  height: 40px;
15
17
  padding: 5px;
16
18
  &.vxe-pager.is--perfect{
17
- border: 1px solid var(--border-color);
19
+ border: 1px solid var(--vxe-table-border-color);
18
20
  border-top: none;
19
21
  }
20
22
  .vxe-pager--wrapper{
@@ -49,29 +51,9 @@
49
51
  .sh-table-toolbar-right{
50
52
  }
51
53
  }
52
- .vxe-grid{
53
- .vxe-table{
54
- &.vxe-table--render-default{
55
- .vxe-table--render-wrapper{
56
- .vxe-cell{
57
- .ivu-progress-inner{
58
- vertical-align: baseline;
59
- background-color: var(--border-color);
60
- .ivu-progress-inner-text{
61
- font-size: inherit;
62
- line-height: 1;
63
- vertical-align: baseline;
64
- }
65
- }
66
- }
67
- }
68
- }
69
- }
70
-
71
- }
72
54
  // 关键词搜索高亮样式
73
55
  .sh-keyword-lighten{
74
- background-color: var(--theme-weak-color);
56
+ background-color: var(--vxe-primary-lighten-color);
75
57
  }
76
58
  }
77
59