|
|
@@ -1,39 +1,41 @@
|
|
|
<template>
|
|
|
- <el-row style="height:500px;">
|
|
|
- <el-col :span="6">
|
|
|
- <div style="padding-left:55px;">
|
|
|
- <span class="photo-area" @click="dialogFormVisible = !readonly">
|
|
|
- <img v-if="formData.photo" :src="image" class="avatar">
|
|
|
- <i v-else class="el-icon-plus avatar-uploader-icon" />
|
|
|
- <div v-if="!readonly" :class="formData.photo!==''?'handle-photo-buttons':null" @click.stop="() => { dialogFormVisible = false }">
|
|
|
- <div v-if="formData.photo!==''">
|
|
|
- <i class="el-icon-edit" @click.stop="dialogFormVisible = !readonly" />
|
|
|
- <i class="el-icon-delete" @click.stop="formData.photo = ''" />
|
|
|
+ <el-row style="height: 500px">
|
|
|
+ <el-col :span="6">
|
|
|
+ <div style="padding-left: 55px">
|
|
|
+ <span class="photo-area" @click="dialogFormVisible = !readonly">
|
|
|
+ <img v-if="formData.photo" :src="image" class="avatar" />
|
|
|
+ <i v-else class="el-icon-plus avatar-uploader-icon" />
|
|
|
+ <div
|
|
|
+ v-if="!readonly"
|
|
|
+ :class="formData.photo !== '' ? 'handle-photo-buttons' : null"
|
|
|
+ @click.stop="
|
|
|
+ () => {
|
|
|
+ dialogFormVisible = false
|
|
|
+ }
|
|
|
+ "
|
|
|
+ >
|
|
|
+ <div v-if="formData.photo !== ''">
|
|
|
+ <i class="el-icon-edit" @click.stop="dialogFormVisible = !readonly" />
|
|
|
+ <i class="el-icon-delete" @click.stop="formData.photo = ''" />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </span>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- </span>
|
|
|
- </div>
|
|
|
- <span v-if="!readonly " class="operation">点击上方进行头像操作</span>
|
|
|
- <ibps-uploader
|
|
|
- :visible="dialogFormVisible"
|
|
|
- :limit="limit"
|
|
|
- :accept="accept"
|
|
|
- @action-event="uploaderAction"
|
|
|
- @close="visible => dialogFormVisible = visible"
|
|
|
- />
|
|
|
- </el-col>
|
|
|
- <el-col :span="18">
|
|
|
- <el-form ref="employeeForm" :rules="rules" :model="formData" label-width="130px" @submit.native.prevent>
|
|
|
- <input type="password" style="width: 0; height: 0;line-height: 0;padding: 0;border-width: 0;">
|
|
|
- <el-form-item label="账号" prop="account">
|
|
|
- <el-input v-if="!readonly" v-model="formData.account" autocomplete="off" />
|
|
|
- <span v-else>{{ formData.account }}</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item v-show="!formData.id" label="密码" prop="password">
|
|
|
- <el-input v-if="!readonly" v-model="formData.password" autocomplete="off" type="password" />
|
|
|
- <span v-else>{{ formData.password }}</span>
|
|
|
- </el-form-item>
|
|
|
- <!-- <el-form-item label="是否管理员" prop="isSuper">
|
|
|
+ <span v-if="!readonly" class="operation">点击上方进行头像操作</span>
|
|
|
+ <ibps-uploader :visible="dialogFormVisible" :limit="limit" :accept="accept" @action-event="uploaderAction" @close="(visible) => (dialogFormVisible = visible)" />
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="16">
|
|
|
+ <el-form ref="employeeForm" :rules="rules" :model="formData" label-width="130px" @submit.native.prevent>
|
|
|
+ <input type="password" style="width: 0; height: 0; line-height: 0; padding: 0; border-width: 0" />
|
|
|
+ <el-form-item label="账号" prop="account">
|
|
|
+ <el-input v-if="!readonly" v-model="formData.account" autocomplete="off" clearable/>
|
|
|
+ <span v-else>{{ formData.account }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-show="!formData.id" label="密码" prop="password">
|
|
|
+ <el-input v-if="!readonly" v-model="formData.password" autocomplete="off" type="password" show-password clearable/>
|
|
|
+ <span v-else>{{ formData.password }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ <!-- <el-form-item label="是否管理员" prop="isSuper">
|
|
|
<el-switch
|
|
|
v-if="!readonly"
|
|
|
v-model="formData.isSuper"
|
|
|
@@ -45,55 +47,54 @@
|
|
|
{{ formData.isSuper|optionsFilter(isSuperOptions,'label') }}
|
|
|
</el-tag>
|
|
|
</el-form-item> -->
|
|
|
- <el-form-item label="单位名称">
|
|
|
- <el-input v-if="!readonly" v-model="formData.qq" />
|
|
|
- <span v-else>{{ formData.qq }}</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="员工姓名" prop="name">
|
|
|
- <el-input v-if="!readonly" v-model="formData.name" />
|
|
|
- <span v-else>{{ formData.name }}</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="员工状态" prop="status">
|
|
|
- <el-select v-if="!readonly" v-model="formData.status" placeholder="请选择" style="width:100%;">
|
|
|
- <el-option label="激活" value="actived" />
|
|
|
- <el-option label="未激活" value="inactive" />
|
|
|
- <el-option label="锁定" value="locked" />
|
|
|
- <el-option label="禁用" value="disabled" />
|
|
|
- <el-option label="过期" value="expired" />
|
|
|
- <el-option label="已删除" value="deleted" />
|
|
|
- </el-select>
|
|
|
- <el-tag v-else :type="formData.status|optionsFilter(statusOptions,'type')">
|
|
|
- {{ formData.status|optionsFilter(statusOptions,'label') }}
|
|
|
- </el-tag>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="性别">
|
|
|
- <el-radio-group v-if="!readonly" v-model="formData.gender">
|
|
|
- <el-radio label="male">男</el-radio>
|
|
|
- <el-radio label="female">女</el-radio>
|
|
|
- </el-radio-group>
|
|
|
- <el-tag v-else :type="formData.gender|optionsFilter(genderOptions,'type')">
|
|
|
- {{ formData.gender|optionsFilter(genderOptions,'label') }}
|
|
|
- </el-tag>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="邮箱" prop="email" >
|
|
|
- <el-input v-if="!readonly" v-model="formData.email"/>
|
|
|
- <span v-else>{{ formData.email }}</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="地址">
|
|
|
- <el-input v-if="!readonly" v-model="formData.address" />
|
|
|
- <span v-else>{{ formData.address }}</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="手机号码">
|
|
|
- <el-input v-if="!readonly" v-model="formData.mobile" />
|
|
|
- <span v-else>{{ formData.mobile }}</span>
|
|
|
- </el-form-item>
|
|
|
- <!-- <el-form-item label="QQ">
|
|
|
- <el-input v-if="!readonly" v-model="formData.qq" />
|
|
|
- <span v-else>{{ formData.qq }}</span>
|
|
|
- </el-form-item> -->
|
|
|
- </el-form>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
+ <el-form-item label="单位名称">
|
|
|
+ <el-input v-if="!readonly" v-model="formData.qq" clearable/>
|
|
|
+ <span v-else>{{ formData.qq }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="员工姓名" prop="name">
|
|
|
+ <el-input v-if="!readonly" v-model="formData.name" clearable/>
|
|
|
+ <span v-else>{{ formData.name }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="员工状态" prop="status">
|
|
|
+ <el-select v-if="!readonly" v-model="formData.status" clearable placeholder="请选择" style="width: 100%">
|
|
|
+ <el-option label="激活" value="actived" />
|
|
|
+ <el-option label="未激活" value="inactive" />
|
|
|
+ <el-option label="锁定" value="locked" />
|
|
|
+ <el-option label="禁用" value="disabled" />
|
|
|
+ <el-option label="过期" value="expired" />
|
|
|
+ <el-option label="已删除" value="deleted" />
|
|
|
+ </el-select>
|
|
|
+ <el-tag v-else :type="formData.status | optionsFilter(statusOptions, 'type')">
|
|
|
+ {{ formData.status | optionsFilter(statusOptions, 'label') }}
|
|
|
+ </el-tag>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="性别">
|
|
|
+ <el-radio-group v-if="!readonly" v-model="formData.gender">
|
|
|
+ <el-radio label="male">男</el-radio>
|
|
|
+ <el-radio label="female">女</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ <el-tag v-else :type="formData.gender | optionsFilter(genderOptions, 'type')">
|
|
|
+ {{ formData.gender | optionsFilter(genderOptions, 'label') }}
|
|
|
+ </el-tag>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="邮箱" prop="email">
|
|
|
+ <el-input v-model="formData.email" clearable/>
|
|
|
+ <!-- <el-input v-if="!readonly" v-model="formData.email" />
|
|
|
+ <span v-else>{{ formData.email }}</span> -->
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="地址">
|
|
|
+ <el-input v-model="formData.address" clearable/>
|
|
|
+ <!-- <el-input v-if="!readonly" v-model="formData.address" />
|
|
|
+ <span v-else>{{ formData.address }}</span> -->
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="手机号码">
|
|
|
+ <el-input v-model="formData.mobile" clearable/>
|
|
|
+ <!-- <el-input v-if="!readonly" v-model="formData.mobile" />
|
|
|
+ <span v-else>{{ formData.mobile }}</span> -->
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
</template>
|
|
|
<script>
|
|
|
import { fileUrl } from '@/api/platform/file/attachment'
|
|
|
@@ -103,263 +104,268 @@ import { genderOptions, statusOptions, isSuperOptions, userSecurityTextObj, regx
|
|
|
import { getFile } from '@/utils/avatar'
|
|
|
import { validateEmpty } from '@/utils/validate'
|
|
|
export default {
|
|
|
- components: {
|
|
|
- IbpsUploader
|
|
|
- },
|
|
|
- props: {
|
|
|
- data: Object,
|
|
|
- readonly: {
|
|
|
- type: Boolean,
|
|
|
- default: false
|
|
|
- }
|
|
|
-
|
|
|
- },
|
|
|
- data() {
|
|
|
- const validateWcAccount = (rule, value, callback) => {
|
|
|
- const re = /^\S+$/
|
|
|
- if (!re.test(value)) {
|
|
|
- callback(new Error('企业微信账户不能包含空格'))
|
|
|
- } else {
|
|
|
- callback()
|
|
|
- }
|
|
|
- }
|
|
|
- const validateAccount = (rule, value, callback) => {
|
|
|
- const re = /^[a-zA-Z][0-9a-zA-Z]{1,192}$/
|
|
|
- if (!re.test(value)) {
|
|
|
- callback(new Error('账号必须是由数字字母组成,以字母开头,至少3位'))
|
|
|
- } else {
|
|
|
- callback()
|
|
|
- }
|
|
|
- }
|
|
|
- const validateEmail = (rule, value, callback) => {
|
|
|
- var search = '@'
|
|
|
- var start = value.indexOf(search)// 获得字符串的开始位置
|
|
|
- var result = value.substring(start, search.length - start)
|
|
|
- const re = /^[0-9a-zA-Z]{1}[0-9a-zA-Z_.-]{1,16}[0-9a-zA-Z]{1}$/
|
|
|
- if (!re.test(result) && result.length > 3 && result.length < 18) {
|
|
|
- callback(new Error('必须以字母或者数字开头;字母或者数字结尾(结尾不包括邮箱后缀名),且字符类型为字母、数字、下划线、点、减号'))
|
|
|
- } else if (!re.test(result) && (result.length > 18 || result.length < 3)) {
|
|
|
- callback(new Error('长度最少为3位,最多为18位'))
|
|
|
- } else {
|
|
|
- callback()
|
|
|
- }
|
|
|
- }
|
|
|
- const validatePassword = (rule, value, callback) => {
|
|
|
- // const re = /^[0-9a-zA-Z]{1,128}$/
|
|
|
- const complexityRegular = this.regx
|
|
|
- if (value !== undefined) {
|
|
|
- if (this.userSecurity.complexity.length === 0) {
|
|
|
- // if (!re.test(value)) {
|
|
|
- // callback(new Error('密码必须是由数字字母组成,至少1位'))
|
|
|
- // } else {
|
|
|
- callback()
|
|
|
- // }
|
|
|
- } else {
|
|
|
- const flag = []
|
|
|
- for (var l in complexityRegular) {
|
|
|
- if (value.match(complexityRegular[l]) !== null) {
|
|
|
- flag.push(l)
|
|
|
+ components: {
|
|
|
+ IbpsUploader
|
|
|
+ },
|
|
|
+ props: {
|
|
|
+ data: Object,
|
|
|
+ readonly: {
|
|
|
+ type: Boolean,
|
|
|
+ default: false
|
|
|
+ }
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ const validateWcAccount = (rule, value, callback) => {
|
|
|
+ const re = /^\S+$/
|
|
|
+ if (!re.test(value)) {
|
|
|
+ callback(new Error('企业微信账户不能包含空格'))
|
|
|
+ } else {
|
|
|
+ callback()
|
|
|
}
|
|
|
- }
|
|
|
- if (flag.toString() !== this.userSecurity.complexity.toString()) {
|
|
|
- callback(new Error('格式:' + this.userSecurity.maxLengthText + ';' + this.userSecurity.minLengthText + ';' + this.userSecurity.complexityText))
|
|
|
- } else {
|
|
|
- if (value.length > this.userSecurity.maxLength || value.length < this.userSecurity.minLength) {
|
|
|
- callback(new Error('格式:' + this.userSecurity.maxLengthText + ';' + this.userSecurity.minLengthText + ';' + this.userSecurity.complexityText))
|
|
|
+ }
|
|
|
+ const validateAccount = (rule, value, callback) => {
|
|
|
+ const re = /^[a-zA-Z][0-9a-zA-Z]{1,192}$/
|
|
|
+ if (!re.test(value)) {
|
|
|
+ callback(new Error('账号必须是由数字字母组成,以字母开头,至少3位'))
|
|
|
} else {
|
|
|
- callback()
|
|
|
+ callback()
|
|
|
}
|
|
|
- }
|
|
|
}
|
|
|
- } else {
|
|
|
- callback()
|
|
|
- }
|
|
|
- }
|
|
|
- return {
|
|
|
- dialogFormVisible: false,
|
|
|
- limit: 1, // 规定上传个数
|
|
|
- accept: '.jpeg,.gif,.png,.jpg', // 规定上传类型
|
|
|
- formName: 'employeeForm',
|
|
|
- formData: {},
|
|
|
- isSuper: this.$store.getters.isSuper,
|
|
|
- genderOptions: genderOptions,
|
|
|
- statusOptions: statusOptions,
|
|
|
- isSuperOptions: isSuperOptions,
|
|
|
- userSecurityTextObj: userSecurityTextObj,
|
|
|
- regx: regx,
|
|
|
- required: true,
|
|
|
- // 用户安全设置
|
|
|
- userSecurity: {
|
|
|
- complexity: [],
|
|
|
- complexityText: '',
|
|
|
- maxLength: '',
|
|
|
- maxLengthText: '',
|
|
|
- minLength: '',
|
|
|
- minLengthText: ''
|
|
|
- },
|
|
|
- rules: {
|
|
|
- account: [
|
|
|
- { required: true, message: this.$t('validate.required') },
|
|
|
- { type: 'string', min: 3, max: 128, message: '帐号长度至少3位,至多128位', trigger: 'blur' },
|
|
|
- { validator: validateAccount, trigger: 'blur' }
|
|
|
- ],
|
|
|
- wcAccount: [{ required: false, message: this.$t('validate.required') },
|
|
|
- { validator: validateWcAccount, trigger: 'blur' }],
|
|
|
- password: [
|
|
|
- { required: true, message: this.$t('validate.required') },
|
|
|
- { type: 'string', min: 1, max: 128, message: '密码长度至少3位,至多128位', trigger: 'blur' },
|
|
|
- { validator: validatePassword, trigger: 'blur' }
|
|
|
- ],
|
|
|
- name: [{ required: true, message: this.$t('validate.required') },
|
|
|
- { validator: validateEmpty, trigger: 'blur' },
|
|
|
- { min: 1, max: 64, message: '长度不能超过64个字符', trigger: 'blur' }],
|
|
|
- status: [{ required: true, message: this.$t('validate.required') }],
|
|
|
- gender: [{ required: true, message: this.$t('validate.required') }],
|
|
|
- /* email: [
|
|
|
+ const validateEmail = (rule, value, callback) => {
|
|
|
+ var search = '@'
|
|
|
+ var start = value.indexOf(search) // 获得字符串的开始位置
|
|
|
+ var result = value.substring(start, search.length - start)
|
|
|
+ const re = /^[0-9a-zA-Z]{1}[0-9a-zA-Z_.-]{1,16}[0-9a-zA-Z]{1}$/
|
|
|
+ if (!re.test(result) && result.length > 3 && result.length < 18) {
|
|
|
+ callback(new Error('必须以字母或者数字开头;字母或者数字结尾(结尾不包括邮箱后缀名),且字符类型为字母、数字、下划线、点、减号'))
|
|
|
+ } else if (!re.test(result) && (result.length > 18 || result.length < 3)) {
|
|
|
+ callback(new Error('长度最少为3位,最多为18位'))
|
|
|
+ } else {
|
|
|
+ callback()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ const validatePassword = (rule, value, callback) => {
|
|
|
+ // const re = /^[0-9a-zA-Z]{1,128}$/
|
|
|
+ const complexityRegular = this.regx
|
|
|
+ if (value !== undefined) {
|
|
|
+ if (this.userSecurity.complexity.length === 0) {
|
|
|
+ // if (!re.test(value)) {
|
|
|
+ // callback(new Error('密码必须是由数字字母组成,至少1位'))
|
|
|
+ // } else {
|
|
|
+ callback()
|
|
|
+ // }
|
|
|
+ } else {
|
|
|
+ const flag = []
|
|
|
+ for (var l in complexityRegular) {
|
|
|
+ if (value.match(complexityRegular[l]) !== null) {
|
|
|
+ flag.push(l)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (flag.toString() !== this.userSecurity.complexity.toString()) {
|
|
|
+ callback(new Error('格式:' + this.userSecurity.maxLengthText + ';' + this.userSecurity.minLengthText + ';' + this.userSecurity.complexityText))
|
|
|
+ } else {
|
|
|
+ if (value.length > this.userSecurity.maxLength || value.length < this.userSecurity.minLength) {
|
|
|
+ callback(new Error('格式:' + this.userSecurity.maxLengthText + ';' + this.userSecurity.minLengthText + ';' + this.userSecurity.complexityText))
|
|
|
+ } else {
|
|
|
+ callback()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ callback()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ dialogFormVisible: false,
|
|
|
+ limit: 1, // 规定上传个数
|
|
|
+ accept: '.jpeg,.gif,.png,.jpg', // 规定上传类型
|
|
|
+ formName: 'employeeForm',
|
|
|
+ formData: {},
|
|
|
+ isSuper: this.$store.getters.isSuper,
|
|
|
+ genderOptions: genderOptions,
|
|
|
+ statusOptions: statusOptions,
|
|
|
+ isSuperOptions: isSuperOptions,
|
|
|
+ userSecurityTextObj: userSecurityTextObj,
|
|
|
+ regx: regx,
|
|
|
+ required: true,
|
|
|
+ // 用户安全设置
|
|
|
+ userSecurity: {
|
|
|
+ complexity: [],
|
|
|
+ complexityText: '',
|
|
|
+ maxLength: '',
|
|
|
+ maxLengthText: '',
|
|
|
+ minLength: '',
|
|
|
+ minLengthText: ''
|
|
|
+ },
|
|
|
+ rules: {
|
|
|
+ account: [
|
|
|
+ { required: true, message: this.$t('validate.required') },
|
|
|
+ { type: 'string', min: 3, max: 128, message: '帐号长度至少3位,至多128位', trigger: 'blur' },
|
|
|
+ { validator: validateAccount, trigger: 'blur' }
|
|
|
+ ],
|
|
|
+ wcAccount: [
|
|
|
+ { required: false, message: this.$t('validate.required') },
|
|
|
+ { validator: validateWcAccount, trigger: 'blur' }
|
|
|
+ ],
|
|
|
+ password: [
|
|
|
+ { required: true, message: this.$t('validate.required') },
|
|
|
+ { type: 'string', min: 1, max: 128, message: '密码长度至少3位,至多128位', trigger: 'blur' },
|
|
|
+ { validator: validatePassword, trigger: 'blur' }
|
|
|
+ ],
|
|
|
+ name: [
|
|
|
+ { required: true, message: this.$t('validate.required') },
|
|
|
+ { validator: validateEmpty, trigger: 'blur' },
|
|
|
+ { min: 1, max: 64, message: '长度不能超过64个字符', trigger: 'blur' }
|
|
|
+ ],
|
|
|
+ status: [{ required: true, message: this.$t('validate.required') }],
|
|
|
+ gender: [{ required: true, message: this.$t('validate.required') }]
|
|
|
+ /* email: [
|
|
|
{ required: true, message: this.$t('validate.required') },
|
|
|
{ type: 'email', message: '请输入正确的邮箱地址', min: 3, max: 18, trigger: ['blur', 'change'] },
|
|
|
{ validator: validateEmail, trigger: 'blur' }
|
|
|
] */
|
|
|
- }
|
|
|
- }
|
|
|
- },
|
|
|
- computed: {
|
|
|
- image() {
|
|
|
- return getFile(this.formData.photo)
|
|
|
- }
|
|
|
- },
|
|
|
- watch: {
|
|
|
- data() {
|
|
|
- this.formData = this.data
|
|
|
- },
|
|
|
- formData: {
|
|
|
- handler: function(val, oldVal) {
|
|
|
- if (val !== oldVal) {
|
|
|
- if (this.formData.id && !this.readonly) {
|
|
|
- this.rules.password[0].required = false
|
|
|
- } else {
|
|
|
- this.rules.password[0].required = true
|
|
|
- }
|
|
|
- this.handleEmitEvent()
|
|
|
- this.formValidate()
|
|
|
+ }
|
|
|
}
|
|
|
- },
|
|
|
- deep: true
|
|
|
- }
|
|
|
- },
|
|
|
- mounted() {
|
|
|
- this.formData = this.data
|
|
|
- },
|
|
|
- created() {
|
|
|
- this.isSuper = this.$store.getters.isSuper
|
|
|
- },
|
|
|
- methods: {
|
|
|
- handleGetDefaultUserSecurity() {
|
|
|
- getDefaultUserSecurity().then(response => {
|
|
|
- const userSecurityTextObj = this.userSecurityTextObj
|
|
|
- const complexityArr = response.data.complexity.split(',').sort()
|
|
|
- const arr = []
|
|
|
- complexityArr.forEach(i => {
|
|
|
- arr.push(userSecurityTextObj[parseInt(i)])
|
|
|
- })
|
|
|
- this.userSecurity.complexity = complexityArr
|
|
|
- this.userSecurity.complexityText = arr.join(',')
|
|
|
- this.userSecurity.maxLength = response.data.maxLength
|
|
|
- this.userSecurity.maxLengthText = '最大长度' + response.data.maxLength
|
|
|
- this.userSecurity.minLength = response.data.minLength
|
|
|
- this.userSecurity.minLengthText = '最小长度' + response.data.minLength
|
|
|
- }).catch(() => {})
|
|
|
},
|
|
|
- /**
|
|
|
- * 表单验证
|
|
|
- */
|
|
|
- formValidate() {
|
|
|
- this.$nextTick(() => {
|
|
|
- this.$refs[this.formName].validate(() => {})
|
|
|
- })
|
|
|
+ computed: {
|
|
|
+ image() {
|
|
|
+ return getFile(this.formData.photo)
|
|
|
+ }
|
|
|
},
|
|
|
- validate(callback) {
|
|
|
- this.$refs[this.formName].validate((v) => {
|
|
|
- callback(v)
|
|
|
- })
|
|
|
+ watch: {
|
|
|
+ data() {
|
|
|
+ this.formData = this.data
|
|
|
+ },
|
|
|
+ formData: {
|
|
|
+ handler: function (val, oldVal) {
|
|
|
+ if (val !== oldVal) {
|
|
|
+ if (this.formData.id && !this.readonly) {
|
|
|
+ this.rules.password[0].required = false
|
|
|
+ } else {
|
|
|
+ this.rules.password[0].required = true
|
|
|
+ }
|
|
|
+ this.handleEmitEvent()
|
|
|
+ this.formValidate()
|
|
|
+ }
|
|
|
+ },
|
|
|
+ deep: true
|
|
|
+ }
|
|
|
},
|
|
|
- /**
|
|
|
- * 重置字段
|
|
|
- */
|
|
|
- resetFields() {
|
|
|
- this.$refs[this.formName].resetFields()
|
|
|
+ mounted() {
|
|
|
+ this.formData = this.data
|
|
|
},
|
|
|
- handleEmitEvent() {
|
|
|
- this.$emit('input', this.formData)
|
|
|
+ created() {
|
|
|
+ this.isSuper = this.$store.getters.isSuper
|
|
|
},
|
|
|
- uploaderAction(buttonKey, data) {
|
|
|
- this.formData.photo = fileUrl(data.id || data[0].id)
|
|
|
- this.dialogFormVisible = false
|
|
|
+ methods: {
|
|
|
+ handleGetDefaultUserSecurity() {
|
|
|
+ getDefaultUserSecurity()
|
|
|
+ .then((response) => {
|
|
|
+ const userSecurityTextObj = this.userSecurityTextObj
|
|
|
+ const complexityArr = response.data.complexity.split(',').sort()
|
|
|
+ const arr = []
|
|
|
+ complexityArr.forEach((i) => {
|
|
|
+ arr.push(userSecurityTextObj[parseInt(i)])
|
|
|
+ })
|
|
|
+ this.userSecurity.complexity = complexityArr
|
|
|
+ this.userSecurity.complexityText = arr.join(',')
|
|
|
+ this.userSecurity.maxLength = response.data.maxLength
|
|
|
+ this.userSecurity.maxLengthText = '最大长度' + response.data.maxLength
|
|
|
+ this.userSecurity.minLength = response.data.minLength
|
|
|
+ this.userSecurity.minLengthText = '最小长度' + response.data.minLength
|
|
|
+ })
|
|
|
+ .catch(() => {})
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 表单验证
|
|
|
+ */
|
|
|
+ formValidate() {
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs[this.formName].validate(() => {})
|
|
|
+ })
|
|
|
+ },
|
|
|
+ validate(callback) {
|
|
|
+ this.$refs[this.formName].validate((v) => {
|
|
|
+ callback(v)
|
|
|
+ })
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 重置字段
|
|
|
+ */
|
|
|
+ resetFields() {
|
|
|
+ this.$refs[this.formName].resetFields()
|
|
|
+ },
|
|
|
+ handleEmitEvent() {
|
|
|
+ this.$emit('input', this.formData)
|
|
|
+ },
|
|
|
+ uploaderAction(buttonKey, data) {
|
|
|
+ this.formData.photo = fileUrl(data.id || data[0].id)
|
|
|
+ this.dialogFormVisible = false
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
}
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" >
|
|
|
- .operation{
|
|
|
+.operation {
|
|
|
margin-left: 75px;
|
|
|
height: 30px;
|
|
|
line-height: 30px;
|
|
|
display: block;
|
|
|
- }
|
|
|
- .avatar-uploader .el-upload {
|
|
|
- /* margin-top: 5px; */
|
|
|
- border: 1px dashed #d9d9d9;
|
|
|
- border-radius: 6px;
|
|
|
- cursor: pointer;
|
|
|
- position: relative;
|
|
|
- overflow: hidden;
|
|
|
- }
|
|
|
- .avatar-uploader .el-upload:hover {
|
|
|
- border-color: #409EFF;
|
|
|
- }
|
|
|
- .avatar-uploader-icon {
|
|
|
+}
|
|
|
+.avatar-uploader .el-upload {
|
|
|
+ /* margin-top: 5px; */
|
|
|
+ border: 1px dashed #d9d9d9;
|
|
|
+ border-radius: 6px;
|
|
|
+ cursor: pointer;
|
|
|
+ position: relative;
|
|
|
+ overflow: hidden;
|
|
|
+}
|
|
|
+.avatar-uploader .el-upload:hover {
|
|
|
+ border-color: #409eff;
|
|
|
+}
|
|
|
+.avatar-uploader-icon {
|
|
|
font-size: 28px;
|
|
|
color: #8c939d;
|
|
|
width: 178px;
|
|
|
height: 178px;
|
|
|
line-height: 178px !important;
|
|
|
text-align: center;
|
|
|
- border:1px dashed #d9d9d9;
|
|
|
+ border: 1px dashed #d9d9d9;
|
|
|
border-radius: 4px;
|
|
|
- }
|
|
|
- .photo-area{
|
|
|
- display:block;
|
|
|
+}
|
|
|
+.photo-area {
|
|
|
+ display: block;
|
|
|
position: relative;
|
|
|
width: 178px;
|
|
|
height: 178px;
|
|
|
- z-index:9997;
|
|
|
+ z-index: 9997;
|
|
|
.avatar {
|
|
|
- display: block;
|
|
|
- width: 178px;
|
|
|
- height: 178px;
|
|
|
+ display: block;
|
|
|
+ width: 178px;
|
|
|
+ height: 178px;
|
|
|
}
|
|
|
- .handle-photo-buttons{
|
|
|
- width:100%;
|
|
|
- height:100%;
|
|
|
- position: absolute;
|
|
|
- top:0;
|
|
|
- background: rgba(7, 0, 0, 0.6);
|
|
|
- display:none;
|
|
|
- z-index:9998;
|
|
|
- >div{
|
|
|
- margin:44% 0 0 30%;
|
|
|
- i{
|
|
|
- z-index:9999;
|
|
|
- cursor: pointer;
|
|
|
- margin:0 7px;
|
|
|
- color:white;
|
|
|
- font-size:18px;
|
|
|
+ .handle-photo-buttons {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ position: absolute;
|
|
|
+ top: 0;
|
|
|
+ background: rgba(7, 0, 0, 0.6);
|
|
|
+ display: none;
|
|
|
+ z-index: 9998;
|
|
|
+ > div {
|
|
|
+ margin: 44% 0 0 30%;
|
|
|
+ i {
|
|
|
+ z-index: 9999;
|
|
|
+ cursor: pointer;
|
|
|
+ margin: 0 7px;
|
|
|
+ color: white;
|
|
|
+ font-size: 18px;
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
}
|
|
|
- }
|
|
|
- .photo-area:hover>.handle-photo-buttons{
|
|
|
- display: block;
|
|
|
- }
|
|
|
+}
|
|
|
+.photo-area:hover > .handle-photo-buttons {
|
|
|
+ display: block;
|
|
|
+}
|
|
|
</style>
|