n20-common-lib 1.2.46 → 1.3.2

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 (316) hide show
  1. package/package.json +17 -2
  2. package/src/assets/css/_coreLib.scss +1 -0
  3. package/src/assets/css/alert.scss +31 -0
  4. package/src/assets/css/cl-anchor.scss +18 -9
  5. package/src/assets/css/cl-approve-card.scss +12 -2
  6. package/src/assets/css/cl-dialog.scss +16 -1
  7. package/src/assets/css/cl-drag-list.scss +4 -2
  8. package/src/assets/css/cl-expandable-pane.scss +15 -3
  9. package/src/assets/css/cl-expandable.scss +5 -2
  10. package/src/assets/css/cl-file-upload-table.scss +22 -1
  11. package/src/assets/css/cl-form-item.scss +102 -8
  12. package/src/assets/css/cl-message.scss +87 -2
  13. package/src/assets/css/cl-pagination.scss +3 -1
  14. package/src/assets/css/cl-showcolumn.scss +18 -1
  15. package/src/assets/css/cl-statis.scss +14 -1
  16. package/src/assets/css/cl-tertiary-tab.scss +4 -2
  17. package/src/assets/css/cl-upload.scss +7 -0
  18. package/src/assets/css/el-button.scss +24 -9
  19. package/src/assets/css/el-table.scss +18 -0
  20. package/src/assets/css/element.dev.scss +1 -0
  21. package/src/assets/css/font-icon.scss +0 -1
  22. package/src/assets/css/normalize.scss +6 -6
  23. package/src/assets/css/plain-text.scss +138 -0
  24. package/src/assets/css/title-pop.scss +20 -1
  25. package/src/assets/svg/404.svg +1 -0
  26. package/src/assets/svg/addFile.svg +32 -0
  27. package/src/assets/svg/bug.svg +1 -0
  28. package/src/assets/svg/chart.svg +1 -0
  29. package/src/assets/svg/clipboard.svg +1 -0
  30. package/src/assets/svg/component.svg +1 -0
  31. package/src/assets/svg/dashboard.svg +1 -0
  32. package/src/assets/svg/deleteFile.svg +28 -0
  33. package/src/assets/svg/documentation.svg +1 -0
  34. package/src/assets/svg/drag.svg +1 -0
  35. package/src/assets/svg/edit.svg +1 -0
  36. package/src/assets/svg/education.svg +1 -0
  37. package/src/assets/svg/email.svg +1 -0
  38. package/src/assets/svg/example.svg +1 -0
  39. package/src/assets/svg/excel.svg +1 -0
  40. package/src/assets/svg/exit-fullscreen.svg +1 -0
  41. package/src/assets/svg/eye-open.svg +1 -0
  42. package/src/assets/svg/eye.svg +1 -0
  43. package/src/assets/svg/favorite.svg +1 -0
  44. package/src/assets/svg/favorite_active.svg +1 -0
  45. package/src/assets/svg/favorite_x400.svg +1 -0
  46. package/src/assets/svg/favorite_x400_active.svg +1 -0
  47. package/src/assets/svg/favorite_x400_blank.svg +1 -0
  48. package/src/assets/svg/filter.svg +16 -0
  49. package/src/assets/svg/filter@2x.png +0 -0
  50. package/src/assets/svg/filterActive.svg +16 -0
  51. package/src/assets/svg/filterClose@2x.png +0 -0
  52. package/src/assets/svg/form.svg +1 -0
  53. package/src/assets/svg/fullscreen.svg +1 -0
  54. package/src/assets/svg/guide.svg +1 -0
  55. package/src/assets/svg/hourglass.svg +19 -0
  56. package/src/assets/svg/icon.svg +1 -0
  57. package/src/assets/svg/international.svg +1 -0
  58. package/src/assets/svg/language.svg +1 -0
  59. package/src/assets/svg/left-dis.svg +1 -0
  60. package/src/assets/svg/left.svg +1 -0
  61. package/src/assets/svg/link.svg +1 -0
  62. package/src/assets/svg/list.svg +1 -0
  63. package/src/assets/svg/lock.svg +1 -0
  64. package/src/assets/svg/message-t.svg +1 -0
  65. package/src/assets/svg/money.svg +1 -0
  66. package/src/assets/svg/money3.svg +1 -0
  67. package/src/assets/svg/money4.svg +1 -0
  68. package/src/assets/svg/moneyTwo.svg +1 -0
  69. package/src/assets/svg/msg_white.svg +1 -0
  70. package/src/assets/svg/nested.svg +1 -0
  71. package/src/assets/svg/newsearch.svg +19 -0
  72. package/src/assets/svg/password.svg +1 -0
  73. package/src/assets/svg/pdf.svg +1 -0
  74. package/src/assets/svg/people.svg +1 -0
  75. package/src/assets/svg/peoples.svg +1 -0
  76. package/src/assets/svg/phone.svg +1 -0
  77. package/src/assets/svg/phone_msg.svg +1 -0
  78. package/src/assets/svg/qq.svg +1 -0
  79. package/src/assets/svg/right-dis.svg +1 -0
  80. package/src/assets/svg/right.svg +1 -0
  81. package/src/assets/svg/search.svg +1 -0
  82. package/src/assets/svg/searchActive.svg +19 -0
  83. package/src/assets/svg/shopping.svg +1 -0
  84. package/src/assets/svg/size.svg +1 -0
  85. package/src/assets/svg/skill.svg +1 -0
  86. package/src/assets/svg/star.svg +1 -0
  87. package/src/assets/svg/steam.svg +1 -0
  88. package/src/assets/svg/tab.svg +1 -0
  89. package/src/assets/svg/table.svg +1 -0
  90. package/src/assets/svg/theme.svg +1 -0
  91. package/src/assets/svg/tree-table.svg +1 -0
  92. package/src/assets/svg/tree.svg +1 -0
  93. package/src/assets/svg/user.svg +1 -0
  94. package/src/assets/svg/wechat.svg +1 -0
  95. package/src/assets/svg/z-left-2-dis.svg +1 -0
  96. package/src/assets/svg/z-left-2.svg +1 -0
  97. package/src/assets/svg/z-right-2-dis.svg +1 -0
  98. package/src/assets/svg/z-right-2.svg +1 -0
  99. package/src/assets/svg/z-right.svg +1 -0
  100. package/src/assets/svg/zip.svg +1 -0
  101. package/src/components/ApprovalButtons/index.vue +16 -9
  102. package/src/components/ApprovalCard/index.vue +18 -14
  103. package/src/components/Button/button-group.vue +52 -48
  104. package/src/components/Button/icon-group-button.vue +2 -0
  105. package/src/components/ChildRange/index.vue +202 -0
  106. package/src/components/ECharts/define.js +74 -0
  107. package/src/components/ECharts/index.vue +163 -0
  108. package/src/components/ECharts/mixins/resize.js +56 -0
  109. package/src/components/Empty/img/400.svg +102 -0
  110. package/src/components/Empty/img/401.svg +102 -0
  111. package/src/components/Empty/img/403.svg +102 -0
  112. package/src/components/Empty/img/405.svg +102 -0
  113. package/src/components/Empty/img/901.svg +96 -0
  114. package/src/components/Empty/img/902.svg +96 -0
  115. package/src/components/Empty/img/903.svg +96 -0
  116. package/src/components/Empty/img/904.svg +96 -0
  117. package/src/components/Empty/img/905.svg +96 -0
  118. package/src/components/Empty/img/906.svg +96 -0
  119. package/src/components/Empty/img/907.svg +96 -0
  120. package/src/components/Empty/index.vue +55 -0
  121. package/src/components/Expandable/main.vue +4 -1
  122. package/src/components/FileImport/index.vue +201 -0
  123. package/src/components/FileUploadTable/index.vue +15 -10
  124. package/src/components/Filters/index.vue +2 -2
  125. package/src/components/Filters/indexO.vue +1 -1
  126. package/src/components/InputSearch/index.vue +1 -1
  127. package/src/components/LoginTemporary/index.vue +3 -3
  128. package/src/components/NstcG6Components/Calendar/index.js +8 -0
  129. package/src/components/NstcG6Components/Calendar/src/basic/month-table.vue +129 -0
  130. package/src/components/NstcG6Components/Calendar/src/basic/year-table.vue +126 -0
  131. package/src/components/NstcG6Components/Calendar/src/main.vue +442 -0
  132. package/src/components/NstcG6Components/DialogForm/index.js +8 -0
  133. package/src/components/NstcG6Components/DialogForm/src/demo/index.vue +56 -0
  134. package/src/components/NstcG6Components/DialogForm/src/main.vue +189 -0
  135. package/src/components/NstcG6Components/Form/A_DEMO/component/originalForm.vue +281 -0
  136. package/src/components/NstcG6Components/Form/A_DEMO/config/config_3.js +1222 -0
  137. package/src/components/NstcG6Components/Form/A_DEMO/index.vue +803 -0
  138. package/src/components/NstcG6Components/Form/AutocompleteCustom/index.vue +72 -0
  139. package/src/components/NstcG6Components/Form/BusinessSpecific/InputMultiple.vue +191 -0
  140. package/src/components/NstcG6Components/Form/BusinessSpecific/InputWithUnit.vue +128 -0
  141. package/src/components/NstcG6Components/Form/BusinessSpecific/SelectTreeDialog.vue +233 -0
  142. package/src/components/NstcG6Components/Form/BusinessSpecific/readme.md +7 -0
  143. package/src/components/NstcG6Components/Form/CascaderCustom/index.vue +101 -0
  144. package/src/components/NstcG6Components/Form/CheckboxCustom/index.vue +84 -0
  145. package/src/components/NstcG6Components/Form/Component.vue +661 -0
  146. package/src/components/NstcG6Components/Form/ComponentSecond.vue +650 -0
  147. package/src/components/NstcG6Components/Form/DatepickerCustom/index.vue +130 -0
  148. package/src/components/NstcG6Components/Form/InputAndDialog/index.js +15 -0
  149. package/src/components/NstcG6Components/Form/InputAndDialog/src/main.vue +395 -0
  150. package/src/components/NstcG6Components/Form/InputCustom/demo/index.vue +65 -0
  151. package/src/components/NstcG6Components/Form/InputCustom/index.vue +307 -0
  152. package/src/components/NstcG6Components/Form/IntervalinputCustom/demo/index.vue +31 -0
  153. package/src/components/NstcG6Components/Form/IntervalinputCustom/index.vue +118 -0
  154. package/src/components/NstcG6Components/Form/Item.vue +330 -0
  155. package/src/components/NstcG6Components/Form/ItemSecond.vue +269 -0
  156. package/src/components/NstcG6Components/Form/List.vue +146 -0
  157. package/src/components/NstcG6Components/Form/ListSecond.vue +130 -0
  158. package/src/components/NstcG6Components/Form/RadioCustom/index.vue +73 -0
  159. package/src/components/NstcG6Components/Form/SelectAccount/index.js +15 -0
  160. package/src/components/NstcG6Components/Form/SelectAccount/src/demo/index.vue +58 -0
  161. package/src/components/NstcG6Components/Form/SelectAccount/src/main.vue +283 -0
  162. package/src/components/NstcG6Components/Form/SelectAndDialog/index.js +15 -0
  163. package/src/components/NstcG6Components/Form/SelectAndDialog/src/main.vue +384 -0
  164. package/src/components/NstcG6Components/Form/SelectCashFlow/index.js +15 -0
  165. package/src/components/NstcG6Components/Form/SelectCashFlow/src/demo/index.vue +42 -0
  166. package/src/components/NstcG6Components/Form/SelectCashFlow/src/main.vue +126 -0
  167. package/src/components/NstcG6Components/Form/SelectCustom/demo/index.vue +82 -0
  168. package/src/components/NstcG6Components/Form/SelectCustom/index.vue +488 -0
  169. package/src/components/NstcG6Components/Form/SelectSubject/index.js +15 -0
  170. package/src/components/NstcG6Components/Form/SelectSubject/src/demo/index.vue +85 -0
  171. package/src/components/NstcG6Components/Form/SelectSubject/src/main.vue +182 -0
  172. package/src/components/NstcG6Components/Form/SelectindialogCustom/demo/index.vue +188 -0
  173. package/src/components/NstcG6Components/Form/SelectindialogCustom/index.vue +650 -0
  174. package/src/components/NstcG6Components/Form/SelectindialogCustom/install.js +7 -0
  175. package/src/components/NstcG6Components/Form/TableRadioCustom/demo/index.vue +53 -0
  176. package/src/components/NstcG6Components/Form/TableRadioCustom/index.vue +183 -0
  177. package/src/components/NstcG6Components/Form/TextCustom/index.vue +38 -0
  178. package/src/components/NstcG6Components/Form/UploadCustom/demo/index.vue +31 -0
  179. package/src/components/NstcG6Components/Form/UploadCustom/iconxitongshezhi-yichu.png +0 -0
  180. package/src/components/NstcG6Components/Form/UploadCustom/index.vue +506 -0
  181. package/src/components/NstcG6Components/Form/configs.js +191 -0
  182. package/src/components/NstcG6Components/Form/configsSecond.js +161 -0
  183. package/src/components/NstcG6Components/Form/index.js +8 -0
  184. package/src/components/NstcG6Components/Form/index.scss +29 -0
  185. package/src/components/NstcG6Components/Form/payeePersonSelect/index.js +15 -0
  186. package/src/components/NstcG6Components/Form/payeePersonSelect/src/demo/index.vue +164 -0
  187. package/src/components/NstcG6Components/Form/payeePersonSelect/src/main.vue +185 -0
  188. package/src/components/NstcG6Components/Form/readme.txt +4 -0
  189. package/src/components/NstcG6Components/FormGroup/index.js +8 -0
  190. package/src/components/NstcG6Components/FormGroup/src/demo/config.js +23 -0
  191. package/src/components/NstcG6Components/FormGroup/src/demo/index.vue +85 -0
  192. package/src/components/NstcG6Components/FormGroup/src/main.vue +639 -0
  193. package/src/components/NstcG6Components/FormGroup/src/validate.js +23 -0
  194. package/src/components/NstcG6Components/InputTag/InputTag.vue +270 -0
  195. package/src/components/NstcG6Components/NstcApprovel/NstcApprovel.vue +25 -0
  196. package/src/components/NstcG6Components/NstcBackToTop/NstcBackToTop.vue +150 -0
  197. package/src/components/NstcG6Components/NstcBranchLazyLoad/NstcBranchLazyLoad.vue +119 -0
  198. package/src/components/NstcG6Components/NstcCharts/NstcCharts.vue +162 -0
  199. package/src/components/NstcG6Components/NstcCharts/define.js +74 -0
  200. package/src/components/NstcG6Components/NstcCharts/mixins/resize.js +56 -0
  201. package/src/components/NstcG6Components/NstcConfirm/NstcConfirm.vue +153 -0
  202. package/src/components/NstcG6Components/NstcConfirm/index.js +25 -0
  203. package/src/components/NstcG6Components/NstcDialog/NstcDialog.vue +185 -0
  204. package/src/components/NstcG6Components/NstcDialogForm/NstcDialogForm.vue +176 -0
  205. package/src/components/NstcG6Components/NstcDialogTable/NstcDialogTable.vue +282 -0
  206. package/src/components/NstcG6Components/NstcDropdown/NstcDropdown.vue +52 -0
  207. package/src/components/NstcG6Components/NstcDropdownTree/NstcDropdownTree.vue +392 -0
  208. package/src/components/NstcG6Components/NstcElectronicFile/NstcElectronicFile.vue +591 -0
  209. package/src/components/NstcG6Components/NstcExcelCustomImport/NstcExcelCustomImport.vue +475 -0
  210. package/src/components/NstcG6Components/NstcExcelCustomImport/img/upload@2x.png +0 -0
  211. package/src/components/NstcG6Components/NstcExcelExport/NstcExcelExport.vue +145 -0
  212. package/src/components/NstcG6Components/NstcExcelImport/NstcExcelImport.vue +1051 -0
  213. package/src/components/NstcG6Components/NstcExcelImport/img/upload@2x.png +0 -0
  214. package/src/components/NstcG6Components/NstcExcelImportN/NstcExcelImportN.vue +1168 -0
  215. package/src/components/NstcG6Components/NstcExpandCollapse/NstcExpandCollapse.vue +130 -0
  216. package/src/components/NstcG6Components/NstcExpandCollapse/index.scss +77 -0
  217. package/src/components/NstcG6Components/NstcFileUpload/NstcFileUpload.vue +1011 -0
  218. package/src/components/NstcG6Components/NstcFileUpload/img/addFile.svg +32 -0
  219. package/src/components/NstcG6Components/NstcFileUpload/img/delete.svg +24 -0
  220. package/src/components/NstcG6Components/NstcFileUpload/img/deleteFile.svg +28 -0
  221. package/src/components/NstcG6Components/NstcFileUpload/img/download.svg +24 -0
  222. package/src/components/NstcG6Components/NstcFileUpload/img/inputUpload.svg +30 -0
  223. package/src/components/NstcG6Components/NstcFileUpload/img/look-diabled.svg +24 -0
  224. package/src/components/NstcG6Components/NstcFileUpload/img/look.svg +24 -0
  225. package/src/components/NstcG6Components/NstcForm/A_DEMO/component/originalForm.vue +281 -0
  226. package/src/components/NstcG6Components/NstcForm/A_DEMO/config/config_3.js +1222 -0
  227. package/src/components/NstcG6Components/NstcForm/A_DEMO/index.vue +796 -0
  228. package/src/components/NstcG6Components/NstcForm/AutocompleteCustom/index.vue +68 -0
  229. package/src/components/NstcG6Components/NstcForm/BusinessSpecific/InputMultiple.vue +191 -0
  230. package/src/components/NstcG6Components/NstcForm/BusinessSpecific/InputWithUnit.vue +128 -0
  231. package/src/components/NstcG6Components/NstcForm/BusinessSpecific/SelectTreeDialog.vue +233 -0
  232. package/src/components/NstcG6Components/NstcForm/BusinessSpecific/readme.md +7 -0
  233. package/src/components/NstcG6Components/NstcForm/CascaderCustom/index.vue +101 -0
  234. package/src/components/NstcG6Components/NstcForm/CheckboxCustom/index.vue +84 -0
  235. package/src/components/NstcG6Components/NstcForm/Component.vue +684 -0
  236. package/src/components/NstcG6Components/NstcForm/ComponentSecond.vue +650 -0
  237. package/src/components/NstcG6Components/NstcForm/DatepickerCustom/index.vue +130 -0
  238. package/src/components/NstcG6Components/NstcForm/InputAndDialog/NstcInputAndDialog.vue +389 -0
  239. package/src/components/NstcG6Components/NstcForm/InputCustom/index.vue +314 -0
  240. package/src/components/NstcG6Components/NstcForm/IntervalInputCustom/index.vue +116 -0
  241. package/src/components/NstcG6Components/NstcForm/Item.vue +327 -0
  242. package/src/components/NstcG6Components/NstcForm/ItemSecond.vue +269 -0
  243. package/src/components/NstcG6Components/NstcForm/List.vue +146 -0
  244. package/src/components/NstcG6Components/NstcForm/ListSecond.vue +130 -0
  245. package/src/components/NstcG6Components/NstcForm/RadioCustom/index.vue +73 -0
  246. package/src/components/NstcG6Components/NstcForm/SelectAccount/NstcSelectAccount.vue +334 -0
  247. package/src/components/NstcG6Components/NstcForm/SelectAndDialog/NstcSelectAndDialog.vue +382 -0
  248. package/src/components/NstcG6Components/NstcForm/SelectCashFlow/NstcSelectCashFlow.vue +123 -0
  249. package/src/components/NstcG6Components/NstcForm/SelectCustom/index.vue +460 -0
  250. package/src/components/NstcG6Components/NstcForm/SelectSubject/NstcSelectSubject.vue +185 -0
  251. package/src/components/NstcG6Components/NstcForm/SelectindialogCustom/index.vue +650 -0
  252. package/src/components/NstcG6Components/NstcForm/TableRadioCustom/index.vue +183 -0
  253. package/src/components/NstcG6Components/NstcForm/TextCustom/index.vue +38 -0
  254. package/src/components/NstcG6Components/NstcForm/UploadCustom/iconxitongshezhi-yichu.png +0 -0
  255. package/src/components/NstcG6Components/NstcForm/UploadCustom/index.vue +483 -0
  256. package/src/components/NstcG6Components/NstcForm/configs.js +191 -0
  257. package/src/components/NstcG6Components/NstcForm/configsSecond.js +161 -0
  258. package/src/components/NstcG6Components/NstcForm/index.js +8 -0
  259. package/src/components/NstcG6Components/NstcForm/index.scss +29 -0
  260. package/src/components/NstcG6Components/NstcForm/payeePersonSelect/NstcPayeePerson.vue +188 -0
  261. package/src/components/NstcG6Components/NstcForm/readme.txt +4 -0
  262. package/src/components/NstcG6Components/NstcPagination/NstcPagination.vue +430 -0
  263. package/src/components/NstcG6Components/NstcPagination/setPageNum.png +0 -0
  264. package/src/components/NstcG6Components/NstcPagination/setpagedefault.png +0 -0
  265. package/src/components/NstcG6Components/NstcScreenFull/NstcScreenFull.vue +70 -0
  266. package/src/components/NstcG6Components/NstcSelectTree/NstcSelectTree.vue +729 -0
  267. package/src/components/NstcG6Components/NstcSelectTreeList/NstcSelectTreeList.vue +676 -0
  268. package/src/components/NstcG6Components/NstcSticky/NstcSticky.vue +97 -0
  269. package/src/components/NstcG6Components/NstcSvgIcon/NstcSvgIcon.vue +77 -0
  270. package/src/components/NstcG6Components/NstcTab/NstcTab.vue +80 -0
  271. package/src/components/NstcG6Components/NstcTabWithBadge/NstcTabWithBadge.vue +45 -0
  272. package/src/components/NstcG6Components/NstcTabWithBadge/index.scss +31 -0
  273. package/src/components/NstcG6Components/NstcTable/ElTableColumnCustom/index.vue +292 -0
  274. package/src/components/NstcG6Components/NstcTable/NstcTable.vue +460 -0
  275. package/src/components/NstcG6Components/NstcTableSet/NstcTableSet.vue +801 -0
  276. package/src/components/NstcG6Components/NstcThemePicker/NstcThemePicker.vue +186 -0
  277. package/src/components/NstcG6Components/NstcUploadCustomExcel/NstcUploadCustomExcel.vue +330 -0
  278. package/src/components/NstcG6Components/NstcUploadExcel/NstcUploadExcel.vue +145 -0
  279. package/src/components/NstcG6Components/NstcWorkBench/NstcWorkBench.vue +167 -0
  280. package/src/components/NstcG6Components/Search/NstcSearch.vue +591 -0
  281. package/src/components/NstcG6Components/Search/src/demo/index copy.vue +101 -0
  282. package/src/components/NstcG6Components/Search/src/demo/index.vue +103 -0
  283. package/src/components/NstcG6Components/Search/src/main copy.vue +607 -0
  284. package/src/components/NstcG6Components/approvelTwo/main.vue +220 -0
  285. package/src/components/NstcG6Components/approvelTwo/progress.vue +154 -0
  286. package/src/components/PageHeader/index.vue +80 -0
  287. package/src/components/PlainText/PlainTextItem.vue +17 -0
  288. package/src/components/PlainText/index.vue +12 -0
  289. package/src/components/Search/index.vue +593 -0
  290. package/src/components/SelectTree/index.vue +1 -0
  291. package/src/components/ShowColumn/index.vue +1 -1
  292. package/src/components/Stamp/images/accounts.png +0 -0
  293. package/src/components/Stamp/images/cancellation.png +0 -0
  294. package/src/components/Stamp/images/clinch.png +0 -0
  295. package/src/components/Stamp/images/conclude.png +0 -0
  296. package/src/components/Stamp/images/efficacy.png +0 -0
  297. package/src/components/Stamp/images/termination.png +0 -0
  298. package/src/components/Stamp/index.vue +75 -0
  299. package/src/components/Statis/statisPopover.vue +1 -0
  300. package/src/components/Table/ThSelectHeader.vue +133 -0
  301. package/src/components/Table/index.vue +53 -3
  302. package/src/components/Upload/index.vue +6 -2
  303. package/src/directives/VCopy/index.js +60 -0
  304. package/src/directives/VNstcNumber/index.js +14 -0
  305. package/src/directives/VNstcNumber/temp.js +446 -0
  306. package/src/index.js +28 -1
  307. package/src/utils/dateAndValidator.js +629 -0
  308. package/src/utils/debounce.js +40 -0
  309. package/src/utils/mapper_aims.js +810 -0
  310. package/src/utils/parseTime.js +48 -0
  311. package/src/utils/validate/index.js +7 -0
  312. package/src/utils/vendor/Export2Excel.js +229 -0
  313. package/src/utils/vendor/Export2Zip.js +24 -0
  314. package/src/utils/vue-bus.js +5 -0
  315. package/style/index.css +1 -1
  316. package/style/index.css.map +1 -1
@@ -0,0 +1,1011 @@
1
+ <!--
2
+ 功能: 新版UI文件上传
3
+ 作者: lihao
4
+ 创建时间: 2021-02-19
5
+ -->
6
+ <template>
7
+ <div class="nstc-file-upload">
8
+ <div class="nstc-file-upload-head" v-if="pattern !== 'text'">
9
+ <el-button
10
+ type="primary"
11
+ v-if="!views"
12
+ class="nstc-g6-common-btn-1 nstc-g6-common-btn-size-s"
13
+ :disabled="isDisabled"
14
+ @click="add"
15
+ >
16
+ 新增
17
+ </el-button>
18
+ <el-button
19
+ v-if="tableData.length !== 0 && !views"
20
+ class="nstc-g6-common-btn-1 nstc-g6-common-btn-size-s"
21
+ @click="batchDownload"
22
+ >下载
23
+ </el-button>
24
+ <el-button
25
+ v-if="tableData.length !== 0 && !views"
26
+ class="nstc-g6-common-btn-4 nstc-g6-common-btn-size-s"
27
+ :disabled="isDisabled"
28
+ @click="batchDelete"
29
+ >
30
+ 删除
31
+ </el-button>
32
+ </div>
33
+ <div class="nstc-file-upload-head" v-else>
34
+ <el-button
35
+ v-if="tableData.length !== 0 && !views"
36
+ class="nstc-g6-common-btn-1 nstc-g6-common-btn-size-s"
37
+ @click="batchDownload"
38
+ >下载
39
+ </el-button
40
+ >
41
+ </div>
42
+ <div class="nstc-file-upload-table">
43
+ <el-form :rules="model.rules" :model="model" ref="form">
44
+ <el-table :data="tableData" @selection-change="handleSelectionChange">
45
+ <el-table-column type="selection" width="50" align="center"/>
46
+ <el-table-column
47
+ label="附件类型"
48
+ align="left"
49
+ min-width="180"
50
+ >
51
+ <template slot-scope="scope">
52
+ <!-- !textFlag(scope.row.uuid,scope.row.filePath) -->
53
+ <el-select
54
+ v-if="!textFlag(scope.row.uuid, scope.row.filePath) && !views"
55
+ v-model="scope.row.fileType"
56
+ >
57
+ <el-option
58
+ v-for="(item, index) in fileTypeList"
59
+ :key="index"
60
+ :label="item.label"
61
+ :value="item.value"
62
+ />
63
+ </el-select>
64
+ <span v-else>{{
65
+ getFileTypeLabel(scope.row.fileType) || "--"
66
+ }}</span>
67
+ </template>
68
+ </el-table-column>
69
+ <el-table-column
70
+ label="附件名称"
71
+ align="left"
72
+ min-width="180"
73
+ >
74
+ <template slot-scope="scope">
75
+ <el-form-item
76
+ v-if="!textFlag(scope.row.uuid, scope.row.filePath) && !views"
77
+ :prop="'tableData.' + scope.$index + '.attachmentName'"
78
+ :rules="model.rules.attachmentName"
79
+ >
80
+ <el-input
81
+ v-model.trim="scope.row.attachmentName"
82
+ placeholder="请输入附件名称"
83
+ clearable
84
+ :maxlength="attachmentMaxlength"
85
+ ></el-input>
86
+ </el-form-item>
87
+
88
+ <span v-else>{{ scope.row.attachmentName || "--" }}</span>
89
+ </template>
90
+ </el-table-column>
91
+ <el-table-column
92
+ label="附件上传"
93
+ align="left"
94
+ min-width="180"
95
+ >
96
+ <template slot-scope="scope">
97
+ <el-upload
98
+ v-if="pattern !== 'text' && !views"
99
+ :ref="`nstc_g6_common_upload_index_${scope.$index}`"
100
+ action=""
101
+ v-bind="$attrs"
102
+ :auto-upload="false"
103
+ :before-upload="
104
+ function (file) {
105
+ return beforeUpload(file, scope.row);
106
+ }
107
+ "
108
+ :on-exceed="handleExceed"
109
+ :on-change="
110
+ (file, fileLists) => {
111
+ handleChange(file, fileLists, scope.$index, scope.row);
112
+ }
113
+ "
114
+ :file-list="fileList"
115
+ :show-file-list="false"
116
+ :http-request="httpRequest"
117
+ v-on="$listeners"
118
+ >
119
+ <el-input
120
+ v-model="scope.row.fileName"
121
+ placeholder="请选择附件"
122
+ readonly
123
+ @click="getUploadIndex(scope.$index)"
124
+ >
125
+ <div slot="suffix" class="input-upload">
126
+ <img :src="inputUploadSvg" alt=""/>
127
+ </div>
128
+ </el-input>
129
+ </el-upload>
130
+ <span v-else>{{ scope.row.fileName || "--" }}</span>
131
+ </template>
132
+ <el-input/>
133
+ </el-table-column>
134
+ <el-table-column
135
+ label="上传时间"
136
+ prop="time"
137
+ align="left"
138
+ width="220px"
139
+ >
140
+ <template slot-scope="scope">
141
+ <span>{{
142
+ (scope.row.time || scope.row.createTime) | parseTimeFormat
143
+ }}</span>
144
+ </template>
145
+ </el-table-column>
146
+ <el-table-column
147
+ label="上传人"
148
+ prop="user"
149
+ align="left"
150
+ >
151
+ <template slot-scope="scope">
152
+ <span>{{ scope.row.user || scope.row.creator }}</span>
153
+ </template>
154
+ </el-table-column>
155
+ <el-table-column
156
+ v-if="pattern !== 'text'"
157
+ label="上传进度"
158
+ align="left"
159
+ width="300px"
160
+ >
161
+ <template slot-scope="scope">
162
+ <div class="nstc-el-progress-box">
163
+ <el-progress
164
+ v-show="showProgress"
165
+ :percentage="
166
+ (scope.row.uuid || scope.row.filePath) &&
167
+ scope.row.status !== 'exception'
168
+ ? 100
169
+ : scope.row.percentage
170
+ "
171
+ :status="
172
+ scope.row.uuid || scope.row.filePath
173
+ ? 'success'
174
+ : scope.row.status
175
+ "
176
+ :width="100"
177
+ />
178
+ </div>
179
+ <span
180
+ v-if="scope.row.status === 'exception'"
181
+ class="nstc-file-reload"
182
+ @click="reUploadAction(scope.$index)"
183
+ >重新上传</span
184
+ >
185
+ </template>
186
+ </el-table-column>
187
+ <el-table-column
188
+ label="操作"
189
+ align="left"
190
+ width="100px"
191
+ >
192
+ <template slot-scope="scope">
193
+ <div class="nstc-file-upload-opt">
194
+ <!-- v-if="false" -->
195
+ <!-- -->
196
+ <img
197
+ v-if="showViews"
198
+ :src="lookDiabled"
199
+ alt=""
200
+ @click="lookFile(scope.$index)"
201
+ />
202
+ <img
203
+ v-if="
204
+ (scope.row.uuid || scope.row.filePath) && pattern === 'text'
205
+ "
206
+ :src="downloadSvg"
207
+ alt=""
208
+ @click="downLoadFile(scope.row)"
209
+ />
210
+ <!-- <img
211
+ v-if="pattern !== 'text'"
212
+ :src="deleteSvg"
213
+ alt=""
214
+ @click="deleteFile(scope.$index)"
215
+ /> -->
216
+ </div>
217
+ </template>
218
+ </el-table-column>
219
+ </el-table>
220
+ </el-form>
221
+ </div>
222
+ <DialogCustom
223
+ v-model="dialogShowFlag"
224
+ :show-footer="false"
225
+ :title="dialogTitle"
226
+ @confirm="handleConfirm"
227
+ >
228
+ <span>查看文件</span>
229
+ </DialogCustom>
230
+ </div>
231
+ </template>
232
+
233
+ <script>
234
+ import lookSvg from "./img/look.svg";
235
+ import lookDiabled from "./img/look-diabled.svg";
236
+ import downloadSvg from "./img/download.svg";
237
+ import deleteSvg from "./img/delete.svg";
238
+ import inputUploadSvg from "./img/inputUpload.svg";
239
+ import addFile from "./img/addFile.svg";
240
+ import deleteFileSvg from "./img/deleteFile.svg";
241
+ import DialogCustom from "../NstcDialog/NstcDialog";
242
+ // fileDownloadGdt
243
+
244
+ import {parseTime} from "@/utils/parseTime";
245
+ import auth from "@/utils/auth";
246
+ import axios from "axios";
247
+
248
+ export default {
249
+ name: "NstcFileUpload",
250
+ components: {
251
+ DialogCustom,
252
+ },
253
+ props: {
254
+ attachmentMaxlength: {
255
+ type: String,
256
+ default: "64",
257
+ },
258
+ views: {
259
+ //是否浏览模式
260
+ type: Boolean,
261
+ default: false,
262
+ },
263
+ value: {
264
+ type: Array,
265
+ default: () => {
266
+ return [];
267
+ },
268
+ },
269
+ pattern: {
270
+ type: String,
271
+ default: () => {
272
+ return "normal";
273
+ },
274
+ },
275
+ url: {
276
+ type: String,
277
+ default: null,
278
+ },
279
+ batchDownloadUrl: {
280
+ type: String,
281
+ default: null,
282
+ },
283
+ httpMethod: {
284
+ type: String,
285
+ default: "post",
286
+ },
287
+ showLength: {
288
+ type: Boolean,
289
+ default: true,
290
+ },
291
+ isDisabled: {
292
+ type: Boolean,
293
+ default: false,
294
+ },
295
+ },
296
+ data() {
297
+ return {
298
+ lookSvg,
299
+ lookDiabled,
300
+ downloadSvg,
301
+ deleteSvg,
302
+ inputUploadSvg,
303
+ addFile,
304
+ deleteFileSvg,
305
+ showViews: false,
306
+ model: {
307
+ rules: {
308
+ attachmentName: {
309
+ type: "string",
310
+ required: true,
311
+ message: "必填字段",
312
+ trigger: "change",
313
+ },
314
+ },
315
+ tableData: [],
316
+ },
317
+ fileList: [],
318
+ tableSelectionData: [],
319
+ tableSelectionData2: [],
320
+ fileTypeList: [{label: '附件', value: 1}],
321
+ tempFile: {
322
+ id: "",
323
+ attachmentName: "",
324
+ fileName: "",
325
+ remark: null,
326
+ fileType: 1,
327
+ type: "",
328
+ time: "",
329
+ user: "",
330
+ progress: 0,
331
+ uuid: "",
332
+ status: null,
333
+ fileObj: "",
334
+ percentage: 0,
335
+ },
336
+ dialogTitle: '查看',
337
+ dialogShowFlag: false,
338
+ currentUploadIndex: null,
339
+ showProgress: true,
340
+ dialogShowDelete: false,
341
+ dialogDeleteTitle: "提示",
342
+ };
343
+ },
344
+ computed: {
345
+ tableData: {
346
+ get() {
347
+ this.value.map((item) => {
348
+ item.fileType = item.fileType == "" ? "" : Number(item.fileType);
349
+ item.status == null ? (item.status = 0) : "";
350
+ return item;
351
+ });
352
+ this.model.tableData = this.value;
353
+ console.log("this.model=====", this.model.tableData);
354
+ return this.value;
355
+ },
356
+ set(val) {
357
+ this.$emit("input", val);
358
+ },
359
+ },
360
+ uploadFlag() {
361
+ return this.tableData.filter((i) => i.uuid).length !== 0;
362
+ },
363
+ },
364
+ filters: {
365
+ parseTimeFormat: function (val) {
366
+ if (val !== "" && val) {
367
+ return parseTime(new Date(val), "{y}-{m}-{d}");
368
+ } else {
369
+ return "";
370
+ }
371
+ },
372
+ },
373
+ methods: {
374
+ beforeUpload(file, row) {
375
+ console.log(file, row);
376
+ // if(!row.attachmentName) {
377
+ // this.$message({
378
+ // type: "warning",
379
+ // message: "请先输入附件名称再上传",
380
+ // });
381
+ // return false
382
+ // }
383
+ },
384
+ checkValidate() {
385
+ this.$refs["form"].validate((res) => {
386
+ return res;
387
+ });
388
+ },
389
+ cancel(i) {
390
+ this.tableData[i].percentage = 0;
391
+ console.log("111");
392
+ },
393
+ /**
394
+ * 判断当前是不是文档模式
395
+ * 1, pattern 等于 text
396
+ * 2 上传成功
397
+ */
398
+ textFlag(uuid, filePath) {
399
+ console.log(uuid, filePath);
400
+ if (this.pattern === "text") {
401
+ return true;
402
+ } else {
403
+ return !!uuid || !!filePath;
404
+ }
405
+ },
406
+
407
+ /**
408
+ * 新增文件
409
+ */
410
+ add() {
411
+ this.tableData.unshift(
412
+ JSON.parse(
413
+ JSON.stringify({
414
+ id: new Date().getTime(),
415
+ attachmentName: "",
416
+ fileName: "",
417
+ remark: null,
418
+ fileType: 1,
419
+ type: "",
420
+ time: "",
421
+ user: "",
422
+ progress: 0,
423
+ uuid: "",
424
+ status: null,
425
+ fileObj: "",
426
+ percentage: 0,
427
+ })
428
+ )
429
+ );
430
+ },
431
+
432
+ /**
433
+ * 表格选择变化
434
+ */
435
+ handleSelectionChange(data) {
436
+ this.tableSelectionData = data;
437
+ },
438
+
439
+ /**
440
+ * 查看文件
441
+ */
442
+ lookFile() {
443
+ // this.dialogShowFlag = true;
444
+ },
445
+
446
+ /**
447
+ * 下载文件
448
+ */
449
+ downLoadFile(data) {
450
+ console.log(data);
451
+ // const aEl = document.createElement('a')
452
+ let uuid = data.uuid || data.filePath;
453
+ const p = encodeURIComponent(uuid);
454
+ const n = encodeURIComponent(data.fileName);
455
+
456
+ axios({
457
+ method: this.httpMethod,
458
+ url: `${this.url}/download/${p}/${n}`,
459
+ // 这里可以在header中加一些东西,比如token
460
+ headers: {
461
+ "Content-Type": "application/json",
462
+ Authorization: `Bearer ${auth.getCookieToken()}`,
463
+ timestamp: Date.now(),
464
+ OperationDesc: "yYarJp",
465
+ requestKey: Math.round(Math.random() * 1000000000),
466
+ },
467
+ responseType: "blob",
468
+ })
469
+ .then((res) => {
470
+ console.log("response: ", res);
471
+ let blob = new Blob([res.data], {
472
+ type: "application/octet-stream;charset=UTF-8",
473
+ });
474
+ let fileName = decodeURI(
475
+ res.headers["content-disposition"].split(";")[1].split("=")[1]
476
+ );
477
+ if (window.navigator.msSaveBlob) {
478
+ // ie
479
+ window.navigator.msSaveOrOpenBlob(blob, fileName);
480
+ return;
481
+ }
482
+ let elink = document.createElement("a");
483
+ elink.style.display = "none";
484
+ elink.href = window.URL.createObjectURL(blob);
485
+ elink.download = data.fileName;
486
+ document.body.appendChild(elink);
487
+ elink.click();
488
+ URL.revokeObjectURL(elink.href);
489
+ document.body.removeChild(elink);
490
+ })
491
+ .catch((error) => {
492
+ console.log("response: ", error);
493
+ });
494
+ },
495
+
496
+ /**
497
+ * 删除文件
498
+ */
499
+ deleteFile(index) {
500
+ this.$confirmTip({
501
+ type: "info",
502
+ title: "确认删除该文件?",
503
+ info: "",
504
+ button: {
505
+ ok: "提交",
506
+ cancel: "取消",
507
+ },
508
+ }).then(() => {
509
+ this.tableData.splice(index, 1);
510
+ this.$message({
511
+ type: "success",
512
+ message: "删除成功!",
513
+ });
514
+ });
515
+ },
516
+
517
+ /**
518
+ * 弹框确认事件
519
+ */
520
+ handleConfirm() {
521
+ },
522
+
523
+ /**
524
+ * 批量下载
525
+ */
526
+ batchDownload() {
527
+ if (this.tableSelectionData.length === 1) {
528
+ // 单条下载
529
+ this.downLoadFile(this.tableSelectionData[0]);
530
+ } else if (this.tableSelectionData.length > 1) {
531
+ const files = [];
532
+ // 判断是否有文件未上传
533
+ console.log("this.tableSelectionData====", this.tableSelectionData);
534
+ let isNoUpload = this.tableSelectionData.some((item) => {
535
+ !item.uuid == true;
536
+ });
537
+ console.log("文件判断=======", isNoUpload);
538
+ if (isNoUpload) {
539
+ // 阻断下载
540
+ this.$message({
541
+ type: "warning",
542
+ message: "勾选文件中有文件未上传",
543
+ });
544
+ return;
545
+ }
546
+ this.tableSelectionData.map((item) => {
547
+ files.push({
548
+ uuid: item.uuid || item.filePath,
549
+ fileName: item.fileName,
550
+ });
551
+ });
552
+
553
+ axios({
554
+ url: this.batchDownloadUrl,
555
+ method: "POST",
556
+ data: JSON.stringify(files),
557
+ headers: {
558
+ "Content-Type": "application/json",
559
+ Authorization: `Bearer ${auth.getCookieToken()}`,
560
+ timestamp: Date.now(),
561
+ OperationDesc: "yYarJp",
562
+ requestKey: Math.round(Math.random() * 1000000000),
563
+ },
564
+ responseType: "blob",
565
+ })
566
+ .then((res) => {
567
+ let blob = new Blob([res.data], {
568
+ type: "application/octet-stream;charset=UTF-8",
569
+ });
570
+ let fileName = decodeURI(
571
+ res.headers["content-disposition"].split(";")[1].split("=")[1]
572
+ );
573
+ if (window.navigator.msSaveBlob) {
574
+ // ie
575
+ window.navigator.msSaveOrOpenBlob(blob, fileName);
576
+ return;
577
+ }
578
+ let elink = document.createElement("a");
579
+ elink.style.display = "none";
580
+ elink.href = window.URL.createObjectURL(blob);
581
+ elink.download = "批量下载.zip";
582
+ document.body.appendChild(elink);
583
+ elink.click();
584
+ URL.revokeObjectURL(elink.href);
585
+ document.body.removeChild(elink);
586
+ })
587
+ .catch((error) => {
588
+ console.log("response: ", error);
589
+ });
590
+ } else {
591
+ this.$message({
592
+ type: "warning",
593
+ message: "请选择要下载的附件",
594
+ });
595
+ }
596
+ },
597
+
598
+ /**
599
+ * 批量删除
600
+ */
601
+ batchDelete() {
602
+ if (this.tableSelectionData.length !== 0) {
603
+ this.dialogShowDelete = true;
604
+ this.$confirmTip({
605
+ type: "error",
606
+ title: "确认要删除所选附件吗?",
607
+ info: "删除后数据不可恢复",
608
+ button: {
609
+ ok: "提交",
610
+ cancel: "取消",
611
+ },
612
+ }).then(() => {
613
+ this.tableData = this.tableData.filter((i) => {
614
+ return !this.tableSelectionData.includes(i);
615
+ });
616
+ setTimeout(() => {
617
+ this.tableSelectionData = [];
618
+ }, 30);
619
+ this.$message({
620
+ type: "success",
621
+ message: "删除成功!",
622
+ });
623
+ });
624
+ } else {
625
+ this.$message({
626
+ type: "warning",
627
+ message: "请选择要删除的附件",
628
+ });
629
+ }
630
+ },
631
+ handleConfirmDelete() {
632
+ this.tableData = this.tableData.filter((i) => {
633
+ return !this.tableSelectionData.includes(i);
634
+ });
635
+ setTimeout(() => {
636
+ this.tableSelectionData = [];
637
+ }, 30);
638
+ this.dialogShowDelete = false;
639
+ this.$message({
640
+ type: "success",
641
+ message: "删除成功!",
642
+ });
643
+ },
644
+
645
+ /**
646
+ * 获取文件类型
647
+ */
648
+ getFileTypeLabel(type) {
649
+ const t = this.fileTypeList.filter((i) => {
650
+ return Number(type) === Number(i.value);
651
+ });
652
+ if (t.length === 1) {
653
+ return t[0].label;
654
+ } else {
655
+ return type;
656
+ }
657
+ },
658
+
659
+ /**
660
+ * 附件上传
661
+ */
662
+ httpRequest(fileObj) {
663
+ const isLt2M = fileObj.file.size / 1024 / 1024 < 20;
664
+ if (!isLt2M) {
665
+ this.$message({
666
+ message: "上传文件大小不能超过 20MB!",
667
+ type: "warning",
668
+ });
669
+ this.tableData[this.currentUploadIndex].percentage = 75;
670
+ this.tableData[this.currentUploadIndex].status = "exception";
671
+ this.$emit("upload_over", {});
672
+ return;
673
+ }
674
+ const that = this;
675
+ const formData = new FormData();
676
+ this.tableData[this.currentUploadIndex].fileSize = fileObj.file.size;
677
+ // this.tableData[this.currentUploadIndex].fileName = fileObj.file.name
678
+ this.tableData[this.currentUploadIndex].type = fileObj.file.type;
679
+
680
+ formData.append("file", fileObj.file);
681
+ axios(`${this.url}/upload`, formData, {
682
+ onUploadProgress: progressEvent => {
683
+ let percent = (progressEvent.loaded / progressEvent.total * 100) | 0
684
+ // 调用onProgress方法来显示进度条,需要传递个对象 percent为进度值
685
+ that.tableData[this.currentUploadIndex].percentage = percent;
686
+ }
687
+ }).then((res) => {
688
+ // 上传成功
689
+ // that.tableData[this.currentUploadIndex].percentage = 100
690
+ console.log("上传文件1111", res);
691
+ this.tableData[this.currentUploadIndex].time = parseTime(
692
+ res[0][`time`],
693
+ "{y}-{m}-{d} {h}:{i}:{s}"
694
+ );
695
+ this.tableData[this.currentUploadIndex].uuid = res[0][`uuid`];
696
+ this.tableData[this.currentUploadIndex].status = "success";
697
+ this.tableData[this.currentUploadIndex].user = res[0][`user`];
698
+ this.tableData[this.currentUploadIndex].creator = res[0][`creator`];
699
+ res[0][`createTime`] = parseTime(
700
+ res[0][`createTime`],
701
+ "{y}-{m}-{d} {h}:{i}:{s}"
702
+ );
703
+ this.tableData[this.currentUploadIndex].createTime =
704
+ res[0][`createTime`];
705
+ this.$emit("upload_over", {});
706
+ })
707
+ .catch(() => {
708
+ // 上传失败
709
+ // this.resetUpload(this.currentUploadIndex)
710
+ that.tableData[this.currentUploadIndex].percentage = 75;
711
+ this.tableData[this.currentUploadIndex].status = "exception";
712
+ this.$emit("upload_over", {});
713
+ });
714
+ // setTimeout(function () {
715
+ // //去调用了这个cancel()方法,没有完成请求的接口便会停止请求
716
+ // self.cancel()
717
+ // }, 1)
718
+ },
719
+
720
+ /**
721
+ * 文件超出个数限制
722
+ */
723
+ handleExceed() {
724
+ this.$message({
725
+ type: "error",
726
+ message: "最多只能选择一个文件",
727
+ });
728
+ },
729
+
730
+ /**
731
+ * 文件变化
732
+ * file, fileList
733
+ */
734
+ handleChange(file, fileLists, index, row) {
735
+ // if(!row.attachmentName) {
736
+ // this.$message({
737
+ // type: "warning",
738
+ // message: "请先输入附件名称再上传",
739
+ // });
740
+ // return false
741
+ // }
742
+ this.tableData[index].fileObj = file;
743
+ this.tableData[index].fileName = file.name;
744
+ this.tableData[index].user = "";
745
+ this.tableData[index].percentage = 0;
746
+ this.tableData[index].uuid = "";
747
+ if (fileLists.length > 1) {
748
+ fileLists.splice(0, 1);
749
+ }
750
+
751
+ this.tableSelectionData2 = [];
752
+ this.tableSelectionData2.push(this.tableData[index]);
753
+ this.validFile(index);
754
+ },
755
+
756
+ /**
757
+ * 获取当前上传的文件的index
758
+ */
759
+ getUploadIndex(index) {
760
+ this.currentUploadIndex = index;
761
+ },
762
+
763
+ strLen(str) {
764
+ let len = 0;
765
+ for (let i = 0; i < str.length; i++) {
766
+ let c = str.charCodeAt(i);
767
+ //单字节加1
768
+ if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) {
769
+ len++;
770
+ } else {
771
+ len += 3;
772
+ }
773
+ }
774
+ return len;
775
+ },
776
+
777
+ /**
778
+ * 校验文件上传
779
+ */
780
+ validFile(index) {
781
+ // if(this.tableSelectionData.length == 0) {
782
+ // return this.$message.warning('请选择数据')
783
+ // }
784
+ let t = this.tableSelectionData2.filter((item) => {
785
+ // return this.strLen(item.fileName) > 60;
786
+ return item.fileName.length > 60;
787
+ });
788
+ if (t.length) {
789
+ this.$message({
790
+ type: "error",
791
+ message: "文件名不能超过64个字,请重新上传!",
792
+ });
793
+ // this.tableData[index].status = 'exception';
794
+ return null;
795
+ }
796
+ let temp = this.tableSelectionData2.filter((item) => {
797
+ const names = item.fileName ? item.fileName.split(".") : [];
798
+ let nameType = names.length ? names[names.length - 1] : "";
799
+ return ["exe", "bin"].includes(nameType);
800
+ });
801
+ if (temp.length) {
802
+ this.$message({
803
+ type: "error",
804
+ message: "暂不支持 .exe, .bin等格式文件格式上传!",
805
+ });
806
+ this.tableData[index].fileName = "";
807
+ return null;
808
+ }
809
+ this.tableData[index].percentage = 50;
810
+ this.submitFile();
811
+ },
812
+
813
+ /**
814
+ * 上传文件
815
+ */
816
+ submitFile() {
817
+ // 获得将要上传的文件
818
+ const uploadFileArr = [];
819
+ this.tableSelectionData2.map((item) => {
820
+ // 没有上传文件 并且选择了文件
821
+ if (!item.uuid && item.fileObj) {
822
+ uploadFileArr.push({
823
+ ref_index: this.tableData.findIndex(
824
+ (objitem) => objitem.id === item.id
825
+ ),
826
+ data: item,
827
+ });
828
+ }
829
+ });
830
+ // 执行
831
+ uploadFileArr.length &&
832
+ this.uploadAction(uploadFileArr).then(() => {
833
+ console.log("上传文件完成");
834
+ });
835
+ },
836
+
837
+ /**
838
+ * 文件上传动作
839
+ */
840
+ uploadAction(fileArr) {
841
+ let uploadedLength = 0;
842
+ return new Promise((resolve) => {
843
+ // 启动上传
844
+ uploadedLength++;
845
+ this.currentUploadIndex = fileArr[0].ref_index;
846
+ this.$refs[
847
+ `nstc_g6_common_upload_index_${this.currentUploadIndex}`
848
+ ].submit();
849
+
850
+ // 监听上传完毕
851
+ this.$on("upload_over", () => {
852
+ if (uploadedLength === fileArr.length) {
853
+ resolve();
854
+ } else {
855
+ uploadedLength++;
856
+ this.currentUploadIndex = fileArr[uploadedLength - 1].ref_index;
857
+ this.$refs[
858
+ `nstc_g6_common_upload_index_${this.currentUploadIndex}`
859
+ ].submit();
860
+ }
861
+ });
862
+ });
863
+ },
864
+
865
+ /**
866
+ * 重置
867
+ */
868
+ resetUpload(index) {
869
+ this.$refs[`nstc_upload_index_${index}`].clearFiles();
870
+ this.tableData[index].fileName = "";
871
+ this.tableData[index].fileSize = "";
872
+ this.tableData[index].percentage = 0;
873
+ this.tableData[index].fileType = 1;
874
+ this.tableData[index].fileFormat = "";
875
+ this.tableData[index].remark = "";
876
+ this.tableData[index].state = "1";
877
+ this.tableData[index].createTime = "";
878
+ this.tableData[index].uuid = "";
879
+ },
880
+
881
+ /**
882
+ * 发生错误重新上传
883
+ */
884
+ reUploadAction(index) {
885
+ console.log("附件上传", index);
886
+ // this.tableData[index].percentage = 0;
887
+ // this.tableData[index].percentage = 50;
888
+ this.$refs[`nstc_g6_common_upload_index_${index}`].submit();
889
+ },
890
+ },
891
+ beforeUpdate() {
892
+ this.showProgress = false;
893
+ },
894
+ updated() {
895
+ setTimeout(() => {
896
+ this.showProgress = true;
897
+ }, 1);
898
+ },
899
+ };
900
+ </script>
901
+
902
+ <style lang="scss">
903
+
904
+ .nstc-file-upload {
905
+ .input-upload {
906
+ height: 100%;
907
+ }
908
+
909
+ .cell {
910
+ padding: 0 8px !important;
911
+ }
912
+
913
+ &-head {
914
+ text-align: right;
915
+ display: flex;
916
+ justify-content: flex-end;
917
+
918
+ .nstc-g6-common-btn-4 {
919
+ // border-color: $--color-danger !important;
920
+ color: #fb5555 !important;
921
+ }
922
+ }
923
+
924
+ &-table {
925
+ margin-top: 12px;
926
+
927
+ .is-success {
928
+ .el-icon-circle-check {
929
+ &:before {
930
+ content: "\e79c";
931
+ }
932
+ }
933
+ }
934
+
935
+ .is-exception {
936
+ .el-icon-circle-close {
937
+ &:before {
938
+ content: "\e79d";
939
+ }
940
+ }
941
+ }
942
+
943
+ th {
944
+ > .cell {
945
+ box-sizing: border-box;
946
+ padding-left: 5px !important;
947
+ text-align: left !important;
948
+ }
949
+ }
950
+
951
+ .el-table-column--selection {
952
+ > .cell {
953
+ text-align: center !important;
954
+ }
955
+ }
956
+
957
+ .input-upload {
958
+ display: flex;
959
+ align-items: center;
960
+ margin-right: 5px;
961
+ }
962
+ }
963
+
964
+ &-opt {
965
+ display: flex;
966
+ justify-content: flex-start;
967
+ align-items: center;
968
+
969
+ img {
970
+ margin-right: 10px;
971
+ // &:hover {
972
+ // cursor: pointer;
973
+ // color: $baseColor;
974
+ // }
975
+ }
976
+ }
977
+
978
+ .nstc-el-progress-box {
979
+ width: 200px;
980
+ display: inline-block;
981
+ }
982
+
983
+ .nstc-file-reload {
984
+ color: #fb5555;
985
+ cursor: pointer;
986
+ }
987
+
988
+ .nstc-file-cancal {
989
+ color: #007aff;
990
+ cursor: pointer;
991
+ }
992
+
993
+ &-input-width {
994
+ max-width: 180px !important;
995
+
996
+ .el-input,
997
+ .el-select {
998
+ max-width: 180px !important;
999
+ }
1000
+ }
1001
+ }
1002
+ </style>
1003
+ <style scoped>
1004
+ .nstc-file-upload /deep/ .cell {
1005
+ padding: 0 8px 0 16px !important;
1006
+ }
1007
+
1008
+ .nstc-file-upload .el-form-item {
1009
+ margin-bottom: 0 !important;
1010
+ }
1011
+ </style>