system-phone 3.1.93 → 3.1.94

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 (201) hide show
  1. package/.babelrc +5 -5
  2. package/.editorconfig +9 -9
  3. package/.eslintrc.js +16 -16
  4. package/.serena/project.yml +87 -0
  5. package/CHANGELOG.md +1 -1
  6. package/Dockerfile +3 -3
  7. package/README.md +36 -36
  8. package/build/css-loaders.js +34 -34
  9. package/build/dev-client.js +8 -8
  10. package/build/example-server.js +80 -80
  11. package/build/release.sh +28 -28
  12. package/build/utils.js +71 -71
  13. package/build/webpack.dev.conf.js +31 -31
  14. package/build/webpack.example.conf.js +49 -49
  15. package/build/webpack.prod.conf.js +60 -60
  16. package/build/webpack.test.conf.js +31 -31
  17. package/config/dev.env.js +6 -6
  18. package/config/index.js +38 -38
  19. package/config/prod.env.js +3 -3
  20. package/config/test.env.js +6 -6
  21. package/nginx.conf +304 -304
  22. package/package.json +101 -101
  23. package/release.bat +5 -5
  24. package/src/Util.js +415 -415
  25. package/src/android-bootstrap/fonts/glyphicons-halflings-regular.svg +287 -287
  26. package/src/android-bootstrap/less/.csscomb.json +304 -304
  27. package/src/android-bootstrap/less/.csslintrc +19 -19
  28. package/src/android-bootstrap/less/alerts.less +73 -73
  29. package/src/android-bootstrap/less/badges.less +66 -66
  30. package/src/android-bootstrap/less/bootstrap.less +56 -56
  31. package/src/android-bootstrap/less/breadcrumbs.less +26 -26
  32. package/src/android-bootstrap/less/button-groups.less +247 -247
  33. package/src/android-bootstrap/less/buttons.less +173 -173
  34. package/src/android-bootstrap/less/carousel.less +269 -269
  35. package/src/android-bootstrap/less/close.less +34 -34
  36. package/src/android-bootstrap/less/code.less +69 -69
  37. package/src/android-bootstrap/less/component-animations.less +33 -33
  38. package/src/android-bootstrap/less/dropdowns.less +216 -216
  39. package/src/android-bootstrap/less/forms.less +626 -626
  40. package/src/android-bootstrap/less/glyphicons.less +305 -305
  41. package/src/android-bootstrap/less/grid.less +84 -84
  42. package/src/android-bootstrap/less/input-groups.less +167 -167
  43. package/src/android-bootstrap/less/jumbotron.less +52 -52
  44. package/src/android-bootstrap/less/labels.less +64 -64
  45. package/src/android-bootstrap/less/list-group.less +141 -141
  46. package/src/android-bootstrap/less/media.less +66 -66
  47. package/src/android-bootstrap/less/mixins/alerts.less +14 -14
  48. package/src/android-bootstrap/less/mixins/background-variant.less +9 -9
  49. package/src/android-bootstrap/less/mixins/border-radius.less +18 -18
  50. package/src/android-bootstrap/less/mixins/buttons.less +69 -69
  51. package/src/android-bootstrap/less/mixins/center-block.less +7 -7
  52. package/src/android-bootstrap/less/mixins/clearfix.less +22 -22
  53. package/src/android-bootstrap/less/mixins/forms.less +90 -90
  54. package/src/android-bootstrap/less/mixins/gradients.less +59 -59
  55. package/src/android-bootstrap/less/mixins/grid-framework.less +92 -92
  56. package/src/android-bootstrap/less/mixins/grid.less +122 -122
  57. package/src/android-bootstrap/less/mixins/hide-text.less +21 -21
  58. package/src/android-bootstrap/less/mixins/image.less +33 -33
  59. package/src/android-bootstrap/less/mixins/labels.less +12 -12
  60. package/src/android-bootstrap/less/mixins/list-group.less +30 -30
  61. package/src/android-bootstrap/less/mixins/nav-divider.less +10 -10
  62. package/src/android-bootstrap/less/mixins/nav-vertical-align.less +9 -9
  63. package/src/android-bootstrap/less/mixins/opacity.less +8 -8
  64. package/src/android-bootstrap/less/mixins/pagination.less +24 -24
  65. package/src/android-bootstrap/less/mixins/panels.less +24 -24
  66. package/src/android-bootstrap/less/mixins/progress-bar.less +10 -10
  67. package/src/android-bootstrap/less/mixins/reset-filter.less +8 -8
  68. package/src/android-bootstrap/less/mixins/reset-text.less +18 -18
  69. package/src/android-bootstrap/less/mixins/resize.less +6 -6
  70. package/src/android-bootstrap/less/mixins/responsive-visibility.less +15 -15
  71. package/src/android-bootstrap/less/mixins/size.less +10 -10
  72. package/src/android-bootstrap/less/mixins/tab-focus.less +9 -9
  73. package/src/android-bootstrap/less/mixins/table-row.less +44 -44
  74. package/src/android-bootstrap/less/mixins/text-emphasis.less +9 -9
  75. package/src/android-bootstrap/less/mixins/text-overflow.less +8 -8
  76. package/src/android-bootstrap/less/mixins/vendor-prefixes.less +227 -227
  77. package/src/android-bootstrap/less/mixins.less +40 -40
  78. package/src/android-bootstrap/less/modals.less +151 -151
  79. package/src/android-bootstrap/less/navbar.less +660 -660
  80. package/src/android-bootstrap/less/navs.less +290 -290
  81. package/src/android-bootstrap/less/normalize.less +424 -424
  82. package/src/android-bootstrap/less/pager.less +76 -76
  83. package/src/android-bootstrap/less/pagination.less +89 -89
  84. package/src/android-bootstrap/less/panels.less +274 -274
  85. package/src/android-bootstrap/less/popovers.less +131 -131
  86. package/src/android-bootstrap/less/print.less +101 -101
  87. package/src/android-bootstrap/less/progress-bars.less +87 -87
  88. package/src/android-bootstrap/less/responsive-embed.less +35 -35
  89. package/src/android-bootstrap/less/responsive-utilities.less +194 -194
  90. package/src/android-bootstrap/less/scaffolding.less +161 -161
  91. package/src/android-bootstrap/less/tables.less +262 -262
  92. package/src/android-bootstrap/less/theme.less +291 -291
  93. package/src/android-bootstrap/less/thumbnails.less +36 -36
  94. package/src/android-bootstrap/less/tooltip.less +102 -102
  95. package/src/android-bootstrap/less/type.less +303 -303
  96. package/src/android-bootstrap/less/utilities.less +55 -55
  97. package/src/android-bootstrap/less/variables.less +896 -896
  98. package/src/android-bootstrap/less/wells.less +29 -29
  99. package/src/bootstrap/fonts/glyphicons-halflings-regular.svg +287 -287
  100. package/src/bootstrap/less/.csscomb.json +304 -304
  101. package/src/bootstrap/less/.csslintrc +19 -19
  102. package/src/bootstrap/less/alerts.less +73 -73
  103. package/src/bootstrap/less/badges.less +66 -66
  104. package/src/bootstrap/less/bootstrap.less +56 -56
  105. package/src/bootstrap/less/breadcrumbs.less +26 -26
  106. package/src/bootstrap/less/button-groups.less +247 -247
  107. package/src/bootstrap/less/buttons.less +172 -172
  108. package/src/bootstrap/less/carousel.less +269 -269
  109. package/src/bootstrap/less/close.less +34 -34
  110. package/src/bootstrap/less/code.less +69 -69
  111. package/src/bootstrap/less/component-animations.less +33 -33
  112. package/src/bootstrap/less/dropdowns.less +216 -216
  113. package/src/bootstrap/less/forms.less +626 -626
  114. package/src/bootstrap/less/glyphicons.less +305 -305
  115. package/src/bootstrap/less/grid.less +84 -84
  116. package/src/bootstrap/less/input-groups.less +167 -167
  117. package/src/bootstrap/less/jumbotron.less +52 -52
  118. package/src/bootstrap/less/labels.less +64 -64
  119. package/src/bootstrap/less/list-group.less +141 -141
  120. package/src/bootstrap/less/media.less +66 -66
  121. package/src/bootstrap/less/mixins/alerts.less +14 -14
  122. package/src/bootstrap/less/mixins/background-variant.less +9 -9
  123. package/src/bootstrap/less/mixins/border-radius.less +18 -18
  124. package/src/bootstrap/less/mixins/buttons.less +69 -69
  125. package/src/bootstrap/less/mixins/center-block.less +7 -7
  126. package/src/bootstrap/less/mixins/clearfix.less +22 -22
  127. package/src/bootstrap/less/mixins/forms.less +90 -90
  128. package/src/bootstrap/less/mixins/gradients.less +59 -59
  129. package/src/bootstrap/less/mixins/grid-framework.less +92 -92
  130. package/src/bootstrap/less/mixins/grid.less +122 -122
  131. package/src/bootstrap/less/mixins/hide-text.less +21 -21
  132. package/src/bootstrap/less/mixins/image.less +33 -33
  133. package/src/bootstrap/less/mixins/labels.less +12 -12
  134. package/src/bootstrap/less/mixins/list-group.less +30 -30
  135. package/src/bootstrap/less/mixins/nav-divider.less +10 -10
  136. package/src/bootstrap/less/mixins/nav-vertical-align.less +9 -9
  137. package/src/bootstrap/less/mixins/opacity.less +8 -8
  138. package/src/bootstrap/less/mixins/pagination.less +24 -24
  139. package/src/bootstrap/less/mixins/panels.less +24 -24
  140. package/src/bootstrap/less/mixins/progress-bar.less +10 -10
  141. package/src/bootstrap/less/mixins/reset-filter.less +8 -8
  142. package/src/bootstrap/less/mixins/reset-text.less +18 -18
  143. package/src/bootstrap/less/mixins/resize.less +6 -6
  144. package/src/bootstrap/less/mixins/responsive-visibility.less +15 -15
  145. package/src/bootstrap/less/mixins/size.less +10 -10
  146. package/src/bootstrap/less/mixins/tab-focus.less +9 -9
  147. package/src/bootstrap/less/mixins/table-row.less +44 -44
  148. package/src/bootstrap/less/mixins/text-emphasis.less +9 -9
  149. package/src/bootstrap/less/mixins/text-overflow.less +8 -8
  150. package/src/bootstrap/less/mixins/vendor-prefixes.less +227 -227
  151. package/src/bootstrap/less/mixins.less +40 -40
  152. package/src/bootstrap/less/modals.less +151 -151
  153. package/src/bootstrap/less/navbar.less +660 -660
  154. package/src/bootstrap/less/navs.less +286 -286
  155. package/src/bootstrap/less/normalize.less +424 -424
  156. package/src/bootstrap/less/pager.less +76 -76
  157. package/src/bootstrap/less/pagination.less +89 -89
  158. package/src/bootstrap/less/panels.less +275 -275
  159. package/src/bootstrap/less/popovers.less +131 -131
  160. package/src/bootstrap/less/print.less +101 -101
  161. package/src/bootstrap/less/progress-bars.less +87 -87
  162. package/src/bootstrap/less/responsive-embed.less +35 -35
  163. package/src/bootstrap/less/responsive-utilities.less +194 -194
  164. package/src/bootstrap/less/scaffolding.less +161 -161
  165. package/src/bootstrap/less/tables.less +262 -262
  166. package/src/bootstrap/less/theme.less +291 -291
  167. package/src/bootstrap/less/thumbnails.less +36 -36
  168. package/src/bootstrap/less/tooltip.less +102 -102
  169. package/src/bootstrap/less/type.less +303 -303
  170. package/src/bootstrap/less/utilities.less +55 -55
  171. package/src/bootstrap/less/variables.less +895 -895
  172. package/src/bootstrap/less/wells.less +29 -29
  173. package/src/components/AloneLoadParams.vue +26 -26
  174. package/src/components/EncryptUtil.js +53 -53
  175. package/src/components/LoadAppdata.vue +38 -38
  176. package/src/components/LoginApp.vue +8 -4
  177. package/src/components/ModifyPassWord.vue +279 -220
  178. package/src/components/Test.vue +14 -14
  179. package/src/filiale/gongyi/LoginApp.vue +8 -4
  180. package/src/filiale/kelamayi/LoginAppV4.vue +9 -4
  181. package/src/filiale/liaoyuan/LoginApp.vue +8 -4
  182. package/src/filiale/yuansheng/LoginApp.vue +8 -4
  183. package/src/filiale/yulinyuchuan/LoginApp.vue +9 -4
  184. package/src/filiale/yulinyuchuanTY/LoginApp.vue +9 -4
  185. package/src/plugins/GetStringData.js +18 -18
  186. package/src/plugins/LoadParams.js +24 -24
  187. package/src/plugins/validateStrongPasswordPhone.js +138 -125
  188. package/src/services/ConfigService.js +24 -24
  189. package/static/app.json +4 -4
  190. package/static/globals.txt +74 -74
  191. package/test/unit/.eslintrc +5 -5
  192. package/test/unit/TestUtil.js +35 -35
  193. package/test/unit/context.html +20 -20
  194. package/test/unit/index.js +13 -13
  195. package/test/unit/init.js +13 -13
  196. package/test/unit/karma.conf.js +50 -50
  197. package/test/unit/specs/App.spec.js +17 -17
  198. package/test/unit/specs/Test.spec.js +28 -28
  199. package/test/unit/specs/components/LoginApp.spec.js +21 -21
  200. package/test/unit/specs/sevices/ConfigService.spec.js +23 -23
  201. package/test/unit/specs/sevices/GetDBTest.spec.js +28 -28
@@ -63,6 +63,7 @@
63
63
  import Vue from 'vue'
64
64
  import * as Util from '../../Util'
65
65
  import JSEncrypt from 'jsencrypt'
66
+ import { validateStrongPasswordPhone } from '../../plugins/validateStrongPasswordPhone.js'
66
67
  //获取json配置文件
67
68
  let asyncReady = async function (self, url) {
68
69
  try {
@@ -361,10 +362,14 @@ export default {
361
362
  console.log('获取参数结束')
362
363
  this.loaderShow = false
363
364
  // 弱口令验证
364
- if (this.weakPassword && !(/^(?:(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[^A-Za-z0-9])).*$/.test(this.password))) {
365
- await this.$showMessage('登录系统: 此账户的密码过于简单,请修改密码后重新登陆!!!', ['confirm'])
366
- this.modifyPassword = true
367
- return
365
+ // 弱口令验证
366
+ if (this.weakPassword) {
367
+ const pwdResult = validateStrongPasswordPhone(this.password)
368
+ if (!pwdResult.isValid) {
369
+ await this.$showMessage('登录系统: 此账户的密码过于简单,' + (pwdResult.errors[0] || '请修改密码后重新登陆!!!'), ['confirm'])
370
+ this.modifyPassword = true
371
+ return
372
+ }
368
373
  }
369
374
  this.$androidUtil.setPreference('current_create_current_address', JSON.stringify({
370
375
  f_address: '',
@@ -63,6 +63,7 @@
63
63
  import Vue from 'vue'
64
64
  import * as Util from '../../Util'
65
65
  import JSEncrypt from 'jsencrypt'
66
+ import { validateStrongPasswordPhone } from '../../plugins/validateStrongPasswordPhone.js'
66
67
  //获取json配置文件
67
68
  let asyncReady = async function (self, url) {
68
69
  try {
@@ -331,10 +332,14 @@ export default {
331
332
  console.log('获取参数结束')
332
333
  this.loaderShow = false
333
334
  // 弱口令验证
334
- if (this.weakPassword && !(/^(?:(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[^A-Za-z0-9])).*$/.test(this.password))) {
335
- await this.$showMessage('登录系统: 此账户的密码过于简单,请修改密码后重新登陆!!!', ['confirm'])
336
- this.modifyPassword = true
337
- return
335
+ // 弱口令验证
336
+ if (this.weakPassword) {
337
+ const pwdResult = validateStrongPasswordPhone(this.password)
338
+ if (!pwdResult.isValid) {
339
+ await this.$showMessage('登录系统: 此账户的密码过于简单,' + (pwdResult.errors[0] || '请修改密码后重新登陆!!!'), ['confirm'])
340
+ this.modifyPassword = true
341
+ return
342
+ }
338
343
  }
339
344
  this.$androidUtil.setPreference('current_create_current_address', JSON.stringify({
340
345
  f_address: '',
@@ -1,18 +1,18 @@
1
-
2
- let GetStringdatas = {
3
-
4
- install (Vue, options) {
5
- // 给vue增添对话框显示方法
6
- Vue.$getString = Vue.prototype.$getString = GetStringdatas
7
- },
8
- getSubStr (String) {
9
- if(String.endsWith('phone')){
10
- let oldStr = String
11
- let index = oldStr.lastIndexOf("/")
12
- return oldStr.substring(0, index)
13
- }
14
- return String
15
- }
16
- }
17
-
18
- export default GetStringdatas
1
+
2
+ let GetStringdatas = {
3
+
4
+ install (Vue, options) {
5
+ // 给vue增添对话框显示方法
6
+ Vue.$getString = Vue.prototype.$getString = GetStringdatas
7
+ },
8
+ getSubStr (String) {
9
+ if(String.endsWith('phone')){
10
+ let oldStr = String
11
+ let index = oldStr.lastIndexOf("/")
12
+ return oldStr.substring(0, index)
13
+ }
14
+ return String
15
+ }
16
+ }
17
+
18
+ export default GetStringdatas
@@ -1,24 +1,24 @@
1
- import Vue from 'vue'
2
- import AppData from '../stores/AppData'
3
-
4
- let LoadParams = {
5
- // 开启卡监听
6
- load () {
7
- return Vue.resetpost(`${Vue.androidUtil.getProxyUrl()}/rs/path/getParams`, {data: {}}, {resolveMsg: null, rejectMsg: null}).then((res) => {
8
- res.data.forEach((item) => {
9
- let value = []
10
- item.f_paramvalues.forEach((item, index) => {
11
- value[index] = {}
12
- value[index].label = item.name
13
- value[index].value = item.name
14
- })
15
- AppData.params[item.name] = value
16
- })
17
- }).catch((res) => {
18
- this.msg = res.data
19
- this.show = true
20
- })
21
- }
22
- }
23
-
24
- export default LoadParams
1
+ import Vue from 'vue'
2
+ import AppData from '../stores/AppData'
3
+
4
+ let LoadParams = {
5
+ // 开启卡监听
6
+ load () {
7
+ return Vue.resetpost(`${Vue.androidUtil.getProxyUrl()}/rs/path/getParams`, {data: {}}, {resolveMsg: null, rejectMsg: null}).then((res) => {
8
+ res.data.forEach((item) => {
9
+ let value = []
10
+ item.f_paramvalues.forEach((item, index) => {
11
+ value[index] = {}
12
+ value[index].label = item.name
13
+ value[index].value = item.name
14
+ })
15
+ AppData.params[item.name] = value
16
+ })
17
+ }).catch((res) => {
18
+ this.msg = res.data
19
+ this.show = true
20
+ })
21
+ }
22
+ }
23
+
24
+ export default LoadParams
@@ -1,172 +1,185 @@
1
1
  const REG_STRONG_PWD =
2
- /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?])(?!.*(123|321|abc|cba))[a-zA-Z\d!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]{8,16}$/;
2
+ /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*(),.?":{}|<>~`+=_\\-])[A-Za-z\d!@#$%^&*(),.?":{}|<>~`+=_\\-]{12,16}$/
3
3
 
4
- // 常见密码列表(可以根据需要扩展)
5
4
  const COMMON_PASSWORDS = [
6
- "password",
7
- "password123",
8
- "123456",
9
- "12345678",
10
- "qwerty",
11
- "abc123",
12
- "Password1",
13
- "password1",
14
- "123456789",
15
- "welcome",
16
- "admin",
17
- "letmein",
18
- "monkey",
19
- "dragon",
20
- "master",
21
- "superman",
22
- "qwerty123",
23
- "admin123",
24
- "root",
25
- "pass",
26
- "test",
27
- "guest",
28
- "user",
29
- "000000",
30
- "111111",
31
- "666666",
32
- "888888",
33
- "999999",
34
- "iloveyou",
35
- "welcome123",
36
- "password!",
37
- "Passw0rd!",
38
- "Passw0rd",
39
- "Password!",
40
- "passw0rd",
41
- "P@ssw0rd",
42
- "P@ssword",
43
- "Password@123",
44
- ];
45
-
46
- // 检查连续数字(3个或以上)
47
- const hasConsecutiveNumbers = (password) => {
5
+ 'password',
6
+ 'password123',
7
+ '123456',
8
+ '12345678',
9
+ 'qwerty',
10
+ 'abc123',
11
+ 'Password1',
12
+ 'password1',
13
+ '123456789',
14
+ 'welcome',
15
+ 'admin',
16
+ 'letmein',
17
+ 'monkey',
18
+ 'dragon',
19
+ 'master',
20
+ 'superman',
21
+ 'qwerty123',
22
+ 'admin123',
23
+ 'root',
24
+ 'pass',
25
+ 'test',
26
+ 'guest',
27
+ 'user',
28
+ '000000',
29
+ '111111',
30
+ '666666',
31
+ '888888',
32
+ '999999',
33
+ 'iloveyou',
34
+ 'welcome123',
35
+ 'password!',
36
+ 'Passw0rd!',
37
+ 'Passw0rd',
38
+ 'Password!',
39
+ 'passw0rd',
40
+ 'P@ssw0rd',
41
+ 'P@ssword',
42
+ 'Password@123'
43
+ ]
44
+
45
+ export const PASSWORD_RULE_HINT = '密码长度须为 12-16 位,包含大小写字母、数字与特殊符号。'
46
+
47
+ export const PASSWORD_DEFAULT_ERROR = '新密码必须包含大小写字母、数字和特殊字符,且长度为12-16位'
48
+
49
+ function hasConsecutiveNumbers (password) {
48
50
  for (let i = 0; i <= password.length - 3; i++) {
49
- const substr = password.substring(i, i + 3);
51
+ const substr = password.substring(i, i + 3)
50
52
  if (/^\d{3,}$/.test(substr)) {
51
- // 检查是否为连续数字
52
- const digits = substr.split("").map(Number);
53
- let isConsecutive = true;
53
+ const digits = substr.split('').map(Number)
54
+ let isConsecutive = true
54
55
  for (let j = 1; j < digits.length; j++) {
55
56
  if (digits[j] !== digits[j - 1] + 1) {
56
- isConsecutive = false;
57
- break;
57
+ isConsecutive = false
58
+ break
58
59
  }
59
60
  }
60
- if (isConsecutive) return true;
61
+ if (isConsecutive) return true
61
62
  }
62
63
  }
63
- return false;
64
- };
64
+ return false
65
+ }
65
66
 
66
- // 检查连续字母(3个或以上)
67
- const hasConsecutiveLetters = (password) => {
68
- const lowerPassword = password.toLowerCase();
67
+ function hasConsecutiveLetters (password) {
68
+ const lowerPassword = password.toLowerCase()
69
69
  for (let i = 0; i <= lowerPassword.length - 3; i++) {
70
- const substr = lowerPassword.substring(i, i + 3);
70
+ const substr = lowerPassword.substring(i, i + 3)
71
71
  if (/^[a-z]{3,}$/.test(substr)) {
72
- // 检查是否为连续字母
73
- let isConsecutive = true;
72
+ let isConsecutive = true
74
73
  for (let j = 1; j < substr.length; j++) {
75
74
  if (substr.charCodeAt(j) !== substr.charCodeAt(j - 1) + 1) {
76
- isConsecutive = false;
77
- break;
75
+ isConsecutive = false
76
+ break
78
77
  }
79
78
  }
80
- if (isConsecutive) return true;
79
+ if (isConsecutive) return true
81
80
  }
82
81
  }
83
- return false;
84
- };
85
-
86
- // 检查重复字符(3个或以上相同字符)
87
- const hasRepeatedChars = (password) => {
88
- return /(.)\1{2,}/.test(password);
89
- };
90
-
91
- // 检查键盘连续按键(如 qwerty, asdf 等)
92
- const hasKeyboardPattern = (password) => {
93
- const keyboardRows = ["qwertyuiop", "asdfghjkl", "zxcvbnm", "1234567890"];
94
- const lowerPassword = password.toLowerCase();
82
+ return false
83
+ }
84
+
85
+ function hasRepeatedChars (password) {
86
+ return /(.)\1{2,}/.test(password)
87
+ }
88
+
89
+ function hasKeyboardPattern (password) {
90
+ const keyboardRows = ['qwertyuiop', 'asdfghjkl', 'zxcvbnm', '1234567890']
91
+ const lowerPassword = password.toLowerCase()
92
+
95
93
  for (const row of keyboardRows) {
96
94
  for (let i = 0; i <= row.length - 3; i++) {
97
- const pattern = row.substring(i, i + 3);
95
+ const pattern = row.substring(i, i + 3)
98
96
  if (lowerPassword.includes(pattern)) {
99
- return true;
97
+ return true
100
98
  }
101
99
  }
102
100
  }
103
- return false;
104
- };
105
-
106
- /**
107
- * 密码校验结果对象
108
- * @typedef {Object} PasswordValidationResult
109
- * @property {boolean} isValid
110
- * @property {string[]} errors
111
- */
112
-
113
- /**
114
- * 增强的密码校验函数
115
- * @param {string} password
116
- * @returns {PasswordValidationResult}
117
- */
101
+ return false
102
+ }
103
+
118
104
  export const validateStrongPasswordPhone = (password) => {
119
105
  const result = {
120
106
  isValid: true,
121
- errors: [],
122
- };
107
+ errors: []
108
+ }
109
+
110
+ if (!password) {
111
+ result.isValid = false
112
+ result.errors.push('不能为空')
113
+ return result
114
+ }
123
115
 
124
- // 1. 基本格式校验
125
116
  if (!REG_STRONG_PWD.test(password)) {
126
- result.isValid = false;
127
- result.errors.push(
128
- "密码长度必须为8-16位,且需同时包含大写字母、小写字母、数字和特殊字符"
129
- );
130
- return result;
117
+ result.isValid = false
118
+ result.errors.push('密码长度须为12-16位,且包含大写字母、小写字母、数字和特殊字符')
119
+ return result
131
120
  }
132
121
 
133
- // 2. 检查是否为常见密码
134
- if (
135
- COMMON_PASSWORDS.includes(password) ||
136
- COMMON_PASSWORDS.includes(password.toLowerCase())
137
- ) {
138
- result.isValid = false;
139
- result.errors.push("不能使用常见密码");
140
- return result;
122
+ if (COMMON_PASSWORDS.includes(password) || COMMON_PASSWORDS.includes(password.toLowerCase())) {
123
+ result.isValid = false
124
+ result.errors.push('不能使用常见密码')
125
+ return result
141
126
  }
142
127
 
143
- // 3. 检查连续数字
144
128
  if (hasConsecutiveNumbers(password)) {
145
- result.isValid = false;
146
- result.errors.push("不能包含连续数字");
147
- return result;
129
+ result.isValid = false
130
+ result.errors.push('不能包含连续数字')
131
+ return result
148
132
  }
149
133
 
150
- // 4. 检查连续字母
151
134
  if (hasConsecutiveLetters(password)) {
152
- result.isValid = false;
153
- result.errors.push("不能包含连续字母");
154
- return result;
135
+ result.isValid = false
136
+ result.errors.push('不能包含连续字母')
137
+ return result
155
138
  }
156
139
 
157
- // 5. 检查重复字符
158
140
  if (hasRepeatedChars(password)) {
159
- result.isValid = false;
160
- result.errors.push("不能包含3个或以上相同字符");
161
- return result;
141
+ result.isValid = false
142
+ result.errors.push('不能包含3个或以上相同字符')
143
+ return result
162
144
  }
163
145
 
164
- // 6. 检查键盘模式
165
146
  if (hasKeyboardPattern(password)) {
166
- result.isValid = false;
167
- result.errors.push("不能包含键盘连续按键模式");
168
- return result;
147
+ result.isValid = false
148
+ result.errors.push('不能包含键盘连续按键模式')
149
+ return result
169
150
  }
170
151
 
171
- return result;
172
- };
152
+ return result
153
+ }
154
+
155
+ export function isStrongPassword (password) {
156
+ return validateStrongPasswordPhone(password).isValid
157
+ }
158
+
159
+ export function getPasswordStrength (password) {
160
+ if (!password) {
161
+ return {
162
+ label: '未输入',
163
+ type: 'default',
164
+ desc: '请输入密码以查看强度',
165
+ visible: false
166
+ }
167
+ }
168
+
169
+ const { isValid, errors } = validateStrongPasswordPhone(password)
170
+ if (isValid) {
171
+ return {
172
+ label: '强',
173
+ type: 'success',
174
+ desc: '密码满足复杂度要求',
175
+ visible: true
176
+ }
177
+ }
178
+
179
+ return {
180
+ label: '弱',
181
+ type: 'error',
182
+ desc: errors[0] || '密码不满足安全要求',
183
+ visible: true
184
+ }
185
+ }
@@ -1,24 +1,24 @@
1
- import Vue from 'vue'
2
- import AppData from '../stores/AppData'
3
-
4
- let LoadParams = {
5
- // 开启卡监听
6
- load () {
7
- return Vue.resetpost(`${Vue.androidUtil.getProxyUrl()}/rs/path/getParams`, {data: {}}, {resolveMsg: null, rejectMsg: null}).then((res) => {
8
- res.data.forEach((item) => {
9
- let value = []
10
- item.f_paramvalues.forEach((item, index) => {
11
- value[index] = {}
12
- value[index].label = item.name
13
- value[index].value = item.name
14
- })
15
- AppData.params[item.name] = value
16
- })
17
- }).catch((res) => {
18
- this.msg = res.data
19
- this.show = true
20
- })
21
- }
22
- }
23
-
24
- export default LoadParams
1
+ import Vue from 'vue'
2
+ import AppData from '../stores/AppData'
3
+
4
+ let LoadParams = {
5
+ // 开启卡监听
6
+ load () {
7
+ return Vue.resetpost(`${Vue.androidUtil.getProxyUrl()}/rs/path/getParams`, {data: {}}, {resolveMsg: null, rejectMsg: null}).then((res) => {
8
+ res.data.forEach((item) => {
9
+ let value = []
10
+ item.f_paramvalues.forEach((item, index) => {
11
+ value[index] = {}
12
+ value[index].label = item.name
13
+ value[index].value = item.name
14
+ })
15
+ AppData.params[item.name] = value
16
+ })
17
+ }).catch((res) => {
18
+ this.msg = res.data
19
+ this.show = true
20
+ })
21
+ }
22
+ }
23
+
24
+ export default LoadParams
package/static/app.json CHANGED
@@ -1,5 +1,5 @@
1
- {
2
- "hybrid_version":"2018-01-01 00:00:01",
3
- "appVer":"1"
4
-
1
+ {
2
+ "hybrid_version":"2018-01-01 00:00:01",
3
+ "appVer":"1"
4
+
5
5
  }
@@ -1,74 +1,74 @@
1
- {
2
- "lastNewFormDate": "1980-01-01 00:00:00",
3
- "f_repairman_id": "x",
4
- "f_user_id": "aaa",
5
- "cc_base_url": "http://aotesoft.f3322.net:8300",
6
- "REMOTE_WWW_PREFIX": "",
7
- "LOCAL_PATH_PREFIX": "/data/data/com.aofeng.hybridwork/files/",
8
- "REMOTE_BZ_PREFIX": "thiswillremove",
9
- "ProjectNativeMethod": "com.aofeng.hybridwork.android.ProjectNativeMethod",
10
- "SCREEN_ORIENTATION":"0",
11
- "startService": "true",
12
- "full_screen":"true",
13
- "pos":"false",
14
- "device":"com.aofeng.hybrid.pos.device.ZTDevice",
15
- "reader":"com.aofeng.hybrid.pos.reader.ZTChangAnReader",
16
- "printer":"com.aofeng.hybrid.pos.printer.ZTPrinter",
17
- "cloud_url":"http://113.140.20.122:4004/",
18
- "version": "0",
19
- "txtServiceStopped": "false",
20
- "msgCount": "0",
21
- "f_subcompany": "changan",
22
- "entities": [
23
- "t_serviceworkorder",
24
- "t_oppointment",
25
- "t_service",
26
- "t_complaint",
27
- "t_consult",
28
- "t_service_acitivity",
29
- "t_servicework",
30
- "t_notwork",
31
- "t_delayapply",
32
- "t_delayreply",
33
- "t_reminder",
34
- "t_site_back",
35
- "t_servicesend",
36
- "t_recall",
37
- "t_servicedelete",
38
- "t_servicerepair",
39
- "t_details",
40
- "t_doorrepair",
41
- "t_accidenttreatment",
42
- "t_gaiconduit",
43
- "t_liconduit",
44
- "t_firstgascheck",
45
- "t_failure",
46
- "t_failurecase",
47
- "t_material",
48
- "t_baseuserinfo",
49
- "t_repairimg",
50
- "t_retail",
51
- "t_notice",
52
- "t_check_paper_alarm",
53
- "t_check_paper",
54
- "t_check_plan_item",
55
- "t_check_plan",
56
- "t_check_paper_cooker",
57
- "t_check_paper_counter",
58
- "t_check_paper_defect",
59
- "t_check_paper_furnace",
60
- "t_check_paper_heater",
61
- "t_check_paper_innerplumb",
62
- "t_check_paper_meter",
63
- "t_phone_state",
64
- "t_check_paper_plumb",
65
- "t_check_paper_valve",
66
- "t_blob",
67
- "t_plan_item_meter",
68
- "t_plan_item_device",
69
- "t_device_info",
70
- "t_defect_info",
71
- "t_devices_items",
72
- "t_paper_devices"
73
- ]
74
- }
1
+ {
2
+ "lastNewFormDate": "1980-01-01 00:00:00",
3
+ "f_repairman_id": "x",
4
+ "f_user_id": "aaa",
5
+ "cc_base_url": "http://aotesoft.f3322.net:8300",
6
+ "REMOTE_WWW_PREFIX": "",
7
+ "LOCAL_PATH_PREFIX": "/data/data/com.aofeng.hybridwork/files/",
8
+ "REMOTE_BZ_PREFIX": "thiswillremove",
9
+ "ProjectNativeMethod": "com.aofeng.hybridwork.android.ProjectNativeMethod",
10
+ "SCREEN_ORIENTATION":"0",
11
+ "startService": "true",
12
+ "full_screen":"true",
13
+ "pos":"false",
14
+ "device":"com.aofeng.hybrid.pos.device.ZTDevice",
15
+ "reader":"com.aofeng.hybrid.pos.reader.ZTChangAnReader",
16
+ "printer":"com.aofeng.hybrid.pos.printer.ZTPrinter",
17
+ "cloud_url":"http://113.140.20.122:4004/",
18
+ "version": "0",
19
+ "txtServiceStopped": "false",
20
+ "msgCount": "0",
21
+ "f_subcompany": "changan",
22
+ "entities": [
23
+ "t_serviceworkorder",
24
+ "t_oppointment",
25
+ "t_service",
26
+ "t_complaint",
27
+ "t_consult",
28
+ "t_service_acitivity",
29
+ "t_servicework",
30
+ "t_notwork",
31
+ "t_delayapply",
32
+ "t_delayreply",
33
+ "t_reminder",
34
+ "t_site_back",
35
+ "t_servicesend",
36
+ "t_recall",
37
+ "t_servicedelete",
38
+ "t_servicerepair",
39
+ "t_details",
40
+ "t_doorrepair",
41
+ "t_accidenttreatment",
42
+ "t_gaiconduit",
43
+ "t_liconduit",
44
+ "t_firstgascheck",
45
+ "t_failure",
46
+ "t_failurecase",
47
+ "t_material",
48
+ "t_baseuserinfo",
49
+ "t_repairimg",
50
+ "t_retail",
51
+ "t_notice",
52
+ "t_check_paper_alarm",
53
+ "t_check_paper",
54
+ "t_check_plan_item",
55
+ "t_check_plan",
56
+ "t_check_paper_cooker",
57
+ "t_check_paper_counter",
58
+ "t_check_paper_defect",
59
+ "t_check_paper_furnace",
60
+ "t_check_paper_heater",
61
+ "t_check_paper_innerplumb",
62
+ "t_check_paper_meter",
63
+ "t_phone_state",
64
+ "t_check_paper_plumb",
65
+ "t_check_paper_valve",
66
+ "t_blob",
67
+ "t_plan_item_meter",
68
+ "t_plan_item_device",
69
+ "t_device_info",
70
+ "t_defect_info",
71
+ "t_devices_items",
72
+ "t_paper_devices"
73
+ ]
74
+ }