| | |
| | | <span class="header-user"> |
| | | <i class="el-icon-user"></i> {{ username }} |
| | | </span> |
| | | <el-button type="text" class="header-link" @click="openChangePwd"> |
| | | <i class="el-icon-key"></i> 修改密码 |
| | | </el-button> |
| | | <el-button type="text" class="header-logout" @click="logout"> |
| | | <i class="el-icon-switch-button"></i> 退出登录 |
| | | </el-button> |
| | | </div> |
| | | |
| | | <el-dialog title="修改密码" :visible.sync="pwdDialogVisible" width="420px" @closed="resetPwdForm"> |
| | | <el-form ref="pwdForm" :model="pwdForm" :rules="pwdRules" label-width="90px"> |
| | | <el-form-item label="原密码" prop="oldPassword"> |
| | | <el-input v-model="pwdForm.oldPassword" type="password" show-password placeholder="请输入原密码"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="新密码" prop="newPassword"> |
| | | <el-input v-model="pwdForm.newPassword" type="password" show-password placeholder="至少 6 位"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="确认新密码" prop="confirmPassword"> |
| | | <el-input v-model="pwdForm.confirmPassword" type="password" show-password placeholder="再次输入新密码"></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer"> |
| | | <el-button @click="pwdDialogVisible = false">取消</el-button> |
| | | <el-button type="primary" :loading="pwdSaving" @click="submitPwd">保存</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </el-header> |
| | | </template> |
| | | |
| | | <script> |
| | | import api from '@/api' |
| | | |
| | | export default { |
| | | name: 'AppHeader', |
| | | props: { |
| | | title: { type: String, required: true } |
| | | }, |
| | | data() { |
| | | return { |
| | | pwdDialogVisible: false, |
| | | pwdSaving: false, |
| | | pwdForm: { oldPassword: '', newPassword: '', confirmPassword: '' }, |
| | | pwdRules: { |
| | | oldPassword: [{ required: true, message: '请输入原密码', trigger: 'blur' }], |
| | | newPassword: [ |
| | | { required: true, message: '请输入新密码', trigger: 'blur' }, |
| | | { min: 6, message: '新密码长度不能少于 6 位', trigger: 'blur' } |
| | | ], |
| | | confirmPassword: [ |
| | | { required: true, message: '请再次输入新密码', trigger: 'blur' }, |
| | | { |
| | | validator: (rule, value, cb) => (value === this.pwdForm.newPassword ? cb() : cb(new Error('两次输入的密码不一致'))), |
| | | trigger: 'blur' |
| | | } |
| | | ] |
| | | } |
| | | } |
| | | }, |
| | | computed: { |
| | | username() { |
| | |
| | | } |
| | | }, |
| | | methods: { |
| | | openChangePwd() { |
| | | this.pwdForm = { oldPassword: '', newPassword: '', confirmPassword: '' } |
| | | this.pwdDialogVisible = true |
| | | this.$nextTick(() => this.$refs.pwdForm && this.$refs.pwdForm.clearValidate()) |
| | | }, |
| | | resetPwdForm() { |
| | | this.$refs.pwdForm && this.$refs.pwdForm.clearValidate() |
| | | }, |
| | | submitPwd() { |
| | | this.$refs.pwdForm.validate(valid => { |
| | | if (!valid) return |
| | | this.pwdSaving = true |
| | | api.post('/auth/change-password', { |
| | | oldPassword: this.pwdForm.oldPassword, |
| | | newPassword: this.pwdForm.newPassword |
| | | }) |
| | | .then(() => { |
| | | this.$message.success('密码修改成功') |
| | | this.pwdDialogVisible = false |
| | | }) |
| | | .catch(err => { |
| | | if (err && err._toast) return |
| | | const d = err && err.response && err.response.data |
| | | this.$message.error((d && d.message) || '密码修改失败') |
| | | }) |
| | | .finally(() => { this.pwdSaving = false }) |
| | | }) |
| | | }, |
| | | logout() { |
| | | this.$confirm('确定退出登录吗?', '提示', { |
| | | confirmButtonText: '退出', |
| | |
| | | line-height: normal; |
| | | } |
| | | .header-user { opacity: 0.92; } |
| | | .header-link { color: #fff; font-size: 14px; padding: 0; } |
| | | .header-link:hover { color: #ffd04b; } |
| | | .header-logout { color: #fff; font-size: 14px; padding: 0; } |
| | | .header-logout:hover { color: #ffd04b; } |
| | | </style> |