¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <!-- æ°å»º/ä¿®æ¹ --> |
| | | <GlobalWindow |
| | | :title="title" |
| | | :visible.sync="visible" |
| | | :confirm-working="isWorking" |
| | | @confirm="confirm" |
| | | > |
| | | <el-form :model="form" ref="form" :rules="rules"> |
| | | <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-input v-model="form.realname" placeholder="请è¾å
¥å§å" v-trim maxlength="50"/> |
| | | </el-form-item> |
| | | <el-form-item label="æ§å«" prop="sex" required> |
| | | <el-radio-group v-model="form.sex"> |
| | | <el-radio label="1">ç·</el-radio> |
| | | <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="@/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="birthday"> |
| | | <el-date-picker v-model="form.birthday" value-format="yyyy-MM-dd" placeholder="è¯·éæ©ç¨æ·çæ¥"/> |
| | | </el-form-item> |
| | | </el-form> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import { checkMobile, checkEmail } from '@/utils/form' |
| | | |
| | | export default { |
| | | name: 'OperaUserWindow', |
| | | extends: BaseOpera, |
| | | components: { GlobalWindow }, |
| | | data () { |
| | | return { |
| | | // è¡¨åæ°æ® |
| | | form: { |
| | | id: null, |
| | | username: '', // ç¨æ·å |
| | | realname: '', // å§å |
| | | empNo: '', // å·¥å· |
| | | avatar: '/avatar/man.png', // 头å |
| | | password: '', // å¯ç |
| | | mobile: '', // ææºå·ç |
| | | email: '', // é®ç®± |
| | | sex: '1', // æ§å« |
| | | birthday: '' // çæ¥ |
| | | }, |
| | | // éªè¯è§å |
| | | rules: { |
| | | username: [ |
| | | { required: true, message: '请è¾å
¥ç¨æ·å' } |
| | | ], |
| | | realname: [ |
| | | { required: true, message: '请è¾å
¥å§å' } |
| | | ], |
| | | password: [ |
| | | { required: true, message: '请è¾å
¥å¯ç ', trigger: 'blur' }, |
| | | { validator: this.validatePassword, trigger: 'blur' } |
| | | ], |
| | | avatar: [ |
| | | { required: true, message: 'è¯·éæ©ç¨æ·å¤´å' } |
| | | ], |
| | | sex: [ |
| | | { required: true, message: 'è¯·éæ©ç¨æ·æ§å«' } |
| | | ], |
| | | mobile: [ |
| | | { validator: checkMobile } |
| | | ], |
| | | email: [ |
| | | { validator: checkEmail } |
| | | ] |
| | | } |
| | | } |
| | | }, |
| | | 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() // éªè¯éè¿ |
| | | } |
| | | } |
| | | }, |
| | | /** |
| | | * æå¼çªå£ |
| | | * |
| | | * @param title çªå£æ é¢ |
| | | * @param target è¡å¯¹è±¡ï¼ä»
ç¼è¾éè¯¥åæ°ï¼ |
| | | */ |
| | | open (title, target) { |
| | | this.title = title |
| | | this.visible = true |
| | | // æ°å»º |
| | | if (target == null) { |
| | | this.$nextTick(() => { |
| | | this.$refs.form.resetFields() |
| | | this.form.id = null |
| | | this.form.departmentId = null |
| | | this.form.positionIds = [] |
| | | }) |
| | | return |
| | | } |
| | | // ç¼è¾ |
| | | this.$nextTick(() => { |
| | | for (const key in this.form) { |
| | | this.form[key] = target[key] |
| | | } |
| | | this.form.departmentId = target.department == null ? null : target.department.id |
| | | this.form.positionIds = target.positions == null ? [] : target.positions.map(p => p.id) |
| | | }) |
| | | } |
| | | }, |
| | | created () { |
| | | this.config({ |
| | | api: '/system/user' |
| | | }) |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .global-window { |
| | | /deep/ .el-date-editor { |
| | | width: 100%; |
| | | } |
| | | // 表å头åå¤ç |
| | | /deep/ .form-item-avatar { |
| | | .el-radio.is-bordered { |
| | | height: auto; |
| | | padding: 6px; |
| | | margin: 0 10px 0 0; |
| | | .el-radio__input { |
| | | display: none; |
| | | } |
| | | .el-radio__label { |
| | | padding: 0; |
| | | width: 48px; |
| | | display: block; |
| | | img { |
| | | width: 100%; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |