n20-common-lib 1.3.10 → 1.3.11

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