system-clients 3.3.3-v3-test → 3.3.3-v3-t2
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.
- package/package.json +105 -105
- package/src/components/server/Login.vue +2 -4
- package/src/components/server/ModifyPw.vue +152 -81
- package/src/filiale/baole/Login.vue +2 -4
- package/src/filiale/chengtou/Login.vue +10 -4
- package/src/filiale/dongguan/Login.vue +2 -4
- package/src/filiale/furuike/Login.vue +2 -4
- package/src/filiale/konggang/Login.vue +10 -4
- package/src/filiale/qianneng/Login.vue +10 -4
- package/src/filiale/rizhao/Login.vue +2 -3
- package/src/filiale/shiquan/Login.vue +10 -4
- package/src/filiale/tianyi/Login.vue +10 -4
- package/src/filiale/tongchuan/Login.vue +10 -4
- package/src/filiale/tongchuan/Main.vue +1 -1
- package/src/filiale/wenxi/Login.vue +10 -4
- package/src/filiale/yuchuan/Login.vue +2 -4
- package/src/plugins/validation.js +12 -8
- package/src/util/password-validation.js +185 -0
package/package.json
CHANGED
|
@@ -1,105 +1,105 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "system-clients",
|
|
3
|
-
"version": "3.3.3-v3-
|
|
4
|
-
"description": "系统基础框架",
|
|
5
|
-
"main": "src/index.js",
|
|
6
|
-
"directories": {
|
|
7
|
-
"doc": "doc",
|
|
8
|
-
"example": "examples",
|
|
9
|
-
"test": "test"
|
|
10
|
-
},
|
|
11
|
-
"scripts": {
|
|
12
|
-
"example": "node build/example-server.js",
|
|
13
|
-
"dev": "node build/dev-server.js",
|
|
14
|
-
"lint": "eslint src/**.js test/e2e/**.js test/unit/specs/** build/**.js",
|
|
15
|
-
"build": "rimraf dist && mkdirp dist && ncp static dist/static && cross-env NODE_ENV=production webpack --progress --hide-modules --config build/webpack.prod.conf.js",
|
|
16
|
-
"e2e": "node test/e2e/runner.js",
|
|
17
|
-
"unit": "karma start test/unit/karma.conf.js",
|
|
18
|
-
"makeall": "rimraf dist && mkdirp dist && ncp static dist/static && cross-env NODE_OPTIONS=--max_old_space_size=4096 NODE_ENV=production webpack --progress --hide-modules --config build/webpack.example.conf.js",
|
|
19
|
-
"release": "npm set registry http://registry.npmjs.org && npm publish && npm set registry http://registry.npm.taobao.org"
|
|
20
|
-
},
|
|
21
|
-
"dependencies": {
|
|
22
|
-
"base64-js": "^1.3.0",
|
|
23
|
-
"js-base64": "^2.4.9",
|
|
24
|
-
"less": "^2.7.1",
|
|
25
|
-
"less-loader": "^2.2.3",
|
|
26
|
-
"nyc": "^15.1.0",
|
|
27
|
-
"src": "^1.1.2",
|
|
28
|
-
"vue": "^1.0.17"
|
|
29
|
-
},
|
|
30
|
-
"devDependencies": {
|
|
31
|
-
"babel-core": "^6.0.0",
|
|
32
|
-
"babel-loader": "^6.0.0",
|
|
33
|
-
"babel-plugin-transform-runtime": "^6.0.0",
|
|
34
|
-
"babel-preset-es2015": "^6.0.0",
|
|
35
|
-
"babel-preset-stage-2": "^6.0.0",
|
|
36
|
-
"chai": "^3.5.0",
|
|
37
|
-
"connect-history-api-fallback": "^1.1.0",
|
|
38
|
-
"cross-env": "^1.0.7",
|
|
39
|
-
"cross-spawn": "^2.1.5",
|
|
40
|
-
"css-loader": "^0.23.0",
|
|
41
|
-
"eslint": "^2.0.0",
|
|
42
|
-
"eslint-config-standard": "^5.1.0",
|
|
43
|
-
"eslint-friendly-formatter": "^1.2.2",
|
|
44
|
-
"eslint-loader": "^1.3.0",
|
|
45
|
-
"eslint-plugin-html": "^1.3.0",
|
|
46
|
-
"eslint-plugin-promise": "^1.0.8",
|
|
47
|
-
"eslint-plugin-standard": "^1.3.2",
|
|
48
|
-
"eslint-plugin-vue": "^0.1.1",
|
|
49
|
-
"eventsource-polyfill": "^0.9.6",
|
|
50
|
-
"express": "^4.13.3",
|
|
51
|
-
"extract-text-webpack-plugin": "^1.0.1",
|
|
52
|
-
"file-loader": "^0.8.4",
|
|
53
|
-
"function-bind": "^1.0.2",
|
|
54
|
-
"html-webpack-plugin": "^2.8.1",
|
|
55
|
-
"http-proxy-middleware": "^0.11.0",
|
|
56
|
-
"inject-loader": "^2.0.1",
|
|
57
|
-
"isparta-loader": "^2.0.0",
|
|
58
|
-
"jasmine-core": "^2.4.1",
|
|
59
|
-
"jquery": "^3.3.1",
|
|
60
|
-
"jsencrypt": "^3.0.0-rc.1",
|
|
61
|
-
"json-loader": "^0.5.4",
|
|
62
|
-
"karma": "^1.4.1",
|
|
63
|
-
"karma-chrome-launcher": "^2.2.0",
|
|
64
|
-
"karma-coverage": "^1.1.1",
|
|
65
|
-
"karma-mocha": "^1.3.0",
|
|
66
|
-
"karma-sinon-chai": "^1.3.1",
|
|
67
|
-
"karma-sourcemap-loader": "^0.3.7",
|
|
68
|
-
"karma-spec-reporter": "0.0.31",
|
|
69
|
-
"karma-webpack": "^2.0.2",
|
|
70
|
-
"manage-client": "^1.4.20",
|
|
71
|
-
"mkdirp": "^0.5.1",
|
|
72
|
-
"mocha": "^3.2.0",
|
|
73
|
-
"ncp": "^2.0.0",
|
|
74
|
-
"nightwatch": "^0.8.18",
|
|
75
|
-
"rimraf": "^2.5.0",
|
|
76
|
-
"selenium-server": "2.52.0",
|
|
77
|
-
"sinon": "^2.1.0",
|
|
78
|
-
"sinon-chai": "^2.8.0",
|
|
79
|
-
"style": "0.0.3",
|
|
80
|
-
"style-loader": "^0.20.3",
|
|
81
|
-
"url-loader": "^0.5.7",
|
|
82
|
-
"vue-client": "1.24.107-test",
|
|
83
|
-
"vue-hot-reload-api": "^1.2.0",
|
|
84
|
-
"vue-html-loader": "^1.0.0",
|
|
85
|
-
"vue-loader": "^8.2.1",
|
|
86
|
-
"vue-resource": "^1.5.0",
|
|
87
|
-
"vue-router": "^0.7.13",
|
|
88
|
-
"vue-strap": "^1.0.9",
|
|
89
|
-
"vue-style-loader": "^1.0.0",
|
|
90
|
-
"vue-validator": "2.1.7",
|
|
91
|
-
"webpack": "^1.12.2",
|
|
92
|
-
"webpack-dev-middleware": "^1.4.0",
|
|
93
|
-
"webpack-hot-middleware": "^2.6.0",
|
|
94
|
-
"webpack-merge": "^0.8.3"
|
|
95
|
-
},
|
|
96
|
-
"repository": {
|
|
97
|
-
"type": "git",
|
|
98
|
-
"url": "https://gitee.com/aotu/System"
|
|
99
|
-
},
|
|
100
|
-
"keywords": [
|
|
101
|
-
"system_clients"
|
|
102
|
-
],
|
|
103
|
-
"author": "杨文宇",
|
|
104
|
-
"license": "ISC"
|
|
105
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "system-clients",
|
|
3
|
+
"version": "3.3.3-v3-t2",
|
|
4
|
+
"description": "系统基础框架",
|
|
5
|
+
"main": "src/index.js",
|
|
6
|
+
"directories": {
|
|
7
|
+
"doc": "doc",
|
|
8
|
+
"example": "examples",
|
|
9
|
+
"test": "test"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"example": "node build/example-server.js",
|
|
13
|
+
"dev": "node build/dev-server.js",
|
|
14
|
+
"lint": "eslint src/**.js test/e2e/**.js test/unit/specs/** build/**.js",
|
|
15
|
+
"build": "rimraf dist && mkdirp dist && ncp static dist/static && cross-env NODE_ENV=production webpack --progress --hide-modules --config build/webpack.prod.conf.js",
|
|
16
|
+
"e2e": "node test/e2e/runner.js",
|
|
17
|
+
"unit": "karma start test/unit/karma.conf.js",
|
|
18
|
+
"makeall": "rimraf dist && mkdirp dist && ncp static dist/static && cross-env NODE_OPTIONS=--max_old_space_size=4096 NODE_ENV=production webpack --progress --hide-modules --config build/webpack.example.conf.js",
|
|
19
|
+
"release": "npm set registry http://registry.npmjs.org && npm publish && npm set registry http://registry.npm.taobao.org"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"base64-js": "^1.3.0",
|
|
23
|
+
"js-base64": "^2.4.9",
|
|
24
|
+
"less": "^2.7.1",
|
|
25
|
+
"less-loader": "^2.2.3",
|
|
26
|
+
"nyc": "^15.1.0",
|
|
27
|
+
"src": "^1.1.2",
|
|
28
|
+
"vue": "^1.0.17"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"babel-core": "^6.0.0",
|
|
32
|
+
"babel-loader": "^6.0.0",
|
|
33
|
+
"babel-plugin-transform-runtime": "^6.0.0",
|
|
34
|
+
"babel-preset-es2015": "^6.0.0",
|
|
35
|
+
"babel-preset-stage-2": "^6.0.0",
|
|
36
|
+
"chai": "^3.5.0",
|
|
37
|
+
"connect-history-api-fallback": "^1.1.0",
|
|
38
|
+
"cross-env": "^1.0.7",
|
|
39
|
+
"cross-spawn": "^2.1.5",
|
|
40
|
+
"css-loader": "^0.23.0",
|
|
41
|
+
"eslint": "^2.0.0",
|
|
42
|
+
"eslint-config-standard": "^5.1.0",
|
|
43
|
+
"eslint-friendly-formatter": "^1.2.2",
|
|
44
|
+
"eslint-loader": "^1.3.0",
|
|
45
|
+
"eslint-plugin-html": "^1.3.0",
|
|
46
|
+
"eslint-plugin-promise": "^1.0.8",
|
|
47
|
+
"eslint-plugin-standard": "^1.3.2",
|
|
48
|
+
"eslint-plugin-vue": "^0.1.1",
|
|
49
|
+
"eventsource-polyfill": "^0.9.6",
|
|
50
|
+
"express": "^4.13.3",
|
|
51
|
+
"extract-text-webpack-plugin": "^1.0.1",
|
|
52
|
+
"file-loader": "^0.8.4",
|
|
53
|
+
"function-bind": "^1.0.2",
|
|
54
|
+
"html-webpack-plugin": "^2.8.1",
|
|
55
|
+
"http-proxy-middleware": "^0.11.0",
|
|
56
|
+
"inject-loader": "^2.0.1",
|
|
57
|
+
"isparta-loader": "^2.0.0",
|
|
58
|
+
"jasmine-core": "^2.4.1",
|
|
59
|
+
"jquery": "^3.3.1",
|
|
60
|
+
"jsencrypt": "^3.0.0-rc.1",
|
|
61
|
+
"json-loader": "^0.5.4",
|
|
62
|
+
"karma": "^1.4.1",
|
|
63
|
+
"karma-chrome-launcher": "^2.2.0",
|
|
64
|
+
"karma-coverage": "^1.1.1",
|
|
65
|
+
"karma-mocha": "^1.3.0",
|
|
66
|
+
"karma-sinon-chai": "^1.3.1",
|
|
67
|
+
"karma-sourcemap-loader": "^0.3.7",
|
|
68
|
+
"karma-spec-reporter": "0.0.31",
|
|
69
|
+
"karma-webpack": "^2.0.2",
|
|
70
|
+
"manage-client": "^1.4.20",
|
|
71
|
+
"mkdirp": "^0.5.1",
|
|
72
|
+
"mocha": "^3.2.0",
|
|
73
|
+
"ncp": "^2.0.0",
|
|
74
|
+
"nightwatch": "^0.8.18",
|
|
75
|
+
"rimraf": "^2.5.0",
|
|
76
|
+
"selenium-server": "2.52.0",
|
|
77
|
+
"sinon": "^2.1.0",
|
|
78
|
+
"sinon-chai": "^2.8.0",
|
|
79
|
+
"style": "0.0.3",
|
|
80
|
+
"style-loader": "^0.20.3",
|
|
81
|
+
"url-loader": "^0.5.7",
|
|
82
|
+
"vue-client": "1.24.107-test",
|
|
83
|
+
"vue-hot-reload-api": "^1.2.0",
|
|
84
|
+
"vue-html-loader": "^1.0.0",
|
|
85
|
+
"vue-loader": "^8.2.1",
|
|
86
|
+
"vue-resource": "^1.5.0",
|
|
87
|
+
"vue-router": "^0.7.13",
|
|
88
|
+
"vue-strap": "^1.0.9",
|
|
89
|
+
"vue-style-loader": "^1.0.0",
|
|
90
|
+
"vue-validator": "2.1.7",
|
|
91
|
+
"webpack": "^1.12.2",
|
|
92
|
+
"webpack-dev-middleware": "^1.4.0",
|
|
93
|
+
"webpack-hot-middleware": "^2.6.0",
|
|
94
|
+
"webpack-merge": "^0.8.3"
|
|
95
|
+
},
|
|
96
|
+
"repository": {
|
|
97
|
+
"type": "git",
|
|
98
|
+
"url": "https://gitee.com/aotu/System"
|
|
99
|
+
},
|
|
100
|
+
"keywords": [
|
|
101
|
+
"system_clients"
|
|
102
|
+
],
|
|
103
|
+
"author": "杨文宇",
|
|
104
|
+
"license": "ISC"
|
|
105
|
+
}
|
|
@@ -146,7 +146,7 @@ import $ from 'jquery'
|
|
|
146
146
|
import Vue from 'vue'
|
|
147
147
|
import {HttpResetClass} from 'vue-client'
|
|
148
148
|
import {isPasswordModificationExpired} from '../Util'
|
|
149
|
-
|
|
149
|
+
import { isStrongPassword } from '../../util/password-validation'
|
|
150
150
|
let daibanJson = require('../../util/Daiban.json')
|
|
151
151
|
|
|
152
152
|
|
|
@@ -193,7 +193,7 @@ let saveGen = function *(self) {
|
|
|
193
193
|
}
|
|
194
194
|
console.log(self.$login.depPrompt)
|
|
195
195
|
// 弱口令验证(默认开启,跳转过来的不进行验证)
|
|
196
|
-
if ((!self.otherLogin) && !(
|
|
196
|
+
if ((!self.otherLogin) && !isStrongPassword(self.model.password)) {
|
|
197
197
|
self.$showMessage('登录系统: 此账户的密码过于简单,请修改密码后重新登陆!!!', ['confirm']).then((res) => {
|
|
198
198
|
self.modifyPwShow = true
|
|
199
199
|
})
|
|
@@ -368,7 +368,6 @@ export default {
|
|
|
368
368
|
if (res.data.length> 0){
|
|
369
369
|
this.OrderDaiBan += `其中 ${Object.keys(OrderDaiBan).map(key=>`${key}:${OrderDaiBan[key].length}条`).join(', ')}`
|
|
370
370
|
}
|
|
371
|
-
},
|
|
372
371
|
let data = {
|
|
373
372
|
condition: '1 = 1',
|
|
374
373
|
data: {
|
|
@@ -390,7 +389,6 @@ export default {
|
|
|
390
389
|
this.AppDaiBan += `其中 ${Object.keys(AppDaiBan).map(key=>`${key}:${AppDaiBan[key].length}条`).join(', ')}`
|
|
391
390
|
}
|
|
392
391
|
})
|
|
393
|
-
|
|
394
392
|
},
|
|
395
393
|
async getDaiBanA(){
|
|
396
394
|
// 是否全局开启待办通知
|
|
@@ -1,125 +1,196 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div>
|
|
3
3
|
<validator name="v">
|
|
4
|
-
<modal :show.sync="show" v-ref:modal
|
|
4
|
+
<modal :show.sync="show" v-ref:modal backdrop="false">
|
|
5
5
|
<header slot="modal-header" class="modal-header">
|
|
6
6
|
<button type="button" class="close" @click="rest"><span>×</span></button>
|
|
7
7
|
<h4 class="modal-title">修改密码</h4>
|
|
8
8
|
</header>
|
|
9
9
|
<article slot="modal-body" class="modal-body modifystyle auto form-horizontal">
|
|
10
|
+
<div class="password-alert">
|
|
11
|
+
{{ passwordRuleHint }}
|
|
12
|
+
</div>
|
|
10
13
|
<div class="has-feedback form-group"
|
|
11
14
|
:class="{'has-warning':$v.password.required,'has-error': $v.password.required,
|
|
12
15
|
'has-success':!$v.password.required}">
|
|
13
|
-
<label for="password" class="col-sm-
|
|
14
|
-
<div class="col-sm-
|
|
16
|
+
<label for="password" class="col-sm-3 control-label">原始密码</label>
|
|
17
|
+
<div class="col-sm-8 password-field-wrap">
|
|
15
18
|
<input type="password" v-model="deliver.password" class="form-control" id="password" v-validate:password="{ required: true}">
|
|
16
19
|
<span class="glyphicon glyphicon-ok form-control-feedback" v-if="!$v.password.required"></span>
|
|
17
|
-
<span v-if="$v.password.required">不能为空</span>
|
|
20
|
+
<span class="field-error" v-if="$v.password.required">不能为空</span>
|
|
18
21
|
</div>
|
|
19
22
|
</div>
|
|
20
23
|
<div class="has-feedback form-group"
|
|
21
|
-
:class="{'has-warning':$v.newpassword.required,'has-error':($v.newpassword.numbersAndLetter8to16 || $v.newpassword.
|
|
22
|
-
'has-success': !$v.newpassword.required && !$v.newpassword.numbersAndLetter8to16
|
|
23
|
-
<label for="newpassword" class="col-sm-
|
|
24
|
-
<div class="col-sm-
|
|
25
|
-
<input type="password" v-model="deliver.newpassword" class="form-control" id="newpassword" v-validate:newpassword='{required:true, numbersAndLetter8to16: true,
|
|
26
|
-
<span class="glyphicon glyphicon-ok form-control-feedback" v-if="!$v.newpassword.required && !$v.newpassword.
|
|
27
|
-
<span v-if="$v.newpassword.required">不能为空</span>
|
|
28
|
-
<span v-if="
|
|
29
|
-
<
|
|
24
|
+
:class="{'has-warning':$v.newpassword.required,'has-error':($v.newpassword.numbersAndLetter8to16 || $v.newpassword.chinesePassword) && !$v.newpassword.required,
|
|
25
|
+
'has-success': !$v.newpassword.required && !$v.newpassword.numbersAndLetter8to16 && !$v.newpassword.chinesePassword}">
|
|
26
|
+
<label for="newpassword" class="col-sm-3 control-label">新的密码</label>
|
|
27
|
+
<div class="col-sm-8 password-field-wrap">
|
|
28
|
+
<input type="password" v-model="deliver.newpassword" class="form-control" id="newpassword" v-validate:newpassword='{required:true, numbersAndLetter8to16: true, chinesePassword: true}'>
|
|
29
|
+
<span class="glyphicon glyphicon-ok form-control-feedback" v-if="!$v.newpassword.required && !$v.newpassword.numbersAndLetter8to16 && !$v.newpassword.chinesePassword"></span>
|
|
30
|
+
<span class="field-error" v-if="$v.newpassword.required">不能为空</span>
|
|
31
|
+
<span class="field-error" v-if="$v.newpassword.chinesePassword && !$v.newpassword.required">密码不能包含中文</span>
|
|
32
|
+
<div v-if="passwordStrength.visible" class="password-strength">
|
|
33
|
+
<span class="strength-label">密码强度</span>
|
|
34
|
+
<span class="strength-tag" :class="passwordStrength.type">{{ passwordStrength.label }}</span>
|
|
35
|
+
<span class="strength-desc">{{ passwordStrength.desc }}</span>
|
|
36
|
+
</div>
|
|
30
37
|
</div>
|
|
31
38
|
</div>
|
|
32
39
|
<div class="has-feedback form-group"
|
|
33
40
|
:class="{'has-warning':$v.affirmpassword.required,'has-error':$v.affirmpassword.equalValid && !($v.affirmpassword.required),
|
|
34
41
|
'has-success': !$v.affirmpassword.required && !($v.affirmpassword.equalValid && !($v.affirmpassword.required))}">
|
|
35
|
-
<label for="affirmpassword" class="col-sm-
|
|
36
|
-
<div class="col-sm-
|
|
42
|
+
<label for="affirmpassword" class="col-sm-3 control-label">确认密码</label>
|
|
43
|
+
<div class="col-sm-8 password-field-wrap">
|
|
37
44
|
<input type="password" v-model="deliver.affirmpassword" class="form-control" id="affirmpassword" v-validate:affirmpassword="{ required: true, equalValid: deliver.newpassword }">
|
|
38
45
|
<span class="glyphicon glyphicon-ok form-control-feedback" v-if="!$v.affirmpassword.required && !($v.affirmpassword.equalValid && !($v.affirmpassword.required))"></span>
|
|
39
|
-
<span v-if="$v.affirmpassword.required">不能为空</span>
|
|
40
|
-
<span v-if="$v.affirmpassword.equalValid && !($v.affirmpassword.required)"
|
|
46
|
+
<span class="field-error" v-if="$v.affirmpassword.required">不能为空</span>
|
|
47
|
+
<span class="field-error" v-if="$v.affirmpassword.equalValid && !($v.affirmpassword.required)">两次密码不一致</span>
|
|
41
48
|
</div>
|
|
42
49
|
</div>
|
|
43
50
|
</article>
|
|
44
51
|
|
|
45
52
|
<footer slot="modal-footer" class="modal-footer">
|
|
46
|
-
<button
|
|
47
|
-
<button
|
|
53
|
+
<button type="button" class="btn btn-success" @click='confirm' :disabled="!$v.valid">确认</button>
|
|
54
|
+
<button type="button" class="btn btn-default" @click='rest'>取消</button>
|
|
48
55
|
</footer>
|
|
49
56
|
</modal>
|
|
50
57
|
</validator>
|
|
51
58
|
</div>
|
|
52
|
-
|
|
53
|
-
|
|
54
59
|
</template>
|
|
55
60
|
<script>
|
|
56
|
-
|
|
57
|
-
|
|
61
|
+
import co from 'co'
|
|
62
|
+
import validator from '../../plugins/validation'
|
|
63
|
+
import { getPasswordStrength, PASSWORD_RULE_HINT } from '../../util/password-validation'
|
|
58
64
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
if (res.data.code === 200) {
|
|
71
|
-
self.deliver.password = ''
|
|
72
|
-
self.deliver.newpassword = ''
|
|
73
|
-
self.deliver.affirmpassword = ''
|
|
74
|
-
self.show = false
|
|
75
|
-
self.$showAlert("修改密码成功", 'success', 2000)
|
|
76
|
-
} else {
|
|
77
|
-
// 兼容旧版ldao,旧版不返回code
|
|
78
|
-
self.deliver.password = ''
|
|
79
|
-
self.deliver.newpassword = ''
|
|
80
|
-
self.deliver.affirmpassword = ''
|
|
81
|
-
self.show = false
|
|
82
|
-
self.$showAlert("修改密码成功", 'success', 2000)
|
|
83
|
-
}
|
|
65
|
+
let saveGen = function * (self) {
|
|
66
|
+
self.deliver.ename = self.functions.ename
|
|
67
|
+
let res = yield self.$resetpost('/rs/user/modifypwd', {data: self.deliver }, {resolveMsg: null,rejectMsg: null})
|
|
68
|
+
self.$login.f.password = self.deliver.newpassword
|
|
69
|
+
if (res.data) {
|
|
70
|
+
if (res.data.code === 200) {
|
|
71
|
+
self.deliver.password = ''
|
|
72
|
+
self.deliver.newpassword = ''
|
|
73
|
+
self.deliver.affirmpassword = ''
|
|
74
|
+
self.show = false
|
|
75
|
+
self.$showAlert("修改密码成功", 'success', 2000)
|
|
84
76
|
} else {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
77
|
+
self.deliver.password = ''
|
|
78
|
+
self.deliver.newpassword = ''
|
|
79
|
+
self.deliver.affirmpassword = ''
|
|
80
|
+
self.show = false
|
|
81
|
+
self.$showAlert("修改密码成功", 'success', 2000)
|
|
82
|
+
}
|
|
83
|
+
} else {
|
|
84
|
+
if (res.data.code) {
|
|
85
|
+
self.$showAlert("修改密码失败,原因:" + res.data.msg, 'warning', 2000)
|
|
86
|
+
} else {
|
|
87
|
+
self.$showMessage(res.data)
|
|
90
88
|
}
|
|
91
89
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
functions: this.$login.f
|
|
102
|
-
}
|
|
103
|
-
},
|
|
104
|
-
props: ['show'],
|
|
105
|
-
methods: {
|
|
106
|
-
confirm () {
|
|
107
|
-
let gen = saveGen(this)
|
|
108
|
-
co(gen)
|
|
90
|
+
}
|
|
91
|
+
export default {
|
|
92
|
+
title: '系统管理-密码修改',
|
|
93
|
+
data () {
|
|
94
|
+
return {
|
|
95
|
+
deliver: {
|
|
96
|
+
password: '',
|
|
97
|
+
newpassword: '',
|
|
98
|
+
affirmpassword: ''
|
|
109
99
|
},
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
100
|
+
functions: this.$login.f,
|
|
101
|
+
passwordRuleHint: PASSWORD_RULE_HINT
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
computed: {
|
|
105
|
+
passwordStrength () {
|
|
106
|
+
return getPasswordStrength(this.deliver.newpassword)
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
props: ['show'],
|
|
110
|
+
methods: {
|
|
111
|
+
confirm () {
|
|
112
|
+
let gen = saveGen(this)
|
|
113
|
+
co(gen)
|
|
114
|
+
},
|
|
115
|
+
rest () {
|
|
116
|
+
this.show = false
|
|
117
|
+
this.deliver = {password: '', newpassword: '', affirmpassword: ''}
|
|
114
118
|
}
|
|
115
119
|
}
|
|
120
|
+
}
|
|
116
121
|
</script>
|
|
117
122
|
<style>
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
123
|
+
.modifystyle {
|
|
124
|
+
background: #fff;
|
|
125
|
+
padding: 10px 20px 20px;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.modifystyle .control-label {
|
|
129
|
+
color: #333;
|
|
130
|
+
font-weight: normal;
|
|
131
|
+
padding-top: 7px;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.password-field-wrap {
|
|
135
|
+
padding-left: 0;
|
|
136
|
+
padding-right: 0;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.password-field-wrap .form-control {
|
|
140
|
+
width: 100%;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.password-alert {
|
|
144
|
+
margin: 0 0 16px;
|
|
145
|
+
padding: 10px 12px;
|
|
146
|
+
border-radius: 4px;
|
|
147
|
+
background: #f5f7fa;
|
|
148
|
+
border: 1px solid #e4e7ed;
|
|
149
|
+
color: #606266;
|
|
150
|
+
font-size: 13px;
|
|
151
|
+
line-height: 1.6;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.field-error {
|
|
155
|
+
display: block;
|
|
156
|
+
margin-top: 6px;
|
|
157
|
+
color: #e74c3c;
|
|
158
|
+
font-size: 12px;
|
|
159
|
+
line-height: 1.4;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.password-strength {
|
|
163
|
+
margin-top: 8px;
|
|
164
|
+
font-size: 12px;
|
|
165
|
+
line-height: 1.6;
|
|
166
|
+
color: #606266;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.password-strength .strength-label {
|
|
170
|
+
margin-right: 6px;
|
|
171
|
+
color: #909399;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.password-strength .strength-tag {
|
|
175
|
+
display: inline-block;
|
|
176
|
+
margin-right: 8px;
|
|
177
|
+
padding: 1px 8px;
|
|
178
|
+
border-radius: 3px;
|
|
179
|
+
font-size: 12px;
|
|
180
|
+
line-height: 1.5;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.password-strength .strength-tag.success {
|
|
184
|
+
color: #2e7d32;
|
|
185
|
+
background: #e8f5e9;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.password-strength .strength-tag.error {
|
|
189
|
+
color: #c62828;
|
|
190
|
+
background: #ffebee;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.password-strength .strength-desc {
|
|
194
|
+
color: #606266;
|
|
195
|
+
}
|
|
125
196
|
</style>
|
|
@@ -146,7 +146,7 @@ import $ from 'jquery'
|
|
|
146
146
|
import Vue from 'vue'
|
|
147
147
|
import {HttpResetClass} from 'vue-client'
|
|
148
148
|
import {isPasswordModificationExpired} from '../../components/Util'
|
|
149
|
-
|
|
149
|
+
import { isStrongPassword } from '../../util/password-validation'
|
|
150
150
|
let daibanJson = require('../../util/Daiban.json')
|
|
151
151
|
|
|
152
152
|
|
|
@@ -206,7 +206,7 @@ let saveGen = function *(self) {
|
|
|
206
206
|
}
|
|
207
207
|
console.log(self.$login.depPrompt)
|
|
208
208
|
// 弱口令验证(默认开启,跳转过来的不进行验证)
|
|
209
|
-
if ((!self.otherLogin) && !(
|
|
209
|
+
if ((!self.otherLogin) && !isStrongPassword(self.model.password)) {
|
|
210
210
|
self.$showMessage('登录系统: 此账户的密码过于简单,请修改密码后重新登陆!!!', ['confirm']).then((res) => {
|
|
211
211
|
self.modifyPwShow = true
|
|
212
212
|
})
|
|
@@ -382,7 +382,6 @@ export default {
|
|
|
382
382
|
if (res.data.length> 0){
|
|
383
383
|
this.OrderDaiBan += `其中 ${Object.keys(OrderDaiBan).map(key=>`${key}:${OrderDaiBan[key].length}条`).join(', ')}`
|
|
384
384
|
}
|
|
385
|
-
},
|
|
386
385
|
let data = {
|
|
387
386
|
condition: '1 = 1',
|
|
388
387
|
data: {
|
|
@@ -404,7 +403,6 @@ export default {
|
|
|
404
403
|
this.AppDaiBan += `其中 ${Object.keys(AppDaiBan).map(key=>`${key}:${AppDaiBan[key].length}条`).join(', ')}`
|
|
405
404
|
}
|
|
406
405
|
})
|
|
407
|
-
|
|
408
406
|
},
|
|
409
407
|
async getDaiBanA(){
|
|
410
408
|
// 是否全局开启待办通知
|
|
@@ -144,7 +144,7 @@ import $ from 'jquery'
|
|
|
144
144
|
import Vue from 'vue'
|
|
145
145
|
import {HttpResetClass} from 'vue-client'
|
|
146
146
|
import {isPasswordModificationExpired} from '../../components/Util'
|
|
147
|
-
|
|
147
|
+
import { isStrongPassword } from '../../util/password-validation'
|
|
148
148
|
let daibanJson = require('../../util/Daiban.json')
|
|
149
149
|
|
|
150
150
|
|
|
@@ -204,7 +204,7 @@ let saveGen = function *(self) {
|
|
|
204
204
|
}
|
|
205
205
|
console.log(self.$login.depPrompt)
|
|
206
206
|
// 弱口令验证(默认开启,跳转过来的不进行验证)
|
|
207
|
-
if ((!self.otherLogin) && !(
|
|
207
|
+
if ((!self.otherLogin) && !isStrongPassword(self.model.password)) {
|
|
208
208
|
self.$showMessage('登录系统: 此账户的密码过于简单,请修改密码后重新登陆!!!', ['confirm']).then((res) => {
|
|
209
209
|
self.modifyPwShow = true
|
|
210
210
|
})
|
|
@@ -380,7 +380,14 @@ export default {
|
|
|
380
380
|
if (res.data.length> 0){
|
|
381
381
|
this.OrderDaiBan += `其中 ${Object.keys(OrderDaiBan).map(key=>`${key}:${OrderDaiBan[key].length}条`).join(', ')}`
|
|
382
382
|
}
|
|
383
|
-
|
|
383
|
+
let data = {
|
|
384
|
+
condition: '1 = 1',
|
|
385
|
+
data: {
|
|
386
|
+
orgid: this.$login.f.orgid,
|
|
387
|
+
id: this.$login.f.id
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
await http.load('POST', '/rs/sql/checkuser', {data: data}, {
|
|
384
391
|
resolveMsg: null,
|
|
385
392
|
rejectMsg: null
|
|
386
393
|
}).then((res) => {
|
|
@@ -394,7 +401,6 @@ export default {
|
|
|
394
401
|
this.AppDaiBan += `其中 ${Object.keys(AppDaiBan).map(key=>`${key}:${AppDaiBan[key].length}条`).join(', ')}`
|
|
395
402
|
}
|
|
396
403
|
})
|
|
397
|
-
|
|
398
404
|
},
|
|
399
405
|
async getDaiBanA(){
|
|
400
406
|
// 是否全局开启待办通知
|
|
@@ -150,7 +150,7 @@ import $ from 'jquery'
|
|
|
150
150
|
import Vue from 'vue'
|
|
151
151
|
import {HttpResetClass} from 'vue-client'
|
|
152
152
|
import {isPasswordModificationExpired} from '../../components/Util'
|
|
153
|
-
|
|
153
|
+
import { isStrongPassword } from '../../util/password-validation'
|
|
154
154
|
let daibanJson = require('../../util/Daiban.json')
|
|
155
155
|
|
|
156
156
|
|
|
@@ -210,7 +210,7 @@ let saveGen = function *(self) {
|
|
|
210
210
|
}
|
|
211
211
|
console.log(self.$login.depPrompt)
|
|
212
212
|
// 弱口令验证(默认开启,跳转过来的不进行验证)
|
|
213
|
-
if ((!self.otherLogin) && !(
|
|
213
|
+
if ((!self.otherLogin) && !isStrongPassword(self.model.password)) {
|
|
214
214
|
self.$showMessage('登录系统: 此账户的密码过于简单,请修改密码后重新登陆!!!', ['confirm']).then((res) => {
|
|
215
215
|
self.modifyPwShow = true
|
|
216
216
|
})
|
|
@@ -371,7 +371,6 @@ export default {
|
|
|
371
371
|
if (res.data.length> 0){
|
|
372
372
|
this.OrderDaiBan += `其中 ${Object.keys(OrderDaiBan).map(key=>`${key}:${OrderDaiBan[key].length}条`).join(', ')}`
|
|
373
373
|
}
|
|
374
|
-
},
|
|
375
374
|
let data = {
|
|
376
375
|
condition: '1 = 1',
|
|
377
376
|
data: {
|
|
@@ -393,7 +392,6 @@ export default {
|
|
|
393
392
|
this.AppDaiBan += `其中 ${Object.keys(AppDaiBan).map(key=>`${key}:${AppDaiBan[key].length}条`).join(', ')}`
|
|
394
393
|
}
|
|
395
394
|
})
|
|
396
|
-
|
|
397
395
|
},
|
|
398
396
|
async getDaiBanA(){
|
|
399
397
|
// 是否全局开启待办通知
|
|
@@ -137,7 +137,7 @@ import $ from 'jquery'
|
|
|
137
137
|
import Vue from 'vue'
|
|
138
138
|
import {HttpResetClass} from 'vue-client'
|
|
139
139
|
import {isPasswordModificationExpired} from '../../components/Util'
|
|
140
|
-
|
|
140
|
+
import { isStrongPassword } from '../../util/password-validation'
|
|
141
141
|
let daibanJson = require('../../util/Daiban.json')
|
|
142
142
|
|
|
143
143
|
|
|
@@ -197,7 +197,7 @@ let saveGen = function *(self) {
|
|
|
197
197
|
}
|
|
198
198
|
console.log(self.$login.depPrompt)
|
|
199
199
|
// 弱口令验证(默认开启,跳转过来的不进行验证)
|
|
200
|
-
if ((!self.otherLogin) && !(
|
|
200
|
+
if ((!self.otherLogin) && !isStrongPassword(self.model.password)) {
|
|
201
201
|
self.$showMessage('登录系统: 此账户的密码过于简单,请修改密码后重新登陆!!!', ['confirm']).then((res) => {
|
|
202
202
|
self.modifyPwShow = true
|
|
203
203
|
})
|
|
@@ -416,7 +416,6 @@ export default {
|
|
|
416
416
|
if (res.data.length> 0){
|
|
417
417
|
this.OrderDaiBan += `其中 ${Object.keys(OrderDaiBan).map(key=>`${key}:${OrderDaiBan[key].length}条`).join(', ')}`
|
|
418
418
|
}
|
|
419
|
-
},
|
|
420
419
|
let data = {
|
|
421
420
|
condition: '1 = 1',
|
|
422
421
|
data: {
|
|
@@ -438,7 +437,6 @@ export default {
|
|
|
438
437
|
this.AppDaiBan += `其中 ${Object.keys(AppDaiBan).map(key=>`${key}:${AppDaiBan[key].length}条`).join(', ')}`
|
|
439
438
|
}
|
|
440
439
|
})
|
|
441
|
-
|
|
442
440
|
},
|
|
443
441
|
async getDaiBanA(){
|
|
444
442
|
// 是否全局开启待办通知
|
|
@@ -135,7 +135,7 @@
|
|
|
135
135
|
import Vue from 'vue'
|
|
136
136
|
import {HttpResetClass} from 'vue-client'
|
|
137
137
|
import {isPasswordModificationExpired} from '../../components/Util'
|
|
138
|
-
|
|
138
|
+
import { isStrongPassword } from '../../util/password-validation'
|
|
139
139
|
|
|
140
140
|
|
|
141
141
|
let saveGen = function *(self) {
|
|
@@ -193,7 +193,7 @@
|
|
|
193
193
|
}
|
|
194
194
|
console.log(self.$login.depPrompt)
|
|
195
195
|
// 弱口令验证(默认开启,跳转过来的不进行验证)
|
|
196
|
-
if ((!self.otherLogin) && !(
|
|
196
|
+
if ((!self.otherLogin) && !isStrongPassword(self.model.password)) {
|
|
197
197
|
self.$showMessage('登录系统: 此账户的密码过于简单,请修改密码后重新登陆!!!', ['confirm']).then((res) => {
|
|
198
198
|
self.modifyPwShow = true
|
|
199
199
|
})
|
|
@@ -345,7 +345,14 @@
|
|
|
345
345
|
if (res.data.length> 0){
|
|
346
346
|
this.OrderDaiBan += `其中 ${Object.keys(OrderDaiBan).map(key=>`${key}:${OrderDaiBan[key].length}条`).join(', ')}`
|
|
347
347
|
}
|
|
348
|
-
|
|
348
|
+
let data = {
|
|
349
|
+
condition: '1 = 1',
|
|
350
|
+
data: {
|
|
351
|
+
orgid: this.$login.f.orgid,
|
|
352
|
+
id: this.$login.f.id
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
await http.load('POST', '/rs/sql/checkuser', {data: data}, {
|
|
349
356
|
resolveMsg: null,
|
|
350
357
|
rejectMsg: null
|
|
351
358
|
}).then((res) => {
|
|
@@ -359,7 +366,6 @@
|
|
|
359
366
|
this.AppDaiBan += `其中 ${Object.keys(AppDaiBan).map(key=>`${key}:${AppDaiBan[key].length}条`).join(', ')}`
|
|
360
367
|
}
|
|
361
368
|
})
|
|
362
|
-
|
|
363
369
|
},
|
|
364
370
|
async loginother(){
|
|
365
371
|
if (this.config.distanceLogin) {
|
|
@@ -147,7 +147,7 @@ import Vue from 'vue'
|
|
|
147
147
|
import {HttpResetClass} from 'vue-client'
|
|
148
148
|
import {isPasswordModificationExpired} from '../../components/Util'
|
|
149
149
|
import cryptJS from "../../plugins/EncryptUtil";
|
|
150
|
-
|
|
150
|
+
import { isStrongPassword } from '../../util/password-validation'
|
|
151
151
|
let daibanJson = require('../../util/Daiban.json')
|
|
152
152
|
|
|
153
153
|
|
|
@@ -206,7 +206,7 @@ let saveGen = function *(self) {
|
|
|
206
206
|
}
|
|
207
207
|
console.log(self.$login.depPrompt)
|
|
208
208
|
// 弱口令验证(默认开启,跳转过来的不进行验证)
|
|
209
|
-
if ((!self.otherLogin) && !(
|
|
209
|
+
if ((!self.otherLogin) && !isStrongPassword(self.model.password)) {
|
|
210
210
|
self.$showMessage('登录系统: 此账户的密码过于简单,请修改密码后重新登陆!!!', ['confirm']).then((res) => {
|
|
211
211
|
self.modifyPwShow = true
|
|
212
212
|
})
|
|
@@ -396,7 +396,14 @@ export default {
|
|
|
396
396
|
if (res.data.length> 0){
|
|
397
397
|
this.OrderDaiBan += `其中 ${Object.keys(OrderDaiBan).map(key=>`${key}:${OrderDaiBan[key].length}条`).join(', ')}`
|
|
398
398
|
}
|
|
399
|
-
|
|
399
|
+
let data = {
|
|
400
|
+
condition: '1 = 1',
|
|
401
|
+
data: {
|
|
402
|
+
orgid: this.$login.f.orgid,
|
|
403
|
+
id: this.$login.f.id
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
await http.load('POST', '/rs/sql/checkuser', {data: data}, {
|
|
400
407
|
resolveMsg: null,
|
|
401
408
|
rejectMsg: null
|
|
402
409
|
}).then((res) => {
|
|
@@ -410,7 +417,6 @@ export default {
|
|
|
410
417
|
this.AppDaiBan += `其中 ${Object.keys(AppDaiBan).map(key=>`${key}:${AppDaiBan[key].length}条`).join(', ')}`
|
|
411
418
|
}
|
|
412
419
|
})
|
|
413
|
-
|
|
414
420
|
},
|
|
415
421
|
async getDaiBanA(){
|
|
416
422
|
// 是否全局开启待办通知
|
|
@@ -125,8 +125,7 @@ import $ from 'jquery'
|
|
|
125
125
|
import Vue from 'vue'
|
|
126
126
|
import {HttpResetClass} from 'vue-client'
|
|
127
127
|
import {isPasswordModificationExpired} from '../../components/Util'
|
|
128
|
-
|
|
129
|
-
|
|
128
|
+
import { isStrongPassword } from '../../util/password-validation'
|
|
130
129
|
|
|
131
130
|
let saveGen = function *(self) {
|
|
132
131
|
try {
|
|
@@ -184,7 +183,7 @@ let saveGen = function *(self) {
|
|
|
184
183
|
}
|
|
185
184
|
console.log(self.$login.depPrompt)
|
|
186
185
|
// 弱口令验证(默认开启,跳转过来的不进行验证)
|
|
187
|
-
if ((!self.otherLogin) && !(
|
|
186
|
+
if ((!self.otherLogin) && !isStrongPassword(self.model.password)) {
|
|
188
187
|
self.$showMessage('登录系统: 此账户的密码过于简单,请修改密码后重新登陆!!!', ['confirm']).then((res) => {
|
|
189
188
|
self.modifyPwShow = true
|
|
190
189
|
})
|
|
@@ -146,7 +146,7 @@
|
|
|
146
146
|
import Vue from 'vue'
|
|
147
147
|
import {HttpResetClass} from 'vue-client'
|
|
148
148
|
import {isPasswordModificationExpired} from '../../components/Util'
|
|
149
|
-
|
|
149
|
+
import { isStrongPassword } from '../../util/password-validation'
|
|
150
150
|
let daibanJson = require('../../util/Daiban.json')
|
|
151
151
|
|
|
152
152
|
|
|
@@ -205,7 +205,7 @@
|
|
|
205
205
|
}
|
|
206
206
|
console.log(self.$login.depPrompt)
|
|
207
207
|
// 弱口令验证(默认开启,跳转过来的不进行验证)
|
|
208
|
-
if ((!self.otherLogin) && !(
|
|
208
|
+
if ((!self.otherLogin) && !isStrongPassword(self.model.password)) {
|
|
209
209
|
self.$showMessage('登录系统: 此账户的密码过于简单,请修改密码后重新登陆!!!', ['confirm']).then((res) => {
|
|
210
210
|
self.modifyPwShow = true
|
|
211
211
|
})
|
|
@@ -378,7 +378,14 @@
|
|
|
378
378
|
if (res.data.length> 0){
|
|
379
379
|
this.OrderDaiBan += `其中 ${Object.keys(OrderDaiBan).map(key=>`${key}:${OrderDaiBan[key].length}条`).join(', ')}`
|
|
380
380
|
}
|
|
381
|
-
|
|
381
|
+
let data = {
|
|
382
|
+
condition: '1 = 1',
|
|
383
|
+
data: {
|
|
384
|
+
orgid: this.$login.f.orgid,
|
|
385
|
+
id: this.$login.f.id
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
await http.load('POST', '/rs/sql/checkuser', {data: data}, {
|
|
382
389
|
resolveMsg: null,
|
|
383
390
|
rejectMsg: null
|
|
384
391
|
}).then((res) => {
|
|
@@ -392,7 +399,6 @@
|
|
|
392
399
|
this.AppDaiBan += `其中 ${Object.keys(AppDaiBan).map(key=>`${key}:${AppDaiBan[key].length}条`).join(', ')}`
|
|
393
400
|
}
|
|
394
401
|
})
|
|
395
|
-
|
|
396
402
|
},
|
|
397
403
|
async getDaiBanA(){
|
|
398
404
|
// 是否全局开启待办通知
|
|
@@ -149,7 +149,7 @@ import $ from 'jquery'
|
|
|
149
149
|
import Vue from 'vue'
|
|
150
150
|
import {HttpResetClass} from 'vue-client'
|
|
151
151
|
import {isPasswordModificationExpired} from '../../components/Util'
|
|
152
|
-
|
|
152
|
+
import { isStrongPassword } from '../../util/password-validation'
|
|
153
153
|
let daibanJson = require('../../util/Daiban.json')
|
|
154
154
|
|
|
155
155
|
|
|
@@ -209,7 +209,7 @@ let saveGen = function *(self) {
|
|
|
209
209
|
}
|
|
210
210
|
console.log(self.$login.depPrompt)
|
|
211
211
|
// 弱口令验证(默认开启,跳转过来的不进行验证)
|
|
212
|
-
if ((!self.otherLogin) && !(
|
|
212
|
+
if ((!self.otherLogin) && !isStrongPassword(self.model.password)) {
|
|
213
213
|
self.$showMessage('登录系统: 此账户的密码过于简单,请修改密码后重新登陆!!!', ['confirm']).then((res) => {
|
|
214
214
|
self.modifyPwShow = true
|
|
215
215
|
})
|
|
@@ -385,7 +385,14 @@ export default {
|
|
|
385
385
|
if (res.data.length> 0){
|
|
386
386
|
this.OrderDaiBan += `其中 ${Object.keys(OrderDaiBan).map(key=>`${key}:${OrderDaiBan[key].length}条`).join(', ')}`
|
|
387
387
|
}
|
|
388
|
-
|
|
388
|
+
let data = {
|
|
389
|
+
condition: '1 = 1',
|
|
390
|
+
data: {
|
|
391
|
+
orgid: this.$login.f.orgid,
|
|
392
|
+
id: this.$login.f.id
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
await http.load('POST', '/rs/sql/checkuser', {data: data}, {
|
|
389
396
|
resolveMsg: null,
|
|
390
397
|
rejectMsg: null
|
|
391
398
|
}).then((res) => {
|
|
@@ -399,7 +406,6 @@ export default {
|
|
|
399
406
|
this.AppDaiBan += `其中 ${Object.keys(AppDaiBan).map(key=>`${key}:${AppDaiBan[key].length}条`).join(', ')}`
|
|
400
407
|
}
|
|
401
408
|
})
|
|
402
|
-
|
|
403
409
|
},
|
|
404
410
|
async getDaiBanA(){
|
|
405
411
|
// 是否全局开启待办通知
|
|
@@ -142,7 +142,7 @@ import $ from 'jquery'
|
|
|
142
142
|
import Vue from 'vue'
|
|
143
143
|
import {HttpResetClass} from 'vue-client'
|
|
144
144
|
import {isPasswordModificationExpired} from '../../components/Util'
|
|
145
|
-
|
|
145
|
+
import { isStrongPassword } from '../../util/password-validation'
|
|
146
146
|
let daibanJson = require('../../util/Daiban.json')
|
|
147
147
|
|
|
148
148
|
|
|
@@ -202,7 +202,7 @@ let saveGen = function *(self) {
|
|
|
202
202
|
}
|
|
203
203
|
console.log(self.$login.depPrompt)
|
|
204
204
|
// 弱口令验证(默认开启,跳转过来的不进行验证)
|
|
205
|
-
if ((!self.otherLogin) && !(
|
|
205
|
+
if ((!self.otherLogin) && !isStrongPassword(self.model.password)) {
|
|
206
206
|
self.$showMessage('登录系统: 此账户的密码过于简单,请修改密码后重新登陆!!!', ['confirm']).then((res) => {
|
|
207
207
|
self.modifyPwShow = true
|
|
208
208
|
})
|
|
@@ -390,7 +390,14 @@ export default {
|
|
|
390
390
|
if (res.data.length> 0){
|
|
391
391
|
this.OrderDaiBan += `其中 ${Object.keys(OrderDaiBan).map(key=>`${key}:${OrderDaiBan[key].length}条`).join(', ')}`
|
|
392
392
|
}
|
|
393
|
-
|
|
393
|
+
let data = {
|
|
394
|
+
condition: '1 = 1',
|
|
395
|
+
data: {
|
|
396
|
+
orgid: this.$login.f.orgid,
|
|
397
|
+
id: this.$login.f.id
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
await http.load('POST', '/rs/sql/checkuser', {data: data}, {
|
|
394
401
|
resolveMsg: null,
|
|
395
402
|
rejectMsg: null
|
|
396
403
|
}).then((res) => {
|
|
@@ -404,7 +411,6 @@ export default {
|
|
|
404
411
|
this.AppDaiBan += `其中 ${Object.keys(AppDaiBan).map(key=>`${key}:${AppDaiBan[key].length}条`).join(', ')}`
|
|
405
412
|
}
|
|
406
413
|
})
|
|
407
|
-
|
|
408
414
|
},
|
|
409
415
|
async getDaiBanA(){
|
|
410
416
|
// 是否全局开启待办通知
|
|
@@ -380,7 +380,7 @@ let createWaterMark = function (userName) {
|
|
|
380
380
|
})
|
|
381
381
|
|
|
382
382
|
},
|
|
383
|
-
isNotarize (stopId,userid) {
|
|
383
|
+
async isNotarize (stopId,userid) {
|
|
384
384
|
let http = new HttpResetClass()
|
|
385
385
|
var f_stopgas_id = stopId
|
|
386
386
|
let res = await http.load('POST', 'rs/sql/safeNoticeNotarizeQuery', {
|
|
@@ -142,7 +142,7 @@ import $ from 'jquery'
|
|
|
142
142
|
import Vue from 'vue'
|
|
143
143
|
import {HttpResetClass} from 'vue-client'
|
|
144
144
|
import {isPasswordModificationExpired} from '../../components/Util'
|
|
145
|
-
|
|
145
|
+
import { isStrongPassword } from '../../util/password-validation'
|
|
146
146
|
let daibanJson = require('../../util/Daiban.json')
|
|
147
147
|
|
|
148
148
|
|
|
@@ -202,7 +202,7 @@ let saveGen = function *(self) {
|
|
|
202
202
|
}
|
|
203
203
|
console.log(self.$login.depPrompt)
|
|
204
204
|
// 弱口令验证(默认开启,跳转过来的不进行验证)
|
|
205
|
-
if ((!self.otherLogin) && !(
|
|
205
|
+
if ((!self.otherLogin) && !isStrongPassword(self.model.password)) {
|
|
206
206
|
self.$showMessage('登录系统: 此账户的密码过于简单,请修改密码后重新登陆!!!', ['confirm']).then((res) => {
|
|
207
207
|
self.modifyPwShow = true
|
|
208
208
|
})
|
|
@@ -378,7 +378,14 @@ export default {
|
|
|
378
378
|
if (res.data.length> 0){
|
|
379
379
|
this.OrderDaiBan += `其中 ${Object.keys(OrderDaiBan).map(key=>`${key}:${OrderDaiBan[key].length}条`).join(', ')}`
|
|
380
380
|
}
|
|
381
|
-
|
|
381
|
+
let data = {
|
|
382
|
+
condition: '1 = 1',
|
|
383
|
+
data: {
|
|
384
|
+
orgid: this.$login.f.orgid,
|
|
385
|
+
id: this.$login.f.id
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
await http.load('POST', '/rs/sql/checkuser', {data: data}, {
|
|
382
389
|
resolveMsg: null,
|
|
383
390
|
rejectMsg: null
|
|
384
391
|
}).then((res) => {
|
|
@@ -392,7 +399,6 @@ export default {
|
|
|
392
399
|
this.AppDaiBan += `其中 ${Object.keys(AppDaiBan).map(key=>`${key}:${AppDaiBan[key].length}条`).join(', ')}`
|
|
393
400
|
}
|
|
394
401
|
})
|
|
395
|
-
|
|
396
402
|
},
|
|
397
403
|
async getDaiBanA(){
|
|
398
404
|
// 是否全局开启待办通知
|
|
@@ -141,7 +141,7 @@ import $ from 'jquery'
|
|
|
141
141
|
import Vue from 'vue'
|
|
142
142
|
import {HttpResetClass} from 'vue-client'
|
|
143
143
|
import {isPasswordModificationExpired} from '../../components/Util'
|
|
144
|
-
|
|
144
|
+
import { isStrongPassword } from '../../util/password-validation'
|
|
145
145
|
let daibanJson = require('../../util/Daiban.json')
|
|
146
146
|
|
|
147
147
|
|
|
@@ -201,7 +201,7 @@ let saveGen = function *(self) {
|
|
|
201
201
|
}
|
|
202
202
|
console.log(self.$login.depPrompt)
|
|
203
203
|
// 弱口令验证(默认开启,跳转过来的不进行验证)
|
|
204
|
-
if ((!self.otherLogin) && !(
|
|
204
|
+
if ((!self.otherLogin) && !isStrongPassword(self.model.password)) {
|
|
205
205
|
self.$showMessage('登录系统: 此账户的密码过于简单,请修改密码后重新登陆!!!', ['confirm']).then((res) => {
|
|
206
206
|
self.modifyPwShow = true
|
|
207
207
|
})
|
|
@@ -362,7 +362,6 @@ export default {
|
|
|
362
362
|
if (res.data.length> 0){
|
|
363
363
|
this.OrderDaiBan += `其中 ${Object.keys(OrderDaiBan).map(key=>`${key}:${OrderDaiBan[key].length}条`).join(', ')}`
|
|
364
364
|
}
|
|
365
|
-
},
|
|
366
365
|
let data = {
|
|
367
366
|
condition: '1 = 1',
|
|
368
367
|
data: {
|
|
@@ -384,7 +383,6 @@ export default {
|
|
|
384
383
|
this.AppDaiBan += `其中 ${Object.keys(AppDaiBan).map(key=>`${key}:${AppDaiBan[key].length}条`).join(', ')}`
|
|
385
384
|
}
|
|
386
385
|
})
|
|
387
|
-
|
|
388
386
|
},
|
|
389
387
|
async getDaiBanA(){
|
|
390
388
|
// 是否全局开启待办通知
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import Vue from 'vue'
|
|
2
2
|
import Validator from 'vue-validator'
|
|
3
|
+
import { isStrongPassword } from '../util/password-validation'
|
|
4
|
+
|
|
3
5
|
Vue.use(Validator)
|
|
4
|
-
|
|
6
|
+
|
|
7
|
+
// 密码强度验证器(必须为大小写字母、阿拉伯数字、特殊字符)
|
|
5
8
|
Vue.validator('strongpassword', function (val) {
|
|
6
|
-
return
|
|
7
|
-
})
|
|
9
|
+
return isStrongPassword(val)
|
|
10
|
+
})
|
|
11
|
+
|
|
8
12
|
Vue.validator('chinesePassword', function (val) {
|
|
9
|
-
var testBealoon=/.*?[\u4E00-\u9FFF]+.*$/.test(val)
|
|
10
13
|
return !(/.*?[\u4E00-\u9FFF]+.*$/.test(val))
|
|
11
|
-
})
|
|
12
|
-
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
// 强密码校验:12-16位,含大小写、数字、特殊字符,并排除常见弱口令与连续模式
|
|
13
17
|
Vue.validator('numbersAndLetter8to16', function (val) {
|
|
14
|
-
return
|
|
15
|
-
})
|
|
18
|
+
return isStrongPassword(val)
|
|
19
|
+
})
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
const REG_STRONG_PWD =
|
|
2
|
+
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*(),.?":{}|<>~`+=_\\-])[A-Za-z\d!@#$%^&*(),.?":{}|<>~`+=_\\-]{12,16}$/
|
|
3
|
+
|
|
4
|
+
const COMMON_PASSWORDS = [
|
|
5
|
+
'password',
|
|
6
|
+
'password123',
|
|
7
|
+
'123456',
|
|
8
|
+
'12345678',
|
|
9
|
+
'qwerty',
|
|
10
|
+
'abc123',
|
|
11
|
+
'Password1',
|
|
12
|
+
'password1',
|
|
13
|
+
'123456789',
|
|
14
|
+
'welcome',
|
|
15
|
+
'admin',
|
|
16
|
+
'letmein',
|
|
17
|
+
'monkey',
|
|
18
|
+
'dragon',
|
|
19
|
+
'master',
|
|
20
|
+
'superman',
|
|
21
|
+
'qwerty123',
|
|
22
|
+
'admin123',
|
|
23
|
+
'root',
|
|
24
|
+
'pass',
|
|
25
|
+
'test',
|
|
26
|
+
'guest',
|
|
27
|
+
'user',
|
|
28
|
+
'000000',
|
|
29
|
+
'111111',
|
|
30
|
+
'666666',
|
|
31
|
+
'888888',
|
|
32
|
+
'999999',
|
|
33
|
+
'iloveyou',
|
|
34
|
+
'welcome123',
|
|
35
|
+
'password!',
|
|
36
|
+
'Passw0rd!',
|
|
37
|
+
'Passw0rd',
|
|
38
|
+
'Password!',
|
|
39
|
+
'passw0rd',
|
|
40
|
+
'P@ssw0rd',
|
|
41
|
+
'P@ssword',
|
|
42
|
+
'Password@123'
|
|
43
|
+
]
|
|
44
|
+
|
|
45
|
+
export const PASSWORD_RULE_HINT = '密码长度须为 12-16 位,包含大小写字母、数字与特殊符号。'
|
|
46
|
+
|
|
47
|
+
export const PASSWORD_DEFAULT_ERROR = '新密码必须包含大小写字母、数字和特殊字符,且长度为12-16位'
|
|
48
|
+
|
|
49
|
+
function hasConsecutiveNumbers (password) {
|
|
50
|
+
for (let i = 0; i <= password.length - 3; i++) {
|
|
51
|
+
const substr = password.substring(i, i + 3)
|
|
52
|
+
if (/^\d{3,}$/.test(substr)) {
|
|
53
|
+
const digits = substr.split('').map(Number)
|
|
54
|
+
let isConsecutive = true
|
|
55
|
+
for (let j = 1; j < digits.length; j++) {
|
|
56
|
+
if (digits[j] !== digits[j - 1] + 1) {
|
|
57
|
+
isConsecutive = false
|
|
58
|
+
break
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (isConsecutive) return true
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return false
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function hasConsecutiveLetters (password) {
|
|
68
|
+
const lowerPassword = password.toLowerCase()
|
|
69
|
+
for (let i = 0; i <= lowerPassword.length - 3; i++) {
|
|
70
|
+
const substr = lowerPassword.substring(i, i + 3)
|
|
71
|
+
if (/^[a-z]{3,}$/.test(substr)) {
|
|
72
|
+
let isConsecutive = true
|
|
73
|
+
for (let j = 1; j < substr.length; j++) {
|
|
74
|
+
if (substr.charCodeAt(j) !== substr.charCodeAt(j - 1) + 1) {
|
|
75
|
+
isConsecutive = false
|
|
76
|
+
break
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (isConsecutive) return true
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return false
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function hasRepeatedChars (password) {
|
|
86
|
+
return /(.)\1{2,}/.test(password)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function hasKeyboardPattern (password) {
|
|
90
|
+
const keyboardRows = ['qwertyuiop', 'asdfghjkl', 'zxcvbnm', '1234567890']
|
|
91
|
+
const lowerPassword = password.toLowerCase()
|
|
92
|
+
|
|
93
|
+
for (const row of keyboardRows) {
|
|
94
|
+
for (let i = 0; i <= row.length - 3; i++) {
|
|
95
|
+
const pattern = row.substring(i, i + 3)
|
|
96
|
+
if (lowerPassword.includes(pattern)) {
|
|
97
|
+
return true
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return false
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export function validateStrongPassword (password) {
|
|
105
|
+
const result = {
|
|
106
|
+
isValid: true,
|
|
107
|
+
errors: []
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (!password) {
|
|
111
|
+
result.isValid = false
|
|
112
|
+
result.errors.push('不能为空')
|
|
113
|
+
return result
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if (!REG_STRONG_PWD.test(password)) {
|
|
117
|
+
result.isValid = false
|
|
118
|
+
result.errors.push('密码长度须为12-16位,且包含大写字母、小写字母、数字和特殊字符')
|
|
119
|
+
return result
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (COMMON_PASSWORDS.includes(password) || COMMON_PASSWORDS.includes(password.toLowerCase())) {
|
|
123
|
+
result.isValid = false
|
|
124
|
+
result.errors.push('不能使用常见密码')
|
|
125
|
+
return result
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (hasConsecutiveNumbers(password)) {
|
|
129
|
+
result.isValid = false
|
|
130
|
+
result.errors.push('不能包含连续数字')
|
|
131
|
+
return result
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if (hasConsecutiveLetters(password)) {
|
|
135
|
+
result.isValid = false
|
|
136
|
+
result.errors.push('不能包含连续字母')
|
|
137
|
+
return result
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (hasRepeatedChars(password)) {
|
|
141
|
+
result.isValid = false
|
|
142
|
+
result.errors.push('不能包含3个或以上相同字符')
|
|
143
|
+
return result
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
if (hasKeyboardPattern(password)) {
|
|
147
|
+
result.isValid = false
|
|
148
|
+
result.errors.push('不能包含键盘连续按键模式')
|
|
149
|
+
return result
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return result
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export function isStrongPassword (password) {
|
|
156
|
+
return validateStrongPassword(password).isValid
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
export function getPasswordStrength (password) {
|
|
160
|
+
if (!password) {
|
|
161
|
+
return {
|
|
162
|
+
label: '未输入',
|
|
163
|
+
type: 'default',
|
|
164
|
+
desc: '请输入密码以查看强度',
|
|
165
|
+
visible: false
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const { isValid, errors } = validateStrongPassword(password)
|
|
170
|
+
if (isValid) {
|
|
171
|
+
return {
|
|
172
|
+
label: '强',
|
|
173
|
+
type: 'success',
|
|
174
|
+
desc: '密码满足复杂度要求',
|
|
175
|
+
visible: true
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
return {
|
|
180
|
+
label: '弱',
|
|
181
|
+
type: 'error',
|
|
182
|
+
desc: errors[0] || '密码不满足安全要求',
|
|
183
|
+
visible: true
|
|
184
|
+
}
|
|
185
|
+
}
|