n20-common-lib 1.2.33 → 1.2.36

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 (193) hide show
  1. package/README.md +2 -2
  2. package/package.json +88 -88
  3. package/src/_qiankun/index.js +113 -113
  4. package/src/_qiankun/postMessage.js +48 -48
  5. package/src/assets/css/_coreLib.scss +35 -35
  6. package/src/assets/css/cl-anchor.scss +23 -23
  7. package/src/assets/css/cl-approve-card.scss +58 -58
  8. package/src/assets/css/cl-dialog.scss +99 -99
  9. package/src/assets/css/cl-drag-list.scss +22 -22
  10. package/src/assets/css/cl-empty.scss +10 -10
  11. package/src/assets/css/cl-expandable-pane.scss +26 -26
  12. package/src/assets/css/cl-expandable.scss +24 -24
  13. package/src/assets/css/cl-file-upload-table.scss +11 -11
  14. package/src/assets/css/cl-filter.scss +4 -4
  15. package/src/assets/css/cl-flow-step.scss +185 -185
  16. package/src/assets/css/cl-footer-box.scss +10 -10
  17. package/src/assets/css/cl-form-item.scss +612 -612
  18. package/src/assets/css/cl-general-card.scss +11 -11
  19. package/src/assets/css/cl-layout-aside.scss +92 -92
  20. package/src/assets/css/cl-layout-content.scss +16 -16
  21. package/src/assets/css/cl-layout-header.scss +73 -73
  22. package/src/assets/css/cl-layout-tabs.scss +87 -87
  23. package/src/assets/css/cl-layout.scss +97 -97
  24. package/src/assets/css/cl-login-temporary.scss +37 -37
  25. package/src/assets/css/cl-message.scss +75 -75
  26. package/src/assets/css/cl-more-tab.scss +98 -98
  27. package/src/assets/css/cl-nav-menu.scss +5 -5
  28. package/src/assets/css/cl-pagination.scss +128 -128
  29. package/src/assets/css/cl-secondary-tab.scss +53 -53
  30. package/src/assets/css/cl-showcolumn.scss +23 -23
  31. package/src/assets/css/cl-sifting.scss +51 -51
  32. package/src/assets/css/cl-statis.scss +42 -42
  33. package/src/assets/css/cl-step.scss +73 -73
  34. package/src/assets/css/cl-suspend.scss +19 -19
  35. package/src/assets/css/cl-tertiary-tab.scss +54 -54
  36. package/src/assets/css/cl-upload.scss +41 -41
  37. package/src/assets/css/cl-worn-pagination.scss +50 -50
  38. package/src/assets/css/el-button.scss +173 -173
  39. package/src/assets/css/el-table.scss +79 -79
  40. package/src/assets/css/element-variables.scss +1061 -1061
  41. package/src/assets/css/element.dev.scss +21 -21
  42. package/src/assets/css/font-icon.scss +27 -27
  43. package/src/assets/css/index.dev.scss +4 -4
  44. package/src/assets/css/index.scss +11 -11
  45. package/src/assets/css/normalize.scss +726 -726
  46. package/src/assets/css/rootvar.scss +139 -139
  47. package/src/assets/css/select.scss +25 -25
  48. package/src/assets/css/title-pop.scss +4 -4
  49. package/src/assets/getJsonc.js +50 -50
  50. package/src/assets/realUrl.js +12 -12
  51. package/src/components/.DS_Store +0 -0
  52. package/src/components/Anchor/AnchorItem.vue +29 -29
  53. package/src/components/Anchor/index.vue +185 -185
  54. package/src/components/ApprovalButtons/index.vue +233 -233
  55. package/src/components/ApprovalCard/index.vue +128 -128
  56. package/src/components/ApprovalRecord/approvalImg.vue +39 -39
  57. package/src/components/ApprovalRecord/index.vue +59 -59
  58. package/src/components/Button/button-group.vue +150 -150
  59. package/src/components/Button/icon-group-button.vue +61 -61
  60. package/src/components/Button/index.vue +56 -56
  61. package/src/components/CascaderArea/index.vue +103 -103
  62. package/src/components/ContentLoading/index.vue +41 -41
  63. package/src/components/ContentNull/index.vue +19 -19
  64. package/src/components/DatePicker/index.vue +27 -27
  65. package/src/components/DatePicker/por.vue +169 -169
  66. package/src/components/Dialog/index.vue +26 -26
  67. package/src/components/Dialog/indexO.vue +116 -116
  68. package/src/components/DragList/index.vue +75 -75
  69. package/src/components/Empty/.DS_Store +0 -0
  70. package/src/components/Empty/img/.DS_Store +0 -0
  71. package/src/components/Empty/img/abnormal.svg +108 -108
  72. package/src/components/Empty/img/dispose.svg +71 -71
  73. package/src/components/Empty/img/empty.svg +57 -57
  74. package/src/components/Empty/img/general.svg +58 -58
  75. package/src/components/Empty/img/lock.svg +57 -57
  76. package/src/components/Empty/img/network.svg +59 -59
  77. package/src/components/Empty/img/relevant.svg +68 -68
  78. package/src/components/Empty/img/search.svg +72 -72
  79. package/src/components/Empty/index.vue +92 -92
  80. package/src/components/Expandable/index.vue +49 -49
  81. package/src/components/Expandable/main.vue +52 -52
  82. package/src/components/FileExportAsync/index.vue +178 -178
  83. package/src/components/FileUploadTable/index.vue +484 -484
  84. package/src/components/Filters/index.vue +371 -371
  85. package/src/components/Filters/indexO.vue +104 -104
  86. package/src/components/FlowStep/index.vue +68 -68
  87. package/src/components/FooterBox/index.vue +21 -21
  88. package/src/components/GeneralCard/index.vue +15 -15
  89. package/src/components/InputNumber/index.vue +169 -169
  90. package/src/components/InputNumber/numberRange.vue +47 -47
  91. package/src/components/InputSearch/index.vue +75 -75
  92. package/src/components/Layout/.DS_Store +0 -0
  93. package/src/components/Layout/AsideNav/index.vue +119 -119
  94. package/src/components/Layout/AsideNav/menuItem.vue +34 -34
  95. package/src/components/Layout/AsideNav/submenuTitle.vue +26 -26
  96. package/src/components/Layout/HeaderWrap/changePwd.vue +215 -215
  97. package/src/components/Layout/HeaderWrap/index.vue +371 -371
  98. package/src/components/Layout/HeaderWrap/noticePop.vue +300 -300
  99. package/src/components/Layout/SubContent/index.vue +127 -131
  100. package/src/components/Layout/TabsNav/index.vue +170 -170
  101. package/src/components/Layout/index.vue +518 -522
  102. package/src/components/Layout/utils.js +12 -12
  103. package/src/components/LoginTemporary/form.vue +570 -570
  104. package/src/components/LoginTemporary/index.vue +139 -139
  105. package/src/components/LoginTemporary/qrcode.vue +90 -90
  106. package/src/components/LoginTemporary/retrievePw.vue +372 -372
  107. package/src/components/LoginTemporary/utils.js +73 -73
  108. package/src/components/MicroApp/index.js +67 -67
  109. package/src/components/MicroFrame/index.vue +95 -95
  110. package/src/components/MoreTab/index.vue +232 -232
  111. package/src/components/NavMenu/index.vue +60 -60
  112. package/src/components/NstcG6Components/.DS_Store +0 -0
  113. package/src/components/NstcG6Components/NstcDialog/NstcDialog.vue +184 -184
  114. package/src/components/PageLayout/page.vue +15 -15
  115. package/src/components/Pagination/index.vue +165 -165
  116. package/src/components/SecondaryTab/index.vue +58 -58
  117. package/src/components/SelectLazy/index.vue +75 -75
  118. package/src/components/SelectTree/SelectTreeLazy.vue +241 -241
  119. package/src/components/SelectTree/index.vue +205 -205
  120. package/src/components/ShowColumn/index.vue +213 -213
  121. package/src/components/Sifting/index.vue +99 -99
  122. package/src/components/Statis/index.vue +97 -97
  123. package/src/components/Statis/statisItem.vue +54 -54
  124. package/src/components/Statis/statisPopover.vue +55 -55
  125. package/src/components/Step/index.vue +38 -38
  126. package/src/components/Suspend/index.vue +72 -72
  127. package/src/components/Table/index.vue +209 -209
  128. package/src/components/Table/indexO.vue +149 -149
  129. package/src/components/Task/index.vue +26 -26
  130. package/src/components/TertiaryTab/index.vue +63 -63
  131. package/src/components/TimePicker/index.vue +28 -28
  132. package/src/components/Upload/index.vue +242 -242
  133. package/src/components/WornPagination/index.vue +73 -73
  134. package/src/directives/VClickOutside/index.js +19 -19
  135. package/src/directives/VHas/index.js +58 -58
  136. package/src/directives/VMove/index.js +42 -42
  137. package/src/directives/VTitle/index.js +69 -69
  138. package/src/directives/VTitle/tooltip.vue +21 -21
  139. package/src/index.js +229 -229
  140. package/src/plugins/CompatibleOld/index.js +57 -57
  141. package/src/plugins/Print/index.js +4 -4
  142. package/src/plugins/Print/print-js/.babelrc +12 -12
  143. package/src/plugins/Print/print-js/LICENSE +21 -21
  144. package/src/plugins/Print/print-js/README.md +98 -98
  145. package/src/plugins/Print/print-js/dist/print.css +96 -96
  146. package/src/plugins/Print/print-js/dist/print.js +990 -990
  147. package/src/plugins/Print/print-js/package.json +60 -60
  148. package/src/plugins/Print/print-js/src/index.d.ts +45 -45
  149. package/src/plugins/Print/print-js/src/index.js +10 -10
  150. package/src/plugins/Print/print-js/src/js/browser.js +33 -33
  151. package/src/plugins/Print/print-js/src/js/functions.js +103 -103
  152. package/src/plugins/Print/print-js/src/js/html.js +70 -70
  153. package/src/plugins/Print/print-js/src/js/image.js +48 -48
  154. package/src/plugins/Print/print-js/src/js/init.js +168 -168
  155. package/src/plugins/Print/print-js/src/js/json.js +109 -109
  156. package/src/plugins/Print/print-js/src/js/modal.js +62 -62
  157. package/src/plugins/Print/print-js/src/js/pdf.js +62 -62
  158. package/src/plugins/Print/print-js/src/js/print.js +102 -102
  159. package/src/plugins/Print/print-js/src/js/raw-html.js +15 -15
  160. package/src/plugins/Print/print-js/src/sass/index.scss +13 -13
  161. package/src/plugins/Print/print-js/src/sass/modules/_colors.scss +9 -9
  162. package/src/plugins/Print/print-js/src/sass/partials/_modal.scss +40 -40
  163. package/src/plugins/Print/print-js/src/sass/partials/_spinner.scss +45 -45
  164. package/src/plugins/Print/print.js +2 -2
  165. package/src/plugins/Print/print.scss +1 -1
  166. package/src/plugins/SetMenuTree/index.vue +41 -41
  167. package/src/plugins/SetMenuTree/logoIcon.vue +37 -37
  168. package/src/plugins/SetMenuTree/setmenutree.vue +427 -427
  169. package/src/plugins/SetMenuTree/utils.js +74 -74
  170. package/src/plugins/Sign/InfosecNetSignCNGAgent.min.js +2000 -2000
  171. package/src/plugins/Sign/index.js +65 -65
  172. package/src/plugins/Sign/sign.js +1 -1
  173. package/src/plugins/setTabsForSub.js +2 -2
  174. package/src/utils/auth.js +53 -53
  175. package/src/utils/axios.js +203 -203
  176. package/src/utils/downloadBlob.js +19 -19
  177. package/src/utils/forEachs.js +16 -16
  178. package/src/utils/getScrollContainer.js +43 -43
  179. package/src/utils/i18n/cn2hk.json +1270 -1270
  180. package/src/utils/i18n/index.js +50 -50
  181. package/src/utils/list2tree.js +36 -36
  182. package/src/utils/msgboxPor.js +26 -26
  183. package/src/utils/print.js +161 -161
  184. package/src/utils/relaNo.js +72 -72
  185. package/src/utils/repairElementUI.js +66 -66
  186. package/src/utils/urlToGo.js +82 -82
  187. package/style/css/normalize.scss +726 -726
  188. package/style/index.css +3 -3
  189. package/style/pageDemo/demo-1.vue +131 -131
  190. package/style/pageDemo/demo-2.vue +35 -35
  191. package/style/pageDemo/demo-3.vue +22 -22
  192. package/style/pageDemo/seeCode.js +20 -20
  193. package/style/server-config.jsonc +717 -606
@@ -1,372 +1,372 @@
1
- <template>
2
- <div class="login-form-wrap p-a">
3
- <div>找回密码</div>
4
- <div v-if="type === 'phone'" key="phone">
5
- <el-form
6
- ref="update-form"
7
- :model="updateForm"
8
- :rules="updateRules"
9
- :hide-required-asterisk="true"
10
- >
11
- <el-form-item class="m-b" label="手机号" prop="phone">
12
- <el-input v-model="updateForm.phone" placeholder="请输入手机号" />
13
- </el-form-item>
14
- <el-form-item class="m-b" label="验证码" prop="code">
15
- <br />
16
- <div class="flex-box">
17
- <el-input
18
- v-model="updateForm.code"
19
- class="flex-item m-r-s"
20
- placeholder="请输入验证码"
21
- />
22
- <el-button
23
- plain
24
- style="4em"
25
- :disabled="!updateForm.phone || codeNum !== '验证码'"
26
- @click="sendMsg('phone', '手机号')"
27
- >{{ codeNum }}</el-button
28
- >
29
- </div>
30
- </el-form-item>
31
- <el-button
32
- class="m-t"
33
- type="primary"
34
- style="width: 100%"
35
- @click="getNext"
36
- >下一步</el-button
37
- >
38
- </el-form>
39
- <div class="flex-box flex-lr m-t-m m-b-s">
40
- <el-link :underline="false" @click="getBanck">返回</el-link>
41
- <el-link :underline="false" @click="changeUk('uk')">其他方式</el-link>
42
- </div>
43
- </div>
44
- <div v-if="type === 'uk'" key="uk">
45
- <el-form>
46
- <el-form-item class="m-b" label="账号">
47
- <el-input v-model="username" placeholder="请输入账号" />
48
- </el-form-item>
49
- <el-form-item class="m-b" label="uk验证" prop="code">
50
- <br />
51
- <div v-if="checkCert" class="filed-tips">该账号未开启UK校验!</div>
52
- <div v-if="ukCode !== 1">
53
- <div :class="ukCode ? 'success-tips' : 'filed-tips'">
54
- {{ ukCode ? '验证成功!' : '验证失败!' }}
55
- </div>
56
- <div v-show="!ukCode" class="filed-tips">
57
- 自助找回密码失败,请联系管理员
58
- </div>
59
- </div>
60
- </el-form-item>
61
- <el-button
62
- class="m-t"
63
- type="primary"
64
- :disabled="ukCode !== true"
65
- style="width: 100%"
66
- @click="getUkNext"
67
- >下一步</el-button
68
- >
69
- </el-form>
70
- <div class="flex-box flex-lr m-t-m m-b-s">
71
- <el-link :underline="false" @click="getBanck">返回</el-link>
72
- <el-link :underline="false" @click="changeUk('phone')"
73
- >其他方式</el-link
74
- >
75
- </div>
76
- </div>
77
- <div v-if="type === 'newPwd'" key="newPwd">
78
- <el-form
79
- ref="newPwdRef"
80
- :model="newPwdForm"
81
- :rules="newPwdRules"
82
- :hide-required-asterisk="true"
83
- >
84
- <el-form-item
85
- class="m-b"
86
- :label="confirmPwdData.resetType == 'mobile' ? '手机号' : '账号'"
87
- >
88
- <el-input v-model="isPhone" disabled />
89
- </el-form-item>
90
- <el-form-item class="m-b" label="新密码" prop="newPassword">
91
- <el-input
92
- v-model="newPwdForm.newPassword"
93
- placeholder="请输入新密码"
94
- show-password
95
- />
96
- </el-form-item>
97
- <el-form-item class="m-b" label="确认密码" prop="respwd">
98
- <el-input
99
- v-model="newPwdForm.respwd"
100
- show-password
101
- placeholder="请输入确认密码"
102
- />
103
- </el-form-item>
104
- <el-button
105
- class="m-t"
106
- type="primary"
107
- style="width: 100%"
108
- @click="confirm"
109
- >确认</el-button
110
- >
111
- <div class="m-t-s">
112
- <el-link :underline="false" @click="getBanck">返回</el-link>
113
- </div>
114
- </el-form>
115
- </div>
116
- </div>
117
- </template>
118
-
119
- <script>
120
- import axios from '../../utils/axios'
121
- import { getSign } from '../../plugins/Sign/sign'
122
- export default {
123
- data() {
124
- const lengthToFirstPassword = (rule, value, callback) => {
125
- if (value) {
126
- if (
127
- this.dataForm.maxLength < value.length ||
128
- this.dataForm.minLength > value.length
129
- ) {
130
- callback(
131
- new Error(
132
- `密码长度为${this.dataForm.minLength}-${this.dataForm.maxLength}!`
133
- )
134
- )
135
- } else if (
136
- this.dataForm.passwordStrength == 2 &&
137
- !/^(((?=.*[0-9])(?=.*[a-zA-Z])|(?=.*[0-9])(?=.*[^\s0-9a-zA-Z])|(?=.*[a-zA-Z])(?=.*[^\s0-9a-zA-Z]))[^\s]+)$/.test(
138
- value
139
- )
140
- ) {
141
- callback(new Error(`密码至少包括数字,字母,特殊符号其中两种`))
142
- } else if (
143
- this.dataForm.passwordStrength == 3 &&
144
- !/^(?=.*\d)(?=.*[a-zA-Z])(?=.*[~!@#$%^&*])[\da-zA-Z~!@#$%^&*]{0,}$/.test(
145
- value
146
- )
147
- ) {
148
- callback(new Error(`密码同时包括包括数字,字母,特殊符号三种`))
149
- } else {
150
- callback()
151
- }
152
- } else {
153
- callback()
154
- }
155
- }
156
- const compareToFirstPassword = (rule, value, callback) => {
157
- if (value && value !== this.newPwdForm.newPassword) {
158
- callback('确认密码和新密码不一致!')
159
- return
160
- }
161
- callback()
162
- }
163
- return {
164
- updateForm: {
165
- phone: '',
166
- code: '',
167
- username: ''
168
- },
169
- checkCert: false,
170
- username: '',
171
- newPwdForm: {
172
- newPassword: '',
173
- respwd: ''
174
- },
175
- type: 'phone',
176
- bank: '',
177
- confirmPwdData: {},
178
- confirmPwd: false,
179
- updateRules: {
180
- phone: [
181
- { required: true, message: '请输入手机号!', trigger: 'blur' },
182
- {
183
- pattern: /^1\d{10}$/,
184
- message: '请输入正确手机号!',
185
- trigger: 'blur'
186
- }
187
- ],
188
- code: [{ required: true, message: '请输入验证码!', trigger: 'blur' }]
189
- },
190
- codeNum: '验证码',
191
- isPhone: '',
192
- dataForm: {},
193
- sign: '',
194
- certDn: '',
195
- signData: '',
196
- ukCode: 1,
197
- newPwdRules: {
198
- newPassword: [
199
- { required: true, message: '请输入新密码', trigger: 'blur' },
200
- {
201
- validator: lengthToFirstPassword,
202
- trigger: 'blur'
203
- }
204
- ],
205
- respwd: [
206
- { required: true, message: '请输入确认密码', trigger: 'blur' },
207
- {
208
- validator: compareToFirstPassword,
209
- trigger: 'blur'
210
- }
211
- ]
212
- }
213
- }
214
- },
215
- watch: {
216
- signData(val) {
217
- if (val === undefined) {
218
- this.ukCode = undefined
219
- }
220
- if (val) {
221
- this.ukCode = true
222
- }
223
- },
224
- username(newValue, oldValue) {
225
- this.checkCert = false
226
- if (newValue !== oldValue && newValue) {
227
- // 数据变化了,执行逻辑,这里做好防抖。
228
- this.ms = 1000
229
- clearTimeout(this.timeID)
230
- this.timeID = setTimeout(() => {
231
- axios
232
- .get(`/bems/prod_1.0/dssc/sign/getUserDn/${newValue}`)
233
- .then((res) => {
234
- if (!res.data.checkCert) {
235
- this.checkCert = true
236
- return
237
- }
238
- if (res.data.checkCert && res.data.userDn) {
239
- this.signData = getSign(newValue, res.data.userDn)
240
- this.certDn = res.data.userDn
241
- }
242
- })
243
- }, this.ms)
244
- }
245
- }
246
- },
247
- methods: {
248
- // 发送短信
249
- outTime(num) {
250
- clearTimeout(this.setTimeNum)
251
- if (num > 0) {
252
- num--
253
- this.codeNum = num + 'S'
254
-
255
- this.setTimeNum = setTimeout(() => {
256
- this.outTime(num)
257
- }, 1000)
258
- num--
259
- } else {
260
- clearTimeout(this.setTimeNum)
261
- this.codeNum = '验证码'
262
- }
263
- },
264
- sendMsg(type, typeName) {
265
- this.$refs['update-form'].validateField(type, (valid) => {
266
- if (!valid) {
267
- this.outTime(60)
268
- axios
269
- .get(
270
- `/bems/prod_1.0/uas/api/authorization/captcha/${this.updateForm[type]}/1`,
271
- null,
272
- { loading: false, noMsg: true }
273
- )
274
- .then(() => {
275
- this.$message.success(
276
- `${typeName}: ${this.updateForm[type]} 验证码发送成功`
277
- )
278
- })
279
- .catch(() => {
280
- console.log(123)
281
- clearTimeout(this.setTimeNum)
282
- this.codeNum = '验证码'
283
- this.$message.warning(
284
- `${typeName}: ${this.updateForm[type]} 验证码发送失败`
285
- )
286
- })
287
- }
288
- })
289
- },
290
- // 下一步
291
- getNext() {
292
- this.$refs['update-form'].validate((val) => {
293
- if (val) {
294
- this.confirmPwdData = {
295
- type: 'newPwd',
296
- username: this.updateForm.username,
297
- mobile: this.updateForm.phone,
298
- captcha: this.updateForm.code,
299
- resetType: 'mobile',
300
- phone: this.updateForm.phone,
301
- code: this.updateForm.code
302
- }
303
- this.isPhone =
304
- this.confirmPwdData.phone.substring(0, 3) +
305
- '****' +
306
- this.confirmPwdData.phone.substring(7, 11)
307
- this.type = 'newPwd'
308
- this.getUserRole()
309
- }
310
- })
311
- },
312
- getUkNext() {
313
- this.confirmPwdData = {
314
- type: 'newPwd',
315
- username: this.username,
316
- resetType: 'certificate'
317
- }
318
- this.type = 'newPwd'
319
- this.isPhone = this.confirmPwdData.username
320
- },
321
- async getUserRole() {
322
- let data = {
323
- userNo: this.confirmPwdData.username
324
- }
325
- let res = await axios.post(
326
- `/bems/prod_1.0/user/api/userController/use`,
327
- data
328
- )
329
- this.dataForm = res.data
330
- },
331
- // 确认
332
- confirm() {
333
- this.$refs.newPwdRef.validate((val) => {
334
- let data = this.confirmPwdData
335
- data.newPassword = this.newPwdForm.newPassword
336
- data.sign = this.sign
337
- data.certDn = this.certDn
338
- axios
339
- .post(`/bems/prod_1.0/uas/api/authorization/password/reset`, data)
340
- .then((res) => {
341
- this.$message.success(`密码更新成功!`)
342
- this.type = 'phone'
343
- })
344
- })
345
- },
346
- changeUk(val) {
347
- this.type = val
348
- },
349
- getBanck() {
350
- this.$emit('changType', 'login')
351
- }
352
- }
353
- }
354
- </script>
355
-
356
- <style>
357
- .success-tips {
358
- font-size: 14px;
359
- text-align: left;
360
- color: #48d2a0;
361
- line-height: 22px;
362
- }
363
- .filed-tips {
364
- font-size: 14px;
365
- text-align: left;
366
- color: #fb5555;
367
- line-height: 22px;
368
- }
369
- .uk-tips {
370
- font-size: 24px;
371
- }
372
- </style>
1
+ <template>
2
+ <div class="login-form-wrap p-a">
3
+ <div>找回密码</div>
4
+ <div v-if="type === 'phone'" key="phone">
5
+ <el-form
6
+ ref="update-form"
7
+ :model="updateForm"
8
+ :rules="updateRules"
9
+ :hide-required-asterisk="true"
10
+ >
11
+ <el-form-item class="m-b" label="手机号" prop="phone">
12
+ <el-input v-model="updateForm.phone" placeholder="请输入手机号" />
13
+ </el-form-item>
14
+ <el-form-item class="m-b" label="验证码" prop="code">
15
+ <br />
16
+ <div class="flex-box">
17
+ <el-input
18
+ v-model="updateForm.code"
19
+ class="flex-item m-r-s"
20
+ placeholder="请输入验证码"
21
+ />
22
+ <el-button
23
+ plain
24
+ style="4em"
25
+ :disabled="!updateForm.phone || codeNum !== '验证码'"
26
+ @click="sendMsg('phone', '手机号')"
27
+ >{{ codeNum }}</el-button
28
+ >
29
+ </div>
30
+ </el-form-item>
31
+ <el-button
32
+ class="m-t"
33
+ type="primary"
34
+ style="width: 100%"
35
+ @click="getNext"
36
+ >下一步</el-button
37
+ >
38
+ </el-form>
39
+ <div class="flex-box flex-lr m-t-m m-b-s">
40
+ <el-link :underline="false" @click="getBanck">返回</el-link>
41
+ <el-link :underline="false" @click="changeUk('uk')">其他方式</el-link>
42
+ </div>
43
+ </div>
44
+ <div v-if="type === 'uk'" key="uk">
45
+ <el-form>
46
+ <el-form-item class="m-b" label="账号">
47
+ <el-input v-model="username" placeholder="请输入账号" />
48
+ </el-form-item>
49
+ <el-form-item class="m-b" label="uk验证" prop="code">
50
+ <br />
51
+ <div v-if="checkCert" class="filed-tips">该账号未开启UK校验!</div>
52
+ <div v-if="ukCode !== 1">
53
+ <div :class="ukCode ? 'success-tips' : 'filed-tips'">
54
+ {{ ukCode ? '验证成功!' : '验证失败!' }}
55
+ </div>
56
+ <div v-show="!ukCode" class="filed-tips">
57
+ 自助找回密码失败,请联系管理员
58
+ </div>
59
+ </div>
60
+ </el-form-item>
61
+ <el-button
62
+ class="m-t"
63
+ type="primary"
64
+ :disabled="ukCode !== true"
65
+ style="width: 100%"
66
+ @click="getUkNext"
67
+ >下一步</el-button
68
+ >
69
+ </el-form>
70
+ <div class="flex-box flex-lr m-t-m m-b-s">
71
+ <el-link :underline="false" @click="getBanck">返回</el-link>
72
+ <el-link :underline="false" @click="changeUk('phone')"
73
+ >其他方式</el-link
74
+ >
75
+ </div>
76
+ </div>
77
+ <div v-if="type === 'newPwd'" key="newPwd">
78
+ <el-form
79
+ ref="newPwdRef"
80
+ :model="newPwdForm"
81
+ :rules="newPwdRules"
82
+ :hide-required-asterisk="true"
83
+ >
84
+ <el-form-item
85
+ class="m-b"
86
+ :label="confirmPwdData.resetType == 'mobile' ? '手机号' : '账号'"
87
+ >
88
+ <el-input v-model="isPhone" disabled />
89
+ </el-form-item>
90
+ <el-form-item class="m-b" label="新密码" prop="newPassword">
91
+ <el-input
92
+ v-model="newPwdForm.newPassword"
93
+ placeholder="请输入新密码"
94
+ show-password
95
+ />
96
+ </el-form-item>
97
+ <el-form-item class="m-b" label="确认密码" prop="respwd">
98
+ <el-input
99
+ v-model="newPwdForm.respwd"
100
+ show-password
101
+ placeholder="请输入确认密码"
102
+ />
103
+ </el-form-item>
104
+ <el-button
105
+ class="m-t"
106
+ type="primary"
107
+ style="width: 100%"
108
+ @click="confirm"
109
+ >确认</el-button
110
+ >
111
+ <div class="m-t-s">
112
+ <el-link :underline="false" @click="getBanck">返回</el-link>
113
+ </div>
114
+ </el-form>
115
+ </div>
116
+ </div>
117
+ </template>
118
+
119
+ <script>
120
+ import axios from '../../utils/axios'
121
+ import { getSign } from '../../plugins/Sign/sign'
122
+ export default {
123
+ data() {
124
+ const lengthToFirstPassword = (rule, value, callback) => {
125
+ if (value) {
126
+ if (
127
+ this.dataForm.maxLength < value.length ||
128
+ this.dataForm.minLength > value.length
129
+ ) {
130
+ callback(
131
+ new Error(
132
+ `密码长度为${this.dataForm.minLength}-${this.dataForm.maxLength}!`
133
+ )
134
+ )
135
+ } else if (
136
+ this.dataForm.passwordStrength == 2 &&
137
+ !/^(((?=.*[0-9])(?=.*[a-zA-Z])|(?=.*[0-9])(?=.*[^\s0-9a-zA-Z])|(?=.*[a-zA-Z])(?=.*[^\s0-9a-zA-Z]))[^\s]+)$/.test(
138
+ value
139
+ )
140
+ ) {
141
+ callback(new Error(`密码至少包括数字,字母,特殊符号其中两种`))
142
+ } else if (
143
+ this.dataForm.passwordStrength == 3 &&
144
+ !/^(?=.*\d)(?=.*[a-zA-Z])(?=.*[~!@#$%^&*])[\da-zA-Z~!@#$%^&*]{0,}$/.test(
145
+ value
146
+ )
147
+ ) {
148
+ callback(new Error(`密码同时包括包括数字,字母,特殊符号三种`))
149
+ } else {
150
+ callback()
151
+ }
152
+ } else {
153
+ callback()
154
+ }
155
+ }
156
+ const compareToFirstPassword = (rule, value, callback) => {
157
+ if (value && value !== this.newPwdForm.newPassword) {
158
+ callback('确认密码和新密码不一致!')
159
+ return
160
+ }
161
+ callback()
162
+ }
163
+ return {
164
+ updateForm: {
165
+ phone: '',
166
+ code: '',
167
+ username: ''
168
+ },
169
+ checkCert: false,
170
+ username: '',
171
+ newPwdForm: {
172
+ newPassword: '',
173
+ respwd: ''
174
+ },
175
+ type: 'phone',
176
+ bank: '',
177
+ confirmPwdData: {},
178
+ confirmPwd: false,
179
+ updateRules: {
180
+ phone: [
181
+ { required: true, message: '请输入手机号!', trigger: 'blur' },
182
+ {
183
+ pattern: /^1\d{10}$/,
184
+ message: '请输入正确手机号!',
185
+ trigger: 'blur'
186
+ }
187
+ ],
188
+ code: [{ required: true, message: '请输入验证码!', trigger: 'blur' }]
189
+ },
190
+ codeNum: '验证码',
191
+ isPhone: '',
192
+ dataForm: {},
193
+ sign: '',
194
+ certDn: '',
195
+ signData: '',
196
+ ukCode: 1,
197
+ newPwdRules: {
198
+ newPassword: [
199
+ { required: true, message: '请输入新密码', trigger: 'blur' },
200
+ {
201
+ validator: lengthToFirstPassword,
202
+ trigger: 'blur'
203
+ }
204
+ ],
205
+ respwd: [
206
+ { required: true, message: '请输入确认密码', trigger: 'blur' },
207
+ {
208
+ validator: compareToFirstPassword,
209
+ trigger: 'blur'
210
+ }
211
+ ]
212
+ }
213
+ }
214
+ },
215
+ watch: {
216
+ signData(val) {
217
+ if (val === undefined) {
218
+ this.ukCode = undefined
219
+ }
220
+ if (val) {
221
+ this.ukCode = true
222
+ }
223
+ },
224
+ username(newValue, oldValue) {
225
+ this.checkCert = false
226
+ if (newValue !== oldValue && newValue) {
227
+ // 数据变化了,执行逻辑,这里做好防抖。
228
+ this.ms = 1000
229
+ clearTimeout(this.timeID)
230
+ this.timeID = setTimeout(() => {
231
+ axios
232
+ .get(`/bems/prod_1.0/dssc/sign/getUserDn/${newValue}`)
233
+ .then((res) => {
234
+ if (!res.data.checkCert) {
235
+ this.checkCert = true
236
+ return
237
+ }
238
+ if (res.data.checkCert && res.data.userDn) {
239
+ this.signData = getSign(newValue, res.data.userDn)
240
+ this.certDn = res.data.userDn
241
+ }
242
+ })
243
+ }, this.ms)
244
+ }
245
+ }
246
+ },
247
+ methods: {
248
+ // 发送短信
249
+ outTime(num) {
250
+ clearTimeout(this.setTimeNum)
251
+ if (num > 0) {
252
+ num--
253
+ this.codeNum = num + 'S'
254
+
255
+ this.setTimeNum = setTimeout(() => {
256
+ this.outTime(num)
257
+ }, 1000)
258
+ num--
259
+ } else {
260
+ clearTimeout(this.setTimeNum)
261
+ this.codeNum = '验证码'
262
+ }
263
+ },
264
+ sendMsg(type, typeName) {
265
+ this.$refs['update-form'].validateField(type, (valid) => {
266
+ if (!valid) {
267
+ this.outTime(60)
268
+ axios
269
+ .get(
270
+ `/bems/prod_1.0/uas/api/authorization/captcha/${this.updateForm[type]}/1`,
271
+ null,
272
+ { loading: false, noMsg: true }
273
+ )
274
+ .then(() => {
275
+ this.$message.success(
276
+ `${typeName}: ${this.updateForm[type]} 验证码发送成功`
277
+ )
278
+ })
279
+ .catch(() => {
280
+ console.log(123)
281
+ clearTimeout(this.setTimeNum)
282
+ this.codeNum = '验证码'
283
+ this.$message.warning(
284
+ `${typeName}: ${this.updateForm[type]} 验证码发送失败`
285
+ )
286
+ })
287
+ }
288
+ })
289
+ },
290
+ // 下一步
291
+ getNext() {
292
+ this.$refs['update-form'].validate((val) => {
293
+ if (val) {
294
+ this.confirmPwdData = {
295
+ type: 'newPwd',
296
+ username: this.updateForm.username,
297
+ mobile: this.updateForm.phone,
298
+ captcha: this.updateForm.code,
299
+ resetType: 'mobile',
300
+ phone: this.updateForm.phone,
301
+ code: this.updateForm.code
302
+ }
303
+ this.isPhone =
304
+ this.confirmPwdData.phone.substring(0, 3) +
305
+ '****' +
306
+ this.confirmPwdData.phone.substring(7, 11)
307
+ this.type = 'newPwd'
308
+ this.getUserRole()
309
+ }
310
+ })
311
+ },
312
+ getUkNext() {
313
+ this.confirmPwdData = {
314
+ type: 'newPwd',
315
+ username: this.username,
316
+ resetType: 'certificate'
317
+ }
318
+ this.type = 'newPwd'
319
+ this.isPhone = this.confirmPwdData.username
320
+ },
321
+ async getUserRole() {
322
+ let data = {
323
+ userNo: this.confirmPwdData.username
324
+ }
325
+ let res = await axios.post(
326
+ `/bems/prod_1.0/user/api/userController/use`,
327
+ data
328
+ )
329
+ this.dataForm = res.data
330
+ },
331
+ // 确认
332
+ confirm() {
333
+ this.$refs.newPwdRef.validate((val) => {
334
+ let data = this.confirmPwdData
335
+ data.newPassword = this.newPwdForm.newPassword
336
+ data.sign = this.sign
337
+ data.certDn = this.certDn
338
+ axios
339
+ .post(`/bems/prod_1.0/uas/api/authorization/password/reset`, data)
340
+ .then((res) => {
341
+ this.$message.success(`密码更新成功!`)
342
+ this.type = 'phone'
343
+ })
344
+ })
345
+ },
346
+ changeUk(val) {
347
+ this.type = val
348
+ },
349
+ getBanck() {
350
+ this.$emit('changType', 'login')
351
+ }
352
+ }
353
+ }
354
+ </script>
355
+
356
+ <style>
357
+ .success-tips {
358
+ font-size: 14px;
359
+ text-align: left;
360
+ color: #48d2a0;
361
+ line-height: 22px;
362
+ }
363
+ .filed-tips {
364
+ font-size: 14px;
365
+ text-align: left;
366
+ color: #fb5555;
367
+ line-height: 22px;
368
+ }
369
+ .uk-tips {
370
+ font-size: 24px;
371
+ }
372
+ </style>