|  |  |  | 
|---|
|  |  |  | @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 | 
|---|
|  |  |  | } | 
|---|