n20-common-lib 1.3.34 → 1.3.37

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 (419) hide show
  1. package/README.md +2 -2
  2. package/g6.js +2 -2
  3. package/nstc-g6/assets/svg/addFile.svg +31 -31
  4. package/nstc-g6/assets/svg/deleteFile.svg +27 -27
  5. package/nstc-g6/assets/svg/filter.svg +15 -15
  6. package/nstc-g6/assets/svg/filterActive.svg +16 -16
  7. package/nstc-g6/assets/svg/hourglass.svg +18 -18
  8. package/nstc-g6/assets/svg/newsearch.svg +18 -18
  9. package/nstc-g6/assets/svg/searchActive.svg +18 -18
  10. package/nstc-g6/components/Calendar/index.js +8 -8
  11. package/nstc-g6/components/Calendar/src/basic/month-table.vue +129 -129
  12. package/nstc-g6/components/Calendar/src/basic/year-table.vue +126 -126
  13. package/nstc-g6/components/Calendar/src/main.vue +442 -442
  14. package/nstc-g6/components/DialogForm/index.js +8 -8
  15. package/nstc-g6/components/DialogForm/src/demo/index.vue +56 -56
  16. package/nstc-g6/components/DialogForm/src/main.vue +189 -189
  17. package/nstc-g6/components/Form/A_DEMO/component/originalForm.vue +280 -280
  18. package/nstc-g6/components/Form/A_DEMO/config/config_3.js +1222 -1222
  19. package/nstc-g6/components/Form/A_DEMO/index.vue +803 -803
  20. package/nstc-g6/components/Form/AutocompleteCustom/index.vue +72 -72
  21. package/nstc-g6/components/Form/BusinessSpecific/InputMultiple.vue +191 -191
  22. package/nstc-g6/components/Form/BusinessSpecific/InputWithUnit.vue +128 -128
  23. package/nstc-g6/components/Form/BusinessSpecific/SelectTreeDialog.vue +233 -233
  24. package/nstc-g6/components/Form/BusinessSpecific/readme.md +7 -7
  25. package/nstc-g6/components/Form/CascaderCustom/index.vue +101 -101
  26. package/nstc-g6/components/Form/CheckboxCustom/index.vue +84 -84
  27. package/nstc-g6/components/Form/Component.vue +661 -661
  28. package/nstc-g6/components/Form/ComponentSecond.vue +650 -650
  29. package/nstc-g6/components/Form/DatepickerCustom/index.vue +130 -130
  30. package/nstc-g6/components/Form/InputAndDialog/index.js +15 -15
  31. package/nstc-g6/components/Form/InputAndDialog/src/main.vue +394 -394
  32. package/nstc-g6/components/Form/InputCustom/demo/index.vue +65 -65
  33. package/nstc-g6/components/Form/InputCustom/index.vue +307 -307
  34. package/nstc-g6/components/Form/IntervalinputCustom/demo/index.vue +31 -31
  35. package/nstc-g6/components/Form/IntervalinputCustom/index.vue +118 -118
  36. package/nstc-g6/components/Form/Item.vue +330 -330
  37. package/nstc-g6/components/Form/ItemSecond.vue +269 -269
  38. package/nstc-g6/components/Form/List.vue +146 -146
  39. package/nstc-g6/components/Form/ListSecond.vue +130 -130
  40. package/nstc-g6/components/Form/RadioCustom/index.vue +73 -73
  41. package/nstc-g6/components/Form/SelectAccount/index.js +15 -15
  42. package/nstc-g6/components/Form/SelectAccount/src/demo/index.vue +57 -57
  43. package/nstc-g6/components/Form/SelectAccount/src/main.vue +282 -282
  44. package/nstc-g6/components/Form/SelectAndDialog/index.js +15 -15
  45. package/nstc-g6/components/Form/SelectAndDialog/src/main.vue +383 -383
  46. package/nstc-g6/components/Form/SelectCashFlow/index.js +15 -15
  47. package/nstc-g6/components/Form/SelectCashFlow/src/demo/index.vue +41 -41
  48. package/nstc-g6/components/Form/SelectCashFlow/src/main.vue +125 -125
  49. package/nstc-g6/components/Form/SelectCustom/demo/index.vue +82 -82
  50. package/nstc-g6/components/Form/SelectCustom/index.vue +488 -488
  51. package/nstc-g6/components/Form/SelectSubject/index.js +15 -15
  52. package/nstc-g6/components/Form/SelectSubject/src/demo/index.vue +84 -84
  53. package/nstc-g6/components/Form/SelectSubject/src/main.vue +181 -181
  54. package/nstc-g6/components/Form/SelectindialogCustom/demo/index.vue +188 -188
  55. package/nstc-g6/components/Form/SelectindialogCustom/index.vue +650 -650
  56. package/nstc-g6/components/Form/SelectindialogCustom/install.js +6 -6
  57. package/nstc-g6/components/Form/TableRadioCustom/demo/index.vue +53 -53
  58. package/nstc-g6/components/Form/TableRadioCustom/index.vue +183 -183
  59. package/nstc-g6/components/Form/TextCustom/index.vue +38 -38
  60. package/nstc-g6/components/Form/UploadCustom/demo/index.vue +31 -31
  61. package/nstc-g6/components/Form/UploadCustom/index.vue +506 -506
  62. package/nstc-g6/components/Form/configs.js +191 -191
  63. package/nstc-g6/components/Form/configsSecond.js +161 -161
  64. package/nstc-g6/components/Form/index.js +8 -8
  65. package/nstc-g6/components/Form/index.scss +29 -29
  66. package/nstc-g6/components/Form/payeePersonSelect/index.js +15 -15
  67. package/nstc-g6/components/Form/payeePersonSelect/src/demo/index.vue +163 -163
  68. package/nstc-g6/components/Form/payeePersonSelect/src/main.vue +184 -184
  69. package/nstc-g6/components/Form/readme.txt +4 -4
  70. package/nstc-g6/components/FormGroup/index.js +8 -8
  71. package/nstc-g6/components/FormGroup/src/demo/config.js +23 -23
  72. package/nstc-g6/components/FormGroup/src/demo/index.vue +85 -85
  73. package/nstc-g6/components/FormGroup/src/main.vue +639 -639
  74. package/nstc-g6/components/FormGroup/src/validate.js +22 -22
  75. package/nstc-g6/components/InputTag/InputTag.vue +269 -269
  76. package/nstc-g6/components/NstcApprovel/NstcApprovel.vue +24 -24
  77. package/nstc-g6/components/NstcBackToTop/NstcBackToTop.vue +150 -150
  78. package/nstc-g6/components/NstcBranchLazyLoad/NstcBranchLazyLoad.vue +123 -123
  79. package/nstc-g6/components/NstcCharts/NstcCharts.vue +162 -162
  80. package/nstc-g6/components/NstcCharts/define.js +74 -74
  81. package/nstc-g6/components/NstcCharts/mixins/resize.js +56 -56
  82. package/nstc-g6/components/NstcConfirm/NstcConfirm.vue +152 -152
  83. package/nstc-g6/components/NstcConfirm/index.js +24 -24
  84. package/nstc-g6/components/NstcDialog/NstcDialog.vue +184 -184
  85. package/nstc-g6/components/NstcDialogForm/NstcDialogForm.vue +175 -175
  86. package/nstc-g6/components/NstcDialogTable/NstcDialogTable.vue +280 -280
  87. package/nstc-g6/components/NstcDropdown/NstcDropdown.vue +52 -52
  88. package/nstc-g6/components/NstcDropdownTree/NstcDropdownTree.vue +396 -396
  89. package/nstc-g6/components/NstcElectronicFile/NstcElectronicFile.vue +591 -591
  90. package/nstc-g6/components/NstcExcelCustomImport/NstcExcelCustomImport.vue +475 -475
  91. package/nstc-g6/components/NstcExcelExport/NstcExcelExport.vue +145 -145
  92. package/nstc-g6/components/NstcExcelImport/NstcExcelImport.vue +1074 -1074
  93. package/nstc-g6/components/NstcExcelImportN/NstcExcelImportN.vue +1166 -1166
  94. package/nstc-g6/components/NstcExpandCollapse/NstcExpandCollapse.vue +130 -130
  95. package/nstc-g6/components/NstcExpandCollapse/index.scss +77 -77
  96. package/nstc-g6/components/NstcFileUpload/NstcFileUpload.vue +989 -989
  97. package/nstc-g6/components/NstcFileUpload/img/addFile.svg +31 -31
  98. package/nstc-g6/components/NstcFileUpload/img/delete.svg +23 -23
  99. package/nstc-g6/components/NstcFileUpload/img/deleteFile.svg +27 -27
  100. package/nstc-g6/components/NstcFileUpload/img/download.svg +23 -23
  101. package/nstc-g6/components/NstcFileUpload/img/inputUpload.svg +29 -29
  102. package/nstc-g6/components/NstcFileUpload/img/look-diabled.svg +23 -23
  103. package/nstc-g6/components/NstcFileUpload/img/look.svg +23 -23
  104. package/nstc-g6/components/NstcForm/A_DEMO/component/originalForm.vue +280 -280
  105. package/nstc-g6/components/NstcForm/A_DEMO/config/config_3.js +1222 -1222
  106. package/nstc-g6/components/NstcForm/A_DEMO/index.vue +796 -796
  107. package/nstc-g6/components/NstcForm/AutocompleteCustom/index.vue +68 -68
  108. package/nstc-g6/components/NstcForm/BusinessSpecific/InputMultiple.vue +189 -189
  109. package/nstc-g6/components/NstcForm/BusinessSpecific/InputWithUnit.vue +128 -128
  110. package/nstc-g6/components/NstcForm/BusinessSpecific/SelectTreeDialog.vue +233 -233
  111. package/nstc-g6/components/NstcForm/BusinessSpecific/readme.md +7 -7
  112. package/nstc-g6/components/NstcForm/CascaderCustom/index.vue +101 -101
  113. package/nstc-g6/components/NstcForm/CheckboxCustom/index.vue +84 -84
  114. package/nstc-g6/components/NstcForm/Component.vue +684 -684
  115. package/nstc-g6/components/NstcForm/ComponentSecond.vue +650 -650
  116. package/nstc-g6/components/NstcForm/DatepickerCustom/index.vue +130 -130
  117. package/nstc-g6/components/NstcForm/InputAndDialog/NstcInputAndDialog.vue +389 -389
  118. package/nstc-g6/components/NstcForm/InputCustom/index.vue +313 -313
  119. package/nstc-g6/components/NstcForm/IntervalInputCustom/index.vue +111 -111
  120. package/nstc-g6/components/NstcForm/Item.vue +327 -327
  121. package/nstc-g6/components/NstcForm/ItemSecond.vue +269 -269
  122. package/nstc-g6/components/NstcForm/List.vue +146 -146
  123. package/nstc-g6/components/NstcForm/ListSecond.vue +130 -130
  124. package/nstc-g6/components/NstcForm/RadioCustom/index.vue +73 -73
  125. package/nstc-g6/components/NstcForm/SelectAccount/NstcSelectAccount.vue +334 -334
  126. package/nstc-g6/components/NstcForm/SelectAndDialog/NstcSelectAndDialog.vue +377 -377
  127. package/nstc-g6/components/NstcForm/SelectCashFlow/NstcSelectCashFlow.vue +122 -122
  128. package/nstc-g6/components/NstcForm/SelectCustom/index.vue +460 -460
  129. package/nstc-g6/components/NstcForm/SelectSubject/NstcSelectSubject.vue +184 -184
  130. package/nstc-g6/components/NstcForm/SelectindialogCustom/index.vue +648 -648
  131. package/nstc-g6/components/NstcForm/TableRadioCustom/index.vue +183 -183
  132. package/nstc-g6/components/NstcForm/TextCustom/index.vue +38 -38
  133. package/nstc-g6/components/NstcForm/UploadCustom/index.vue +500 -500
  134. package/nstc-g6/components/NstcForm/configs.js +191 -191
  135. package/nstc-g6/components/NstcForm/configsSecond.js +161 -161
  136. package/nstc-g6/components/NstcForm/index.js +8 -8
  137. package/nstc-g6/components/NstcForm/index.scss +29 -29
  138. package/nstc-g6/components/NstcForm/payeePersonSelect/NstcPayeePerson.vue +187 -187
  139. package/nstc-g6/components/NstcForm/readme.txt +4 -4
  140. package/nstc-g6/components/NstcPagination/NstcPagination.vue +428 -428
  141. package/nstc-g6/components/NstcScreenFull/NstcScreenFull.vue +70 -70
  142. package/nstc-g6/components/NstcSelectTree/NstcSelectTree.vue +730 -730
  143. package/nstc-g6/components/NstcSelectTreeList/NstcSelectTreeList.vue +677 -677
  144. package/nstc-g6/components/NstcSticky/NstcSticky.vue +97 -97
  145. package/nstc-g6/components/NstcSvgIcon/NstcSvgIcon.vue +72 -72
  146. package/nstc-g6/components/NstcTab/NstcTab.vue +80 -80
  147. package/nstc-g6/components/NstcTabWithBadge/NstcTabWithBadge.vue +45 -45
  148. package/nstc-g6/components/NstcTabWithBadge/index.scss +31 -31
  149. package/nstc-g6/components/NstcTable/ElTableColumnCustom/index.vue +292 -292
  150. package/nstc-g6/components/NstcTable/NstcTable.vue +460 -460
  151. package/nstc-g6/components/NstcTableSet/NstcTableSet.vue +802 -802
  152. package/nstc-g6/components/NstcThemePicker/NstcThemePicker.vue +186 -186
  153. package/nstc-g6/components/NstcUploadCustomExcel/NstcUploadCustomExcel.vue +330 -330
  154. package/nstc-g6/components/NstcUploadExcel/NstcUploadExcel.vue +145 -145
  155. package/nstc-g6/components/NstcWorkBench/NstcWorkBench.vue +180 -176
  156. package/nstc-g6/components/Search/NstcSearch.vue +583 -583
  157. package/nstc-g6/components/Search/src/demo/index copy.vue +101 -101
  158. package/nstc-g6/components/Search/src/demo/index.vue +103 -103
  159. package/nstc-g6/components/Search/src/main copy.vue +607 -607
  160. package/nstc-g6/components/approvelTwo/main.vue +220 -220
  161. package/nstc-g6/components/approvelTwo/progress.vue +154 -154
  162. package/nstc-g6/directives/VCopy/index.js +59 -59
  163. package/nstc-g6/directives/VNstcNumber/index.js +14 -14
  164. package/nstc-g6/directives/VNstcNumber/temp.js +446 -446
  165. package/nstc-g6/index.js +193 -193
  166. package/nstc-g6/utils/auth.js +2 -2
  167. package/nstc-g6/utils/axios.js +2 -2
  168. package/nstc-g6/utils/dateAndValidator.js +649 -649
  169. package/nstc-g6/utils/debounce.js +40 -40
  170. package/nstc-g6/utils/parseTime.js +48 -48
  171. package/nstc-g6/utils/validate/index.js +6 -6
  172. package/nstc-g6/utils/vendor/Export2Excel.js +229 -229
  173. package/nstc-g6/utils/vendor/Export2Zip.js +24 -24
  174. package/nstc-g6/utils/vue-bus.js +4 -4
  175. package/package.json +116 -116
  176. package/src/_qiankun/index.js +113 -113
  177. package/src/_qiankun/postMessage.js +24 -24
  178. package/src/assets/css/_coreLib.scss +43 -44
  179. package/src/assets/css/alert.scss +31 -31
  180. package/src/assets/css/cl-anchor.scss +32 -32
  181. package/src/assets/css/cl-approve-card.scss +68 -68
  182. package/src/assets/css/cl-dialog.scss +113 -113
  183. package/src/assets/css/cl-drag-list.scss +24 -24
  184. package/src/assets/css/cl-empty.scss +10 -10
  185. package/src/assets/css/cl-expandable-pane.scss +37 -37
  186. package/src/assets/css/cl-expandable.scss +27 -27
  187. package/src/assets/css/cl-file-upload-table.scss +31 -31
  188. package/src/assets/css/cl-filter.scss +4 -4
  189. package/src/assets/css/cl-flow-step.scss +185 -185
  190. package/src/assets/css/cl-footer-box.scss +10 -10
  191. package/src/assets/css/cl-form-item.scss +725 -711
  192. package/src/assets/css/cl-general-card.scss +11 -11
  193. package/src/assets/css/cl-layout-aside.scss +92 -92
  194. package/src/assets/css/cl-layout-content.scss +16 -16
  195. package/src/assets/css/cl-layout-header.scss +89 -89
  196. package/src/assets/css/cl-layout-tabs.scss +87 -87
  197. package/src/assets/css/cl-layout.scss +97 -97
  198. package/src/assets/css/cl-login-temporary.scss +37 -37
  199. package/src/assets/css/cl-message.scss +159 -159
  200. package/src/assets/css/cl-more-tab.scss +98 -98
  201. package/src/assets/css/cl-nav-menu.scss +5 -5
  202. package/src/assets/css/cl-pagination.scss +130 -130
  203. package/src/assets/css/cl-secondary-tab.scss +53 -53
  204. package/src/assets/css/cl-showcolumn.scss +40 -40
  205. package/src/assets/css/cl-sifting.scss +51 -51
  206. package/src/assets/css/cl-statis.scss +54 -54
  207. package/src/assets/css/cl-step.scss +73 -73
  208. package/src/assets/css/cl-suspend.scss +19 -19
  209. package/src/assets/css/cl-tertiary-tab.scss +56 -56
  210. package/src/assets/css/cl-upload.scss +52 -52
  211. package/src/assets/css/cl-worn-pagination.scss +50 -50
  212. package/src/assets/css/el-button.scss +186 -185
  213. package/src/assets/css/el-table.scss +88 -88
  214. package/src/assets/css/element-variables.scss +1061 -1061
  215. package/src/assets/css/element.dev.scss +22 -22
  216. package/src/assets/css/font-icon.scss +26 -26
  217. package/src/assets/css/index.dev.scss +4 -4
  218. package/src/assets/css/index.scss +11 -11
  219. package/src/assets/css/normalize.scss +846 -726
  220. package/src/assets/css/plain-text.scss +36 -36
  221. package/src/assets/css/rootvar.scss +143 -143
  222. package/src/assets/css/select.scss +25 -25
  223. package/src/assets/css/title-pop.scss +23 -23
  224. package/src/assets/getJsonc.js +50 -50
  225. package/src/assets/iconFont/demo.css +539 -539
  226. package/src/assets/iconFont/demo_index.html +1614 -1614
  227. package/src/assets/iconFont/iconfont.css +263 -263
  228. package/src/assets/iconFont/iconfont.json +443 -443
  229. package/src/assets/realUrl.js +12 -12
  230. package/src/components/Anchor/AnchorItem.vue +29 -29
  231. package/src/components/Anchor/index.vue +185 -185
  232. package/src/components/ApprovalButtons/index.vue +240 -240
  233. package/src/components/ApprovalCard/index.vue +132 -132
  234. package/src/components/ApprovalRecord/approvalImg.vue +39 -39
  235. package/src/components/ApprovalRecord/flowDialog.vue +47 -47
  236. package/src/components/ApprovalRecord/index.vue +63 -63
  237. package/src/components/Button/button-group.vue +154 -154
  238. package/src/components/Button/icon-group-button.vue +63 -63
  239. package/src/components/Button/index.vue +56 -56
  240. package/src/components/CascaderArea/index.vue +103 -103
  241. package/src/components/ChildRange/index.vue +169 -169
  242. package/src/components/ChildRange/style.scss +34 -34
  243. package/src/components/ContentLoading/index.vue +41 -41
  244. package/src/components/ContentNull/index.vue +19 -19
  245. package/src/components/DatePicker/index.vue +33 -27
  246. package/src/components/DatePicker/por.vue +171 -169
  247. package/src/components/Descriptions/index.vue +42 -42
  248. package/src/components/Dialog/index.vue +26 -26
  249. package/src/components/Dialog/indexO.vue +116 -116
  250. package/src/components/DragList/index.vue +75 -75
  251. package/src/components/ECharts/define.js +74 -74
  252. package/src/components/ECharts/index.vue +168 -168
  253. package/src/components/ECharts/mixins/resize.js +23 -23
  254. package/src/components/Empty/img/400.svg +101 -101
  255. package/src/components/Empty/img/401.svg +101 -101
  256. package/src/components/Empty/img/403.svg +101 -101
  257. package/src/components/Empty/img/405.svg +101 -101
  258. package/src/components/Empty/img/901.svg +95 -95
  259. package/src/components/Empty/img/902.svg +95 -95
  260. package/src/components/Empty/img/903.svg +95 -95
  261. package/src/components/Empty/img/904.svg +95 -95
  262. package/src/components/Empty/img/905.svg +95 -95
  263. package/src/components/Empty/img/906.svg +95 -95
  264. package/src/components/Empty/img/907.svg +95 -95
  265. package/src/components/Empty/img/abnormal.svg +108 -108
  266. package/src/components/Empty/img/dispose.svg +71 -71
  267. package/src/components/Empty/img/empty.svg +57 -57
  268. package/src/components/Empty/img/general.svg +58 -58
  269. package/src/components/Empty/img/lock.svg +57 -57
  270. package/src/components/Empty/img/network.svg +59 -59
  271. package/src/components/Empty/img/relevant.svg +68 -68
  272. package/src/components/Empty/img/search.svg +72 -72
  273. package/src/components/Empty/index.vue +147 -147
  274. package/src/components/EventBubble/demo/a.vue +28 -28
  275. package/src/components/EventBubble/demo/b.vue +11 -11
  276. package/src/components/EventBubble/demo/c.vue +17 -17
  277. package/src/components/EventBubble/index.vue +57 -57
  278. package/src/components/Expandable/index.vue +49 -49
  279. package/src/components/Expandable/main.vue +64 -64
  280. package/src/components/FileExportAsync/index.vue +191 -191
  281. package/src/components/FileImport/_index.vue +9 -201
  282. package/src/components/FileImport/index.vue +181 -9
  283. package/src/components/FileUploadTable/index.vue +562 -562
  284. package/src/components/Filters/form-item-input.vue +186 -186
  285. package/src/components/Filters/index.vue +216 -216
  286. package/src/components/Filters/indexO.vue +104 -104
  287. package/src/components/FlowStep/index.vue +68 -68
  288. package/src/components/FooterBox/index.vue +21 -21
  289. package/src/components/GeneralCard/index.vue +15 -15
  290. package/src/components/InputNumber/index.vue +184 -179
  291. package/src/components/InputNumber/numberRange.vue +62 -47
  292. package/src/components/InputSearch/index.vue +75 -75
  293. package/src/components/Layout/AsideNav/index.vue +120 -120
  294. package/src/components/Layout/AsideNav/menuItem.vue +34 -34
  295. package/src/components/Layout/AsideNav/submenuTitle.vue +26 -26
  296. package/src/components/Layout/HeaderWrap/changePwd.vue +215 -215
  297. package/src/components/Layout/HeaderWrap/index.vue +418 -418
  298. package/src/components/Layout/HeaderWrap/noticePop.vue +316 -316
  299. package/src/components/Layout/SubContent/index.vue +127 -127
  300. package/src/components/Layout/TabsNav/index.vue +170 -170
  301. package/src/components/Layout/index.vue +518 -518
  302. package/src/components/Layout/utils.js +12 -12
  303. package/src/components/LoginTemporary/form.vue +575 -575
  304. package/src/components/LoginTemporary/index.vue +193 -182
  305. package/src/components/LoginTemporary/qrcode.vue +90 -90
  306. package/src/components/LoginTemporary/retrievePw.vue +372 -372
  307. package/src/components/LoginTemporary/utils.js +73 -73
  308. package/src/components/MicroApp/index.js +67 -67
  309. package/src/components/MicroFrame/index.vue +95 -95
  310. package/src/components/MoreTab/index.vue +232 -232
  311. package/src/components/NavMenu/index.vue +60 -60
  312. package/src/components/PageHeader/index.vue +35 -35
  313. package/src/components/PageHeader/style.scss +44 -44
  314. package/src/components/PageLayout/page.vue +15 -15
  315. package/src/components/Pagination/index.vue +165 -165
  316. package/src/components/SecondaryTab/index.vue +58 -58
  317. package/src/components/SelectLazy/index.vue +76 -75
  318. package/src/components/SelectTree/SelectTreeLazy.vue +241 -241
  319. package/src/components/SelectTree/index.vue +206 -206
  320. package/src/components/ShowColumn/index.vue +252 -252
  321. package/src/components/Sifting/index.vue +99 -99
  322. package/src/components/Stamp/index.vue +75 -75
  323. package/src/components/Statis/index.vue +111 -111
  324. package/src/components/Statis/statisItem.vue +60 -60
  325. package/src/components/Statis/statisPopover.vue +63 -63
  326. package/src/components/Step/index.vue +38 -38
  327. package/src/components/Suspend/index.vue +72 -72
  328. package/src/components/Table/ThSelectHeader.vue +128 -128
  329. package/src/components/Table/filters.js +60 -60
  330. package/src/components/Table/index.vue +136 -136
  331. package/src/components/Table/indexO.vue +149 -149
  332. package/src/components/TableOperateColumn/OperateBtns.vue +73 -73
  333. package/src/components/TableOperateColumn/index.vue +26 -26
  334. package/src/components/Task/index.vue +26 -26
  335. package/src/components/TertiaryTab/index.vue +63 -63
  336. package/src/components/TimePicker/index.vue +28 -28
  337. package/src/components/Upload/index.vue +268 -268
  338. package/src/components/WornPagination/index.vue +73 -73
  339. package/src/directives/VClickOutside/index.js +19 -19
  340. package/src/directives/VHas/index.js +58 -58
  341. package/src/directives/VMove/index.js +42 -42
  342. package/src/directives/VRuleKey/index.js +194 -0
  343. package/src/directives/VTitle/index.js +106 -106
  344. package/src/index.js +264 -262
  345. package/src/plugins/CompatibleOld/index.js +11 -11
  346. package/src/plugins/Print/index.js +4 -4
  347. package/src/plugins/Print/print-js/.babelrc +12 -12
  348. package/src/plugins/Print/print-js/LICENSE +21 -21
  349. package/src/plugins/Print/print-js/README.md +98 -98
  350. package/src/plugins/Print/print-js/dist/print.css +96 -96
  351. package/src/plugins/Print/print-js/dist/print.js +990 -990
  352. package/src/plugins/Print/print-js/package.json +60 -60
  353. package/src/plugins/Print/print-js/src/index.d.ts +45 -45
  354. package/src/plugins/Print/print-js/src/index.js +10 -10
  355. package/src/plugins/Print/print-js/src/js/browser.js +33 -33
  356. package/src/plugins/Print/print-js/src/js/functions.js +103 -103
  357. package/src/plugins/Print/print-js/src/js/html.js +70 -70
  358. package/src/plugins/Print/print-js/src/js/image.js +48 -48
  359. package/src/plugins/Print/print-js/src/js/init.js +168 -168
  360. package/src/plugins/Print/print-js/src/js/json.js +109 -109
  361. package/src/plugins/Print/print-js/src/js/modal.js +62 -62
  362. package/src/plugins/Print/print-js/src/js/pdf.js +62 -62
  363. package/src/plugins/Print/print-js/src/js/print.js +102 -102
  364. package/src/plugins/Print/print-js/src/js/raw-html.js +15 -15
  365. package/src/plugins/Print/print-js/src/sass/index.scss +13 -13
  366. package/src/plugins/Print/print-js/src/sass/modules/_colors.scss +9 -9
  367. package/src/plugins/Print/print-js/src/sass/partials/_modal.scss +40 -40
  368. package/src/plugins/Print/print-js/src/sass/partials/_spinner.scss +45 -45
  369. package/src/plugins/Print/print.js +2 -2
  370. package/src/plugins/Print/print.scss +1 -1
  371. package/src/plugins/SetMenuTree/index.vue +41 -41
  372. package/src/plugins/SetMenuTree/logoIcon.vue +37 -37
  373. package/src/plugins/SetMenuTree/setmenutree.vue +427 -427
  374. package/src/plugins/SetMenuTree/utils.js +74 -74
  375. package/src/plugins/Sign/InfosecNetSignCNGAgent.min.js +2000 -2000
  376. package/src/plugins/Sign/bjca/XTXSAB.js +2395 -2395
  377. package/src/plugins/Sign/bjca/index.js +129 -124
  378. package/src/plugins/Sign/index.js +28 -28
  379. package/src/plugins/Sign/sign.js +64 -64
  380. package/src/plugins/setTabsForSub.js +2 -2
  381. package/src/utils/auth.js +54 -54
  382. package/src/utils/axios.js +203 -203
  383. package/src/utils/downloadBlob.js +19 -19
  384. package/src/utils/forEachs.js +16 -16
  385. package/src/utils/getScrollContainer.js +43 -43
  386. package/src/utils/handleTab.js +109 -109
  387. package/src/utils/i18n/cn2hk.json +1270 -1270
  388. package/src/utils/i18n/index.js +50 -50
  389. package/src/utils/list2tree.js +36 -36
  390. package/src/utils/mapper_aims.js +809 -809
  391. package/src/utils/msgboxPor.js +26 -26
  392. package/src/utils/print.js +161 -161
  393. package/src/utils/relaNo.js +72 -72
  394. package/src/utils/repairElementUI.js +145 -95
  395. package/src/utils/tableheaderFilterpanel.vue +249 -0
  396. package/src/utils/theme.config.js +22 -22
  397. package/src/utils/theme.js +31 -31
  398. package/src/utils/toExcel.js +95 -115
  399. package/src/utils/urlToGo.js +82 -82
  400. package/src/utils/xls2json.js +40 -0
  401. package/src/utils/xlsx2json.js +24 -0
  402. package/style/index.css +1 -1
  403. package/style/index.css.map +1 -1
  404. package/theme/blue.css +1 -1
  405. package/theme/green.css +1 -1
  406. package/theme/lightBlue.css +1 -1
  407. package/theme/orange.css +1 -1
  408. package/theme/purple.css +1 -1
  409. package/theme/red.css +1 -1
  410. package/theme/yellow.css +1 -1
  411. package/src/assets/.DS_Store +0 -0
  412. package/src/components/.DS_Store +0 -0
  413. package/src/components/Empty/.DS_Store +0 -0
  414. package/src/components/Empty/img/.DS_Store +0 -0
  415. package/src/components/Layout/.DS_Store +0 -0
  416. package/src/components/Search/index.vue +0 -485
  417. package/src/components/Search/style.scss +0 -93
  418. package/src/plugins/.DS_Store +0 -0
  419. package/src/plugins/Sign/.DS_Store +0 -0
@@ -1,575 +1,575 @@
1
- <template>
2
- <!-- eslint-disable no-irregular-whitespace -->
3
- <div v-loading="loadingV" class="login-form-wrap flex-column p-a">
4
- <slot name="header"></slot>
5
- <svg class="cut-qrcode-h">
6
- <image
7
- v-if="theType === 'qrcode'"
8
- width="52"
9
- height="52"
10
- xlink:href="./qrt.png"
11
- />
12
- <image v-else width="52" height="52" xlink:href="./qr.png" />
13
- <path d="M0,0L52,0L52,52Z" @click="cutQrcode" />
14
- </svg>
15
- <!-- 账号/密码登录 -->
16
- <div v-if="theType === 'account'" class="flex-item">
17
- <el-form
18
- ref="login-form"
19
- :model="form"
20
- :rules="rules"
21
- :hide-required-asterisk="true"
22
- @submit.native.prevent="submitLogin"
23
- >
24
- <el-form-item class="m-b" label="账号" prop="username">
25
- <el-input v-model="form.username" placeholder="请输入账号" />
26
- </el-form-item>
27
- <el-form-item class="m-b" label="密码" prop="password">
28
- <el-input
29
- v-model="form.password"
30
- placeholder="请输入密码"
31
- show-password
32
- />
33
- <!-- 不自动填充密码
34
- <input
35
- v-model="fakePwd"
36
- type="password"
37
- name="password"
38
- hidden="hidden"
39
- @change="fakePwd = 'a1b2c3d4'"
40
- />
41
- <el-input
42
- v-model="form.password"
43
- placeholder="请输入密码"
44
- :class="{ 'login-password': !showPwd }"
45
- >
46
- <i
47
- slot="suffix"
48
- class="el-input__icon el-icon-view"
49
- style="pointer-events: all"
50
- @click.stop="showPwd = !showPwd"
51
- ></i>
52
- </el-input>
53
- 不自动填充密码End -->
54
- </el-form-item>
55
- <el-button
56
- class="m-t"
57
- type="primary"
58
- native-type="submit"
59
- style="width: 100%"
60
- >登 录</el-button
61
- >
62
- </el-form>
63
- </div>
64
- <!-- 二维码扫码登录 -->
65
- <qrCode v-else-if="theType === 'qrcode'" @qrcode-login="QrcodeLogin" />
66
- <!-- 手机验证码登录 -->
67
- <div v-if="theType === 'pthon'" class="flex-item">
68
- <el-form
69
- ref="login-form"
70
- :model="form"
71
- :rules="rules"
72
- :hide-required-asterisk="true"
73
- @submit.native.prevent="submitLogin"
74
- >
75
- <el-form-item class="m-b" label="手机号" prop="phone">
76
- <el-input v-model="form.phone" placeholder="请输入手机号" />
77
- </el-form-item>
78
- <el-form-item class="m-b" label="验证码" prop="code">
79
- <br />
80
- <div class="flex-box">
81
- <el-input
82
- v-model="form.code"
83
- class="flex-item m-r-s"
84
- placeholder="请输入验证码"
85
- />
86
- <el-button
87
- plain
88
- style="4em"
89
- :disabled="!form.phone || codeNum !== '验证码'"
90
- @click="sendMsg('phone', '手机号')"
91
- >{{ codeNum }}</el-button
92
- >
93
- </div>
94
- </el-form-item>
95
- <el-button
96
- class="m-t"
97
- type="primary"
98
- native-type="submit"
99
- style="width: 100%"
100
- >登 录</el-button
101
- >
102
- </el-form>
103
- </div>
104
- <!-- 账户密码验证码登录 -->
105
- <div v-if="theType === 'accountPthon'" class="flex-item">
106
- <el-form
107
- ref="login-form"
108
- :model="form"
109
- :rules="rules"
110
- :hide-required-asterisk="true"
111
- @submit.native.prevent="submitLogin"
112
- >
113
- <el-form-item class="m-b" label="账号" prop="username">
114
- <el-input v-model="form.username" placeholder="请输入账号" />
115
- </el-form-item>
116
- <el-form-item class="m-b" label="密码" prop="password">
117
- <el-input
118
- v-model="form.password"
119
- placeholder="请输入密码"
120
- show-password
121
- />
122
- </el-form-item>
123
- <el-form-item class="m-b" label="验证码" prop="code">
124
- <br />
125
- <div class="flex-box">
126
- <el-input
127
- v-model="form.code"
128
- class="flex-item m-r-s"
129
- placeholder="请输入验证码"
130
- />
131
- <el-button
132
- plain
133
- style="4em"
134
- :disabled="!form.username || codeNum !== '验证码'"
135
- @click="sendMsg('username', '账户')"
136
- >{{ codeNum }}</el-button
137
- >
138
- </div>
139
- </el-form-item>
140
- <el-button
141
- class="m-t"
142
- type="primary"
143
- native-type="submit"
144
- style="width: 100%"
145
- >登 录</el-button
146
- >
147
- </el-form>
148
- </div>
149
- <!-- -->
150
- <div v-if="theType !== 'qrcode'" class="flex-box flex-lr m-t-s m-b-s">
151
- <el-dropdown
152
- size="mini"
153
- placement="bottom-start"
154
- @command="changeLoginType"
155
- >
156
- <span>其他登录方式</span>
157
- <el-dropdown-menu slot="dropdown">
158
- <template v-for="item in loginTypes">
159
- <el-dropdown-item
160
- v-if="item !== theType"
161
- :key="item"
162
- :command="item"
163
- >{{ loginTypeMap[item] }}</el-dropdown-item
164
- >
165
- </template>
166
- </el-dropdown-menu>
167
- </el-dropdown>
168
-
169
- <el-link :underline="false" @click="forgetPw">忘记密码</el-link>
170
- </div>
171
- <slot name="footer"></slot>
172
- </div>
173
- </template>
174
-
175
- <script>
176
- import decode from 'jsonwebtoken/decode'
177
- import axios from '../../utils/axios'
178
- import auth from '../../utils/auth'
179
- import qrCode from './qrcode.vue'
180
- import { siteTree2menus, siteTree2RelaNos } from './utils'
181
-
182
- function encode(pwd = '', key = 0) {
183
- if (pwd === '') return ''
184
-
185
- let pwdArr = pwd.trim().split('')
186
- let resultArr = pwdArr.map((oPwd) =>
187
- String.fromCharCode(oPwd.charCodeAt() ^ key)
188
- )
189
- let result = resultArr.join('')
190
-
191
- return window.btoa(window.unescape(window.encodeURIComponent(result)))
192
- }
193
-
194
- export default {
195
- name: 'LoginForm',
196
- components: {
197
- qrCode
198
- },
199
- props: {
200
- loginTypes: {
201
- type: Array,
202
- default: () => ['account']
203
- },
204
- loginThen: {
205
- type: Function,
206
- default: undefined
207
- }
208
- },
209
- data() {
210
- return {
211
- showPwd: false,
212
- fakePwd: 'a1b2c3d4',
213
- loadingV: false,
214
- loginTypeMap: {
215
- account: '账号密码登录',
216
- pthon: '手机验证码登录',
217
- qrcode: '二维码扫码登录',
218
- accountPthon: '账户密码验证码登录'
219
- },
220
- theType: this.loginTypes[0],
221
- userNo: undefined,
222
- form: {
223
- username: '',
224
- password: '',
225
- code: ''
226
- },
227
- pwd: '',
228
- rules: {
229
- username: [{ required: true, message: '请输入账号!', trigger: 'blur' }],
230
- password: [{ required: true, message: '请输入密码!', trigger: 'blur' }],
231
- code: [{ required: true, message: '请输入验证码!', trigger: 'blur' }],
232
- phone: [
233
- { required: true, message: '请输入手机号!', trigger: 'blur' },
234
- {
235
- pattern: /^1\d{10}$/,
236
- message: '请输入正确手机号!',
237
- trigger: 'blur'
238
- }
239
- ]
240
- },
241
- codeNum: '验证码',
242
- getAzCount: 0
243
- }
244
- },
245
- methods: {
246
- // 忘记密码
247
- forgetPw() {
248
- this.$emit('changType', 'retrievePw')
249
- },
250
- // 切换登录方式
251
- changeLoginType(val) {
252
- this.theType = val
253
- },
254
- // 切换二维码小图标
255
- cutQrcode() {
256
- if (this.theType !== 'qrcode') {
257
- this.theType = 'qrcode'
258
- } else {
259
- this.theType = this.loginTypes[0]
260
- }
261
- },
262
- // 发送短信
263
- outTime(num) {
264
- clearTimeout(this.setTimeNum)
265
- if (num > 0) {
266
- num--
267
- this.codeNum = num + 'S'
268
-
269
- this.setTimeNum = setTimeout(() => {
270
- this.outTime(num)
271
- }, 1000)
272
- num--
273
- } else {
274
- clearTimeout(this.setTimeNum)
275
- this.codeNum = '验证码'
276
- }
277
- },
278
- sendMsg(type = 'phone', typeName = '手机号') {
279
- this.$refs['login-form'].validateField(type, (valid) => {
280
- if (!valid) {
281
- this.outTime(60)
282
-
283
- axios
284
- // .get(
285
- // `/bems/prod_1.0/uas/api/authorization/captcha/${this.form[type]}/1`,
286
- // null,
287
- // { loading: false, noMsg: true }
288
- // )
289
- .post(
290
- '/bems/prod_1.0/uas/api/authorization/captcha',
291
- {
292
- handleType: 1,
293
- mobile: type === 'phone' ? this.form[type] : '',
294
- username: type !== 'phone' ? this.form[type] : ''
295
- },
296
- { loading: false }
297
- )
298
- .then(() => {
299
- this.$message.success(
300
- `${typeName}: ${this.form[type]} 验证码发送成功`
301
- )
302
- })
303
- .catch(() => {
304
- clearTimeout(this.setTimeNum)
305
- this.codeNum = '验证码'
306
- })
307
- }
308
- })
309
- },
310
- loadingFn() {
311
- this.loadingV = false
312
- },
313
- // 登录
314
- submitLogin() {
315
- this.$refs['login-form'].validate((valid) => {
316
- if (!valid) return false
317
-
318
- auth.removeToken()
319
- this.theType === 'account' && this.passwordLogin().catch(this.loadingFn)
320
- this.theType === 'pthon' && this.phoneLogin().catch(this.loadingFn)
321
- this.theType === 'accountPthon' &&
322
- this.accountPthonLogin().catch(this.loadingFn)
323
- })
324
- },
325
- // 获取加密参数
326
- authorizationCode(username, password, code) {
327
- this.getAzCount = this.getAzCount + 1
328
-
329
- let pwdArr = code ? [username, password, code] : [username, password]
330
- let pwd = pwdArr.join('@@')
331
-
332
- return new Promise((resolve, reject) => {
333
- if (this.getAzCount <= 3) {
334
- axios
335
- .get(
336
- '/bems/prod_1.0/uas/api/authorization/authorizationCode',
337
- {},
338
- { loading: false }
339
- )
340
- .then(({ data = {} }) => {
341
- try {
342
- pwd = encode(pwd, data.authorizationValue)
343
- this.pwd = pwd + '@@' + data.authorizationKey
344
-
345
- this.getAzCount = 0
346
- resolve()
347
- } catch (error) {
348
- console.error('密码加密错误:' + JSON.stringify(data))
349
- this.authorizationCode(username, password, code) // 再次请求
350
- .then(resolve)
351
- .catch(reject)
352
- }
353
- })
354
- } else {
355
- // 当重新请求大于3次,抛出错误
356
- this.$message.warning(`登录失败,请重新登录!`)
357
- this.getAzCount = 0
358
- reject()
359
- }
360
- })
361
- },
362
- // 账号/密码登录
363
- async passwordLogin() {
364
- this.loadingV = true
365
-
366
- let { username, password, code } = this.form
367
- await this.authorizationCode(username, password, code)
368
- // 请求该账号要不要强制验证码登录
369
- let cL = await axios.post(
370
- '/bems/prod_1.0/uas/api/authorization/checkLogin',
371
- { grantType: 'password', username, password: this.pwd, code },
372
- {
373
- loading: false
374
- }
375
- )
376
-
377
- // 输入验证码
378
- if (cL.data === true) {
379
- this.loadingV = false
380
- this.theType = 'accountPthon'
381
-
382
- this.outTime(60)
383
- return
384
- } else if (cL.data === false /* 签名验签 */) {
385
- // 获取线上签名uDn
386
- let uDn = await axios.get(
387
- `/bems/prod_1.0/dssc/sign/getUserDn/${username}/password`,
388
- null,
389
- { loading: false }
390
- )
391
- let { checkCert, userDn, supplier } = uDn.data
392
- // 走本地签名
393
- let sign = undefined
394
- let certDn = undefined
395
- if (checkCert) {
396
- if (supplier === 'bjca') {
397
- // 北京CA
398
- window.sessionStorage.setItem('signType', 'bjcaSign')
399
- } else {
400
- // 信安CA
401
- window.sessionStorage.setItem('signType', 'inetSign')
402
- }
403
-
404
- let { getSign } = await import('../../plugins/Sign')
405
- sign = await getSign(username + userDn, userDn)
406
- certDn = userDn
407
- }
408
- await this.authorizationCode(username, password, code) // authorizationValue 使用一次后就失效了
409
- axios
410
- .post(
411
- '/bems/prod_1.0/uas/api/authorization/login',
412
- {
413
- grantType: 'password',
414
- username,
415
- password: this.pwd,
416
- code,
417
- sign,
418
- certDn
419
- },
420
- {
421
- loading: this.loadingFn
422
- }
423
- )
424
- .then((res) => {
425
- this.loginAfter(res.data)
426
- })
427
- this.loadingV = false
428
-
429
- return
430
- }
431
-
432
- // 正常登录
433
- await this.authorizationCode(username, password, code) // authorizationValue 使用一次后就失效了
434
- axios
435
- .post(
436
- '/bems/prod_1.0/uas/api/authorization/login',
437
- { grantType: 'password', username, password: this.pwd, code },
438
- { loading: this.loadingFn }
439
- )
440
- .then((res) => {
441
- this.loginAfter(res.data)
442
- })
443
- },
444
- // 二维码扫码登录
445
- QrcodeLogin(userNo, qrcode) {
446
- axios
447
- .post(
448
- '/bems/prod_1.0/uas/api/authorization/login',
449
- {
450
- grantType: 'qr_code',
451
- type: 'qr_code',
452
- username: userNo,
453
- password: qrcode
454
- },
455
- { loading: false }
456
- )
457
- .then((res) => {
458
- this.loginAfter(res.data)
459
- })
460
- },
461
- // 手机号/验证码登录
462
- async phoneLogin() {
463
- this.loadingV = true
464
- let { phone, code } = this.form
465
- await this.authorizationCode(phone, code)
466
- let pwd = this.pwd
467
-
468
- axios
469
- .post(
470
- '/bems/prod_1.0/uas/api/authorization/login',
471
- { grantType: 'mobile', username: phone, password: pwd },
472
- { loading: this.loadingFn }
473
- )
474
- .then((res) => {
475
- this.loginAfter(res.data)
476
- })
477
- },
478
- async accountPthonLogin() {
479
- this.loadingV = true
480
- let { username, password, code } = this.form
481
- await this.authorizationCode(username, password, code)
482
- let pwd = this.pwd
483
-
484
- axios
485
- .post(
486
- '/bems/prod_1.0/uas/api/authorization/login',
487
- { grantType: 'user_password_code', username, password: pwd, code },
488
- { loading: this.loadingFn }
489
- )
490
- .then((res) => {
491
- this.loginAfter(res.data)
492
- })
493
- },
494
- // 登录成功后
495
- loginAfter(data) {
496
- auth.setToken(data.accessToken)
497
- try {
498
- let tokenObj = decode(data.accessToken)
499
- let userInfo = JSON.parse(tokenObj.user_name)
500
- this.userNo = userInfo.userNo
501
- sessionStorage.setItem('User_Info', tokenObj.user_name)
502
- } catch (error) {
503
- console.error('accessToken解析错误:' + data.accessToken)
504
- }
505
-
506
- Promise.all([
507
- this.getUserInfo(),
508
- this.getMicroAppsInfo(),
509
- this.getCltRelaNos()
510
- ]).then(() => {
511
- if (this.loginThen) {
512
- this.loginThen().then(() => {
513
- this.$router.replace('/')
514
- })
515
- } else {
516
- this.$router.replace('/')
517
- }
518
- })
519
- },
520
- // 获取用户基本信息
521
- async getUserInfo() {
522
- let username = this.userNo
523
- let { data } = await axios.get(
524
- // '/bems/prod_1.0/user/api/userController/userCltAdDep/' + username
525
- '/bems/prod_1.0/user/api/userController/userCltAdRole/' + username,
526
- null,
527
- { loading: false }
528
- )
529
- let userInfo = data || { uname: username }
530
-
531
- sessionStorage.setItem('userNo', username)
532
- sessionStorage.setItem('userInfo', JSON.stringify(userInfo))
533
- sessionStorage.setItem('loginTime', Date.now())
534
- },
535
- // 获取子应用相关列表
536
- async getMicroAppsInfo() {
537
- this.loadingV = true
538
- let { data } = await axios.get('/bems/1.0/menuTree/tree', null, {
539
- loading: this.loadingFn
540
- })
541
- data || (data = [])
542
-
543
- let layoutMenus = siteTree2menus(data)
544
- sessionStorage.setItem('menuTree', JSON.stringify(layoutMenus))
545
-
546
- let relaNos = siteTree2RelaNos(data)
547
- sessionStorage.setItem('relaNos', JSON.stringify(relaNos))
548
-
549
- // XXX: 兼容旧版resources
550
- sessionStorage.setItem('resources', JSON.stringify(data))
551
- },
552
- // 新增不同单位对应不同角色,具有不同权限
553
- getCltRelaNos() {
554
- let pro = new Promise((resolve) => {
555
- axios
556
- .post(
557
- '/bems/prod_1.0/user/api/userController/qryBusyInfoNo',
558
- { uno: this.userNo },
559
- { loading: false, noMsg: true }
560
- )
561
- .then(({ data: cltrelaMap = [] }) => {
562
- let cltrelaNos = {}
563
- cltrelaMap.forEach((item) => {
564
- cltrelaNos[item.cltNo] = item.relaNos
565
- })
566
- sessionStorage.setItem('cltrelaNos', JSON.stringify(cltrelaNos))
567
- })
568
- .finally(resolve)
569
- })
570
-
571
- return pro
572
- }
573
- }
574
- }
575
- </script>
1
+ <template>
2
+ <!-- eslint-disable no-irregular-whitespace -->
3
+ <div v-loading="loadingV" class="login-form-wrap flex-column p-a">
4
+ <slot name="header"></slot>
5
+ <svg class="cut-qrcode-h">
6
+ <image
7
+ v-if="theType === 'qrcode'"
8
+ width="52"
9
+ height="52"
10
+ xlink:href="./qrt.png"
11
+ />
12
+ <image v-else width="52" height="52" xlink:href="./qr.png" />
13
+ <path d="M0,0L52,0L52,52Z" @click="cutQrcode" />
14
+ </svg>
15
+ <!-- 账号/密码登录 -->
16
+ <div v-if="theType === 'account'" class="flex-item">
17
+ <el-form
18
+ ref="login-form"
19
+ :model="form"
20
+ :rules="rules"
21
+ :hide-required-asterisk="true"
22
+ @submit.native.prevent="submitLogin"
23
+ >
24
+ <el-form-item class="m-b" label="账号" prop="username">
25
+ <el-input v-model="form.username" placeholder="请输入账号" />
26
+ </el-form-item>
27
+ <el-form-item class="m-b" label="密码" prop="password">
28
+ <el-input
29
+ v-model="form.password"
30
+ placeholder="请输入密码"
31
+ show-password
32
+ />
33
+ <!-- 不自动填充密码
34
+ <input
35
+ v-model="fakePwd"
36
+ type="password"
37
+ name="password"
38
+ hidden="hidden"
39
+ @change="fakePwd = 'a1b2c3d4'"
40
+ />
41
+ <el-input
42
+ v-model="form.password"
43
+ placeholder="请输入密码"
44
+ :class="{ 'login-password': !showPwd }"
45
+ >
46
+ <i
47
+ slot="suffix"
48
+ class="el-input__icon el-icon-view"
49
+ style="pointer-events: all"
50
+ @click.stop="showPwd = !showPwd"
51
+ ></i>
52
+ </el-input>
53
+ 不自动填充密码End -->
54
+ </el-form-item>
55
+ <el-button
56
+ class="m-t"
57
+ type="primary"
58
+ native-type="submit"
59
+ style="width: 100%"
60
+ >登 录</el-button
61
+ >
62
+ </el-form>
63
+ </div>
64
+ <!-- 二维码扫码登录 -->
65
+ <qrCode v-else-if="theType === 'qrcode'" @qrcode-login="QrcodeLogin" />
66
+ <!-- 手机验证码登录 -->
67
+ <div v-if="theType === 'pthon'" class="flex-item">
68
+ <el-form
69
+ ref="login-form"
70
+ :model="form"
71
+ :rules="rules"
72
+ :hide-required-asterisk="true"
73
+ @submit.native.prevent="submitLogin"
74
+ >
75
+ <el-form-item class="m-b" label="手机号" prop="phone">
76
+ <el-input v-model="form.phone" placeholder="请输入手机号" />
77
+ </el-form-item>
78
+ <el-form-item class="m-b" label="验证码" prop="code">
79
+ <br />
80
+ <div class="flex-box">
81
+ <el-input
82
+ v-model="form.code"
83
+ class="flex-item m-r-s"
84
+ placeholder="请输入验证码"
85
+ />
86
+ <el-button
87
+ plain
88
+ style="4em"
89
+ :disabled="!form.phone || codeNum !== '验证码'"
90
+ @click="sendMsg('phone', '手机号')"
91
+ >{{ codeNum }}</el-button
92
+ >
93
+ </div>
94
+ </el-form-item>
95
+ <el-button
96
+ class="m-t"
97
+ type="primary"
98
+ native-type="submit"
99
+ style="width: 100%"
100
+ >登 录</el-button
101
+ >
102
+ </el-form>
103
+ </div>
104
+ <!-- 账户密码验证码登录 -->
105
+ <div v-if="theType === 'accountPthon'" class="flex-item">
106
+ <el-form
107
+ ref="login-form"
108
+ :model="form"
109
+ :rules="rules"
110
+ :hide-required-asterisk="true"
111
+ @submit.native.prevent="submitLogin"
112
+ >
113
+ <el-form-item class="m-b" label="账号" prop="username">
114
+ <el-input v-model="form.username" placeholder="请输入账号" />
115
+ </el-form-item>
116
+ <el-form-item class="m-b" label="密码" prop="password">
117
+ <el-input
118
+ v-model="form.password"
119
+ placeholder="请输入密码"
120
+ show-password
121
+ />
122
+ </el-form-item>
123
+ <el-form-item class="m-b" label="验证码" prop="code">
124
+ <br />
125
+ <div class="flex-box">
126
+ <el-input
127
+ v-model="form.code"
128
+ class="flex-item m-r-s"
129
+ placeholder="请输入验证码"
130
+ />
131
+ <el-button
132
+ plain
133
+ style="4em"
134
+ :disabled="!form.username || codeNum !== '验证码'"
135
+ @click="sendMsg('username', '账户')"
136
+ >{{ codeNum }}</el-button
137
+ >
138
+ </div>
139
+ </el-form-item>
140
+ <el-button
141
+ class="m-t"
142
+ type="primary"
143
+ native-type="submit"
144
+ style="width: 100%"
145
+ >登 录</el-button
146
+ >
147
+ </el-form>
148
+ </div>
149
+ <!-- -->
150
+ <div v-if="theType !== 'qrcode'" class="flex-box flex-lr m-t-s m-b-s">
151
+ <el-dropdown
152
+ size="mini"
153
+ placement="bottom-start"
154
+ @command="changeLoginType"
155
+ >
156
+ <span>其他登录方式</span>
157
+ <el-dropdown-menu slot="dropdown">
158
+ <template v-for="item in loginTypes">
159
+ <el-dropdown-item
160
+ v-if="item !== theType"
161
+ :key="item"
162
+ :command="item"
163
+ >{{ loginTypeMap[item] }}</el-dropdown-item
164
+ >
165
+ </template>
166
+ </el-dropdown-menu>
167
+ </el-dropdown>
168
+
169
+ <el-link :underline="false" @click="forgetPw">忘记密码</el-link>
170
+ </div>
171
+ <slot name="footer"></slot>
172
+ </div>
173
+ </template>
174
+
175
+ <script>
176
+ import decode from 'jsonwebtoken/decode'
177
+ import axios from '../../utils/axios'
178
+ import auth from '../../utils/auth'
179
+ import qrCode from './qrcode.vue'
180
+ import { siteTree2menus, siteTree2RelaNos } from './utils'
181
+
182
+ function encode(pwd = '', key = 0) {
183
+ if (pwd === '') return ''
184
+
185
+ let pwdArr = pwd.trim().split('')
186
+ let resultArr = pwdArr.map((oPwd) =>
187
+ String.fromCharCode(oPwd.charCodeAt() ^ key)
188
+ )
189
+ let result = resultArr.join('')
190
+
191
+ return window.btoa(window.unescape(window.encodeURIComponent(result)))
192
+ }
193
+
194
+ export default {
195
+ name: 'LoginForm',
196
+ components: {
197
+ qrCode
198
+ },
199
+ props: {
200
+ loginTypes: {
201
+ type: Array,
202
+ default: () => ['account']
203
+ },
204
+ loginThen: {
205
+ type: Function,
206
+ default: undefined
207
+ }
208
+ },
209
+ data() {
210
+ return {
211
+ showPwd: false,
212
+ fakePwd: 'a1b2c3d4',
213
+ loadingV: false,
214
+ loginTypeMap: {
215
+ account: '账号密码登录',
216
+ pthon: '手机验证码登录',
217
+ qrcode: '二维码扫码登录',
218
+ accountPthon: '账户密码验证码登录'
219
+ },
220
+ theType: this.loginTypes[0],
221
+ userNo: undefined,
222
+ form: {
223
+ username: '',
224
+ password: '',
225
+ code: ''
226
+ },
227
+ pwd: '',
228
+ rules: {
229
+ username: [{ required: true, message: '请输入账号!', trigger: 'blur' }],
230
+ password: [{ required: true, message: '请输入密码!', trigger: 'blur' }],
231
+ code: [{ required: true, message: '请输入验证码!', trigger: 'blur' }],
232
+ phone: [
233
+ { required: true, message: '请输入手机号!', trigger: 'blur' },
234
+ {
235
+ pattern: /^1\d{10}$/,
236
+ message: '请输入正确手机号!',
237
+ trigger: 'blur'
238
+ }
239
+ ]
240
+ },
241
+ codeNum: '验证码',
242
+ getAzCount: 0
243
+ }
244
+ },
245
+ methods: {
246
+ // 忘记密码
247
+ forgetPw() {
248
+ this.$emit('changType', 'retrievePw')
249
+ },
250
+ // 切换登录方式
251
+ changeLoginType(val) {
252
+ this.theType = val
253
+ },
254
+ // 切换二维码小图标
255
+ cutQrcode() {
256
+ if (this.theType !== 'qrcode') {
257
+ this.theType = 'qrcode'
258
+ } else {
259
+ this.theType = this.loginTypes[0]
260
+ }
261
+ },
262
+ // 发送短信
263
+ outTime(num) {
264
+ clearTimeout(this.setTimeNum)
265
+ if (num > 0) {
266
+ num--
267
+ this.codeNum = num + 'S'
268
+
269
+ this.setTimeNum = setTimeout(() => {
270
+ this.outTime(num)
271
+ }, 1000)
272
+ num--
273
+ } else {
274
+ clearTimeout(this.setTimeNum)
275
+ this.codeNum = '验证码'
276
+ }
277
+ },
278
+ sendMsg(type = 'phone', typeName = '手机号') {
279
+ this.$refs['login-form'].validateField(type, (valid) => {
280
+ if (!valid) {
281
+ this.outTime(60)
282
+
283
+ axios
284
+ // .get(
285
+ // `/bems/prod_1.0/uas/api/authorization/captcha/${this.form[type]}/1`,
286
+ // null,
287
+ // { loading: false, noMsg: true }
288
+ // )
289
+ .post(
290
+ '/bems/prod_1.0/uas/api/authorization/captcha',
291
+ {
292
+ handleType: 1,
293
+ mobile: type === 'phone' ? this.form[type] : '',
294
+ username: type !== 'phone' ? this.form[type] : ''
295
+ },
296
+ { loading: false }
297
+ )
298
+ .then(() => {
299
+ this.$message.success(
300
+ `${typeName}: ${this.form[type]} 验证码发送成功`
301
+ )
302
+ })
303
+ .catch(() => {
304
+ clearTimeout(this.setTimeNum)
305
+ this.codeNum = '验证码'
306
+ })
307
+ }
308
+ })
309
+ },
310
+ loadingFn() {
311
+ this.loadingV = false
312
+ },
313
+ // 登录
314
+ submitLogin() {
315
+ this.$refs['login-form'].validate((valid) => {
316
+ if (!valid) return false
317
+
318
+ auth.removeToken()
319
+ this.theType === 'account' && this.passwordLogin().catch(this.loadingFn)
320
+ this.theType === 'pthon' && this.phoneLogin().catch(this.loadingFn)
321
+ this.theType === 'accountPthon' &&
322
+ this.accountPthonLogin().catch(this.loadingFn)
323
+ })
324
+ },
325
+ // 获取加密参数
326
+ authorizationCode(username, password, code) {
327
+ this.getAzCount = this.getAzCount + 1
328
+
329
+ let pwdArr = code ? [username, password, code] : [username, password]
330
+ let pwd = pwdArr.join('@@')
331
+
332
+ return new Promise((resolve, reject) => {
333
+ if (this.getAzCount <= 3) {
334
+ axios
335
+ .get(
336
+ '/bems/prod_1.0/uas/api/authorization/authorizationCode',
337
+ {},
338
+ { loading: false }
339
+ )
340
+ .then(({ data = {} }) => {
341
+ try {
342
+ pwd = encode(pwd, data.authorizationValue)
343
+ this.pwd = pwd + '@@' + data.authorizationKey
344
+
345
+ this.getAzCount = 0
346
+ resolve()
347
+ } catch (error) {
348
+ console.error('密码加密错误:' + JSON.stringify(data))
349
+ this.authorizationCode(username, password, code) // 再次请求
350
+ .then(resolve)
351
+ .catch(reject)
352
+ }
353
+ })
354
+ } else {
355
+ // 当重新请求大于3次,抛出错误
356
+ this.$message.warning(`登录失败,请重新登录!`)
357
+ this.getAzCount = 0
358
+ reject()
359
+ }
360
+ })
361
+ },
362
+ // 账号/密码登录
363
+ async passwordLogin() {
364
+ this.loadingV = true
365
+
366
+ let { username, password, code } = this.form
367
+ await this.authorizationCode(username, password, code)
368
+ // 请求该账号要不要强制验证码登录
369
+ let cL = await axios.post(
370
+ '/bems/prod_1.0/uas/api/authorization/checkLogin',
371
+ { grantType: 'password', username, password: this.pwd, code },
372
+ {
373
+ loading: false
374
+ }
375
+ )
376
+
377
+ // 输入验证码
378
+ if (cL.data === true) {
379
+ this.loadingV = false
380
+ this.theType = 'accountPthon'
381
+
382
+ this.outTime(60)
383
+ return
384
+ } else if (cL.data === false /* 签名验签 */) {
385
+ // 获取线上签名uDn
386
+ let uDn = await axios.get(
387
+ `/bems/prod_1.0/dssc/sign/getUserDn/${username}/password`,
388
+ null,
389
+ { loading: false }
390
+ )
391
+ let { checkCert, userDn, supplier } = uDn.data
392
+ // 走本地签名
393
+ let sign = undefined
394
+ let certDn = undefined
395
+ if (checkCert) {
396
+ if (supplier === 'bjca') {
397
+ // 北京CA
398
+ window.sessionStorage.setItem('signType', 'bjcaSign')
399
+ } else {
400
+ // 信安CA
401
+ window.sessionStorage.setItem('signType', 'inetSign')
402
+ }
403
+
404
+ let { getSign } = await import('../../plugins/Sign')
405
+ sign = await getSign(username + userDn, userDn)
406
+ certDn = userDn
407
+ }
408
+ await this.authorizationCode(username, password, code) // authorizationValue 使用一次后就失效了
409
+ axios
410
+ .post(
411
+ '/bems/prod_1.0/uas/api/authorization/login',
412
+ {
413
+ grantType: 'password',
414
+ username,
415
+ password: this.pwd,
416
+ code,
417
+ sign,
418
+ certDn
419
+ },
420
+ {
421
+ loading: this.loadingFn
422
+ }
423
+ )
424
+ .then((res) => {
425
+ this.loginAfter(res.data)
426
+ })
427
+ this.loadingV = false
428
+
429
+ return
430
+ }
431
+
432
+ // 正常登录
433
+ await this.authorizationCode(username, password, code) // authorizationValue 使用一次后就失效了
434
+ axios
435
+ .post(
436
+ '/bems/prod_1.0/uas/api/authorization/login',
437
+ { grantType: 'password', username, password: this.pwd, code },
438
+ { loading: this.loadingFn }
439
+ )
440
+ .then((res) => {
441
+ this.loginAfter(res.data)
442
+ })
443
+ },
444
+ // 二维码扫码登录
445
+ QrcodeLogin(userNo, qrcode) {
446
+ axios
447
+ .post(
448
+ '/bems/prod_1.0/uas/api/authorization/login',
449
+ {
450
+ grantType: 'qr_code',
451
+ type: 'qr_code',
452
+ username: userNo,
453
+ password: qrcode
454
+ },
455
+ { loading: false }
456
+ )
457
+ .then((res) => {
458
+ this.loginAfter(res.data)
459
+ })
460
+ },
461
+ // 手机号/验证码登录
462
+ async phoneLogin() {
463
+ this.loadingV = true
464
+ let { phone, code } = this.form
465
+ await this.authorizationCode(phone, code)
466
+ let pwd = this.pwd
467
+
468
+ axios
469
+ .post(
470
+ '/bems/prod_1.0/uas/api/authorization/login',
471
+ { grantType: 'mobile', username: phone, password: pwd },
472
+ { loading: this.loadingFn }
473
+ )
474
+ .then((res) => {
475
+ this.loginAfter(res.data)
476
+ })
477
+ },
478
+ async accountPthonLogin() {
479
+ this.loadingV = true
480
+ let { username, password, code } = this.form
481
+ await this.authorizationCode(username, password, code)
482
+ let pwd = this.pwd
483
+
484
+ axios
485
+ .post(
486
+ '/bems/prod_1.0/uas/api/authorization/login',
487
+ { grantType: 'user_password_code', username, password: pwd, code },
488
+ { loading: this.loadingFn }
489
+ )
490
+ .then((res) => {
491
+ this.loginAfter(res.data)
492
+ })
493
+ },
494
+ // 登录成功后
495
+ loginAfter(data) {
496
+ auth.setToken(data.accessToken)
497
+ try {
498
+ let tokenObj = decode(data.accessToken)
499
+ let userInfo = JSON.parse(tokenObj.user_name)
500
+ this.userNo = userInfo.userNo
501
+ sessionStorage.setItem('User_Info', tokenObj.user_name)
502
+ } catch (error) {
503
+ console.error('accessToken解析错误:' + data.accessToken)
504
+ }
505
+
506
+ Promise.all([
507
+ this.getUserInfo(),
508
+ this.getMicroAppsInfo(),
509
+ this.getCltRelaNos()
510
+ ]).then(() => {
511
+ if (this.loginThen) {
512
+ this.loginThen().then(() => {
513
+ this.$router.replace('/')
514
+ })
515
+ } else {
516
+ this.$router.replace('/')
517
+ }
518
+ })
519
+ },
520
+ // 获取用户基本信息
521
+ async getUserInfo() {
522
+ let username = this.userNo
523
+ let { data } = await axios.get(
524
+ // '/bems/prod_1.0/user/api/userController/userCltAdDep/' + username
525
+ '/bems/prod_1.0/user/api/userController/userCltAdRole/' + username,
526
+ null,
527
+ { loading: false }
528
+ )
529
+ let userInfo = data || { uname: username }
530
+
531
+ sessionStorage.setItem('userNo', username)
532
+ sessionStorage.setItem('userInfo', JSON.stringify(userInfo))
533
+ sessionStorage.setItem('loginTime', Date.now())
534
+ },
535
+ // 获取子应用相关列表
536
+ async getMicroAppsInfo() {
537
+ this.loadingV = true
538
+ let { data } = await axios.get('/bems/1.0/menuTree/tree', null, {
539
+ loading: this.loadingFn
540
+ })
541
+ data || (data = [])
542
+
543
+ let layoutMenus = siteTree2menus(data)
544
+ sessionStorage.setItem('menuTree', JSON.stringify(layoutMenus))
545
+
546
+ let relaNos = siteTree2RelaNos(data)
547
+ sessionStorage.setItem('relaNos', JSON.stringify(relaNos))
548
+
549
+ // XXX: 兼容旧版resources
550
+ sessionStorage.setItem('resources', JSON.stringify(data))
551
+ },
552
+ // 新增不同单位对应不同角色,具有不同权限
553
+ getCltRelaNos() {
554
+ let pro = new Promise((resolve) => {
555
+ axios
556
+ .post(
557
+ '/bems/prod_1.0/user/api/userController/qryBusyInfoNo',
558
+ { uno: this.userNo },
559
+ { loading: false, noMsg: true }
560
+ )
561
+ .then(({ data: cltrelaMap = [] }) => {
562
+ let cltrelaNos = {}
563
+ cltrelaMap.forEach((item) => {
564
+ cltrelaNos[item.cltNo] = item.relaNos
565
+ })
566
+ sessionStorage.setItem('cltrelaNos', JSON.stringify(cltrelaNos))
567
+ })
568
+ .finally(resolve)
569
+ })
570
+
571
+ return pro
572
+ }
573
+ }
574
+ }
575
+ </script>