Commit 0723d45d authored by 张伯涛's avatar 张伯涛

弱口令问题

parent 9b004b7d
......@@ -51,6 +51,24 @@ export default {
components: {},
props: {},
data() {
const passwordCheck = (rule, value, callback) => {
const types = {
lower: /[a-z]+/,
upper: /[A-Z]+/,
number: /[0-9]+/,
special: /[\W_]+/
}
let matchCount = 0
for (const type in types) {
if (types[type].test(value)) {
matchCount++
}
}
if (matchCount < 3) {
callback(new Error('密码必须包括数字、小写字母、大写字母和特殊符号4类中至少3类'))
}
callback()
}
return {
userId: '',
pwdList: {
......@@ -63,7 +81,12 @@ export default {
{ required: true, trigger: 'blur', message: '请输入旧密码' }
],
pass: [
{ validator: this.validatePass, trigger: 'blur', required: true }
{ required: true, message: '请输入用户密码', trigger: 'blur' },
{ min: 8, max: 20, message: '长度在 8 到 20 个字符', trigger: 'blur' },
{
validator: passwordCheck,
trigger: 'blur'
}
],
checkPass: [
{ validator: this.validatePass2, trigger: 'blur', required: true }
......@@ -96,18 +119,6 @@ export default {
}
})
},
validatePass(rule, value, callback) {
if (value === '') {
callback(new Error('请输入密码'))
} else {
const pw_pattern = '^(?![A-Za-z]+$)(?![a-z\\W]+$)(?![A-Z\\W]+$)(?![0-9\\W]+$)[a-zA-Z0-9\\W]{6,20}$'
if (value.match(pw_pattern)) {
callback()
} else {
callback(new Error('6~20位,由字母和数字混合组成'))
}
}
},
validatePass2(rule, value, callback) {
if (value === '') {
callback(new Error('请再次输入新密码'))
......
......@@ -241,13 +241,16 @@
</el-row>
<el-row>
<el-col :span="12">
<el-form-item v-if="form.businessId == undefined || form.identity === '1'" label="登录名:" prop="username">
<el-form-item v-if="form.businessId == undefined || form.identity === '1'" label="登录名:" prop="username">
<el-input v-model="form.username" :disabled="form.identity === '1'" show-word-limit maxlength="20" placeholder="请输入登录名" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="form.businessId == undefined" label="密码:" prop="password">
<el-input v-model="form.password" placeholder="请输入密码" type="password" />
<el-form-item v-if="form.businessId == undefined" label="状态:">
<el-radio-group v-model="form.flag">
<el-radio :label="1">启用</el-radio>
<el-radio :label="0">停用</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
......@@ -267,55 +270,16 @@
/>
</el-form-item>
</el-col>
<!-- <el-col :span="12">
<!-- <el-col :span="12">
<el-form-item label="昵称:" prop="nickName">
<el-input v-model="form.nickName" maxlength="50" placeholder="请输入用户昵称" />
</el-form-item>
</el-col>-->
</el-row>
<!-- <el-row>
&lt;!&ndash; <el-col :span="12">
<el-form-item label="性别:">
<el-select v-model="form.sex" placeholder="请选择">
<el-option
v-for="dict in sexOptions"
:key="dict.dictValue"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>&ndash;&gt;
<el-col :span="12">
<el-form-item label="手机号码:" prop="phone">
<el-input
v-model.trim="form.phone"
value="phone"
placeholder="请输入手机号码"
maxlength="11"
/>
</el-form-item>
</el-col>
</el-row>-->
<!-- <el-row>
<el-col :span="12">
<el-form-item label="身份证号:" prop="idNumber">
<el-input v-model.trim="form.idNumber" placeholder="请输入身份证号" maxlength="18" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="邮箱:" prop="email">
<el-input v-model.trim="form.email" placeholder="请输入邮箱" maxlength="25" />
</el-form-item>
</el-col>
</el-row>-->
<el-row>
<el-col :span="12">
<el-form-item v-if="form.businessId == undefined" label="状态:">
<el-radio-group v-model="form.flag">
<el-radio :label="1">启用</el-radio>
<el-radio :label="0">停用</el-radio>
</el-radio-group>
<el-col :span="24">
<el-form-item v-if="form.businessId == undefined" label="密码:" prop="password">
<el-input v-model="form.password" placeholder="请输入密码" />
</el-form-item>
</el-col>
</el-row>
......@@ -410,7 +374,7 @@
autocomplete="off"
auto-complete="off"
:type="pwdType"
placeholder="请输入6~20位,由字母和数字混合所组成的新密码"
placeholder="请输入新密码"
:maxlength="20"
>
<svg-icon
......@@ -468,7 +432,7 @@ import { getToken } from '@/utils/auth'
import { listAllDept, treeSelect } from '@/api/system/dept'
import TreeSelect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import {getListRole, getListRoleOld} from '@/api/system/role'
import { getListRole, getListRoleOld } from '@/api/system/role'
import { getDataCache, setDataCache } from '@/assets/js/filterData'
import commonField from '@/utils/commonField'
import ElImageViewer from 'element-ui/packages/image/src/image-viewer'
......@@ -485,9 +449,20 @@ export default {
callback()
}
const passwordCheck = (rule, value, callback) => {
const pattern = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/
if (!pattern.test(value)) {
callback(new Error('新密码必须为数字与字母的组合'))
const types = {
lower: /[a-z]+/,
upper: /[A-Z]+/,
number: /[0-9]+/,
special: /[\W_]+/
}
let matchCount = 0
for (const type in types) {
if (types[type].test(value)) {
matchCount++
}
}
if (matchCount < 3) {
callback(new Error('密码必须包括数字、小写字母、大写字母和特殊符号4类中至少3类'))
}
callback()
}
......@@ -637,7 +612,7 @@ export default {
],
password: [
{ required: true, message: '请输入用户密码', trigger: 'blur' },
{ min: 6, max: 20, message: '长度在 6 到 20 个字符', trigger: 'blur' },
{ min: 8, max: 20, message: '长度在 8 到 20 个字符', trigger: 'blur' },
{
validator: passwordCheck,
trigger: 'blur'
......@@ -657,7 +632,7 @@ export default {
],
newPassword: [
{ required: true, message: '请输入密码', trigger: 'blur' },
{ min: 6, max: 20, message: '长度在 6 到 20 个字符', trigger: 'blur' },
{ min: 8, max: 20, message: '长度在 8 到 20 个字符', trigger: 'blur' },
{ validator: passwordCheck, trigger: 'blur' }
],
phone: [
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment