yz
2021-01-16 8f7dcd5508c118d8e517f6264b76aa1276d8e907
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
<template>
  <el-form ref="form" :model="user" :rules="rules" label-position="right" label-width="80px" class="form">
    <el-form-item :label="$t('table.user.email')" prop="email">
      <el-input v-model="user.email" />
    </el-form-item>
    <el-form-item :label="$t('table.user.mobile')" prop="mobile">
      <el-input v-model="user.mobile" />
    </el-form-item>
    <el-form-item :label="$t('table.user.dept')" prop="deptId">
      <treeselect
        v-model="user.deptId"
        :multiple="false"
        :options="depts"
        :clear-value-text="$t('common.clear')"
        placeholder=" "
        @select="onSelect"
      />
    </el-form-item>
    <el-form-item :label="$t('table.user.sex')" prop="sex">
      <el-select v-model="user.sex" value="" placeholder="">
        <el-option value="0" :label="$t('common.sex.male') " />
        <el-option value="1" :label="$t('common.sex.female') " />
        <el-option value="2" :label="$t('common.sex.secret') " />
      </el-select>
    </el-form-item>
    <el-form-item :label="$t('table.user.desc')" prop="description">
      <el-input v-model="user.description" type="textarea" rows="3" />
    </el-form-item>
    <el-form-item>
      <el-button type="primary" plain :loading="buttonLoading" @click="submit">{{ $t('common.edit') }}</el-button>
    </el-form-item>
  </el-form>
</template>
 
<script>
import { validMobile } from '@/utils/my-validate'
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
 
export default {
  components: { Treeselect },
  props: {
    user: {
      type: Object,
      default: () => {
        return {
          name: '',
          email: ''
        }
      }
    }
  },
  data() {
    return {
      depts: [],
      buttonLoading: false,
      deptName: '',
      change: false,
      rules: {
        email: { type: 'email', message: this.$t('rules.email'), trigger: 'blur' },
        mobile: { validator: (rule, value, callback) => {
          if (value !== '' && !validMobile(value)) {
            callback(this.$t('rules.mobile'))
          } else {
            callback()
          }
        }, trigger: 'blur' },
        sex: { required: true, message: this.$t('rules.require'), trigger: 'change' },
        description: { max: 100, message: this.$t('rules.noMoreThan100'), trigger: 'blur' }
      }
    }
  },
  mounted() {
    this.initDept()
  },
  methods: {
    submit() {
      this.$refs.form.validate((valid) => {
        if (valid) {
          this.buttonLoading = true
          const temp = { ...this.user }
          temp.lastLoginTime = temp.modifyTime = temp.createTime = null
          this.$put('system/user/profile', { ...temp }).then(() => {
            this.buttonLoading = false
            this.$message({
              message: this.$t('tips.updateSuccess'),
              type: 'success'
            })
            if (this.change) {
              this.user.deptName = this.deptName
            }
            this.$store.commit('account/setUser', this.user)
          })
        } else {
          return false
        }
      })
    },
    onSelect(a, b) {
      this.deptName = a.label
      this.change = true
    },
    initDept() {
      this.$get('system/dept').then((r) => {
        this.depts = r.data.data.rows
      }).catch((error) => {
        console.error(error)
        this.$message({
          message: this.$t('tips.getDataFail'),
          type: 'error'
        })
      })
    }
  }
}
</script>
<style lang="scss" scoped>
  .form {
    padding: 10px 0 0 0;
  }
</style>