system-phone 3.1.91 → 3.1.93

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 (268) hide show
  1. package/.babelrc +5 -5
  2. package/.editorconfig +9 -9
  3. package/.eslintrc.js +16 -16
  4. package/.gradle/buildOutputCleanup/cache.properties +2 -2
  5. package/CHANGELOG.md +1 -1
  6. package/Dockerfile +3 -3
  7. package/README.md +36 -36
  8. package/SystemPhone.iml +8 -8
  9. package/build/css-loaders.js +34 -34
  10. package/build/dev-client.js +8 -8
  11. package/build/dev-server.js +141 -101
  12. package/build/example-server.js +80 -80
  13. package/build/release.sh +28 -28
  14. package/build/utils.js +71 -71
  15. package/build/webpack.base.conf.js +82 -82
  16. package/build/webpack.dev.conf.js +31 -31
  17. package/build/webpack.example.conf.js +49 -49
  18. package/build/webpack.prod.conf.js +60 -60
  19. package/build/webpack.test.conf.js +31 -31
  20. package/build.gradle +27 -27
  21. package/config/dev.env.js +6 -6
  22. package/config/index.js +38 -38
  23. package/config/prod.env.js +3 -3
  24. package/config/test.env.js +6 -6
  25. package/gradle/wrapper/gradle-wrapper.properties +5 -5
  26. package/gradlew +183 -183
  27. package/gradlew.bat +100 -100
  28. package/index.html +21 -21
  29. package/nginx.conf +304 -304
  30. package/package.json +101 -101
  31. package/release.bat +5 -5
  32. package/src/App.vue +25 -27
  33. package/src/android-bootstrap/fonts/glyphicons-halflings-regular.svg +287 -287
  34. package/src/android-bootstrap/less/.csscomb.json +304 -304
  35. package/src/android-bootstrap/less/.csslintrc +19 -19
  36. package/src/android-bootstrap/less/alerts.less +73 -73
  37. package/src/android-bootstrap/less/badges.less +66 -66
  38. package/src/android-bootstrap/less/bootstrap.less +56 -56
  39. package/src/android-bootstrap/less/breadcrumbs.less +26 -26
  40. package/src/android-bootstrap/less/button-groups.less +247 -247
  41. package/src/android-bootstrap/less/buttons.less +173 -173
  42. package/src/android-bootstrap/less/carousel.less +269 -269
  43. package/src/android-bootstrap/less/close.less +34 -34
  44. package/src/android-bootstrap/less/code.less +69 -69
  45. package/src/android-bootstrap/less/component-animations.less +33 -33
  46. package/src/android-bootstrap/less/dropdowns.less +216 -216
  47. package/src/android-bootstrap/less/forms.less +626 -626
  48. package/src/android-bootstrap/less/glyphicons.less +305 -305
  49. package/src/android-bootstrap/less/grid.less +84 -84
  50. package/src/android-bootstrap/less/input-groups.less +167 -167
  51. package/src/android-bootstrap/less/jumbotron.less +52 -52
  52. package/src/android-bootstrap/less/labels.less +64 -64
  53. package/src/android-bootstrap/less/list-group.less +141 -141
  54. package/src/android-bootstrap/less/media.less +66 -66
  55. package/src/android-bootstrap/less/mixins/alerts.less +14 -14
  56. package/src/android-bootstrap/less/mixins/background-variant.less +9 -9
  57. package/src/android-bootstrap/less/mixins/border-radius.less +18 -18
  58. package/src/android-bootstrap/less/mixins/buttons.less +69 -69
  59. package/src/android-bootstrap/less/mixins/center-block.less +7 -7
  60. package/src/android-bootstrap/less/mixins/clearfix.less +22 -22
  61. package/src/android-bootstrap/less/mixins/forms.less +90 -90
  62. package/src/android-bootstrap/less/mixins/gradients.less +59 -59
  63. package/src/android-bootstrap/less/mixins/grid-framework.less +92 -92
  64. package/src/android-bootstrap/less/mixins/grid.less +122 -122
  65. package/src/android-bootstrap/less/mixins/hide-text.less +21 -21
  66. package/src/android-bootstrap/less/mixins/image.less +33 -33
  67. package/src/android-bootstrap/less/mixins/labels.less +12 -12
  68. package/src/android-bootstrap/less/mixins/list-group.less +30 -30
  69. package/src/android-bootstrap/less/mixins/nav-divider.less +10 -10
  70. package/src/android-bootstrap/less/mixins/nav-vertical-align.less +9 -9
  71. package/src/android-bootstrap/less/mixins/opacity.less +8 -8
  72. package/src/android-bootstrap/less/mixins/pagination.less +24 -24
  73. package/src/android-bootstrap/less/mixins/panels.less +24 -24
  74. package/src/android-bootstrap/less/mixins/progress-bar.less +10 -10
  75. package/src/android-bootstrap/less/mixins/reset-filter.less +8 -8
  76. package/src/android-bootstrap/less/mixins/reset-text.less +18 -18
  77. package/src/android-bootstrap/less/mixins/resize.less +6 -6
  78. package/src/android-bootstrap/less/mixins/responsive-visibility.less +15 -15
  79. package/src/android-bootstrap/less/mixins/size.less +10 -10
  80. package/src/android-bootstrap/less/mixins/tab-focus.less +9 -9
  81. package/src/android-bootstrap/less/mixins/table-row.less +44 -44
  82. package/src/android-bootstrap/less/mixins/text-emphasis.less +9 -9
  83. package/src/android-bootstrap/less/mixins/text-overflow.less +8 -8
  84. package/src/android-bootstrap/less/mixins/vendor-prefixes.less +227 -227
  85. package/src/android-bootstrap/less/mixins.less +40 -40
  86. package/src/android-bootstrap/less/modals.less +151 -151
  87. package/src/android-bootstrap/less/navbar.less +660 -660
  88. package/src/android-bootstrap/less/navs.less +290 -290
  89. package/src/android-bootstrap/less/normalize.less +424 -424
  90. package/src/android-bootstrap/less/pager.less +76 -76
  91. package/src/android-bootstrap/less/pagination.less +89 -89
  92. package/src/android-bootstrap/less/panels.less +274 -274
  93. package/src/android-bootstrap/less/popovers.less +131 -131
  94. package/src/android-bootstrap/less/print.less +101 -101
  95. package/src/android-bootstrap/less/progress-bars.less +87 -87
  96. package/src/android-bootstrap/less/responsive-embed.less +35 -35
  97. package/src/android-bootstrap/less/responsive-utilities.less +194 -194
  98. package/src/android-bootstrap/less/scaffolding.less +161 -161
  99. package/src/android-bootstrap/less/tables.less +262 -262
  100. package/src/android-bootstrap/less/theme.less +291 -291
  101. package/src/android-bootstrap/less/thumbnails.less +36 -36
  102. package/src/android-bootstrap/less/tooltip.less +102 -102
  103. package/src/android-bootstrap/less/type.less +303 -303
  104. package/src/android-bootstrap/less/utilities.less +55 -55
  105. package/src/android-bootstrap/less/variables.less +896 -896
  106. package/src/android-bootstrap/less/wells.less +29 -29
  107. package/src/bootstrap/fonts/glyphicons-halflings-regular.svg +287 -287
  108. package/src/bootstrap/less/.csscomb.json +304 -304
  109. package/src/bootstrap/less/.csslintrc +19 -19
  110. package/src/bootstrap/less/alerts.less +73 -73
  111. package/src/bootstrap/less/badges.less +66 -66
  112. package/src/bootstrap/less/bootstrap.less +56 -56
  113. package/src/bootstrap/less/breadcrumbs.less +26 -26
  114. package/src/bootstrap/less/button-groups.less +247 -247
  115. package/src/bootstrap/less/buttons.less +172 -172
  116. package/src/bootstrap/less/carousel.less +269 -269
  117. package/src/bootstrap/less/close.less +34 -34
  118. package/src/bootstrap/less/code.less +69 -69
  119. package/src/bootstrap/less/component-animations.less +33 -33
  120. package/src/bootstrap/less/dropdowns.less +216 -216
  121. package/src/bootstrap/less/forms.less +626 -626
  122. package/src/bootstrap/less/glyphicons.less +305 -305
  123. package/src/bootstrap/less/grid.less +84 -84
  124. package/src/bootstrap/less/input-groups.less +167 -167
  125. package/src/bootstrap/less/jumbotron.less +52 -52
  126. package/src/bootstrap/less/labels.less +64 -64
  127. package/src/bootstrap/less/list-group.less +141 -141
  128. package/src/bootstrap/less/media.less +66 -66
  129. package/src/bootstrap/less/mixins/alerts.less +14 -14
  130. package/src/bootstrap/less/mixins/background-variant.less +9 -9
  131. package/src/bootstrap/less/mixins/border-radius.less +18 -18
  132. package/src/bootstrap/less/mixins/buttons.less +69 -69
  133. package/src/bootstrap/less/mixins/center-block.less +7 -7
  134. package/src/bootstrap/less/mixins/clearfix.less +22 -22
  135. package/src/bootstrap/less/mixins/forms.less +90 -90
  136. package/src/bootstrap/less/mixins/gradients.less +59 -59
  137. package/src/bootstrap/less/mixins/grid-framework.less +92 -92
  138. package/src/bootstrap/less/mixins/grid.less +122 -122
  139. package/src/bootstrap/less/mixins/hide-text.less +21 -21
  140. package/src/bootstrap/less/mixins/image.less +33 -33
  141. package/src/bootstrap/less/mixins/labels.less +12 -12
  142. package/src/bootstrap/less/mixins/list-group.less +30 -30
  143. package/src/bootstrap/less/mixins/nav-divider.less +10 -10
  144. package/src/bootstrap/less/mixins/nav-vertical-align.less +9 -9
  145. package/src/bootstrap/less/mixins/opacity.less +8 -8
  146. package/src/bootstrap/less/mixins/pagination.less +24 -24
  147. package/src/bootstrap/less/mixins/panels.less +24 -24
  148. package/src/bootstrap/less/mixins/progress-bar.less +10 -10
  149. package/src/bootstrap/less/mixins/reset-filter.less +8 -8
  150. package/src/bootstrap/less/mixins/reset-text.less +18 -18
  151. package/src/bootstrap/less/mixins/resize.less +6 -6
  152. package/src/bootstrap/less/mixins/responsive-visibility.less +15 -15
  153. package/src/bootstrap/less/mixins/size.less +10 -10
  154. package/src/bootstrap/less/mixins/tab-focus.less +9 -9
  155. package/src/bootstrap/less/mixins/table-row.less +44 -44
  156. package/src/bootstrap/less/mixins/text-emphasis.less +9 -9
  157. package/src/bootstrap/less/mixins/text-overflow.less +8 -8
  158. package/src/bootstrap/less/mixins/vendor-prefixes.less +227 -227
  159. package/src/bootstrap/less/mixins.less +40 -40
  160. package/src/bootstrap/less/modals.less +151 -151
  161. package/src/bootstrap/less/navbar.less +660 -660
  162. package/src/bootstrap/less/navs.less +286 -286
  163. package/src/bootstrap/less/normalize.less +424 -424
  164. package/src/bootstrap/less/pager.less +76 -76
  165. package/src/bootstrap/less/pagination.less +89 -89
  166. package/src/bootstrap/less/panels.less +275 -275
  167. package/src/bootstrap/less/popovers.less +131 -131
  168. package/src/bootstrap/less/print.less +101 -101
  169. package/src/bootstrap/less/progress-bars.less +87 -87
  170. package/src/bootstrap/less/responsive-embed.less +35 -35
  171. package/src/bootstrap/less/responsive-utilities.less +194 -194
  172. package/src/bootstrap/less/scaffolding.less +161 -161
  173. package/src/bootstrap/less/tables.less +262 -262
  174. package/src/bootstrap/less/theme.less +291 -291
  175. package/src/bootstrap/less/thumbnails.less +36 -36
  176. package/src/bootstrap/less/tooltip.less +102 -102
  177. package/src/bootstrap/less/type.less +303 -303
  178. package/src/bootstrap/less/utilities.less +55 -55
  179. package/src/bootstrap/less/variables.less +895 -895
  180. package/src/bootstrap/less/wells.less +29 -29
  181. package/src/components/EncryptUtil.js +53 -53
  182. package/src/components/LoginApp.vue +252 -1
  183. package/src/components/ModifyPassWord.vue +220 -220
  184. package/src/components/NavBottom.vue +117 -117
  185. package/src/components/NavBottomV.vue +141 -141
  186. package/src/components/NavBottomVVV.vue +185 -185
  187. package/src/components/PhoneAllInfo.vue +68 -68
  188. package/src/components/PhoneChangemeterInfo.vue +116 -116
  189. package/src/components/PhoneImageInfo.vue +102 -102
  190. package/src/components/PhoneInfoTable.vue +39 -39
  191. package/src/components/PhoneMeterInfo.vue +132 -132
  192. package/src/components/PhoneSafeInfo.vue +101 -101
  193. package/src/components/PhoneSellInfoLite.vue +112 -112
  194. package/src/components/PhoneUser.vue +202 -202
  195. package/src/components/PhoneUserDetil.vue +70 -70
  196. package/src/components/PhoneUserFind.vue +138 -138
  197. package/src/components/RightTree.vue +217 -217
  198. package/src/components/TabBarPhone.vue +81 -81
  199. package/src/components/ToolsPage.vue +199 -199
  200. package/src/components/UploadManage.vue +194 -194
  201. package/src/components/gaomi/NavBottomV.vue +223 -223
  202. package/src/components/gaomi/NavBottomVVVV.vue +210 -210
  203. package/src/components/gaomi/Scroller.vue +63 -63
  204. package/src/components/gaomi/SystemSetUp.vue +186 -186
  205. package/src/components/gaomi/ToolsPage.vue +168 -168
  206. package/src/components/idea/feedBack.vue +150 -150
  207. package/src/components/idea/feedbackAdd.vue +366 -366
  208. package/src/components/info/ConfigInfo.vue +122 -122
  209. package/src/components/info/InfoTable.vue +37 -37
  210. package/src/components/iot/InstructMessage.vue +313 -313
  211. package/src/components/iot/IotBaseInfo.vue +97 -97
  212. package/src/components/iot/IotMeterInfo.vue +77 -77
  213. package/src/components/online/ApplyOnline.vue +581 -581
  214. package/src/components/online/BJZhongRan/ApplyOnline.vue +600 -600
  215. package/src/components/screen/ChargeContentPage.vue +656 -656
  216. package/src/components/screen/ContentPage.vue +611 -611
  217. package/src/components/screen/GongdanContentPage.vue +149 -149
  218. package/src/components/screen/ListCountItem.vue +93 -93
  219. package/src/components/screen/ModuleTitle.vue +48 -48
  220. package/src/components/screen/SafeOrderContentPage.vue +440 -440
  221. package/src/components/screen/SecurityCheckItem.vue +50 -50
  222. package/src/components/screen/TotalItem.vue +76 -76
  223. package/src/components/screen/TotalUserNumber.vue +77 -77
  224. package/src/components/screen/WorkOrderItem.vue +51 -51
  225. package/src/components/screen/WorkOrderRightDownItem.vue +103 -103
  226. package/src/components/screen/WorkOrderRightItem.vue +115 -115
  227. package/src/components/userinfo/paymentQuery.vue +189 -189
  228. package/src/components/userinfo/queryFile.vue +190 -190
  229. package/src/components/wasm.vue +18 -18
  230. package/src/expandcssAndroid.less +521 -521
  231. package/src/filiale/yulinyuchuan/AlreadyService.vue +194 -194
  232. package/src/filiale/yulinyuchuan/AttendManage.vue +537 -537
  233. package/src/filiale/yulinyuchuan/OnlineManage.vue +256 -256
  234. package/src/filiale/yulinyuchuan/SystemSetUp.vue +332 -332
  235. package/src/filiale/yulinyuchuan/UploadManage.vue +195 -195
  236. package/src/filiale/yulinyuchuan/systemphonegrid.js +9 -9
  237. package/src/index.js +9 -9
  238. package/src/main.js +38 -38
  239. package/src/plugins/GetStringData.js +18 -18
  240. package/src/plugins/LoadParams.js +24 -24
  241. package/src/plugins/const.js +404 -404
  242. package/src/plugins/vue-py.js +37 -37
  243. package/src/services/ConfigService.js +24 -24
  244. package/src/stores/AppData.js +79 -79
  245. package/src/systemphone-gaomi.js +105 -105
  246. package/src/systemphone.js +60 -60
  247. package/src/systemphonegrid.js +185 -185
  248. package/src/util/LdapHelper.js +75 -75
  249. package/static/app.json +4 -4
  250. package/static/const.js +404 -404
  251. package/static/globals.txt +74 -74
  252. package/static/layui/font/iconfont.svg +554 -554
  253. package/static/vue-py.js +37 -37
  254. package/static/wasm_exec.js +465 -465
  255. package/test/unit/.eslintrc +5 -5
  256. package/test/unit/TestUtil.js +35 -35
  257. package/test/unit/context.html +20 -20
  258. package/test/unit/index.js +13 -13
  259. package/test/unit/init.js +13 -13
  260. package/test/unit/karma.conf.js +50 -50
  261. package/test/unit/specs/App.spec.js +17 -17
  262. package/test/unit/specs/Test.spec.js +28 -28
  263. package/test/unit/specs/components/LoginApp.spec.js +21 -21
  264. package/test/unit/specs/sevices/ConfigService.spec.js +23 -23
  265. package/test/unit/specs/sevices/GetDBTest.spec.js +28 -28
  266. package/src/filiale/chengran/EncryptUtil.js +0 -27
  267. package/src/filiale/chengran/LoginApp.vue +0 -775
  268. package/src/filiale/chengran/systemphonegrid.js +0 -4
@@ -1,29 +1,29 @@
1
- //
2
- // Wells
3
- // --------------------------------------------------
4
-
5
-
6
- // Base class
7
- .well {
8
- min-height: 20px;
9
- padding: 19px;
10
- margin-bottom: 20px;
11
- background-color: @well-bg;
12
- border: 1px solid @well-border;
13
- border-radius: @border-radius-base;
14
- .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
15
- blockquote {
16
- border-color: #ddd;
17
- border-color: rgba(0,0,0,.15);
18
- }
19
- }
20
-
21
- // Sizes
22
- .well-lg {
23
- padding: 24px;
24
- border-radius: @border-radius-large;
25
- }
26
- .well-sm {
27
- padding: 9px;
28
- border-radius: @border-radius-small;
29
- }
1
+ //
2
+ // Wells
3
+ // --------------------------------------------------
4
+
5
+
6
+ // Base class
7
+ .well {
8
+ min-height: 20px;
9
+ padding: 19px;
10
+ margin-bottom: 20px;
11
+ background-color: @well-bg;
12
+ border: 1px solid @well-border;
13
+ border-radius: @border-radius-base;
14
+ .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
15
+ blockquote {
16
+ border-color: #ddd;
17
+ border-color: rgba(0,0,0,.15);
18
+ }
19
+ }
20
+
21
+ // Sizes
22
+ .well-lg {
23
+ padding: 24px;
24
+ border-radius: @border-radius-large;
25
+ }
26
+ .well-sm {
27
+ padding: 9px;
28
+ border-radius: @border-radius-small;
29
+ }
@@ -1,53 +1,53 @@
1
- import AesEncryptJS from "crypto-js"
2
- import RsaEncryptJS from 'jsencrypt'
3
-
4
- export default {
5
- /**
6
- * AES加密
7
- * @param word
8
- * @returns {*}
9
- */
10
- AESEncrypt(word, encryKey){
11
- var key = AesEncryptJS.enc.Utf8.parse(encryKey);
12
- var srcs = AesEncryptJS.enc.Utf8.parse(word);
13
- var encrypted = AesEncryptJS.AES.encrypt(srcs, key, {mode:AesEncryptJS.mode.ECB,padding: AesEncryptJS.pad.Pkcs7});
14
- return encrypted.toString();
15
- },
16
- /**
17
- * AES解密
18
- * @param word
19
- * @returns {*}
20
- */
21
- AESDecrypt(word, encryKey){
22
- var key = AesEncryptJS.enc.Utf8.parse(encryKey);
23
- var decrypt = AesEncryptJS.AES.decrypt(word, key, {mode:AesEncryptJS.mode.ECB,padding: AesEncryptJS.pad.Pkcs7});
24
- var ret = AesEncryptJS.enc.Utf8.stringify(decrypt).toString();
25
- try{
26
- return JSON.parse(ret) ;
27
- }catch (e){
28
- return ret
29
- }
30
- },
31
- /**
32
- * RSA加密
33
- * @param word
34
- * @returns {*}
35
- */
36
- RSAEncrypt(word){
37
- let encrypt = new RsaEncryptJS();
38
- encrypt.setPublicKey('MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqPvovSfXcwBbW8cKMCgwqNpsYuzF8RPAPFb7LGsnVo44JhM/xxzDyzoYtdfNmtbIuKVi9PzIsyp6rg+09gbuI6UGwBZ5DWBDBMqv5MPdOF5dCQkB2Bbr5yPfURPENypUz+pBFBg41d+BC+rwRiXELwKy7Y9caD/MtJyHydj8OUwIDAQAB');
39
- let resdata = encrypt.encrypt(word);
40
- return resdata.toString();
41
- },
42
- /**
43
- * RSA解密
44
- * @param word
45
- * @returns {*}
46
- */
47
- RSADecrypt(word){
48
- let encrypt = new RsaEncryptJS();
49
- encrypt.setPrivateKey('MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKo++i9J9dzAFtbxwowKDCo2mxi7MXxE8A8VvssaydWjjgmEz/HHMPLOhi1182a1si4pWL0/MizKnquD7T2Bu4jpQbAFnkNYEMEyq/kw904Xl0JCQHYFuvnI99RE8Q3KlTP6kEUGDjV34EL6vBGJcQvArLtj1xoP8y0nIfJ2Pw5TAgMBAAECgYAGGB8IllMwxceLhjf6n1l0IWRH7FuHIUieoZ6k0p6rASHSgWiYNRMxfecbtX8zDAoG0QAWNi7rn40ygpR5gS1fWDAKhmnhKgQIT6wW0VmD4hraaeyP78iy8BLhlvblri2nCPIhDH5+l96v7D47ZZi3ZSOzcj89s1eS/k7/N4peEQJBAPEtGGJY+lBoCxQMhGyzuzDmgcS1Un1ZE2pt+XNCVl2b+T8fxWJH3tRRR8wOY5uvtPiK1HM/IjT0T5qwQeH8Yk0CQQC0tcv3d/bDb7bOe9QzUFDQkUSpTdPWAgMX2OVPxjdq3Sls9oA5+fGNYEy0OgyqTjde0b4iRzlD1O0OhLqPSUMfAkEAh5FIvqezdRU2/PsYSR4yoAdCdLdT+h/jGRVefhqQ/6eYUJJkWp15tTFHQX3pIe9/s6IeT/XyHYAjaxmevxAmlQJBAKSdhvQjf9KAjZKDEsa7vyJ/coCXuQUWSCMNHbcR5aGfXgE4e45UtUoIE1eKGcd6AM6LWhx3rR6xdFDpb9je8BkCQB0SpevGfOQkMk5i8xkEt9eeYP0fi8nv6eOUcK96EXbzs4jV2SAoQJ9oJegPtPROHbhIvVUmNQTbuP10Yjg59+8=');
50
- let resdata = encrypt.decrypt(word);
51
- return resdata.toString();
52
- },
53
- }
1
+ import AesEncryptJS from "crypto-js"
2
+ import RsaEncryptJS from 'jsencrypt'
3
+
4
+ export default {
5
+ /**
6
+ * AES加密
7
+ * @param word
8
+ * @returns {*}
9
+ */
10
+ AESEncrypt(word, encryKey){
11
+ var key = AesEncryptJS.enc.Utf8.parse(encryKey);
12
+ var srcs = AesEncryptJS.enc.Utf8.parse(word);
13
+ var encrypted = AesEncryptJS.AES.encrypt(srcs, key, {mode:AesEncryptJS.mode.ECB,padding: AesEncryptJS.pad.Pkcs7});
14
+ return encrypted.toString();
15
+ },
16
+ /**
17
+ * AES解密
18
+ * @param word
19
+ * @returns {*}
20
+ */
21
+ AESDecrypt(word, encryKey){
22
+ var key = AesEncryptJS.enc.Utf8.parse(encryKey);
23
+ var decrypt = AesEncryptJS.AES.decrypt(word, key, {mode:AesEncryptJS.mode.ECB,padding: AesEncryptJS.pad.Pkcs7});
24
+ var ret = AesEncryptJS.enc.Utf8.stringify(decrypt).toString();
25
+ try{
26
+ return JSON.parse(ret) ;
27
+ }catch (e){
28
+ return ret
29
+ }
30
+ },
31
+ /**
32
+ * RSA加密
33
+ * @param word
34
+ * @returns {*}
35
+ */
36
+ RSAEncrypt(word){
37
+ let encrypt = new RsaEncryptJS();
38
+ encrypt.setPublicKey('MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqPvovSfXcwBbW8cKMCgwqNpsYuzF8RPAPFb7LGsnVo44JhM/xxzDyzoYtdfNmtbIuKVi9PzIsyp6rg+09gbuI6UGwBZ5DWBDBMqv5MPdOF5dCQkB2Bbr5yPfURPENypUz+pBFBg41d+BC+rwRiXELwKy7Y9caD/MtJyHydj8OUwIDAQAB');
39
+ let resdata = encrypt.encrypt(word);
40
+ return resdata.toString();
41
+ },
42
+ /**
43
+ * RSA解密
44
+ * @param word
45
+ * @returns {*}
46
+ */
47
+ RSADecrypt(word){
48
+ let encrypt = new RsaEncryptJS();
49
+ encrypt.setPrivateKey('MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKo++i9J9dzAFtbxwowKDCo2mxi7MXxE8A8VvssaydWjjgmEz/HHMPLOhi1182a1si4pWL0/MizKnquD7T2Bu4jpQbAFnkNYEMEyq/kw904Xl0JCQHYFuvnI99RE8Q3KlTP6kEUGDjV34EL6vBGJcQvArLtj1xoP8y0nIfJ2Pw5TAgMBAAECgYAGGB8IllMwxceLhjf6n1l0IWRH7FuHIUieoZ6k0p6rASHSgWiYNRMxfecbtX8zDAoG0QAWNi7rn40ygpR5gS1fWDAKhmnhKgQIT6wW0VmD4hraaeyP78iy8BLhlvblri2nCPIhDH5+l96v7D47ZZi3ZSOzcj89s1eS/k7/N4peEQJBAPEtGGJY+lBoCxQMhGyzuzDmgcS1Un1ZE2pt+XNCVl2b+T8fxWJH3tRRR8wOY5uvtPiK1HM/IjT0T5qwQeH8Yk0CQQC0tcv3d/bDb7bOe9QzUFDQkUSpTdPWAgMX2OVPxjdq3Sls9oA5+fGNYEy0OgyqTjde0b4iRzlD1O0OhLqPSUMfAkEAh5FIvqezdRU2/PsYSR4yoAdCdLdT+h/jGRVefhqQ/6eYUJJkWp15tTFHQX3pIe9/s6IeT/XyHYAjaxmevxAmlQJBAKSdhvQjf9KAjZKDEsa7vyJ/coCXuQUWSCMNHbcR5aGfXgE4e45UtUoIE1eKGcd6AM6LWhx3rR6xdFDpb9je8BkCQB0SpevGfOQkMk5i8xkEt9eeYP0fi8nv6eOUcK96EXbzs4jV2SAoQJ9oJegPtPROHbhIvVUmNQTbuP10Yjg59+8=');
50
+ let resdata = encrypt.decrypt(word);
51
+ return resdata.toString();
52
+ },
53
+ }
@@ -46,6 +46,48 @@
46
46
  <footer slot="modal-footer" class="modal-footer">
47
47
  </footer>
48
48
  </modal>
49
+ <!-- 短信验证码弹窗 -->
50
+ <modal :show.sync="smsModalShow" backdrop="true">
51
+ <div slot="modal-header"></div>
52
+ <article slot="modal-body" class="sms-modal-body">
53
+ <div class="sms-wrap">
54
+ <div class="sms-top">
55
+ <div class="sms-top-icon">
56
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
57
+ <rect x="2" y="4" width="20" height="16" rx="3"/>
58
+ <path d="M7 8h4M13 8h4M7 12h10M7 16h2M13 16h4"/>
59
+ </svg>
60
+ </div>
61
+ </div>
62
+ <div class="sms-ct">
63
+ <div class="sms-ct-label">短信验证码</div>
64
+ <div class="sms-ct-tip">{{ smsModalMessage }}</div>
65
+ </div>
66
+ <div class="sms-field">
67
+ <div class="sms-field-hint">请输入6位验证码</div>
68
+ <div class="sms-code-box">
69
+ <input
70
+ class="sms-code-ipt"
71
+ v-model="smsCode"
72
+ maxlength="6"
73
+ @keyup.enter="smsModalConfirm"
74
+ autocomplete="off"
75
+ type="tel"
76
+ />
77
+ </div>
78
+ <div class="sms-extra" :class="{ 'expiry-warn': smsCountdown <= 30 }">
79
+ <template v-if="smsCountdown > 0">剩余 {{ smsCountdown }}s</template>
80
+ <template v-else>已过期</template>
81
+ </div>
82
+ </div>
83
+ <div class="sms-actions">
84
+ <button class="sms-act-ok" @click="smsModalConfirm">确定</button>
85
+ <button class="sms-act-no" @click="smsModalCancel">取消</button>
86
+ </div>
87
+ </div>
88
+ </article>
89
+ <div slot="modal-footer"></div>
90
+ </modal>
49
91
  </div>
50
92
  </template>
51
93
 
@@ -125,7 +167,15 @@ export default {
125
167
  imageurl: require('../assets/miwen.png'),
126
168
  deviceIemi: '无法获取该设备码,请联系管理员',
127
169
  loginSafe: false,
128
- margintop: document.documentElement.clientHeight * 0.1
170
+ margintop: document.documentElement.clientHeight * 0.1,
171
+ // 短信验证码相关
172
+ smsCode: '',
173
+ smsCountdown: 0,
174
+ smsCountdownTimer: null,
175
+ smsModalShow: false,
176
+ smsModalMessage: '',
177
+ // 标记是否处于短信验证流程
178
+ smsLoginFlag: false
129
179
  }
130
180
  },
131
181
 
@@ -154,6 +204,40 @@ export default {
154
204
  this.modifyPassword = false
155
205
  this.password = val
156
206
  },
207
+ startSmsCountdown () {
208
+ if (this.smsCountdownTimer) {
209
+ clearInterval(this.smsCountdownTimer)
210
+ }
211
+ this.smsCountdownTimer = setInterval(() => {
212
+ if (this.smsCountdown > 0) {
213
+ this.smsCountdown--
214
+ } else {
215
+ clearInterval(this.smsCountdownTimer)
216
+ }
217
+ }, 1000)
218
+ },
219
+ stopSmsCountdown () {
220
+ if (this.smsCountdownTimer) {
221
+ clearInterval(this.smsCountdownTimer)
222
+ this.smsCountdownTimer = null
223
+ }
224
+ },
225
+ smsModalConfirm () {
226
+ if (this.smsCode === '') {
227
+ this.$showMessage('请输入短信验证码')
228
+ return
229
+ }
230
+ this.smsLoginFlag = true
231
+ // 调用 confirm 方法完成 Step2
232
+ this.confirm()
233
+ },
234
+ smsModalCancel () {
235
+ this.smsModalShow = false
236
+ this.smsLoginFlag = false
237
+ this.stopSmsCountdown()
238
+ this.smsCode = ''
239
+ this.loaderShow = false
240
+ },
157
241
  // 对资源菜单进行排序
158
242
  sortFunctions (val) {
159
243
  this.sortArr(val)
@@ -240,9 +324,29 @@ export default {
240
324
  }else{
241
325
  try {
242
326
  let data = {name: this.ename, password: this.password}
327
+ // Step2: 如果有 smsLoginFlag 且有待提交的验证码,则一起发送
328
+ if (this.smsLoginFlag && this.smsCode) {
329
+ data.smsCode = this.smsCode
330
+ }
243
331
  data = '$' + cryptJS.RSAEncrypt(JSON.stringify(data))
244
332
  const getLogin = await Vue.resetpost(`${this.$androidUtil.getProxyUrl()}/rs/logic/getLogin`, data, {resolveMsg: null, rejectMsg: null})
333
+ // 检查是否需要短信验证码(Step1 返回时,smsLoginFlag 为 false)
334
+ if (getLogin.data.needsSmsCode && !this.smsLoginFlag) {
335
+ this.loaderShow = false
336
+ this.smsCountdown = getLogin.data.expireSeconds || 300
337
+ this.smsModalMessage = getLogin.data.states || ('短信验证码已发送至' + getLogin.data.maskedPhone + ',请输入')
338
+ this.startSmsCountdown()
339
+ this.smsLoginFlag = true
340
+ this.smsModalShow = true
341
+ return
342
+ }
245
343
  if (getLogin.data.states === '登录成功'){
344
+ // Step2 成功后清理状态
345
+ if (this.smsLoginFlag) {
346
+ this.smsCode = ''
347
+ this.smsLoginFlag = false
348
+ this.smsModalShow = false
349
+ }
246
350
  // 初始化 Vue.$login
247
351
  Vue.$login = Vue.prototype.$login = {
248
352
  jwt: getLogin.data.jwt,
@@ -385,6 +489,9 @@ export default {
385
489
  this.$goto('nav-bottom')
386
490
  },
387
491
  },
492
+ beforeDestroy () {
493
+ this.stopSmsCountdown()
494
+ },
388
495
  watch: {
389
496
  'config'(val) {
390
497
  Vue.config = val
@@ -773,3 +880,147 @@ export default {
773
880
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=70);
774
881
  }
775
882
  </style>
883
+ <style>
884
+ /* 短信验证码弹窗样式 */
885
+ .sms-modal-body {
886
+ padding: 0 !important;
887
+ }
888
+
889
+ .sms-wrap {
890
+ background: #fff;
891
+ padding: 32px 28px 28px;
892
+ text-align: center;
893
+ min-width: 280px;
894
+ }
895
+
896
+ .sms-top {
897
+ margin-bottom: 16px;
898
+ }
899
+
900
+ .sms-top-icon {
901
+ width: 44px;
902
+ height: 44px;
903
+ margin: 0 auto;
904
+ background: #EFF6FF;
905
+ border-radius: 12px;
906
+ display: flex;
907
+ align-items: center;
908
+ justify-content: center;
909
+ }
910
+
911
+ .sms-top-icon svg {
912
+ width: 22px;
913
+ height: 22px;
914
+ color: #3B82F6;
915
+ }
916
+
917
+ .sms-ct {
918
+ margin-bottom: 20px;
919
+ }
920
+
921
+ .sms-ct-label {
922
+ font-size: 18px;
923
+ font-weight: 600;
924
+ color: #111;
925
+ margin-bottom: 6px;
926
+ }
927
+
928
+ .sms-ct-tip {
929
+ font-size: 13px;
930
+ color: #888;
931
+ line-height: 1.5;
932
+ }
933
+
934
+ .sms-field {
935
+ margin-bottom: 20px;
936
+ }
937
+
938
+ .sms-field-hint {
939
+ font-size: 12px;
940
+ color: #aaa;
941
+ margin-bottom: 8px;
942
+ text-align: left;
943
+ }
944
+
945
+ .sms-code-box {
946
+ position: relative;
947
+ margin-bottom: 6px;
948
+ }
949
+
950
+ .sms-code-ipt {
951
+ width: 100%;
952
+ height: 46px;
953
+ border: 1px solid #E5E7EB;
954
+ border-radius: 10px;
955
+ padding: 0 14px;
956
+ font-size: 18px;
957
+ color: #111;
958
+ background: #FAFAFA;
959
+ text-align: center;
960
+ letter-spacing: 6px;
961
+ outline: none;
962
+ box-sizing: border-box;
963
+ transition: border-color 0.2s;
964
+ }
965
+
966
+ .sms-code-ipt:focus {
967
+ border-color: #3B82F6;
968
+ background: #fff;
969
+ }
970
+
971
+ .sms-code-ipt::placeholder {
972
+ color: #CCC;
973
+ letter-spacing: 1px;
974
+ font-size: 14px;
975
+ }
976
+
977
+ .sms-extra {
978
+ font-size: 12px;
979
+ color: #AAA;
980
+ text-align: right;
981
+ }
982
+
983
+ .expiry-warn {
984
+ color: #EF4444;
985
+ }
986
+
987
+ .sms-actions {
988
+ display: flex;
989
+ gap: 12px;
990
+ }
991
+
992
+ .sms-act-ok {
993
+ flex: 1;
994
+ height: 44px;
995
+ border: none;
996
+ border-radius: 10px;
997
+ background: #3B82F6;
998
+ color: #fff;
999
+ font-size: 16px;
1000
+ font-weight: 500;
1001
+ cursor: pointer;
1002
+ transition: background 0.2s;
1003
+ }
1004
+
1005
+ .sms-act-ok:active {
1006
+ background: #2563EB;
1007
+ }
1008
+
1009
+ .sms-act-no {
1010
+ flex: 1;
1011
+ height: 44px;
1012
+ border: 1px solid #E5E7EB;
1013
+ border-radius: 10px;
1014
+ background: #FAFAFA;
1015
+ color: #666;
1016
+ font-size: 16px;
1017
+ font-weight: 500;
1018
+ cursor: pointer;
1019
+ transition: background 0.2s;
1020
+ }
1021
+
1022
+ .sms-act-no:active {
1023
+ background: #F3F4F6;
1024
+ }
1025
+ </style>
1026
+