| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- <template>
- <el-dialog :visible.sync="visible" :title="!dataForm.id ? $t('add') : $t('update')" :close-on-click-modal="false" :close-on-press-escape="false">
- <el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmitHandle()" label-width="120px">
- <el-form-item prop="username" :label="$t('user.username')">
- <el-input v-model="dataForm.username" :placeholder="$t('user.username')"></el-input>
- </el-form-item>
- <!-- <el-form-item prop="deptName" :label="$t('user.deptName')">
- <ren-dept-tree v-model="dataForm.deptId" :placeholder="$t('dept.title')" :dept-name.sync="dataForm.deptName"></ren-dept-tree>
- </el-form-item> -->
- <el-form-item prop="password" :label="$t('user.password')" :class="{ 'is-required': !dataForm.id }">
- <el-input v-model="dataForm.password" type="password" :placeholder="$t('user.password')"></el-input>
- </el-form-item>
- <el-form-item prop="confirmPassword" :label="$t('user.confirmPassword')" :class="{ 'is-required': !dataForm.id }">
- <el-input v-model="dataForm.confirmPassword" type="password" :placeholder="$t('user.confirmPassword')"></el-input>
- </el-form-item>
- <el-form-item prop="realName" :label="$t('user.realName')">
- <el-input v-model="dataForm.realName" :placeholder="$t('user.realName')"></el-input>
- </el-form-item>
- <el-form-item prop="gender" :label="$t('user.gender')">
- <ren-radio-group v-model="dataForm.gender" dict-type="gender"></ren-radio-group>
- </el-form-item>
- <el-form-item prop="email" :label="$t('user.email')">
- <el-input v-model="dataForm.email" :placeholder="$t('user.email')"></el-input>
- </el-form-item>
- <el-form-item prop="mobile" :label="$t('user.mobile')">
- <el-input v-model="dataForm.mobile" :placeholder="$t('user.mobile')"></el-input>
- </el-form-item>
- <el-form-item prop="roleIdList" :label="$t('user.roleIdList')" class="role-list">
- <el-select v-model="dataForm.roleIdList" multiple :placeholder="$t('user.roleIdList')">
- <el-option v-for="role in roleList" :key="role.id" :label="role.name" :value="role.id"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item prop="status" :label="$t('user.status')" size="mini">
- <el-radio-group v-model="dataForm.status">
- <el-radio :label="0">{{ $t('user.status0') }}</el-radio>
- <el-radio :label="1">{{ $t('user.status1') }}</el-radio>
- </el-radio-group>
- </el-form-item>
- </el-form>
- <template slot="footer">
- <el-button @click="visible = false">{{ $t('cancel') }}</el-button>
- <el-button type="primary" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button>
- </template>
- </el-dialog>
- </template>
- <script>
- import debounce from 'lodash/debounce'
- import { isEmail, isMobile } from '@/utils/validate'
- export default {
- data () {
- return {
- visible: false,
- roleList: [],
- roleIdListDefault: [],
- dataForm: {
- id: '',
- username: '',
- deptId: '',
- deptName: '',
- password: '',
- confirmPassword: '',
- realName: '',
- gender: 0,
- email: '',
- mobile: '',
- roleIdList: [],
- status: 1
- }
- }
- },
- computed: {
- dataRule () {
- var validatePassword = (rule, value, callback) => {
- if (!this.dataForm.id && !/\S/.test(value)) {
- return callback(new Error(this.$t('validate.required')))
- }
- callback()
- }
- var validateConfirmPassword = (rule, value, callback) => {
- if (!this.dataForm.id && !/\S/.test(value)) {
- return callback(new Error(this.$t('validate.required')))
- }
- if (this.dataForm.password !== value) {
- return callback(new Error(this.$t('user.validate.confirmPassword')))
- }
- callback()
- }
- var validateEmail = (rule, value, callback) => {
- if (value && !isEmail(value)) {
- return callback(new Error(this.$t('validate.format', { 'attr': this.$t('user.email') })))
- }
- callback()
- }
- var validateMobile = (rule, value, callback) => {
- if (value && !isMobile(value)) {
- return callback(new Error(this.$t('validate.format', { 'attr': this.$t('user.mobile') })))
- }
- callback()
- }
- return {
- username: [
- { required: true, message: this.$t('validate.required'), trigger: 'blur' }
- ],
- password: [
- { validator: validatePassword, trigger: 'blur' }
- ],
- confirmPassword: [
- { validator: validateConfirmPassword, trigger: 'blur' }
- ],
- realName: [
- { required: true, message: this.$t('validate.required'), trigger: 'blur' }
- ],
- email: [
- { validator: validateEmail, trigger: 'blur' }
- ],
- mobile: [
- { validator: validateMobile, trigger: 'blur' }
- ]
- }
- }
- },
- methods: {
- init () {
- this.visible = true
- this.dataForm.deptId = ''
- this.$nextTick(() => {
- this.$refs['dataForm'].resetFields()
- this.roleIdListDefault = []
- Promise.all([
- this.getRoleList()
- ]).then(() => {
- if (this.dataForm.id) {
- this.getInfo()
- }
- })
- })
- },
- // 获取角色列表
- getRoleList () {
- return this.$http.get('/sys/role/list').then(({ data: res }) => {
- if (res.code !== 0) {
- return this.$message.error(res.msg)
- }
- this.roleList = res.data
- }).catch(() => {})
- },
- // 获取信息
- getInfo () {
- this.$http.get(`/sys/user/${this.dataForm.id}`).then(({ data: res }) => {
- if (res.code !== 0) {
- return this.$message.error(res.msg)
- }
- this.dataForm = {
- ...this.dataForm,
- ...res.data,
- roleIdList: []
- }
- // 角色配置, 区分是否为默认角色
- for (var i = 0; i < res.data.roleIdList.length; i++) {
- if (this.roleList.filter(item => item.id === res.data.roleIdList[i])[0]) {
- this.dataForm.roleIdList.push(res.data.roleIdList[i])
- continue
- }
- this.roleIdListDefault.push(res.data.roleIdList[i])
- }
- }).catch(() => {})
- },
- // 表单提交
- dataFormSubmitHandle: debounce(function () {
- this.$refs['dataForm'].validate((valid) => {
- if (!valid) {
- return false
- }
- this.$http[!this.dataForm.id ? 'post' : 'put']('/sys/user', {
- ...this.dataForm,
- roleIdList: [
- ...this.dataForm.roleIdList,
- ...this.roleIdListDefault
- ]
- }).then(({ data: res }) => {
- if (res.code !== 0) {
- return this.$message.error(res.msg)
- }
- this.$message({
- message: this.$t('prompt.success'),
- type: 'success',
- duration: 500,
- onClose: () => {
- this.visible = false
- this.$emit('refreshDataList')
- }
- })
- }).catch(() => {})
- })
- }, 1000, { 'leading': true, 'trailing': false })
- }
- }
- </script>
- <style lang="scss">
- .mod-sys__user {
- .role-list {
- .el-select {
- width: 100%;
- }
- }
- }
- </style>
|