密码找回
Showing
17 changed files
with
1592 additions
and
793 deletions
1 | module.exports = { | 1 | module.exports = { |
2 | logout : "/pingan_hklife_webapi/logout", | 2 | logout : "/pingan_hklife_webapi/user/logout", |
3 | // 是否显示图形验证码接口 | 3 | // 是否显示图形验证码接口 |
4 | stdIsShowImageVcode : "/pingan_hklife_webapi/auth/stdIsShowImageVcode", | 4 | stdIsShowImageVcode : "/pingan_hklife_webapi/auth/stdIsShowImageVcode", |
5 | // 刷新图形验证码接口 | 5 | // 刷新图形验证码接口 |
... | @@ -14,13 +14,16 @@ module.exports = { | ... | @@ -14,13 +14,16 @@ module.exports = { |
14 | gsLogin : "/pingan_hklife_webapi/auth/gsLogin", | 14 | gsLogin : "/pingan_hklife_webapi/auth/gsLogin", |
15 | // 注册接口 | 15 | // 注册接口 |
16 | stdRegister : "/pingan_hklife_webapi/auth/stdRegister", | 16 | stdRegister : "/pingan_hklife_webapi/auth/stdRegister", |
17 | // 找回密码定位用户信息 | 17 | // 修改密码 |
18 | gsLocateUserV2 : "/pingan_hklife_webapi/auth/gsLocateUserV2", | 18 | changePassword : "/pingan_hklife_webapi/password/change", |
19 | // 账户整合忘记密码重置用户密码 | ||
20 | gsResetPwd : "/pingan_hklife_webapi/auth/gsResetPwd", | ||
21 | // 账户整合修改密码接口 | ||
22 | gsModifyPwd : "/pingan_hklife_webapi/auth/gsModifyPwd", | ||
23 | // 短信验证码登录 | 19 | // 短信验证码登录 |
24 | otpLogin : "/pingan_hklife_webapi/otpLogin", | 20 | otpLogin : "/pingan_hklife_webapi/otpLogin", |
25 | 21 | // 找回密码:定位用户信息 | |
22 | locateUserInfo : "/pingan_hklife_webapi/reset/locateUserInfo", | ||
23 | // 找回密码:发送验证码 | ||
24 | sendOtp : "/pingan_hklife_webapi/reset/sendOtp", | ||
25 | // 找回密码:校验验证码 | ||
26 | checkOtp : "/pingan_hklife_webapi/reset/checkOtp", | ||
27 | // 找回密码:重置密码 | ||
28 | resetPwd : "/pingan_hklife_webapi/reset/resetPwd", | ||
26 | } | 29 | } |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
1 | import axiosIns from 'axios'; | 1 | import axiosIns from 'axios'; |
2 | import state from '@/store/state.js'; | ||
2 | // import { | 3 | // import { |
3 | // Toast | 4 | // Toast |
4 | // } from 'vant'; | 5 | // } from 'vant'; |
... | @@ -15,7 +16,8 @@ function Toast(msg) { | ... | @@ -15,7 +16,8 @@ function Toast(msg) { |
15 | // let base = COM.baseUrl; | 16 | // let base = COM.baseUrl; |
16 | let base = ""; | 17 | let base = ""; |
17 | const axios = axiosIns.create({ | 18 | const axios = axiosIns.create({ |
18 | baseURL: process.env.VUE_APP_BASE_URL || "http://localhost:9101", | 19 | // baseURL: process.env.VUE_APP_BASE_URL || "http://localhost:9101", |
20 | baseURL: "http://localhost:9101", | ||
19 | timeout: 5000 | 21 | timeout: 5000 |
20 | }) | 22 | }) |
21 | 23 | ||
... | @@ -61,10 +63,10 @@ axios.interceptors.response.use( | ... | @@ -61,10 +63,10 @@ axios.interceptors.response.use( |
61 | } | 63 | } |
62 | }); | 64 | }); |
63 | break; | 65 | break; |
64 | // 403 token过期 | 66 | // 403 token过期 |
65 | // 登录过期对用户进行提示 | 67 | // 登录过期对用户进行提示 |
66 | // 清除本地token和清空vuex中token对象 | 68 | // 清除本地token和清空vuex中token对象 |
67 | // 跳转登录页面 | 69 | // 跳转登录页面 |
68 | case 403: | 70 | case 403: |
69 | Toast({ | 71 | Toast({ |
70 | message: '登录过期,请重新登录', | 72 | message: '登录过期,请重新登录', |
... | @@ -84,7 +86,7 @@ axios.interceptors.response.use( | ... | @@ -84,7 +86,7 @@ axios.interceptors.response.use( |
84 | }); | 86 | }); |
85 | }, 1000); | 87 | }, 1000); |
86 | break; | 88 | break; |
87 | // 404请求不存在 | 89 | // 404请求不存在 |
88 | case 404: | 90 | case 404: |
89 | Toast({ | 91 | Toast({ |
90 | message: '网络请求不存在', | 92 | message: '网络请求不存在', |
... | @@ -92,7 +94,7 @@ axios.interceptors.response.use( | ... | @@ -92,7 +94,7 @@ axios.interceptors.response.use( |
92 | forbidClick: true | 94 | forbidClick: true |
93 | }); | 95 | }); |
94 | break; | 96 | break; |
95 | // 其他错误,直接抛出错误提示 | 97 | // 其他错误,直接抛出错误提示 |
96 | default: | 98 | default: |
97 | Toast({ | 99 | Toast({ |
98 | message: error.response.data.message, | 100 | message: error.response.data.message, |
... | @@ -119,11 +121,20 @@ let formDataHeaders = { | ... | @@ -119,11 +121,20 @@ let formDataHeaders = { |
119 | export const httpGet = params => { | 121 | export const httpGet = params => { |
120 | let { | 122 | let { |
121 | url, | 123 | url, |
122 | data | 124 | data, |
125 | sid | ||
123 | } = params; | 126 | } = params; |
127 | let headers = {}; | ||
128 | if (sid) { | ||
129 | headers = { | ||
130 | headers : { | ||
131 | sid : state.userInfo.sid | ||
132 | } | ||
133 | } | ||
134 | } | ||
124 | return axios.get(`${base}${url}`, { | 135 | return axios.get(`${base}${url}`, { |
125 | params: data | 136 | params: data |
126 | }).then(res => res.data.content); | 137 | }, headers).then(res => res.data.content); |
127 | } | 138 | } |
128 | 139 | ||
129 | /** | 140 | /** |
... | @@ -133,9 +144,18 @@ export const httpGet = params => { | ... | @@ -133,9 +144,18 @@ export const httpGet = params => { |
133 | export const httpPost = params => { | 144 | export const httpPost = params => { |
134 | let { | 145 | let { |
135 | url, | 146 | url, |
136 | data | 147 | data, |
148 | sid | ||
137 | } = params; | 149 | } = params; |
138 | return axios.post(`${base}${url}`, data).then(res => res.data.content); | 150 | let headers = {}; |
151 | if (sid) { | ||
152 | headers = { | ||
153 | headers : { | ||
154 | sid : state.userInfo.sid | ||
155 | } | ||
156 | } | ||
157 | } | ||
158 | return axios.post(`${base}${url}`, data, headers).then(res => res.data.content); | ||
139 | } | 159 | } |
140 | 160 | ||
141 | 161 | ... | ... |
src/assets/images/common/icon-info.png
0 → 100644
8.38 KB
... | @@ -13,90 +13,90 @@ module.exports = { | ... | @@ -13,90 +13,90 @@ module.exports = { |
13 | name: "login", | 13 | name: "login", |
14 | path: "", | 14 | path: "", |
15 | list: [{ | 15 | list: [{ |
16 | name: "register", | 16 | name: "register", |
17 | path: "/register", | 17 | path: "/register", |
18 | type: "noAuth", | 18 | type: "noAuth", |
19 | value: "" | 19 | value: "" |
20 | }, { | 20 | }, { |
21 | name: "login", | 21 | name: "login", |
22 | path: "/login", | 22 | path: "/login", |
23 | type: "noAuth", | 23 | type: "noAuth", |
24 | value: "" | 24 | value: "" |
25 | }, | 25 | }, |
26 | { | 26 | { |
27 | name: "modify password", | 27 | name: "modify password", |
28 | path: "", | 28 | path: "/password/reset", |
29 | type: "auth", | 29 | type: "auth", |
30 | value: "" | 30 | value: "" |
31 | }, | 31 | }, |
32 | { | 32 | { |
33 | name: "logout", | 33 | name: "logout", |
34 | path: "", | 34 | path: "", |
35 | type: "auth", | 35 | type: "auth", |
36 | value: "logout" | 36 | value: "logout" |
37 | }, | 37 | }, |
38 | ] | 38 | ] |
39 | }, | 39 | }, |
40 | navList: [{ | 40 | navList: [{ |
41 | name: "Product description", | 41 | name: "Product description", |
42 | path: "/product", | 42 | path: "/product", |
43 | list: [] | 43 | list: [] |
44 | }, | ||
45 | { | ||
46 | name: "Customer service", | ||
47 | path: "/custom/product", | ||
48 | list: [{ | ||
49 | name: "Contact us", | ||
50 | path: "/custom/service?q=m1" | ||
44 | }, | 51 | }, |
45 | { | 52 | { |
46 | name: "Customer service", | 53 | name: "Pay premium", |
47 | path: "/custom/product", | 54 | path: "/custom/service?q=m2" |
48 | list: [{ | ||
49 | name: "Contact us", | ||
50 | path: "/custom/service?q=m1" | ||
51 | }, | ||
52 | { | ||
53 | name: "Pay premium", | ||
54 | path: "/custom/service?q=m2" | ||
55 | }, | ||
56 | { | ||
57 | name: "Query policy", | ||
58 | path: "/custom/service?q=m3" | ||
59 | }, | ||
60 | { | ||
61 | name: "Change policy", | ||
62 | path: "/custom/service?q=m4" | ||
63 | }, | ||
64 | { | ||
65 | name: "Claim report", | ||
66 | path: "/custom/service?q=m5" | ||
67 | }, | ||
68 | { | ||
69 | name: "Reservation service", | ||
70 | path: "/custom/service?q=m6" | ||
71 | }, | ||
72 | { | ||
73 | name: "Suggestions", | ||
74 | path: "/custom/service?q=m7" | ||
75 | }, | ||
76 | { | ||
77 | name: "Common form", | ||
78 | path: "/custom/service?q=m8" | ||
79 | }, | ||
80 | ] | ||
81 | }, | 55 | }, |
82 | { | 56 | { |
83 | name: "News", | 57 | name: "Query policy", |
84 | path: "/news/list", | 58 | path: "/custom/service?q=m3" |
85 | list: [] | ||
86 | }, | 59 | }, |
87 | { | 60 | { |
88 | name: "About", | 61 | name: "Change policy", |
89 | path: "", | 62 | path: "/custom/service?q=m4" |
90 | list: [{ | ||
91 | name: "Company", | ||
92 | path: "/profile" | ||
93 | }, | ||
94 | { | ||
95 | name: "Leaders", | ||
96 | path: "" | ||
97 | }, | ||
98 | ] | ||
99 | }, | 63 | }, |
64 | { | ||
65 | name: "Claim report", | ||
66 | path: "/custom/service?q=m5" | ||
67 | }, | ||
68 | { | ||
69 | name: "Reservation service", | ||
70 | path: "/custom/service?q=m6" | ||
71 | }, | ||
72 | { | ||
73 | name: "Suggestions", | ||
74 | path: "/custom/service?q=m7" | ||
75 | }, | ||
76 | { | ||
77 | name: "Common form", | ||
78 | path: "/custom/service?q=m8" | ||
79 | }, | ||
80 | ] | ||
81 | }, | ||
82 | { | ||
83 | name: "News", | ||
84 | path: "/news/list", | ||
85 | list: [] | ||
86 | }, | ||
87 | { | ||
88 | name: "About", | ||
89 | path: "", | ||
90 | list: [{ | ||
91 | name: "Company", | ||
92 | path: "/profile" | ||
93 | }, | ||
94 | { | ||
95 | name: "Leaders", | ||
96 | path: "" | ||
97 | }, | ||
98 | ] | ||
99 | }, | ||
100 | ] | 100 | ] |
101 | }, | 101 | }, |
102 | footer: { | 102 | footer: { |
... | @@ -136,6 +136,9 @@ module.exports = { | ... | @@ -136,6 +136,9 @@ module.exports = { |
136 | verifyCodePlaceholder: "驗證碼", | 136 | verifyCodePlaceholder: "驗證碼", |
137 | verifyCodeGet: "獲取驗證碼", | 137 | verifyCodeGet: "獲取驗證碼", |
138 | }, | 138 | }, |
139 | session: { | ||
140 | sidExpire: "長時間未操作,為了您賬戶的安全,請登錄後再操作", | ||
141 | }, | ||
139 | register: { | 142 | register: { |
140 | mobileOptions: [{ | 143 | mobileOptions: [{ |
141 | type: "hk", | 144 | type: "hk", |
... | @@ -163,18 +166,33 @@ module.exports = { | ... | @@ -163,18 +166,33 @@ module.exports = { |
163 | newPasswordSurePlaceholder: "輸入登錄密碼", | 166 | newPasswordSurePlaceholder: "輸入登錄密碼", |
164 | sure: "確認", | 167 | sure: "確認", |
165 | }, | 168 | }, |
169 | passwordCheck: { | ||
170 | error1: "密碼長度不少於8位", | ||
171 | error2: "密碼中必須包含數字、字符以及特殊號碼", | ||
172 | error3: "两次密码不一致,请确认后重新输入", | ||
173 | error4: "密碼修改失敗,請稍後再試,或拨打客服电话95511解决", | ||
174 | error5: "舊密碼不正確,請重新輸入", | ||
175 | success: "密码修改成功" | ||
176 | }, | ||
166 | passwordReset: { | 177 | passwordReset: { |
178 | oldPwd: "旧密码", | ||
179 | oldPwdPlaceholde: "請輸入舊密碼", | ||
180 | cidExpire: "長時間未操作,為了您賬戶的安全,請重新開始", | ||
167 | type1: { | 181 | type1: { |
168 | title: "密碼找回", | 182 | title: "密碼找回", |
169 | t1: "用戶輸入信息", | 183 | t1: "用戶輸入信息", |
170 | t1Placeholder: "手機號/一賬通用戶名", | 184 | t1Placeholder: "手機號/一賬通用戶名", |
171 | submit: "確認", | 185 | submit: "確認", |
186 | error: "您的手機號或證件號輸入錯誤,請核對后重新輸入", | ||
172 | }, | 187 | }, |
173 | type2: { | 188 | type2: { |
174 | title: "密碼找回", | 189 | title: "密碼找回", |
175 | t1: "手機短信驗證碼", | 190 | t1: "手機短信驗證碼", |
176 | t1Placeholder: "請輸入驗證碼", | 191 | t1Placeholder: "請輸入驗證碼", |
177 | submit: "確認", | 192 | submit: "確認", |
193 | error1: "短信驗證碼輸入錯誤,請核對後重新輸入", | ||
194 | error2: "短信驗證碼已經過期,請重新獲取驗證碼", | ||
195 | error3: "短信验证码发放时间少于1分钟,请稍后再试", | ||
178 | }, | 196 | }, |
179 | type3: { | 197 | type3: { |
180 | title: "密碼找回", | 198 | title: "密碼找回", |
... | @@ -189,6 +207,8 @@ module.exports = { | ... | @@ -189,6 +207,8 @@ module.exports = { |
189 | t2: "確認密碼", | 207 | t2: "確認密碼", |
190 | t2Placeholder: "請重新輸入新密碼", | 208 | t2Placeholder: "請重新輸入新密碼", |
191 | submit: "確認", | 209 | submit: "確認", |
210 | error1: "密碼長度不少於8位", | ||
211 | error2: "密碼中必須包含數字、字符以及特殊號碼", | ||
192 | } | 212 | } |
193 | }, | 213 | }, |
194 | infomationImprove: { | 214 | infomationImprove: { |
... | @@ -203,8 +223,8 @@ module.exports = { | ... | @@ -203,8 +223,8 @@ module.exports = { |
203 | t4Placeholder: "", | 223 | t4Placeholder: "", |
204 | t5: "證件號碼", | 224 | t5: "證件號碼", |
205 | t5Placeholder: "", | 225 | t5Placeholder: "", |
206 | submit:"確認", | 226 | submit: "確認", |
207 | cancel:"跳過", | 227 | cancel: "跳過", |
208 | }, | 228 | }, |
209 | index: { | 229 | index: { |
210 | news: "新聞資訊", | 230 | news: "新聞資訊", |
... | @@ -287,71 +307,71 @@ module.exports = { | ... | @@ -287,71 +307,71 @@ module.exports = { |
287 | head4: "附件", | 307 | head4: "附件", |
288 | download: "下載文檔", | 308 | download: "下載文檔", |
289 | form: [{ | 309 | form: [{ |
290 | type: "繳費類", | 310 | type: "繳費類", |
291 | list: [{ | 311 | list: [{ |
292 | name: "「電子入賬服務」及銀行戶口<br>直接付款授權申請", | 312 | name: "「電子入賬服務」及銀行戶口<br>直接付款授權申請", |
293 | desc: "申請設立「 電子入賬服務」 及銀行戶口<br>直接付款授權時須提供", | 313 | desc: "申請設立「 電子入賬服務」 及銀行戶口<br>直接付款授權時須提供", |
294 | download: "", | 314 | download: "", |
295 | }, | ||
296 | { | ||
297 | name: "信用卡戶口直接付款授權書", | ||
298 | desc: "申請信用卡戶口直接付款授權時須提供", | ||
299 | download: "", | ||
300 | } | ||
301 | ] | ||
302 | }, | 315 | }, |
303 | { | 316 | { |
304 | type: "保單變更類", | 317 | name: "信用卡戶口直接付款授權書", |
305 | list: [{ | 318 | desc: "申請信用卡戶口直接付款授權時須提供", |
306 | name: "保險合同解除申請書", | 319 | download: "", |
307 | desc: "退保、猶豫期退保業務適用", | 320 | } |
308 | download: "", | 321 | ] |
309 | }, | 322 | }, |
310 | { | 323 | { |
311 | name: "保險合同變更申請書( 保單貸款還款類)", | 324 | type: "保單變更類", |
312 | desc: "保單貸款、還款業務適用", | 325 | list: [{ |
313 | download: "", | 326 | name: "保險合同解除申請書", |
314 | }, | 327 | desc: "退保、猶豫期退保業務適用", |
315 | { | 328 | download: "", |
316 | name: "保險合同變更申請書( 保險合同計劃變更類)", | 329 | }, |
317 | desc: "加保、減保、新增附險、復效等業務適用", | 330 | { |
318 | download: "", | 331 | name: "保險合同變更申請書( 保單貸款還款類)", |
319 | }, | 332 | desc: "保單貸款、還款業務適用", |
320 | { | 333 | download: "", |
321 | name: "保險合同變更申請書( 客戶信息變更類)", | ||
322 | desc: "基本信息變更業務適用", | ||
323 | download: "", | ||
324 | }, | ||
325 | { | ||
326 | name: "保險合同變更申請書( 客戶權益變更類)", | ||
327 | desc: "交費方式、自墊選擇權變更、補發等業務適用", | ||
328 | download: "", | ||
329 | }, | ||
330 | { | ||
331 | name: "授權委托書", | ||
332 | desc: "委托他人代辦時須提供", | ||
333 | download: "", | ||
334 | }, | ||
335 | { | ||
336 | name: "稅收聲明", | ||
337 | desc: "CRS要求", | ||
338 | download: "", | ||
339 | }, | ||
340 | { | ||
341 | name: "健康告知", | ||
342 | desc: "須二次核保的業務須提供", | ||
343 | download: "", | ||
344 | } | ||
345 | ] | ||
346 | }, | 334 | }, |
347 | { | 335 | { |
348 | type: "理賠類", | 336 | name: "保險合同變更申請書( 保險合同計劃變更類)", |
349 | list: [{ | 337 | desc: "加保、減保、新增附險、復效等業務適用", |
350 | name: "理賠申請書", | 338 | download: "", |
351 | desc: "紙質申請的應備文件", | ||
352 | download: "", | ||
353 | }] | ||
354 | }, | 339 | }, |
340 | { | ||
341 | name: "保險合同變更申請書( 客戶信息變更類)", | ||
342 | desc: "基本信息變更業務適用", | ||
343 | download: "", | ||
344 | }, | ||
345 | { | ||
346 | name: "保險合同變更申請書( 客戶權益變更類)", | ||
347 | desc: "交費方式、自墊選擇權變更、補發等業務適用", | ||
348 | download: "", | ||
349 | }, | ||
350 | { | ||
351 | name: "授權委托書", | ||
352 | desc: "委托他人代辦時須提供", | ||
353 | download: "", | ||
354 | }, | ||
355 | { | ||
356 | name: "稅收聲明", | ||
357 | desc: "CRS要求", | ||
358 | download: "", | ||
359 | }, | ||
360 | { | ||
361 | name: "健康告知", | ||
362 | desc: "須二次核保的業務須提供", | ||
363 | download: "", | ||
364 | } | ||
365 | ] | ||
366 | }, | ||
367 | { | ||
368 | type: "理賠類", | ||
369 | list: [{ | ||
370 | name: "理賠申請書", | ||
371 | desc: "紙質申請的應備文件", | ||
372 | download: "", | ||
373 | }] | ||
374 | }, | ||
355 | ] | 375 | ] |
356 | }, | 376 | }, |
357 | policyChangeGuide: { | 377 | policyChangeGuide: { |
... | @@ -363,100 +383,100 @@ module.exports = { | ... | @@ -363,100 +383,100 @@ module.exports = { |
363 | head5: "應備材料", | 383 | head5: "應備材料", |
364 | download: "下載文檔", | 384 | download: "下載文檔", |
365 | form: [{ | 385 | form: [{ |
366 | project: "退保", | 386 | project: "退保", |
367 | content: "在猶豫期後解除合同,公司將退還保單現金價值或未滿期凈保費。(待產品精算確認)", | 387 | content: "在猶豫期後解除合同,公司將退還保單現金價值或未滿期凈保費。(待產品精算確認)", |
368 | applicant: "投保人", | 388 | applicant: "投保人", |
369 | receptionTime: "保單效力終止前", | 389 | receptionTime: "保單效力終止前", |
370 | materialList: [{ | 390 | materialList: [{ |
371 | name: "保險單", | 391 | name: "保險單", |
372 | }, | 392 | }, |
373 | { | 393 | { |
374 | name: "申請書", | 394 | name: "申請書", |
375 | type: 1, | 395 | type: 1, |
376 | }, | 396 | }, |
377 | { | 397 | { |
378 | name: "投保人有效身份證件", | 398 | name: "投保人有效身份證件", |
379 | }, | 399 | }, |
380 | { | 400 | { |
381 | name: "存折银行卡相关", | 401 | name: "存折银行卡相关", |
382 | } | 402 | } |
383 | ], | 403 | ], |
404 | }, | ||
405 | { | ||
406 | project: "猶豫期退保", | ||
407 | content: "在猶豫期內提出解除合同,公司會無息退還全部保費", | ||
408 | applicant: "投保人", | ||
409 | receptionTime: "猶豫期結束前", | ||
410 | materialList: [{ | ||
411 | name: "保險單", | ||
412 | }, | ||
413 | { | ||
414 | name: "申請書", | ||
415 | type: 1, | ||
384 | }, | 416 | }, |
385 | { | 417 | { |
386 | project: "猶豫期退保", | 418 | name: "投保人有效身份證件", |
387 | content: "在猶豫期內提出解除合同,公司會無息退還全部保費", | ||
388 | applicant: "投保人", | ||
389 | receptionTime: "猶豫期結束前", | ||
390 | materialList: [{ | ||
391 | name: "保險單", | ||
392 | }, | ||
393 | { | ||
394 | name: "申請書", | ||
395 | type: 1, | ||
396 | }, | ||
397 | { | ||
398 | name: "投保人有效身份證件", | ||
399 | }, | ||
400 | { | ||
401 | name: "存折银行卡相关", | ||
402 | }, | ||
403 | { | ||
404 | name: "首期保費發票", | ||
405 | } | ||
406 | ], | ||
407 | }, | 419 | }, |
408 | { | 420 | { |
409 | project: "客戶資料變更", | 421 | name: "存折银行卡相关", |
410 | projectType: 1, | 422 | }, |
411 | path: "/custom/service", | 423 | { |
412 | query: { | 424 | name: "首期保費發票", |
413 | q: "m42" | 425 | } |
414 | }, | 426 | ], |
415 | content: "投保人、受保人、受益人的個人信息變更", | 427 | }, |
416 | applicant: "投保人", | 428 | { |
417 | receptionTime: "不限", | 429 | project: "客戶資料變更", |
418 | materialList: [{ | 430 | projectType: 1, |
419 | name: "申請書", | 431 | path: "/custom/service", |
420 | type: 1, | 432 | query: { |
421 | }, | 433 | q: "m42" |
422 | { | 434 | }, |
423 | name: "必要的證明材料", | 435 | content: "投保人、受保人、受益人的個人信息變更", |
424 | } | 436 | applicant: "投保人", |
425 | ], | 437 | receptionTime: "不限", |
438 | materialList: [{ | ||
439 | name: "申請書", | ||
440 | type: 1, | ||
426 | }, | 441 | }, |
427 | { | 442 | { |
428 | project: "聯系方式變更", | 443 | name: "必要的證明材料", |
429 | projectType: 1, | 444 | } |
430 | path: "/custom/service", | 445 | ], |
431 | query: { | 446 | }, |
432 | q: "m43" | 447 | { |
433 | }, | 448 | project: "聯系方式變更", |
434 | content: "地址、電話等信息的變更", | 449 | projectType: 1, |
435 | applicant: "投保人", | 450 | path: "/custom/service", |
436 | receptionTime: "不限", | 451 | query: { |
437 | materialList: [{ | 452 | q: "m43" |
438 | name: "申請書", | 453 | }, |
439 | type: 1, | 454 | content: "地址、電話等信息的變更", |
440 | }, | 455 | applicant: "投保人", |
441 | { | 456 | receptionTime: "不限", |
442 | name: "投保人有效身份證件", | 457 | materialList: [{ |
443 | } | 458 | name: "申請書", |
444 | ], | 459 | type: 1, |
445 | }, | 460 | }, |
446 | { | 461 | { |
447 | project: "交費方式變更", | 462 | name: "投保人有效身份證件", |
448 | content: "更改保單的續期交費方式或交費賬號", | 463 | } |
449 | applicant: "投保人", | 464 | ], |
450 | receptionTime: "保單交費期滿前", | 465 | }, |
451 | materialList: [{ | 466 | { |
452 | name: "申請書", | 467 | project: "交費方式變更", |
453 | type: 1, | 468 | content: "更改保單的續期交費方式或交費賬號", |
454 | }, | 469 | applicant: "投保人", |
455 | { | 470 | receptionTime: "保單交費期滿前", |
456 | name: "保險單", | 471 | materialList: [{ |
457 | } | 472 | name: "申請書", |
458 | ], | 473 | type: 1, |
459 | }, | 474 | }, |
475 | { | ||
476 | name: "保險單", | ||
477 | } | ||
478 | ], | ||
479 | }, | ||
460 | ] | 480 | ] |
461 | }, | 481 | }, |
462 | policyChangeContact: { | 482 | policyChangeContact: { | ... | ... |
... | @@ -13,90 +13,90 @@ module.exports = { | ... | @@ -13,90 +13,90 @@ module.exports = { |
13 | name: "登入", | 13 | name: "登入", |
14 | path: "", | 14 | path: "", |
15 | list: [{ | 15 | list: [{ |
16 | name: "註冊", | 16 | name: "註冊", |
17 | path: "/register", | 17 | path: "/register", |
18 | type: "noAuth", | 18 | type: "noAuth", |
19 | value: "" | 19 | value: "" |
20 | }, { | 20 | }, { |
21 | name: "登入", | 21 | name: "登入", |
22 | path: "/login", | 22 | path: "/login", |
23 | type: "noAuth", | 23 | type: "noAuth", |
24 | value: "" | 24 | value: "" |
25 | }, | 25 | }, |
26 | { | 26 | { |
27 | name: "修改密碼", | 27 | name: "修改密碼", |
28 | path: "", | 28 | path: "/password/reset", |
29 | type: "auth", | 29 | type: "auth", |
30 | value: "" | 30 | value: "" |
31 | }, | 31 | }, |
32 | { | 32 | { |
33 | name: "登出", | 33 | name: "登出", |
34 | path: "", | 34 | path: "", |
35 | type: "auth", | 35 | type: "auth", |
36 | value: "logout" | 36 | value: "logout" |
37 | } | 37 | } |
38 | ] | 38 | ] |
39 | }, | 39 | }, |
40 | navList: [{ | 40 | navList: [{ |
41 | name: "產品介紹", | 41 | name: "產品介紹", |
42 | path: "/product", | 42 | path: "/product", |
43 | list: [] | 43 | list: [] |
44 | }, | ||
45 | { | ||
46 | name: "客戶服務", | ||
47 | path: "/custom/product", | ||
48 | list: [{ | ||
49 | name: "聯系我們", | ||
50 | path: "/custom/service?q=m1" | ||
44 | }, | 51 | }, |
45 | { | 52 | { |
46 | name: "客戶服務", | 53 | name: "繳付保費", |
47 | path: "/custom/product", | 54 | path: "/custom/service?q=m2" |
48 | list: [{ | ||
49 | name: "聯系我們", | ||
50 | path: "/custom/service?q=m1" | ||
51 | }, | ||
52 | { | ||
53 | name: "繳付保費", | ||
54 | path: "/custom/service?q=m2" | ||
55 | }, | ||
56 | { | ||
57 | name: "保單查詢", | ||
58 | path: "/custom/service?q=m3" | ||
59 | }, | ||
60 | { | ||
61 | name: "保單變更", | ||
62 | path: "/custom/service?q=m4" | ||
63 | }, | ||
64 | { | ||
65 | name: "理賠申請", | ||
66 | path: "/custom/service?q=m5" | ||
67 | }, | ||
68 | { | ||
69 | name: "預約服務", | ||
70 | path: "/custom/service?q=m6" | ||
71 | }, | ||
72 | { | ||
73 | name: "投訴受理", | ||
74 | path: "/custom/service?q=m7" | ||
75 | }, | ||
76 | { | ||
77 | name: "常用表格", | ||
78 | path: "/custom/service?q=m8" | ||
79 | }, | ||
80 | ] | ||
81 | }, | 55 | }, |
82 | { | 56 | { |
83 | name: "新聞資訊", | 57 | name: "保單查詢", |
84 | path: "/news/list", | 58 | path: "/custom/service?q=m3" |
85 | list: [] | ||
86 | }, | 59 | }, |
87 | { | 60 | { |
88 | name: "關於平安人壽", | 61 | name: "保單變更", |
89 | path: "", | 62 | path: "/custom/service?q=m4" |
90 | list: [{ | ||
91 | name: "公司簡介", | ||
92 | path: "/profile" | ||
93 | }, | ||
94 | { | ||
95 | name: "領導人概況", | ||
96 | path: "" | ||
97 | }, | ||
98 | ] | ||
99 | }, | 63 | }, |
64 | { | ||
65 | name: "理賠申請", | ||
66 | path: "/custom/service?q=m5" | ||
67 | }, | ||
68 | { | ||
69 | name: "預約服務", | ||
70 | path: "/custom/service?q=m6" | ||
71 | }, | ||
72 | { | ||
73 | name: "投訴受理", | ||
74 | path: "/custom/service?q=m7" | ||
75 | }, | ||
76 | { | ||
77 | name: "常用表格", | ||
78 | path: "/custom/service?q=m8" | ||
79 | }, | ||
80 | ] | ||
81 | }, | ||
82 | { | ||
83 | name: "新聞資訊", | ||
84 | path: "/news/list", | ||
85 | list: [] | ||
86 | }, | ||
87 | { | ||
88 | name: "關於平安人壽", | ||
89 | path: "", | ||
90 | list: [{ | ||
91 | name: "公司簡介", | ||
92 | path: "/profile" | ||
93 | }, | ||
94 | { | ||
95 | name: "領導人概況", | ||
96 | path: "" | ||
97 | }, | ||
98 | ] | ||
99 | }, | ||
100 | ] | 100 | ] |
101 | }, | 101 | }, |
102 | footer: { | 102 | footer: { |
... | @@ -163,18 +163,36 @@ module.exports = { | ... | @@ -163,18 +163,36 @@ module.exports = { |
163 | newPasswordSurePlaceholder: "輸入登錄密碼", | 163 | newPasswordSurePlaceholder: "輸入登錄密碼", |
164 | sure: "確認", | 164 | sure: "確認", |
165 | }, | 165 | }, |
166 | session: { | ||
167 | sidExpire: "長時間未操作,為了您賬戶的安全,請登錄後再操作", | ||
168 | }, | ||
169 | passwordCheck: { | ||
170 | error1: "密碼長度不少於8位", | ||
171 | error2: "密碼中必須包含數字、字符以及特殊號碼", | ||
172 | error3: "兩次密碼不一致,請確認後重新輸入", | ||
173 | error4 : "密碼修改失敗,請稍後再試,或撥打客服電話95511解決", | ||
174 | error5 : "舊密碼不正確,請重新輸入", | ||
175 | success: "密碼修改成功" | ||
176 | }, | ||
166 | passwordReset: { | 177 | passwordReset: { |
178 | oldPwd : "舊密碼", | ||
179 | oldPwdPlaceholde : "請輸入舊密碼", | ||
180 | cidExpire: "長時間未操作,為了您賬戶的安全,請重新開始", | ||
167 | type1: { | 181 | type1: { |
168 | title: "密碼找回", | 182 | title: "密碼找回", |
169 | t1: "用戶輸入信息", | 183 | t1: "用戶輸入信息", |
170 | t1Placeholder: "手機號/一賬通用戶名", | 184 | t1Placeholder: "手機號/證件號", |
171 | submit: "確認", | 185 | submit: "確認", |
186 | error: "您的手機號或證件號輸入錯誤,請核對后重新輸入", | ||
172 | }, | 187 | }, |
173 | type2: { | 188 | type2: { |
174 | title: "密碼找回", | 189 | title: "密碼找回", |
175 | t1: "手機短信驗證碼", | 190 | t1: "手機短信驗證碼", |
176 | t1Placeholder: "請輸入驗證碼", | 191 | t1Placeholder: "請輸入驗證碼", |
177 | submit: "確認", | 192 | submit: "確認", |
193 | error1: "短信驗證碼輸入錯誤,請核對後重新輸入", | ||
194 | error2: "短信驗證碼已經過期,請重新獲取驗證碼", | ||
195 | error3: "短信驗證碼發放時間少於1分鐘,請稍後再試", | ||
178 | }, | 196 | }, |
179 | type3: { | 197 | type3: { |
180 | title: "密碼找回", | 198 | title: "密碼找回", |
... | @@ -203,8 +221,8 @@ module.exports = { | ... | @@ -203,8 +221,8 @@ module.exports = { |
203 | t4Placeholder: "", | 221 | t4Placeholder: "", |
204 | t5: "證件號碼", | 222 | t5: "證件號碼", |
205 | t5Placeholder: "", | 223 | t5Placeholder: "", |
206 | submit:"確認", | 224 | submit: "確認", |
207 | cancel:"跳過", | 225 | cancel: "跳過", |
208 | }, | 226 | }, |
209 | index: { | 227 | index: { |
210 | news: "新聞資訊", | 228 | news: "新聞資訊", |
... | @@ -287,71 +305,71 @@ module.exports = { | ... | @@ -287,71 +305,71 @@ module.exports = { |
287 | head4: "附件", | 305 | head4: "附件", |
288 | download: "下載文檔", | 306 | download: "下載文檔", |
289 | form: [{ | 307 | form: [{ |
290 | type: "繳費類", | 308 | type: "繳費類", |
291 | list: [{ | 309 | list: [{ |
292 | name: "「電子入賬服務」及銀行戶口<br>直接付款授權申請", | 310 | name: "「電子入賬服務」及銀行戶口<br>直接付款授權申請", |
293 | desc: "申請設立「 電子入賬服務」 及銀行戶口<br>直接付款授權時須提供", | 311 | desc: "申請設立「 電子入賬服務」 及銀行戶口<br>直接付款授權時須提供", |
294 | download: "", | 312 | download: "", |
295 | }, | ||
296 | { | ||
297 | name: "信用卡戶口直接付款授權書", | ||
298 | desc: "申請信用卡戶口直接付款授權時須提供", | ||
299 | download: "", | ||
300 | } | ||
301 | ] | ||
302 | }, | 313 | }, |
303 | { | 314 | { |
304 | type: "保單變更類", | 315 | name: "信用卡戶口直接付款授權書", |
305 | list: [{ | 316 | desc: "申請信用卡戶口直接付款授權時須提供", |
306 | name: "保險合同解除申請書", | 317 | download: "", |
307 | desc: "退保、猶豫期退保業務適用", | 318 | } |
308 | download: "", | 319 | ] |
309 | }, | 320 | }, |
310 | { | 321 | { |
311 | name: "保險合同變更申請書( 保單貸款還款類)", | 322 | type: "保單變更類", |
312 | desc: "保單貸款、還款業務適用", | 323 | list: [{ |
313 | download: "", | 324 | name: "保險合同解除申請書", |
314 | }, | 325 | desc: "退保、猶豫期退保業務適用", |
315 | { | 326 | download: "", |
316 | name: "保險合同變更申請書( 保險合同計劃變更類)", | 327 | }, |
317 | desc: "加保、減保、新增附險、復效等業務適用", | 328 | { |
318 | download: "", | 329 | name: "保險合同變更申請書( 保單貸款還款類)", |
319 | }, | 330 | desc: "保單貸款、還款業務適用", |
320 | { | 331 | download: "", |
321 | name: "保險合同變更申請書( 客戶信息變更類)", | ||
322 | desc: "基本信息變更業務適用", | ||
323 | download: "", | ||
324 | }, | ||
325 | { | ||
326 | name: "保險合同變更申請書( 客戶權益變更類)", | ||
327 | desc: "交費方式、自墊選擇權變更、補發等業務適用", | ||
328 | download: "", | ||
329 | }, | ||
330 | { | ||
331 | name: "授權委托書", | ||
332 | desc: "委托他人代辦時須提供", | ||
333 | download: "", | ||
334 | }, | ||
335 | { | ||
336 | name: "稅收聲明", | ||
337 | desc: "CRS要求", | ||
338 | download: "", | ||
339 | }, | ||
340 | { | ||
341 | name: "健康告知", | ||
342 | desc: "須二次核保的業務須提供", | ||
343 | download: "", | ||
344 | } | ||
345 | ] | ||
346 | }, | 332 | }, |
347 | { | 333 | { |
348 | type: "理賠類", | 334 | name: "保險合同變更申請書( 保險合同計劃變更類)", |
349 | list: [{ | 335 | desc: "加保、減保、新增附險、復效等業務適用", |
350 | name: "理賠申請書", | 336 | download: "", |
351 | desc: "紙質申請的應備文件", | ||
352 | download: "", | ||
353 | }] | ||
354 | }, | 337 | }, |
338 | { | ||
339 | name: "保險合同變更申請書( 客戶信息變更類)", | ||
340 | desc: "基本信息變更業務適用", | ||
341 | download: "", | ||
342 | }, | ||
343 | { | ||
344 | name: "保險合同變更申請書( 客戶權益變更類)", | ||
345 | desc: "交費方式、自墊選擇權變更、補發等業務適用", | ||
346 | download: "", | ||
347 | }, | ||
348 | { | ||
349 | name: "授權委托書", | ||
350 | desc: "委托他人代辦時須提供", | ||
351 | download: "", | ||
352 | }, | ||
353 | { | ||
354 | name: "稅收聲明", | ||
355 | desc: "CRS要求", | ||
356 | download: "", | ||
357 | }, | ||
358 | { | ||
359 | name: "健康告知", | ||
360 | desc: "須二次核保的業務須提供", | ||
361 | download: "", | ||
362 | } | ||
363 | ] | ||
364 | }, | ||
365 | { | ||
366 | type: "理賠類", | ||
367 | list: [{ | ||
368 | name: "理賠申請書", | ||
369 | desc: "紙質申請的應備文件", | ||
370 | download: "", | ||
371 | }] | ||
372 | }, | ||
355 | ] | 373 | ] |
356 | }, | 374 | }, |
357 | policyChangeGuide: { | 375 | policyChangeGuide: { |
... | @@ -363,100 +381,100 @@ module.exports = { | ... | @@ -363,100 +381,100 @@ module.exports = { |
363 | head5: "應備材料", | 381 | head5: "應備材料", |
364 | download: "下載文檔", | 382 | download: "下載文檔", |
365 | form: [{ | 383 | form: [{ |
366 | project: "退保", | 384 | project: "退保", |
367 | content: "在猶豫期後解除合同,公司將退還保單現金價值或未滿期凈保費。(待產品精算確認)", | 385 | content: "在猶豫期後解除合同,公司將退還保單現金價值或未滿期凈保費。(待產品精算確認)", |
368 | applicant: "投保人", | 386 | applicant: "投保人", |
369 | receptionTime: "保單效力終止前", | 387 | receptionTime: "保單效力終止前", |
370 | materialList: [{ | 388 | materialList: [{ |
371 | name: "保險單", | 389 | name: "保險單", |
372 | }, | 390 | }, |
373 | { | 391 | { |
374 | name: "申請書", | 392 | name: "申請書", |
375 | type: 1, | 393 | type: 1, |
376 | }, | 394 | }, |
377 | { | 395 | { |
378 | name: "投保人有效身份證件", | 396 | name: "投保人有效身份證件", |
379 | }, | 397 | }, |
380 | { | 398 | { |
381 | name: "存折银行卡相关", | 399 | name: "存折银行卡相关", |
382 | } | 400 | } |
383 | ], | 401 | ], |
402 | }, | ||
403 | { | ||
404 | project: "猶豫期退保", | ||
405 | content: "在猶豫期內提出解除合同,公司會無息退還全部保費", | ||
406 | applicant: "投保人", | ||
407 | receptionTime: "猶豫期結束前", | ||
408 | materialList: [{ | ||
409 | name: "保險單", | ||
410 | }, | ||
411 | { | ||
412 | name: "申請書", | ||
413 | type: 1, | ||
384 | }, | 414 | }, |
385 | { | 415 | { |
386 | project: "猶豫期退保", | 416 | name: "投保人有效身份證件", |
387 | content: "在猶豫期內提出解除合同,公司會無息退還全部保費", | ||
388 | applicant: "投保人", | ||
389 | receptionTime: "猶豫期結束前", | ||
390 | materialList: [{ | ||
391 | name: "保險單", | ||
392 | }, | ||
393 | { | ||
394 | name: "申請書", | ||
395 | type: 1, | ||
396 | }, | ||
397 | { | ||
398 | name: "投保人有效身份證件", | ||
399 | }, | ||
400 | { | ||
401 | name: "存折银行卡相关", | ||
402 | }, | ||
403 | { | ||
404 | name: "首期保費發票", | ||
405 | } | ||
406 | ], | ||
407 | }, | 417 | }, |
408 | { | 418 | { |
409 | project: "客戶資料變更", | 419 | name: "存折银行卡相关", |
410 | projectType: 1, | 420 | }, |
411 | path: "/custom/service", | 421 | { |
412 | query: { | 422 | name: "首期保費發票", |
413 | q: "m42" | 423 | } |
414 | }, | 424 | ], |
415 | content: "投保人、受保人、受益人的個人信息變更", | 425 | }, |
416 | applicant: "投保人", | 426 | { |
417 | receptionTime: "不限", | 427 | project: "客戶資料變更", |
418 | materialList: [{ | 428 | projectType: 1, |
419 | name: "申請書", | 429 | path: "/custom/service", |
420 | type: 1, | 430 | query: { |
421 | }, | 431 | q: "m42" |
422 | { | 432 | }, |
423 | name: "必要的證明材料", | 433 | content: "投保人、受保人、受益人的個人信息變更", |
424 | } | 434 | applicant: "投保人", |
425 | ], | 435 | receptionTime: "不限", |
436 | materialList: [{ | ||
437 | name: "申請書", | ||
438 | type: 1, | ||
426 | }, | 439 | }, |
427 | { | 440 | { |
428 | project: "聯系方式變更", | 441 | name: "必要的證明材料", |
429 | projectType: 1, | 442 | } |
430 | path: "/custom/service", | 443 | ], |
431 | query: { | 444 | }, |
432 | q: "m43" | 445 | { |
433 | }, | 446 | project: "聯系方式變更", |
434 | content: "地址、電話等信息的變更", | 447 | projectType: 1, |
435 | applicant: "投保人", | 448 | path: "/custom/service", |
436 | receptionTime: "不限", | 449 | query: { |
437 | materialList: [{ | 450 | q: "m43" |
438 | name: "申請書", | 451 | }, |
439 | type: 1, | 452 | content: "地址、電話等信息的變更", |
440 | }, | 453 | applicant: "投保人", |
441 | { | 454 | receptionTime: "不限", |
442 | name: "投保人有效身份證件", | 455 | materialList: [{ |
443 | } | 456 | name: "申請書", |
444 | ], | 457 | type: 1, |
445 | }, | 458 | }, |
446 | { | 459 | { |
447 | project: "交費方式變更", | 460 | name: "投保人有效身份證件", |
448 | content: "更改保單的續期交費方式或交費賬號", | 461 | } |
449 | applicant: "投保人", | 462 | ], |
450 | receptionTime: "保單交費期滿前", | 463 | }, |
451 | materialList: [{ | 464 | { |
452 | name: "申請書", | 465 | project: "交費方式變更", |
453 | type: 1, | 466 | content: "更改保單的續期交費方式或交費賬號", |
454 | }, | 467 | applicant: "投保人", |
455 | { | 468 | receptionTime: "保單交費期滿前", |
456 | name: "保險單", | 469 | materialList: [{ |
457 | } | 470 | name: "申請書", |
458 | ], | 471 | type: 1, |
459 | }, | 472 | }, |
473 | { | ||
474 | name: "保險單", | ||
475 | } | ||
476 | ], | ||
477 | }, | ||
460 | ] | 478 | ] |
461 | }, | 479 | }, |
462 | policyChangeContact: { | 480 | policyChangeContact: { | ... | ... |
... | @@ -13,90 +13,90 @@ module.exports = { | ... | @@ -13,90 +13,90 @@ module.exports = { |
13 | name: "登陆", | 13 | name: "登陆", |
14 | path: "", | 14 | path: "", |
15 | list: [{ | 15 | list: [{ |
16 | name: "注册", | 16 | name: "注册", |
17 | path: "/register", | 17 | path: "/register", |
18 | type: "noAuth", | 18 | type: "noAuth", |
19 | value: "" | 19 | value: "" |
20 | }, { | 20 | }, { |
21 | name: "登陆", | 21 | name: "登陆", |
22 | path: "/login", | 22 | path: "/login", |
23 | type: "noAuth", | 23 | type: "noAuth", |
24 | value: "" | 24 | value: "" |
25 | }, | 25 | }, |
26 | { | 26 | { |
27 | name: "修改密码", | 27 | name: "修改密码", |
28 | path: "", | 28 | path: "/password/reset", |
29 | type: "auth", | 29 | type: "auth", |
30 | value: "" | 30 | value: "" |
31 | }, | 31 | }, |
32 | { | 32 | { |
33 | name: "登出", | 33 | name: "登出", |
34 | path: "", | 34 | path: "", |
35 | type: "auth", | 35 | type: "auth", |
36 | value: "logout" | 36 | value: "logout" |
37 | } | 37 | } |
38 | ] | 38 | ] |
39 | }, | 39 | }, |
40 | navList: [{ | 40 | navList: [{ |
41 | name: "产品介绍", | 41 | name: "产品介绍", |
42 | path: "/product", | 42 | path: "/product", |
43 | list: [] | 43 | list: [] |
44 | }, | ||
45 | { | ||
46 | name: "客户服务", | ||
47 | path: "/custom/product", | ||
48 | list: [{ | ||
49 | name: "联系我们", | ||
50 | path: "/custom/service?q=m1" | ||
44 | }, | 51 | }, |
45 | { | 52 | { |
46 | name: "客户服务", | 53 | name: "缴付保费", |
47 | path: "/custom/product", | 54 | path: "/custom/service?q=m2" |
48 | list: [{ | ||
49 | name: "联系我们", | ||
50 | path: "/custom/service?q=m1" | ||
51 | }, | ||
52 | { | ||
53 | name: "缴付保费", | ||
54 | path: "/custom/service?q=m2" | ||
55 | }, | ||
56 | { | ||
57 | name: "保单查询", | ||
58 | path: "/custom/service?q=m3" | ||
59 | }, | ||
60 | { | ||
61 | name: "保单变更", | ||
62 | path: "/custom/service?q=m4" | ||
63 | }, | ||
64 | { | ||
65 | name: "理赔申请", | ||
66 | path: "/custom/service?q=m5" | ||
67 | }, | ||
68 | { | ||
69 | name: "预约服务", | ||
70 | path: "/custom/service?q=m6" | ||
71 | }, | ||
72 | { | ||
73 | name: "投诉受理", | ||
74 | path: "/custom/service?q=m7" | ||
75 | }, | ||
76 | { | ||
77 | name: "常用表格", | ||
78 | path: "/custom/service?q=m8" | ||
79 | }, | ||
80 | ] | ||
81 | }, | 55 | }, |
82 | { | 56 | { |
83 | name: "新闻资讯", | 57 | name: "保单查询", |
84 | path: "/news/list", | 58 | path: "/custom/service?q=m3" |
85 | list: [] | ||
86 | }, | 59 | }, |
87 | { | 60 | { |
88 | name: "关于平安人寿", | 61 | name: "保单变更", |
89 | path: "", | 62 | path: "/custom/service?q=m4" |
90 | list: [{ | 63 | }, |
91 | name: "公司简介", | 64 | { |
92 | path: "/profile" | 65 | name: "理赔申请", |
93 | }, | 66 | path: "/custom/service?q=m5" |
94 | { | 67 | }, |
95 | name: "领导人概况", | 68 | { |
96 | path: "" | 69 | name: "预约服务", |
97 | }, | 70 | path: "/custom/service?q=m6" |
98 | ] | 71 | }, |
72 | { | ||
73 | name: "投诉受理", | ||
74 | path: "/custom/service?q=m7" | ||
75 | }, | ||
76 | { | ||
77 | name: "常用表格", | ||
78 | path: "/custom/service?q=m8" | ||
79 | }, | ||
80 | ] | ||
81 | }, | ||
82 | { | ||
83 | name: "新闻资讯", | ||
84 | path: "/news/list", | ||
85 | list: [] | ||
86 | }, | ||
87 | { | ||
88 | name: "关于平安人寿", | ||
89 | path: "", | ||
90 | list: [{ | ||
91 | name: "公司简介", | ||
92 | path: "/profile" | ||
93 | }, | ||
94 | { | ||
95 | name: "领导人概况", | ||
96 | path: "" | ||
99 | }, | 97 | }, |
98 | ] | ||
99 | }, | ||
100 | ] | 100 | ] |
101 | }, | 101 | }, |
102 | footer: { | 102 | footer: { |
... | @@ -136,6 +136,9 @@ module.exports = { | ... | @@ -136,6 +136,9 @@ module.exports = { |
136 | verifyCodePlaceholder: "验证码", | 136 | verifyCodePlaceholder: "验证码", |
137 | verifyCodeGet: "获取验证码", | 137 | verifyCodeGet: "获取验证码", |
138 | }, | 138 | }, |
139 | session: { | ||
140 | sidExpire: "长时间未操作,为了您的账户安全,请登录后再操作", | ||
141 | }, | ||
139 | register: { | 142 | register: { |
140 | mobileOptions: [{ | 143 | mobileOptions: [{ |
141 | type: "hk", | 144 | type: "hk", |
... | @@ -163,18 +166,33 @@ module.exports = { | ... | @@ -163,18 +166,33 @@ module.exports = { |
163 | newPasswordSurePlaceholder: "输入登录密码", | 166 | newPasswordSurePlaceholder: "输入登录密码", |
164 | sure: "确认", | 167 | sure: "确认", |
165 | }, | 168 | }, |
169 | passwordCheck: { | ||
170 | error1: "密码长度不少于8位", | ||
171 | error2: "密码中必须包含数字、字符以及特殊号码", | ||
172 | error3: "两次密码不一致,请确认后重新输入", | ||
173 | error4: "密码修改失败,请稍后再试,或拨打客服电话95511解决", | ||
174 | error5 : "旧密码不正确,请重新输入", | ||
175 | success: "密码修改成功" | ||
176 | }, | ||
166 | passwordReset: { | 177 | passwordReset: { |
178 | oldPwd : "旧密码", | ||
179 | oldPwdPlaceholde : "请输入旧密码", | ||
180 | cidExpire: "长时间未操作,为了您的账户安全,请重新开始", | ||
167 | type1: { | 181 | type1: { |
168 | title: "密码找回", | 182 | title: "密码找回", |
169 | t1: "用户输入信息", | 183 | t1: "用户输入信息", |
170 | t1Placeholder: "手机号/一账通用户名", | 184 | t1Placeholder: "手机号/证件号", |
171 | submit: "确认", | 185 | submit: "确认", |
186 | error: "您的手机号或证件号输入错误,请核对后重新输入", | ||
172 | }, | 187 | }, |
173 | type2: { | 188 | type2: { |
174 | title: "密码找回", | 189 | title: "密码找回", |
175 | t1: "手机短信验证码", | 190 | t1: "手机短信验证码", |
176 | t1Placeholder: "请输入验证码", | 191 | t1Placeholder: "请输入验证码", |
177 | submit: "确认", | 192 | submit: "确认", |
193 | error1: "短信验证码输入错误,请核对后重新输入", | ||
194 | error2: "短信验证码已经过期,请重新获取验证码", | ||
195 | error3: "短信验证码发放时间少于1分钟,请稍后再试", | ||
178 | }, | 196 | }, |
179 | type3: { | 197 | type3: { |
180 | title: "密码找回", | 198 | title: "密码找回", |
... | @@ -203,8 +221,8 @@ module.exports = { | ... | @@ -203,8 +221,8 @@ module.exports = { |
203 | t4Placeholder: "", | 221 | t4Placeholder: "", |
204 | t5: "证件号码", | 222 | t5: "证件号码", |
205 | t5Placeholder: "", | 223 | t5Placeholder: "", |
206 | submit:"确认", | 224 | submit: "确认", |
207 | cancel:"跳过", | 225 | cancel: "跳过", |
208 | }, | 226 | }, |
209 | index: { | 227 | index: { |
210 | news: "新闻资讯", | 228 | news: "新闻资讯", |
... | @@ -287,72 +305,72 @@ module.exports = { | ... | @@ -287,72 +305,72 @@ module.exports = { |
287 | head4: "附件", | 305 | head4: "附件", |
288 | download: "下载文档", | 306 | download: "下载文档", |
289 | form: [{ | 307 | form: [{ |
290 | type: "缴费类", | 308 | type: "缴费类", |
291 | list: [{ | 309 | list: [{ |
292 | name: "「电子入账服务」及银行户口<br>直接付款授权申请", | 310 | name: "「电子入账服务」及银行户口<br>直接付款授权申请", |
293 | desc: "申请设立「电子入账服务」及银行户口<br>直接付款授权时须提供", | 311 | desc: "申请设立「电子入账服务」及银行户口<br>直接付款授权时须提供", |
294 | download: "", | 312 | download: "", |
295 | }, | ||
296 | { | ||
297 | name: "信用卡户口直接付款授权书", | ||
298 | desc: "申请信用卡户口直接付款授权时须提供", | ||
299 | download: "", | ||
300 | } | ||
301 | ] | ||
302 | }, | 313 | }, |
303 | { | 314 | { |
304 | type: "保单变更类", | 315 | name: "信用卡户口直接付款授权书", |
305 | list: [{ | 316 | desc: "申请信用卡户口直接付款授权时须提供", |
306 | name: "保险合同解除申请书", | 317 | download: "", |
307 | desc: "退保、犹豫期退保业务适用", | 318 | } |
308 | download: "", | 319 | ] |
309 | }, | 320 | }, |
310 | { | 321 | { |
311 | name: "保险合同变更申请书(保单贷款还款类)", | 322 | type: "保单变更类", |
312 | desc: "保单贷款、还款业务适用", | 323 | list: [{ |
313 | download: "", | 324 | name: "保险合同解除申请书", |
314 | }, | 325 | desc: "退保、犹豫期退保业务适用", |
315 | { | 326 | download: "", |
316 | name: "保险合同变更申请书(保险合同计划变更类)", | 327 | }, |
317 | desc: "加保、减保、新增附险、复效等业务适用", | 328 | { |
318 | download: "", | 329 | name: "保险合同变更申请书(保单贷款还款类)", |
319 | }, | 330 | desc: "保单贷款、还款业务适用", |
320 | { | 331 | download: "", |
321 | name: "保险合同变更申请书(客户信息变更类)", | ||
322 | desc: "基本信息变更业务适用", | ||
323 | download: "", | ||
324 | }, | ||
325 | { | ||
326 | name: "保险合同变更申请书(客户权益变更类)", | ||
327 | desc: "交费方式、自垫选择权变更、补发等业务适用", | ||
328 | download: "", | ||
329 | }, | ||
330 | { | ||
331 | name: "授权委托书", | ||
332 | desc: "委托他人代办时须提供", | ||
333 | download: "", | ||
334 | }, | ||
335 | { | ||
336 | name: "税收声明", | ||
337 | desc: "CRS要求", | ||
338 | download: "", | ||
339 | }, | ||
340 | { | ||
341 | name: "健康告知", | ||
342 | desc: "须二次核保的业务须提供", | ||
343 | download: "", | ||
344 | } | ||
345 | |||
346 | ] | ||
347 | }, | 332 | }, |
348 | { | 333 | { |
349 | type: "理赔类", | 334 | name: "保险合同变更申请书(保险合同计划变更类)", |
350 | list: [{ | 335 | desc: "加保、减保、新增附险、复效等业务适用", |
351 | name: "理赔申请书", | 336 | download: "", |
352 | desc: "纸质申请的应备文件", | ||
353 | download: "", | ||
354 | }] | ||
355 | }, | 337 | }, |
338 | { | ||
339 | name: "保险合同变更申请书(客户信息变更类)", | ||
340 | desc: "基本信息变更业务适用", | ||
341 | download: "", | ||
342 | }, | ||
343 | { | ||
344 | name: "保险合同变更申请书(客户权益变更类)", | ||
345 | desc: "交费方式、自垫选择权变更、补发等业务适用", | ||
346 | download: "", | ||
347 | }, | ||
348 | { | ||
349 | name: "授权委托书", | ||
350 | desc: "委托他人代办时须提供", | ||
351 | download: "", | ||
352 | }, | ||
353 | { | ||
354 | name: "税收声明", | ||
355 | desc: "CRS要求", | ||
356 | download: "", | ||
357 | }, | ||
358 | { | ||
359 | name: "健康告知", | ||
360 | desc: "须二次核保的业务须提供", | ||
361 | download: "", | ||
362 | } | ||
363 | |||
364 | ] | ||
365 | }, | ||
366 | { | ||
367 | type: "理赔类", | ||
368 | list: [{ | ||
369 | name: "理赔申请书", | ||
370 | desc: "纸质申请的应备文件", | ||
371 | download: "", | ||
372 | }] | ||
373 | }, | ||
356 | ] | 374 | ] |
357 | }, | 375 | }, |
358 | policyChangeGuide: { | 376 | policyChangeGuide: { |
... | @@ -364,100 +382,100 @@ module.exports = { | ... | @@ -364,100 +382,100 @@ module.exports = { |
364 | head5: "应备材料", | 382 | head5: "应备材料", |
365 | download: "下载文档", | 383 | download: "下载文档", |
366 | form: [{ | 384 | form: [{ |
367 | project: "退保", | 385 | project: "退保", |
368 | content: "在犹豫期后解除合同,公司将退还保单现金价值或未满期净保费。(待产品精算确认)", | 386 | content: "在犹豫期后解除合同,公司将退还保单现金价值或未满期净保费。(待产品精算确认)", |
369 | applicant: "投保人", | 387 | applicant: "投保人", |
370 | receptionTime: "保单效力终止前", | 388 | receptionTime: "保单效力终止前", |
371 | materialList: [{ | 389 | materialList: [{ |
372 | name: "保险单", | 390 | name: "保险单", |
373 | }, | ||
374 | { | ||
375 | name: "申请书", | ||
376 | type: 1, | ||
377 | }, | ||
378 | { | ||
379 | name: "投保人有效身份证件", | ||
380 | }, | ||
381 | { | ||
382 | name: "存折银行卡相关", | ||
383 | } | ||
384 | ], | ||
385 | }, | 391 | }, |
386 | { | 392 | { |
387 | project: "犹豫期退保", | 393 | name: "申请书", |
388 | content: "在犹豫期内提出解除合同,公司会无息退还全部保费", | 394 | type: 1, |
389 | applicant: "投保人", | ||
390 | receptionTime: "犹豫期结束前", | ||
391 | materialList: [{ | ||
392 | name: "保险单", | ||
393 | }, | ||
394 | { | ||
395 | name: "申请书", | ||
396 | type: 1, | ||
397 | }, | ||
398 | { | ||
399 | name: "投保人有效身份证件", | ||
400 | }, | ||
401 | { | ||
402 | name: "存折银行卡相关", | ||
403 | }, | ||
404 | { | ||
405 | name: "首期保费发票", | ||
406 | } | ||
407 | ], | ||
408 | }, | 395 | }, |
409 | { | 396 | { |
410 | project: "客户资料变更", | 397 | name: "投保人有效身份证件", |
411 | projectType: 1, | ||
412 | path: "/custom/service", | ||
413 | query: { | ||
414 | q: "m42" | ||
415 | }, | ||
416 | content: "投保人、受保人、受益人的个人信息变更", | ||
417 | applicant: "投保人", | ||
418 | receptionTime: "不限", | ||
419 | materialList: [{ | ||
420 | name: "申请书", | ||
421 | type: 1, | ||
422 | }, | ||
423 | { | ||
424 | name: "必要的证明材料", | ||
425 | } | ||
426 | ], | ||
427 | }, | 398 | }, |
428 | { | 399 | { |
429 | project: "联系信息变更", | 400 | name: "存折银行卡相关", |
430 | projectType: 1, | 401 | } |
431 | path: "/custom/service", | 402 | ], |
432 | query: { | 403 | }, |
433 | q: "m43" | 404 | { |
434 | }, | 405 | project: "犹豫期退保", |
435 | content: "地址、电话等信息的变更", | 406 | content: "在犹豫期内提出解除合同,公司会无息退还全部保费", |
436 | applicant: "投保人", | 407 | applicant: "投保人", |
437 | receptionTime: "不限", | 408 | receptionTime: "犹豫期结束前", |
438 | materialList: [{ | 409 | materialList: [{ |
439 | name: "申请书", | 410 | name: "保险单", |
440 | type: 1, | 411 | }, |
441 | }, | 412 | { |
442 | { | 413 | name: "申请书", |
443 | name: "投保人有效身份证件", | 414 | type: 1, |
444 | } | ||
445 | ], | ||
446 | }, | 415 | }, |
447 | { | 416 | { |
448 | project: "交费方式变更", | 417 | name: "投保人有效身份证件", |
449 | content: "更改保单的续期交费方式或交费账号", | ||
450 | applicant: "投保人", | ||
451 | receptionTime: "保单交费期满前", | ||
452 | materialList: [{ | ||
453 | name: "申请书", | ||
454 | type: 1, | ||
455 | }, | ||
456 | { | ||
457 | name: "保险单", | ||
458 | } | ||
459 | ], | ||
460 | }, | 418 | }, |
419 | { | ||
420 | name: "存折银行卡相关", | ||
421 | }, | ||
422 | { | ||
423 | name: "首期保费发票", | ||
424 | } | ||
425 | ], | ||
426 | }, | ||
427 | { | ||
428 | project: "客户资料变更", | ||
429 | projectType: 1, | ||
430 | path: "/custom/service", | ||
431 | query: { | ||
432 | q: "m42" | ||
433 | }, | ||
434 | content: "投保人、受保人、受益人的个人信息变更", | ||
435 | applicant: "投保人", | ||
436 | receptionTime: "不限", | ||
437 | materialList: [{ | ||
438 | name: "申请书", | ||
439 | type: 1, | ||
440 | }, | ||
441 | { | ||
442 | name: "必要的证明材料", | ||
443 | } | ||
444 | ], | ||
445 | }, | ||
446 | { | ||
447 | project: "联系信息变更", | ||
448 | projectType: 1, | ||
449 | path: "/custom/service", | ||
450 | query: { | ||
451 | q: "m43" | ||
452 | }, | ||
453 | content: "地址、电话等信息的变更", | ||
454 | applicant: "投保人", | ||
455 | receptionTime: "不限", | ||
456 | materialList: [{ | ||
457 | name: "申请书", | ||
458 | type: 1, | ||
459 | }, | ||
460 | { | ||
461 | name: "投保人有效身份证件", | ||
462 | } | ||
463 | ], | ||
464 | }, | ||
465 | { | ||
466 | project: "交费方式变更", | ||
467 | content: "更改保单的续期交费方式或交费账号", | ||
468 | applicant: "投保人", | ||
469 | receptionTime: "保单交费期满前", | ||
470 | materialList: [{ | ||
471 | name: "申请书", | ||
472 | type: 1, | ||
473 | }, | ||
474 | { | ||
475 | name: "保险单", | ||
476 | } | ||
477 | ], | ||
478 | }, | ||
461 | ] | 479 | ] |
462 | }, | 480 | }, |
463 | policyChangeContact: { | 481 | policyChangeContact: { | ... | ... |
... | @@ -7,8 +7,9 @@ import { | ... | @@ -7,8 +7,9 @@ import { |
7 | httpPost | 7 | httpPost |
8 | } from '@/api/fetch-api.js' | 8 | } from '@/api/fetch-api.js' |
9 | 9 | ||
10 | let PK = 'B5FE03847F02046C47292AF0FF2DE88977241483DD40C123046EB39CBE4C48167B120096CFF12CD16559322884A3C56FA92B07B89AB51FC8C91A75127622151DDD730DFF1F993D5A290CEAC0BBA7FC88285D8994ACBAFF50101EDE9A0925AD5DFFAFE96D53C370E9C5B37DF2F871F81C4D7CA6B7EC37FF459C07975AD9A74A95'; | 10 | |
11 | let E = '10001'; | 11 | import { passwordEncrypt } from '@/utils/encrypt.js'; |
12 | |||
12 | 13 | ||
13 | export default { | 14 | export default { |
14 | data() { | 15 | data() { |
... | @@ -45,8 +46,6 @@ export default { | ... | @@ -45,8 +46,6 @@ export default { |
45 | showImageCode: false, | 46 | showImageCode: false, |
46 | agreeProtocol: false | 47 | agreeProtocol: false |
47 | }, | 48 | }, |
48 | PK: process.env.VUE_APP_RSA_PUBLIC_KEY || PK, | ||
49 | E: process.env.VUE_APP_RSA_KEY_INDEX || E, | ||
50 | } | 49 | } |
51 | }, | 50 | }, |
52 | components: {}, | 51 | components: {}, |
... | @@ -76,10 +75,12 @@ export default { | ... | @@ -76,10 +75,12 @@ export default { |
76 | onRegisterHandler() { | 75 | onRegisterHandler() { |
77 | this.$router.push({ | 76 | this.$router.push({ |
78 | path: "/register" | 77 | path: "/register" |
79 | }) | 78 | }); |
80 | }, | 79 | }, |
81 | onForgetHandler() { | 80 | onForgetHandler() { |
82 | 81 | this.$router.push({ | |
82 | path: "/password/find" | ||
83 | }); | ||
83 | }, | 84 | }, |
84 | onLoginTypeHandler(val) { | 85 | onLoginTypeHandler(val) { |
85 | this.type = val; | 86 | this.type = val; |
... | @@ -131,7 +132,7 @@ export default { | ... | @@ -131,7 +132,7 @@ export default { |
131 | data: { | 132 | data: { |
132 | deviceId: this.values.deviceId, | 133 | deviceId: this.values.deviceId, |
133 | loginName: this.loginForm.userId, | 134 | loginName: this.loginForm.userId, |
134 | loginPwd: this._passwordEncrypt(this.loginForm.password) | 135 | loginPwd: passwordEncrypt(this.loginForm.password) |
135 | } | 136 | } |
136 | }).then(response => { | 137 | }).then(response => { |
137 | this._handlerLoginResponse(response); | 138 | this._handlerLoginResponse(response); |
... | @@ -316,13 +317,6 @@ export default { | ... | @@ -316,13 +317,6 @@ export default { |
316 | } | 317 | } |
317 | return this.values.deviceId | 318 | return this.values.deviceId |
318 | }, | 319 | }, |
319 | _passwordEncrypt(rawPwd) { | ||
320 | let rsa = new RSAKey(); | ||
321 | rsa.setPublic(this.PK, this.E); | ||
322 | let res = rsa.encrypt(rawPwd); | ||
323 | if (res == null) return rawPwd; | ||
324 | return res; | ||
325 | } | ||
326 | }, | 320 | }, |
327 | watch: { | 321 | watch: { |
328 | type() { | 322 | type() { | ... | ... |
src/pages/password-find/password-find.js
0 → 100644
1 | import api from '@/api/api' | ||
2 | import { | ||
3 | httpGet, | ||
4 | httpPost | ||
5 | } from '@/api/fetch-api.js' | ||
6 | |||
7 | import modalComp from '@/components/modal-comp/modal-comp.vue'; | ||
8 | import { passwordEncrypt } from '@/utils/encrypt.js'; | ||
9 | |||
10 | export default { | ||
11 | data() { | ||
12 | return { | ||
13 | key: 'value', | ||
14 | type: 1, // 1:输入用户信息 2:找回密码 3:核对信息 4.重置密码 | ||
15 | values: { | ||
16 | cid: "", | ||
17 | }, | ||
18 | times: { | ||
19 | interval: 0, // 索引 | ||
20 | remain: 0, // 剩余时间 | ||
21 | tip: "" // 显示的文字 | ||
22 | }, | ||
23 | modalVisiable: false, | ||
24 | modal: { | ||
25 | icon: "succ", | ||
26 | content: "", | ||
27 | }, | ||
28 | step1: { | ||
29 | userId: "", | ||
30 | error: "" | ||
31 | }, | ||
32 | step2: { | ||
33 | idNo: "" | ||
34 | }, | ||
35 | step3: { | ||
36 | otp: "", | ||
37 | error: "" | ||
38 | }, | ||
39 | step4: { | ||
40 | pwd: "", | ||
41 | error1: "", | ||
42 | pwdRepeat: "", | ||
43 | error2: "", | ||
44 | success: false | ||
45 | } | ||
46 | } | ||
47 | }, | ||
48 | components: {}, | ||
49 | methods: { | ||
50 | initData() { }, | ||
51 | i18n() { | ||
52 | let i18n = this.$i18n.messages[this.$i18n.locale] || {}; | ||
53 | return i18n; | ||
54 | }, | ||
55 | showModal(content, icon) { | ||
56 | icon = !icon || typeof icon === "undefined" ? "succ" : "succ"; | ||
57 | this.modalIcon = icon; | ||
58 | this.modalContent = content; | ||
59 | this.modalVisiable = true; | ||
60 | }, | ||
61 | locateUserInfo() { | ||
62 | // 定位用户信息 | ||
63 | if (!this.step1.userId) { | ||
64 | this.step1.error = this.i18n().passwordReset.type1.error; | ||
65 | return; | ||
66 | } | ||
67 | httpPost({ | ||
68 | url: api.locateUserInfo, | ||
69 | data: { | ||
70 | uid: this.step1.userId | ||
71 | } | ||
72 | }).then(response => { | ||
73 | if (response.resultCode !== "0") { | ||
74 | this.step1.error = this.i18n().passwordReset.type1.error; | ||
75 | } else { | ||
76 | this.values.cid = response.data.cid; | ||
77 | this.step2.idNo = response.data.idNo; | ||
78 | if (typeof this.step2.idNo == "undefined") { | ||
79 | this.type = 3; | ||
80 | } else { | ||
81 | this.type = 2; | ||
82 | } | ||
83 | } | ||
84 | }); | ||
85 | }, | ||
86 | sureIdNo() { | ||
87 | this.type = 3; | ||
88 | }, | ||
89 | sendOtp() { | ||
90 | if (this.times.remain > 0) { | ||
91 | return; | ||
92 | } | ||
93 | // 定位用户 | ||
94 | httpPost({ | ||
95 | url: api.sendOtp, | ||
96 | data: { | ||
97 | cid: this.values.cid | ||
98 | } | ||
99 | }).then(response => { | ||
100 | if (this.responseHandler(response)) { | ||
101 | switch (response.resultCode) { | ||
102 | case "COMMON_ERROR_E3": | ||
103 | this.step2.error = this.i18n().passwordReset.type2.error3; | ||
104 | return; | ||
105 | default: | ||
106 | this.startTimeClick(); | ||
107 | return; | ||
108 | } | ||
109 | } | ||
110 | }) | ||
111 | }, | ||
112 | checkOtp() { | ||
113 | // 发送验证码 | ||
114 | if (!this.step3.otp) { | ||
115 | this.step3.error = this.i18n().passwordReset.type2.error1; | ||
116 | return; | ||
117 | } | ||
118 | // 定位用户 | ||
119 | httpPost({ | ||
120 | url: api.checkOtp, | ||
121 | data: { | ||
122 | cid: this.values.cid, | ||
123 | otp: this.step3.otp | ||
124 | } | ||
125 | }).then(response => { | ||
126 | if (this.responseHandler(response)) { | ||
127 | switch (response.resultCode) { | ||
128 | case "0": | ||
129 | this.type = 4; | ||
130 | return; | ||
131 | default: | ||
132 | // 提示驗證碼錯誤 | ||
133 | this.step3.error = this.i18n().passwordReset.type2.error1; | ||
134 | return; | ||
135 | } | ||
136 | } | ||
137 | }) | ||
138 | }, | ||
139 | resetPwd() { | ||
140 | let c1 = this.checkPassword(this.step4.pwd); | ||
141 | if (c1) { | ||
142 | this.$set(this.step, 'error1', c1); | ||
143 | return; | ||
144 | } | ||
145 | if (this.step4.pwdRepeat != this.step4.pwd) { | ||
146 | this.step4.error2 = this.i18n().passwordCheck.error3; | ||
147 | return; | ||
148 | } | ||
149 | let pwd = passwordEncrypt(this.step4.pwd); | ||
150 | // 定位用户 | ||
151 | httpPost({ | ||
152 | url: api.resetPwd, | ||
153 | data: { | ||
154 | cid: this.values.cid, | ||
155 | password: pwd | ||
156 | } | ||
157 | }).then(response => { | ||
158 | if (this.responseHandler(response)) { | ||
159 | let message = this.i18n().passwordCheck.success; | ||
160 | this.step4.success = true; | ||
161 | switch (response.resultCode) { | ||
162 | case "0": | ||
163 | this.showModal(message, "succ"); | ||
164 | break | ||
165 | default: | ||
166 | message = this.i18n().passwordCheck.error4; | ||
167 | this.showModal(message, "succ"); | ||
168 | break; | ||
169 | } | ||
170 | } | ||
171 | }) | ||
172 | }, | ||
173 | checkPassword(password) { | ||
174 | if (password.length < 8) { | ||
175 | return this.i18n().passwordCheck.error1; | ||
176 | } | ||
177 | // 匹配字母 | ||
178 | let m1 = /([a-z])+/.test(password); | ||
179 | let m2 = /([A-Z])+/.test(password); | ||
180 | // 匹配数字 | ||
181 | let m3 = /([0-9])+/.test(password); | ||
182 | // 匹配特殊字符 | ||
183 | let m4 = /[^a-zA-Z0-9]+/.test(password); | ||
184 | console.log(m1, m2, m3, m4) | ||
185 | if ((m1 | m2) & m3 & m4) { | ||
186 | return ""; | ||
187 | } else { | ||
188 | return this.i18n().passwordCheck.error2 | ||
189 | } | ||
190 | }, | ||
191 | startTimeClick() { | ||
192 | // 開始倒計時 | ||
193 | this.times.remain = 120; | ||
194 | let _this = this; | ||
195 | let i18n = this.$i18n.messages[this.$i18n.locale] || {}; | ||
196 | let msg = i18n.register.coutTips; | ||
197 | _this.times.tip = msg.replace("{second}", _this.times.remain); | ||
198 | this.times.interval = setInterval(function () { | ||
199 | if (_this.times.remain <= 0) { | ||
200 | clearInterval(_this.times.interval); | ||
201 | _this.times.interval = 0; | ||
202 | _this.times.remain = 0; | ||
203 | return; | ||
204 | } | ||
205 | _this.times.remain--; | ||
206 | _this.times.tip = msg.replace("{second}", _this.times.remain); | ||
207 | _this.$set(_this, 'times', _this.times); | ||
208 | }, 1000); | ||
209 | }, | ||
210 | responseHandler(response) { | ||
211 | switch (response.resultCode) { | ||
212 | case "COMMON_ERROR_E2": | ||
213 | // 身份过期了,请重新登录 | ||
214 | this.values.cid = ""; | ||
215 | this.showModal(this.i18n().passwordReset.cidExpire); | ||
216 | this.step2.idNo = ""; | ||
217 | this.step3.otp = ""; | ||
218 | this.step3.error = ""; | ||
219 | this.step4.pwd = ""; | ||
220 | this.step4.pwdRepeat = ""; | ||
221 | this.step4.error1 = ""; | ||
222 | this.step4.error2 = ""; | ||
223 | this.step4.success = false; | ||
224 | this.type = 1; | ||
225 | return false; | ||
226 | default: | ||
227 | return true; | ||
228 | } | ||
229 | }, | ||
230 | modalCallback() { | ||
231 | this.modalVisiable = false; | ||
232 | if (this.step4.success) { | ||
233 | this.$router.push({ | ||
234 | path: "/login" | ||
235 | }) | ||
236 | } else { | ||
237 | |||
238 | } | ||
239 | } | ||
240 | }, | ||
241 | watch: { | ||
242 | 'step1.userId': function () { | ||
243 | this.step1.error = ""; | ||
244 | }, | ||
245 | 'step3.otp': function () { | ||
246 | this.step3.error = ""; | ||
247 | }, | ||
248 | 'step4.pwd': function () { | ||
249 | console.log(this.checkPassword(this.step4.pwd)); | ||
250 | this.$set(this.step4, 'error1', this.checkPassword(this.step4.pwd)); | ||
251 | }, | ||
252 | 'step4.pwdRepeat': function () { | ||
253 | if (this.step4.pwdRepeat != this.step4.pwd) { | ||
254 | this.$set(this.step4, 'error2', this.i18n().passwordCheck.error3); | ||
255 | } else { | ||
256 | this.$set(this.step4, 'error2', ''); | ||
257 | } | ||
258 | }, | ||
259 | }, | ||
260 | mounted() { }, | ||
261 | created() { }, | ||
262 | components: { | ||
263 | modalComp | ||
264 | } | ||
265 | } |
src/pages/password-find/password-find.scss
0 → 100644
1 | @import '@/styles/_support'; | ||
2 | |||
3 | .content { | ||
4 | position: relative; | ||
5 | padding-bottom: 2.25rem; | ||
6 | } | ||
7 | |||
8 | .top-space { | ||
9 | height: 2.25rem; | ||
10 | } | ||
11 | |||
12 | .box { | ||
13 | position: relative; | ||
14 | } | ||
15 | |||
16 | .ebg { | ||
17 | position: absolute; | ||
18 | bottom: 0; | ||
19 | left: 0; | ||
20 | right: 0; | ||
21 | |||
22 | img { | ||
23 | max-width: 100%; | ||
24 | } | ||
25 | } | ||
26 | |||
27 | .step { | ||
28 | @extend .fcc; | ||
29 | margin-bottom: 3rem; | ||
30 | } | ||
31 | |||
32 | .login { | ||
33 | color: #4c4948; | ||
34 | @extend .bb; | ||
35 | padding: 1.416667rem 5rem 0; | ||
36 | border-bottom: solid .666667rem #006441; | ||
37 | |||
38 | margin: auto; | ||
39 | max-width: 40.25rem; | ||
40 | height: 31rem; | ||
41 | |||
42 | border-radius: .75rem; | ||
43 | box-shadow: 0 0 1.5rem 0 rgba(255, 87, 0, 0.15); | ||
44 | background-color: #ffffff; | ||
45 | |||
46 | &-tit { | ||
47 | color: #f05a23; | ||
48 | text-align: center; | ||
49 | font-size: 18px; | ||
50 | font-weight: bold; | ||
51 | letter-spacing: .2rem; | ||
52 | text-shadow: 3px 5.2px 9px rgba(236, 100, 41, 0.27); | ||
53 | } | ||
54 | |||
55 | &-tit-space-1 { | ||
56 | height: 5.25rem; | ||
57 | } | ||
58 | |||
59 | &-tit-space-4 { | ||
60 | height: 3rem; | ||
61 | } | ||
62 | |||
63 | &-nav { | ||
64 | margin: 2.25rem 0 auto; | ||
65 | display: flex; | ||
66 | justify-content: center; | ||
67 | align-items: center; | ||
68 | |||
69 | &-v-line { | ||
70 | width: .2rem; | ||
71 | height: 1.25rem; | ||
72 | background-color: #4c4948; | ||
73 | margin: 0 2.25rem; | ||
74 | } | ||
75 | |||
76 | &-tit { | ||
77 | flex: 1; | ||
78 | font-size: 18px; | ||
79 | font-weight: bold; | ||
80 | color: #4c4948; | ||
81 | } | ||
82 | |||
83 | .active { | ||
84 | color: #f05a23; | ||
85 | text-shadow: 3px 5.2px 9px rgba(236, 100, 41, 0.27); | ||
86 | } | ||
87 | } | ||
88 | |||
89 | &-protocol { | ||
90 | margin: 2.5rem auto 0; | ||
91 | display: flex; | ||
92 | align-items: center; | ||
93 | padding-left: 1rem; | ||
94 | |||
95 | .check { | ||
96 | height: 1rem; | ||
97 | margin-right: .6rem; | ||
98 | } | ||
99 | |||
100 | .protocol { | ||
101 | color: #f05a23; | ||
102 | } | ||
103 | } | ||
104 | |||
105 | &-submit { | ||
106 | @include btc2(13.5rem, 4rem, 16px); | ||
107 | margin: 4.166667rem auto 0; | ||
108 | letter-spacing: 1.6px; | ||
109 | position: absolute; | ||
110 | left: 0; | ||
111 | right: 0; | ||
112 | margin: 0 auto; | ||
113 | bottom: 2.25rem; | ||
114 | } | ||
115 | |||
116 | &-func { | ||
117 | margin: 1.5rem auto 0; | ||
118 | display: flex; | ||
119 | justify-content: center; | ||
120 | |||
121 | &-btn { | ||
122 | margin: 0 1.25rem; | ||
123 | text-decoration: underline; | ||
124 | } | ||
125 | } | ||
126 | } | ||
127 | |||
128 | .form { | ||
129 | display: flex; | ||
130 | justify-content: space-between; | ||
131 | flex-wrap: wrap; | ||
132 | |||
133 | .vcode { | ||
134 | background-color: transparent !important; | ||
135 | padding: 0 !important; | ||
136 | overflow: hidden; | ||
137 | |||
138 | img { | ||
139 | width: 100%; | ||
140 | height: 100%; | ||
141 | } | ||
142 | } | ||
143 | |||
144 | input { | ||
145 | font-size: 1.166667rem; | ||
146 | letter-spacing: .1rem; | ||
147 | } | ||
148 | |||
149 | &-item { | ||
150 | position: relative; | ||
151 | margin-bottom: 2.25rem; | ||
152 | |||
153 | .label { | ||
154 | font-size: 18px; | ||
155 | font-weight: bold; | ||
156 | color: #f05a23; | ||
157 | display: flex; | ||
158 | align-items: center; | ||
159 | margin-bottom: 1.25rem; | ||
160 | |||
161 | img { | ||
162 | height: 1.5rem; | ||
163 | margin-right: .8rem; | ||
164 | } | ||
165 | } | ||
166 | |||
167 | .ipt-wrap { | ||
168 | position: relative; | ||
169 | display: flex; | ||
170 | justify-content: space-between; | ||
171 | |||
172 | // input和下拉 | ||
173 | .ipt { | ||
174 | @extend .bb; | ||
175 | width: 100%; | ||
176 | height: 3.5rem; | ||
177 | border: solid 1px #dcdddd; | ||
178 | background-color: #ffffff; | ||
179 | border-radius: 3.5rem; | ||
180 | padding: 0 1.75rem; | ||
181 | flex: 1; | ||
182 | } | ||
183 | |||
184 | // 长文本 | ||
185 | .textarea { | ||
186 | min-height: 8.75rem; | ||
187 | border-radius: 1rem; | ||
188 | } | ||
189 | |||
190 | .down-arrow { | ||
191 | position: absolute; | ||
192 | top: 1.6rem; | ||
193 | right: 2rem; | ||
194 | } | ||
195 | |||
196 | |||
197 | .verify-btn { | ||
198 | @extend .fcc; | ||
199 | // font-family: Arial; | ||
200 | font-size: 18px; | ||
201 | width: 8.5rem; | ||
202 | border: solid 1px #dcdddd; | ||
203 | background-color: #f2f2f2; | ||
204 | flex: none; | ||
205 | margin-left: 1.5rem; | ||
206 | color: #4c4948; | ||
207 | } | ||
208 | |||
209 | // 框内按钮 | ||
210 | .ipt2 { | ||
211 | display: flex; | ||
212 | justify-content: space-between; | ||
213 | align-items: center; | ||
214 | |||
215 | .ipt-tel { | ||
216 | flex: 1; | ||
217 | padding-left: 1.75rem; | ||
218 | } | ||
219 | |||
220 | .ipt-code { | ||
221 | flex: 1; | ||
222 | padding-right: 1.75rem; | ||
223 | } | ||
224 | |||
225 | .region-tel {} | ||
226 | |||
227 | .veri-btn { | ||
228 | color: #f05a23; | ||
229 | text-decoration: underline; | ||
230 | } | ||
231 | |||
232 | .veri-btn-default { | ||
233 | color: #aaaaaa; | ||
234 | } | ||
235 | } | ||
236 | |||
237 | } | ||
238 | |||
239 | .validator { | ||
240 | color: $cOrange; | ||
241 | margin-top: 0.5rem; | ||
242 | position: absolute; | ||
243 | right: .5rem; | ||
244 | display: flex; | ||
245 | align-items: center; | ||
246 | |||
247 | img { | ||
248 | display: inline-block; | ||
249 | margin-right: 0.4rem; | ||
250 | } | ||
251 | } | ||
252 | } | ||
253 | } | ||
254 | |||
255 | @media (max-width: 950px) { | ||
256 | .box { | ||
257 | width: 96%; | ||
258 | } | ||
259 | |||
260 | .login { | ||
261 | padding: 2rem 1rem 3.5rem; | ||
262 | } | ||
263 | } | ||
264 | |||
265 | .disable { | ||
266 | background-color: #dcdddd !important; | ||
267 | // color: $cFontGray; | ||
268 | color: #4c4948; | ||
269 | } |
src/pages/password-find/password-find.vue
0 → 100644
1 | |||
2 | <template> | ||
3 | <div class="content"> | ||
4 | <modal-comp :visible="modalVisiable" :show-confirm="false" :icon="modalIcon" :content="modalContent" :confirm="modalCallback" :overlay="modalCallback"></modal-comp> | ||
5 | <div class="ebg"> | ||
6 | <img src="@/assets/images/password-reset/password-reset-bg.png"> | ||
7 | </div> | ||
8 | <div class="top-space"></div> | ||
9 | <div class="box"> | ||
10 | |||
11 | <!-- 输入用户信息 --> | ||
12 | <div v-if="type == 1" class="login"> | ||
13 | <div class="login-tit">{{$t('passwordReset.type1.title')}}</div> | ||
14 | <div class="login-tit-space-1"></div> | ||
15 | <div class="gird-g form"> | ||
16 | <div class="pure-u-1 form-item"> | ||
17 | <div class="label"> | ||
18 | <img src="@/assets/images/register/icon-register-phone.png"> {{$t('passwordReset.type1.t1')}} | ||
19 | </div> | ||
20 | <div class="ipt-wrap"> | ||
21 | <input :placeholder="$t('passwordReset.type1.t1Placeholder')" class="ipt" type="text" v-model="step1.userId"> | ||
22 | </div> | ||
23 | <div class="validator" v-if="step1.error.length > 0 "> | ||
24 | <img src="@/assets/images/common/icon-notice.png" alt=""> {{step1.error}} | ||
25 | </div> | ||
26 | </div> | ||
27 | </div> | ||
28 | <div @click="locateUserInfo()" class="login-submit pointer">{{$t('passwordReset.type1.submit')}}</div> | ||
29 | </div> | ||
30 | |||
31 | |||
32 | <!-- 核对信息 --> | ||
33 | <div v-if="type == 2" class="login"> | ||
34 | <div class="login-tit">{{$t('passwordReset.type3.title')}}</div> | ||
35 | <div class="login-tit-space-1"></div> | ||
36 | <div class="gird-g form"> | ||
37 | <div class="pure-u-1 form-item"> | ||
38 | <div class="label"> | ||
39 | <img src="@/assets/images/register/icon-register-phone.png"> {{$t('passwordReset.type3.t1')}} | ||
40 | </div> | ||
41 | <div class="ipt-wrap"> | ||
42 | <input class="ipt disable" type="text" v-model="step2.idNo"> | ||
43 | </div> | ||
44 | </div> | ||
45 | </div> | ||
46 | <div @click="sureIdNo()" class="login-submit pointer">{{$t('passwordReset.type3.submit')}}</div> | ||
47 | </div> | ||
48 | |||
49 | <!-- 找回密码 --> | ||
50 | <div v-if="type == 3" class="login"> | ||
51 | <div class="login-tit">{{$t('passwordReset.type2.title')}}</div> | ||
52 | <div class="login-tit-space-1"></div> | ||
53 | <div class="gird-g form"> | ||
54 | <div class="pure-u-1 form-item"> | ||
55 | <div class="label"> | ||
56 | <img src="@/assets/images/register/icon-register-phone.png"> {{$t('passwordReset.type2.t1Placeholder')}} | ||
57 | </div> | ||
58 | <div class="ipt-wrap"> | ||
59 | <div class="ipt ipt2"> | ||
60 | <input :placeholder="$t('passwordReset.type2.t1Placeholder')" type="text" v-model="step3.otp"> | ||
61 | <div v-if="times.remain == 0" class="veri-btn pointer" @click="sendOtp" >{{$t('register.verifyCodeGet')}}</div> | ||
62 | <div v-else class="veri-btn-default">{{times.tip}}</div> | ||
63 | </div> | ||
64 | </div> | ||
65 | <div class="validator" v-if="step3.error.length > 0 "> | ||
66 | <img src="@/assets/images/common/icon-notice.png" alt=""> {{step3.error}} | ||
67 | </div> | ||
68 | </div> | ||
69 | </div> | ||
70 | <div @click="checkOtp()" class="login-submit pointer">{{$t('passwordReset.type2.submit')}}</div> | ||
71 | </div> | ||
72 | |||
73 | <!-- 重置密码 --> | ||
74 | <div v-if="type == 4" class="login"> | ||
75 | <div class="login-tit">{{$t('passwordReset.type4.title')}}</div> | ||
76 | <div class="login-tit-space-4"></div> | ||
77 | <div class="gird-g form"> | ||
78 | <div class="pure-u-1 form-item"> | ||
79 | <div class="label"> | ||
80 | <img src="@/assets/images/register/icon-register-lock.png"> {{$t('passwordReset.type4.t1')}} | ||
81 | </div> | ||
82 | <div class="ipt-wrap"> | ||
83 | <input :placeholder="$t('passwordReset.type4.t1Placeholder')" class="ipt" type="password" v-model="step4.pwd"> | ||
84 | </div> | ||
85 | <div class="validator" v-if="step4.error1.length > 0 "> | ||
86 | <img src="@/assets/images/common/icon-notice.png" alt=""> {{step4.error1}} | ||
87 | </div> | ||
88 | </div> | ||
89 | <div class="pure-u-1 form-item"> | ||
90 | <div class="label"> | ||
91 | <img src="@/assets/images/register/icon-register-lock.png"> {{$t('passwordReset.type4.t2')}} | ||
92 | </div> | ||
93 | <div class="ipt-wrap"> | ||
94 | <input :placeholder="$t('passwordReset.type4.t2Placeholder')" class="ipt" type="password" v-model="step4.pwdRepeat"> | ||
95 | </div> | ||
96 | <div class="validator" v-if="step4.error2.length > 0 "> | ||
97 | <img src="@/assets/images/common/icon-notice.png" alt=""> {{step4.error2}} | ||
98 | </div> | ||
99 | </div> | ||
100 | </div> | ||
101 | <div @click="resetPwd()" class="login-submit pointer">{{$t('passwordReset.type4.submit')}}</div> | ||
102 | </div> | ||
103 | </div> | ||
104 | </div> | ||
105 | </template> | ||
106 | |||
107 | <script src="./password-find.js"></script> | ||
108 | <style lang="scss" scoped> | ||
109 | @import "./password-find.scss"; | ||
110 | </style> |
1 | |||
2 | import { mapGetters, mapActions, mapState } from "vuex"; | ||
3 | |||
1 | import api from '@/api/api' | 4 | import api from '@/api/api' |
2 | import { | 5 | import { |
3 | httpGet, | 6 | httpGet, |
4 | httpPost | 7 | httpPost |
5 | } from '@/api/fetch-api.js' | 8 | } from '@/api/fetch-api.js' |
6 | 9 | ||
10 | import modalComp from '@/components/modal-comp/modal-comp.vue'; | ||
11 | import { passwordEncrypt } from '@/utils/encrypt.js'; | ||
12 | |||
7 | export default { | 13 | export default { |
8 | data() { | 14 | data() { |
9 | return { | 15 | return { |
10 | key: 'value', | 16 | key: 'value', |
11 | type: 4, // 1:输入用户信息 2:找回密码 3:核对信息 4.重置密码 | 17 | type: 4, // 1:输入用户信息 2:找回密码 3:核对信息 4.重置密码 |
12 | values: { | 18 | values: { |
13 | // 返回的token,串连整个流程,后台安全校验使用 | 19 | cid: "", |
14 | vcodeuuid: "", | 20 | oldPwd: "", |
15 | token: "", | 21 | pwd: "", |
16 | deviceId: "", | 22 | pwdRepeat: "" |
17 | imageBase64: "", | 23 | }, |
18 | password: "", | 24 | step: { |
19 | passwordRepeat: "" | 25 | error0: "", |
26 | error1: "", | ||
27 | error2: "", | ||
28 | }, | ||
29 | times: { | ||
30 | interval: 0, // 索引 | ||
31 | remain: 0, // 剩余时间 | ||
32 | tip: "" // 显示的文字 | ||
20 | }, | 33 | }, |
34 | modalVisiable: false, | ||
35 | targetPath: "", | ||
36 | modalIcon: "succ", | ||
37 | modalContent: "" | ||
21 | } | 38 | } |
22 | }, | 39 | }, |
23 | components: {}, | 40 | methods: { |
24 | computed: { | 41 | initData() { }, |
25 | locale() { | ||
26 | return this.$i18n.locale || 'tc'; | ||
27 | }, | ||
28 | i18n() { | 42 | i18n() { |
29 | return this.$i18n.messages && this.$i18n.locale ? this.$i18n.messages[this.$i18n.locale] : {}; | 43 | let i18n = this.$i18n.messages[this.$i18n.locale] || {}; |
44 | return i18n; | ||
45 | }, | ||
46 | showModal(content, icon) { | ||
47 | icon = !icon || typeof icon === "undefined" ? "succ" : "succ"; | ||
48 | this.modalIcon = icon; | ||
49 | this.modalContent = content; | ||
50 | this.modalVisiable = true; | ||
51 | }, | ||
52 | resetPwd() { | ||
53 | if (!this.values.oldPwd) { | ||
54 | this.step.error0 = this.i18n().passwordReset.oldPwdPlaceholde; | ||
55 | return; | ||
56 | } | ||
57 | let c1 = this.checkPassword(this.values.pwd); | ||
58 | if (c1) { | ||
59 | this.$set(this.step, 'error1', c1); | ||
60 | return; | ||
61 | } | ||
62 | if (this.values.pwdRepeat != this.values.pwd) { | ||
63 | this.step.error2 = this.i18n().passwordCheck.error3; | ||
64 | return; | ||
65 | } | ||
66 | let newPwd = passwordEncrypt(this.values.pwd); | ||
67 | let oldPwd = passwordEncrypt(this.values.oldPwd); | ||
68 | |||
69 | httpPost({ | ||
70 | url: api.changePassword, | ||
71 | data: { | ||
72 | oldPwd: oldPwd, | ||
73 | newPwd: newPwd | ||
74 | }, | ||
75 | sid: true | ||
76 | }).then(response => { | ||
77 | this.targetPath = ""; | ||
78 | let message = this.i18n().passwordCheck.success; | ||
79 | switch (response.resultCode) { | ||
80 | case "0": | ||
81 | this.targetPath = ""; | ||
82 | this.showModal(message, "succ"); | ||
83 | break | ||
84 | case "COMMON_ERROR_E0": | ||
85 | message = this.i18n().session.sidExpire; | ||
86 | this.targetPath = "/login?callback=/password/reset"; | ||
87 | this.showModal(message, "info"); | ||
88 | break; | ||
89 | default: | ||
90 | this.step.error0 = this.i18n().passwordCheck.error5; | ||
91 | break; | ||
92 | } | ||
93 | |||
94 | }).catch(err => { | ||
95 | let message = this.i18n().session.sidExpire; | ||
96 | this.targetPath = "/login?callback=/password/reset"; | ||
97 | this.showModal(message, "info"); | ||
98 | }); | ||
99 | }, | ||
100 | |||
101 | checkPassword(password) { | ||
102 | if (password.length < 8) { | ||
103 | return this.i18n().passwordCheck.error1; | ||
104 | } | ||
105 | // 匹配字母 | ||
106 | let m1 = /([a-z])+/.test(password); | ||
107 | let m2 = /([A-Z])+/.test(password); | ||
108 | // 匹配数字 | ||
109 | let m3 = /([0-9])+/.test(password); | ||
110 | // 匹配特殊字符 | ||
111 | let m4 = /[^a-zA-Z0-9]+/.test(password); | ||
112 | if ((m1 | m2) & m3 & m4) { | ||
113 | return ""; | ||
114 | } else { | ||
115 | return this.i18n().passwordCheck.error2 | ||
116 | } | ||
117 | }, | ||
118 | modalCallback() { | ||
119 | this.modalVisiable = false; | ||
120 | if (this.targetPath) { | ||
121 | this.$router.push({ | ||
122 | "path": this.targetPath | ||
123 | }); | ||
124 | } | ||
30 | } | 125 | } |
31 | }, | 126 | }, |
32 | methods: { | 127 | watch: { |
33 | initData() {} | 128 | 'values.oldPwd': function () { |
129 | this.$set(this.step, 'error0', ''); | ||
130 | }, | ||
131 | 'values.pwd': function () { | ||
132 | this.$set(this.step, 'error1', this.checkPassword(this.values.pwd)); | ||
133 | }, | ||
134 | 'values.pwdRepeat': function () { | ||
135 | if (this.values.pwdRepeat != this.values.pwd) { | ||
136 | this.$set(this.step, 'error2', this.i18n().passwordCheck.error3); | ||
137 | } else { | ||
138 | this.$set(this.step, 'error2', ''); | ||
139 | } | ||
140 | }, | ||
34 | }, | 141 | }, |
35 | mounted() {}, | 142 | mounted() { }, |
36 | created() {} | 143 | created() { }, |
144 | components: { | ||
145 | modalComp | ||
146 | } | ||
37 | } | 147 | } | ... | ... |
... | @@ -37,7 +37,7 @@ | ... | @@ -37,7 +37,7 @@ |
37 | 37 | ||
38 | margin: auto; | 38 | margin: auto; |
39 | max-width: 40.25rem; | 39 | max-width: 40.25rem; |
40 | height: 31rem; | 40 | height: 41rem; |
41 | 41 | ||
42 | border-radius: .75rem; | 42 | border-radius: .75rem; |
43 | box-shadow: 0 0 1.5rem 0 rgba(255, 87, 0, 0.15); | 43 | box-shadow: 0 0 1.5rem 0 rgba(255, 87, 0, 0.15); | ... | ... |
1 | 1 | ||
2 | <template> | 2 | <template> |
3 | <div class="content"> | 3 | <div class="content"> |
4 | <modal-comp :visible="modalVisiable" :show-confirm="false" :icon="modalIcon" :content="modalContent" :confirm="modalCallback" :overlay="modalCallback"></modal-comp> | ||
4 | <div class="ebg"> | 5 | <div class="ebg"> |
5 | <img src="@/assets/images/password-reset/password-reset-bg.png"> | 6 | <img src="@/assets/images/password-reset/password-reset-bg.png"> |
6 | </div> | 7 | </div> |
7 | <div class="top-space"></div> | 8 | <div class="top-space"></div> |
8 | <div class="box"> | 9 | <div class="box"> |
9 | 10 | <div class="login"> | |
10 | <!-- 输入用户信息 --> | 11 | <div class="login-tit">{{$t('passwordReset.type4.title')}}</div> |
11 | <div v-if="type == 1" class="login"> | 12 | <div class="login-tit-space-4"></div> |
12 | <div class="login-tit">{{$t('passwordReset.type1.title')}}</div> | ||
13 | <div class="login-tit-space-1"></div> | ||
14 | <div class="gird-g form"> | ||
15 | <div class="pure-u-1 form-item"> | ||
16 | <div class="label"> | ||
17 | <img src="@/assets/images/register/icon-register-phone.png"> {{$t('passwordReset.type1.t1')}} | ||
18 | </div> | ||
19 | <div class="ipt-wrap"> | ||
20 | <input :placeholder="$t('passwordReset.type1.t1Placeholder')" class="ipt" type="password" v-model="values.password"> | ||
21 | </div> | ||
22 | <div class="validator"> | ||
23 | <img src="@/assets/images/common/icon-notice.png" alt=""> 验证提示 | ||
24 | </div> | ||
25 | </div> | ||
26 | </div> | ||
27 | <div @click="onRegisterHandler()" class="login-submit pointer">{{$t('passwordReset.type1.submit')}}</div> | ||
28 | </div> | ||
29 | |||
30 | <!-- 找回密码 --> | ||
31 | <div v-if="type == 2" class="login"> | ||
32 | <div class="login-tit">{{$t('passwordReset.type2.title')}}</div> | ||
33 | <div class="login-tit-space-1"></div> | ||
34 | <div class="gird-g form"> | 13 | <div class="gird-g form"> |
35 | <div class="pure-u-1 form-item"> | 14 | <div class="pure-u-1 form-item"> |
36 | <div class="label"> | 15 | <div class="label"> |
37 | <img src="@/assets/images/register/icon-register-phone.png"> {{$t('passwordReset.type2.t1Placeholder')}} | 16 | <img src="@/assets/images/register/icon-register-lock.png"> {{$t('passwordReset.oldPwd')}} |
38 | </div> | 17 | </div> |
39 | <div class="ipt-wrap"> | 18 | <div class="ipt-wrap"> |
40 | <input :placeholder="$t('passwordReset.type2.t1Placeholder')" class="ipt" type="password" v-model="values.password"> | 19 | <input :placeholder="$t('passwordReset.oldPwdPlaceholde')" class="ipt" type="password" v-model="values.oldPwd"> |
41 | </div> | ||
42 | <div class="validator"> | ||
43 | <img src="@/assets/images/common/icon-notice.png" alt=""> 验证提示 | ||
44 | </div> | 20 | </div> |
45 | </div> | 21 | <div class="validator" v-if="step.error0.length > 0 "> |
46 | </div> | 22 | <img src="@/assets/images/common/icon-notice.png" alt=""> {{step.error0}} |
47 | <div @click="onRegisterHandler()" class="login-submit pointer">{{$t('passwordReset.type2.submit')}}</div> | ||
48 | </div> | ||
49 | |||
50 | <!-- 核对信息 --> | ||
51 | <div v-if="type == 3" class="login"> | ||
52 | <div class="login-tit">{{$t('passwordReset.type3.title')}}</div> | ||
53 | <div class="login-tit-space-1"></div> | ||
54 | <div class="gird-g form"> | ||
55 | <div class="pure-u-1 form-item"> | ||
56 | <div class="label"> | ||
57 | <img src="@/assets/images/register/icon-register-phone.png"> {{$t('passwordReset.type3.t1')}} | ||
58 | </div> | ||
59 | <div class="ipt-wrap"> | ||
60 | <input class="ipt disable" type="password" v-model="values.password"> | ||
61 | </div> | 23 | </div> |
62 | </div> | 24 | </div> |
63 | </div> | ||
64 | <div @click="onRegisterHandler()" class="login-submit pointer">{{$t('passwordReset.type3.submit')}}</div> | ||
65 | </div> | ||
66 | |||
67 | <!-- 重置密码 --> | ||
68 | <div v-if="type == 4" class="login"> | ||
69 | <div class="login-tit">{{$t('passwordReset.type4.title')}}</div> | ||
70 | <div class="login-tit-space-4"></div> | ||
71 | <div class="gird-g form"> | ||
72 | <div class="pure-u-1 form-item"> | 25 | <div class="pure-u-1 form-item"> |
73 | <div class="label"> | 26 | <div class="label"> |
74 | <img src="@/assets/images/register/icon-register-lock.png"> {{$t('passwordReset.type4.t1')}} | 27 | <img src="@/assets/images/register/icon-register-lock.png"> {{$t('passwordReset.type4.t1')}} |
75 | </div> | 28 | </div> |
76 | <div class="ipt-wrap"> | 29 | <div class="ipt-wrap"> |
77 | <input :placeholder="$t('passwordReset.type4.t1Placeholder')" class="ipt" type="password" v-model="values.password"> | 30 | <input :placeholder="$t('passwordReset.type4.t1Placeholder')" class="ipt" type="password" v-model="values.pwd"> |
78 | </div> | 31 | </div> |
79 | <div class="validator"> | 32 | <div class="validator" v-if="step.error1.length > 0 "> |
80 | <img src="@/assets/images/common/icon-notice.png" alt=""> 验证提示 | 33 | <img src="@/assets/images/common/icon-notice.png" alt=""> {{step.error1}} |
81 | </div> | 34 | </div> |
82 | </div> | 35 | </div> |
83 | <div class="pure-u-1 form-item"> | 36 | <div class="pure-u-1 form-item"> |
... | @@ -85,14 +38,14 @@ | ... | @@ -85,14 +38,14 @@ |
85 | <img src="@/assets/images/register/icon-register-lock.png"> {{$t('passwordReset.type4.t2')}} | 38 | <img src="@/assets/images/register/icon-register-lock.png"> {{$t('passwordReset.type4.t2')}} |
86 | </div> | 39 | </div> |
87 | <div class="ipt-wrap"> | 40 | <div class="ipt-wrap"> |
88 | <input :placeholder="$t('passwordReset.type4.t2Placeholder')" class="ipt" type="password" v-model="values.passwordRepeat"> | 41 | <input :placeholder="$t('passwordReset.type4.t2Placeholder')" class="ipt" type="password" v-model="values.pwdRepeat"> |
89 | </div> | 42 | </div> |
90 | <div class="validator"> | 43 | <div class="validator" v-if="step.error2.length > 0 "> |
91 | <img src="@/assets/images/common/icon-notice.png" alt=""> 验证提示 | 44 | <img src="@/assets/images/common/icon-notice.png" alt=""> {{step.error2}} |
92 | </div> | 45 | </div> |
93 | </div> | 46 | </div> |
94 | </div> | 47 | </div> |
95 | <div @click="onRegisterHandler()" class="login-submit pointer">{{$t('passwordReset.type4.submit')}}</div> | 48 | <div @click="resetPwd()" class="login-submit pointer">{{$t('passwordReset.type4.submit')}}</div> |
96 | </div> | 49 | </div> |
97 | </div> | 50 | </div> |
98 | </div> | 51 | </div> | ... | ... |
... | @@ -4,14 +4,13 @@ import { | ... | @@ -4,14 +4,13 @@ import { |
4 | httpPost | 4 | httpPost |
5 | } from '@/api/fetch-api.js' | 5 | } from '@/api/fetch-api.js' |
6 | 6 | ||
7 | let PK = 'B5FE03847F02046C47292AF0FF2DE88977241483DD40C123046EB39CBE4C48167B120096CFF12CD16559322884A3C56FA92B07B89AB51FC8C91A75127622151DDD730DFF1F993D5A290CEAC0BBA7FC88285D8994ACBAFF50101EDE9A0925AD5DFFAFE96D53C370E9C5B37DF2F871F81C4D7CA6B7EC37FF459C07975AD9A74A95'; | 7 | import { passwordEncrypt } from '@/utils/encrypt.js'; |
8 | let E = '10001'; | ||
9 | 8 | ||
10 | export default { | 9 | export default { |
11 | data() { | 10 | data() { |
12 | return { | 11 | return { |
13 | key: 'value', | 12 | key: 'value', |
14 | type: 2, // 1:手机验证 2:输入密码 | 13 | type: 1, // 1:手机验证 2:输入密码 |
15 | mobileNoType: "hk",// 选择的手机好类型 | 14 | mobileNoType: "hk",// 选择的手机好类型 |
16 | mobileTip: {}, | 15 | mobileTip: {}, |
17 | mobileOptions: [], | 16 | mobileOptions: [], |
... | @@ -39,8 +38,6 @@ export default { | ... | @@ -39,8 +38,6 @@ export default { |
39 | remain: 0, // 剩余时间 | 38 | remain: 0, // 剩余时间 |
40 | tip: "" // 显示的文字 | 39 | tip: "" // 显示的文字 |
41 | }, | 40 | }, |
42 | PK: process.env.VUE_APP_RSA_PUBLIC_KEY || PK, | ||
43 | E: process.env.VUE_APP_RSA_KEY_INDEX || E, | ||
44 | } | 41 | } |
45 | }, | 42 | }, |
46 | components: {}, | 43 | components: {}, |
... | @@ -271,7 +268,7 @@ export default { | ... | @@ -271,7 +268,7 @@ export default { |
271 | let data = { | 268 | let data = { |
272 | token: this.values.token, | 269 | token: this.values.token, |
273 | mobileNo: this.registerForm.mobileNo, | 270 | mobileNo: this.registerForm.mobileNo, |
274 | loginPwd: this._passwordEncrypt(this.values.password) | 271 | loginPwd: passwordEncrypt(this.values.password) |
275 | }; | 272 | }; |
276 | httpPost({ | 273 | httpPost({ |
277 | url: api.stdRegister, | 274 | url: api.stdRegister, |
... | @@ -378,13 +375,6 @@ export default { | ... | @@ -378,13 +375,6 @@ export default { |
378 | onLoginTypeHandler(val) { | 375 | onLoginTypeHandler(val) { |
379 | 376 | ||
380 | }, | 377 | }, |
381 | _passwordEncrypt(rawPwd) { | ||
382 | let rsa = new RSAKey(); | ||
383 | rsa.setPublic(this.PK, this.E); | ||
384 | let res = rsa.encrypt(rawPwd); | ||
385 | if (res == null) return rawPwd; | ||
386 | return res; | ||
387 | }, | ||
388 | initData() { | 378 | initData() { |
389 | let i18n = this.$i18n.messages[this.$i18n.locale] || {}; | 379 | let i18n = this.$i18n.messages[this.$i18n.locale] || {}; |
390 | let mobileOptions = JSON.parse(JSON.stringify(i18n.register.mobileOptions)); | 380 | let mobileOptions = JSON.parse(JSON.stringify(i18n.register.mobileOptions)); | ... | ... |
... | @@ -39,6 +39,14 @@ const routes = [ | ... | @@ -39,6 +39,14 @@ const routes = [ |
39 | } | 39 | } |
40 | }, | 40 | }, |
41 | { | 41 | { |
42 | path: '/password/find', | ||
43 | name: 'passwordFind', | ||
44 | component: () => import('./pages/password-find/password-find.vue'), | ||
45 | meta: { | ||
46 | title: '' | ||
47 | } | ||
48 | }, | ||
49 | { | ||
42 | path: '/password/reset', | 50 | path: '/password/reset', |
43 | name: 'passwordReset', | 51 | name: 'passwordReset', |
44 | component: () => import('./pages/password-reset/password-reset.vue'), | 52 | component: () => import('./pages/password-reset/password-reset.vue'), | ... | ... |
src/utils/encrypt.js
0 → 100644
1 | |||
2 | |||
3 | |||
4 | let PK = 'B5FE03847F02046C47292AF0FF2DE88977241483DD40C123046EB39CBE4C48167B120096CFF12CD16559322884A3C56FA92B07B89AB51FC8C91A75127622151DDD730DFF1F993D5A290CEAC0BBA7FC88285D8994ACBAFF50101EDE9A0925AD5DFFAFE96D53C370E9C5B37DF2F871F81C4D7CA6B7EC37FF459C07975AD9A74A95'; | ||
5 | let E = '10001'; | ||
6 | PK = process.env.VUE_APP_RSA_PUBLIC_KEY || PK; | ||
7 | E = process.env.VUE_APP_RSA_KEY_INDEX || E; | ||
8 | |||
9 | function passwordEncrypt(rawPwd) { | ||
10 | let rsa = new RSAKey(); | ||
11 | // console.log("rsa === ", rsa); | ||
12 | rsa.setPublic(PK, E); | ||
13 | let res = rsa.encrypt(rawPwd); | ||
14 | // console.log("res === ", res); | ||
15 | if (res == null) return rawPwd; | ||
16 | return res; | ||
17 | } | ||
18 | |||
19 | module.exports = { | ||
20 | passwordEncrypt: passwordEncrypt | ||
21 | } | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
-
Please register or sign in to post a comment