| | |
| | | @confirm="confirm" |
| | | > |
| | | <el-form :model="form" ref="form" :rules="rules"> |
| | | <el-form-item label="用户名" prop="username" required v-if="form.id ==null"> |
| | | <el-form-item label="用户名" prop="username" required> |
| | | <el-input v-model="form.username" placeholder="请输入用户名" v-trim maxlength="50"/> |
| | | </el-form-item> |
| | | <el-form-item label="姓名" prop="realname" required> |
| | |
| | | <el-radio label="0">女</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <!-- <el-form-item label="头像" prop="avatar" required>--> |
| | | <!-- <el-radio-group v-model="form.avatar" class="form-item-avatar">--> |
| | | <!-- <el-radio label="/avatar/man.png" border><img src="/avatar/man.png" alt=""></el-radio>--> |
| | | <!-- <el-radio label="/avatar/woman.png" border><img src="/avatar/woman.png" alt=""></el-radio>--> |
| | | <!-- </el-radio-group>--> |
| | | <!-- </el-form-item>--> |
| | | <!-- <el-form-item v-if="form.id == null" label="初始密码" prop="password" required>--> |
| | | <!-- <el-input v-model="form.password" type="password" placeholder="请输入初始密码" maxlength="30" show-password/>--> |
| | | <!-- </el-form-item>--> |
| | | <!-- <el-form-item label="所属部门" prop="departmentId" required>--> |
| | | <!-- <DepartmentSelect v-model="form.departmentId" placeholder="请选择用户所属部门" :inline="false" clearable/>--> |
| | | <!-- </el-form-item>--> |
| | | <!-- <el-form-item label="岗位" prop="positionId">--> |
| | | <!-- <PositionSelect v-model="form.positionIds" placeholder="请选择用户所在岗位" :inline="false" :multiple="true" clearable/>--> |
| | | <!-- </el-form-item>--> |
| | | <el-form-item label="头像" prop="avatar" required> |
| | | <el-radio-group v-model="form.avatar" class="form-item-avatar"> |
| | | <el-radio label="avatar/man.png" border><img src="@/assets/avatar/man.png" alt=""></el-radio> |
| | | <el-radio label="avatar/woman.png" border><img src="@/assets/avatar/woman.png" alt=""></el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item v-if="form.id == null" label="初始密码" prop="password" required> |
| | | <el-input v-model="form.password" type="password" placeholder="请输入初始密码" maxlength="30" show-password/> |
| | | </el-form-item> |
| | | <el-form-item label="工号" prop="empNo"> |
| | | <el-input v-model="form.empNo" placeholder="请输入工号" v-trim maxlength="50"/> |
| | | </el-form-item> |
| | | <el-form-item label="手机号码" prop="mobile"> |
| | | <el-input v-model="form.mobile" placeholder="请输入手机号码" v-trim maxlength="11"/> |
| | | </el-form-item> |
| | | <!-- <el-form-item label="邮箱" prop="email">--> |
| | | <!-- <el-input v-model="form.email" placeholder="请输入邮箱" v-trim maxlength="200"/>--> |
| | | <!-- </el-form-item>--> |
| | | <el-form-item label="邮箱" prop="email"> |
| | | <el-input v-model="form.email" placeholder="请输入邮箱" v-trim maxlength="200"/> |
| | | </el-form-item> |
| | | <el-form-item label="生日" prop="birthday"> |
| | | <el-date-picker v-model="form.birthday" value-format="yyyy-MM-dd" placeholder="请选择用户生日"/> |
| | | </el-form-item> |
| | |
| | | <script> |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import DepartmentSelect from '@/components/common/DepartmentSelect' |
| | | import PositionSelect from '@/components/common/PositionSelect' |
| | | import { checkMobile, checkEmail } from '@/utils/form' |
| | | |
| | | export default { |
| | | name: 'OperaUserWindow', |
| | | extends: BaseOpera, |
| | | components: { PositionSelect, DepartmentSelect, GlobalWindow }, |
| | | components: { GlobalWindow }, |
| | | data () { |
| | | return { |
| | | // 表单数据 |
| | |
| | | username: '', // 用户名 |
| | | realname: '', // 姓名 |
| | | empNo: '', // 工号 |
| | | departmentId: null, // 所属部门ID |
| | | positionIds: [], // 所属岗位ID集 |
| | | avatar: '/avatar/man.png', // 头像 |
| | | password: '', // 密码 |
| | | mobile: '', // 手机号码 |
| | |
| | | { required: true, message: '请输入姓名' } |
| | | ], |
| | | password: [ |
| | | { required: true, message: '请输入密码' } |
| | | ], |
| | | departmentId: [ |
| | | { required: true, message: '请选择部门' } |
| | | { required: true, message: '请输入密码', trigger: 'blur' }, |
| | | { validator: this.validatePassword, trigger: 'blur' } |
| | | ], |
| | | avatar: [ |
| | | { required: true, message: '请选择用户头像' } |
| | |
| | | } |
| | | }, |
| | | methods: { |
| | | validatePassword (rule, value, callback) { |
| | | if (!value) { |
| | | callback(new Error('请输入密码')) |
| | | } else { |
| | | const lengthValid = /^.{6,20}$/.test(value) |
| | | const hasLetter = /[a-zA-Z]/.test(value) |
| | | const hasNumber = /[0-9]/.test(value) |
| | | const hasSpecial = /[!@#$%^&*(),.?":{}|<>]/.test(value) |
| | | |
| | | const typesCount = [hasLetter, hasNumber, hasSpecial].filter(Boolean).length |
| | | |
| | | if (!lengthValid) { |
| | | callback(new Error('密码长度需为6到20个字符')) |
| | | } else if (typesCount < 2) { |
| | | callback(new Error('密码需包含字母、数字及特殊字符中的至少两种')) |
| | | } else { |
| | | callback() // 验证通过 |
| | | } |
| | | } |
| | | }, |
| | | /** |
| | | * @title 窗口标题 |
| | | * @target 编辑的用户对象 |
| | | * 打开窗口 |
| | | * |
| | | * @param title 窗口标题 |
| | | * @param target 行对象(仅编辑需该参数) |
| | | */ |
| | | open (title, target) { |
| | | this.title = title |
| | |
| | | this.form.id = null |
| | | this.form.departmentId = null |
| | | this.form.positionIds = [] |
| | | this.form.username=null |
| | | }) |
| | | return |
| | | } |