添加重置密码与更改密码功能

This commit is contained in:
王铜 2020-11-29 14:41:07 +08:00
parent 666460a0d9
commit 8d0babadd9
6 changed files with 145 additions and 7 deletions

View File

@ -6,7 +6,15 @@
<span class="w-title">水质监测平台</span> <span class="w-title">水质监测平台</span>
</a-col> </a-col>
<a-col :span="2" :offset="10"> <a-col :span="2" :offset="10">
<a-button icon="logout" @click="logout" >登出</a-button> <a-popover :title="username" trigger="hover" placement="bottom">
<template slot="content">
<p v-if="!isAnyone" style="cursor: pointer;" @click="changePasswd">
更改密码
</p>
</template>
<a-avatar :size="48" icon="user" />
</a-popover>
</a-col> </a-col>
</a-row> </a-row>
<a-row> <a-row>
@ -35,6 +43,17 @@
<component :is="currentComp"/> <component :is="currentComp"/>
</keep-alive> </keep-alive>
</a-layout-content> </a-layout-content>
<a-modal
v-model="passwd_visible"
:title="'更改密码'"
:destroyOnClose="true"
:footer="null"
>
<password-change
@ok="logout"
@cancle="passwd_visible = false"
/>
</a-modal>
</a-layout> </a-layout>
</template> </template>
@ -48,6 +67,7 @@ import Analysis from '@/components/analysis/Index'
import Logs from '@/components/logs/Index' import Logs from '@/components/logs/Index'
import Admin from '@/components/admin/Index' import Admin from '@/components/admin/Index'
import { logout } from '@/utils/http' import { logout } from '@/utils/http'
import PasswordChange from './admin/forms/PasswordChange.vue'
export default { export default {
components: { components: {
'icon-font':IconFont, 'icon-font':IconFont,
@ -55,17 +75,25 @@ export default {
'detail-search':DetailSearch, 'detail-search':DetailSearch,
'analysis':Analysis, 'analysis':Analysis,
// 'logs':Logs, // 'logs':Logs,
'admin':Admin 'admin':Admin,
PasswordChange
}, },
data() { data() {
return { return {
current:['map-layout'], current:['map-layout'],
currentComp: 'map-layout' currentComp: 'map-layout',
passwd_visible: false
}; };
}, },
computed: { computed: {
isAdmin() { isAdmin() {
return this.$store.getters.isSuper || this.$store.getters.isProject return this.$store.getters.isSuper || this.$store.getters.isProject
},
isAnyone() {
return this.$store.getters.isAnyone
},
username() {
return this.$store.getters.username
} }
}, },
methods: { methods: {
@ -79,6 +107,9 @@ export default {
this.$router.push({ this.$router.push({
path: '/login' path: '/login'
}) })
},
changePasswd() {
this.passwd_visible = true
} }
} }
}; };

View File

@ -0,0 +1,64 @@
<template>
<div>
<a-spin :spinning="loading">
<a-form-model :model="form">
<a-form-model-item label="旧密码">
<a-input type="password" v-model="form.old" />
</a-form-model-item>
<a-form-model-item label="新密码">
<a-input type="password" v-model="form.new" />
</a-form-model-item>
<a-form-model-item label="重复新密码">
<a-input type="password" v-model="form.new2" />
</a-form-model-item>
<a-form-model-item :wrapper-col="{ span: 14, offset: 4 }">
<a-button type="primary" @click="onSubmit"> 确认 </a-button>
<a-button style="margin-left: 10px" @click="$emit('cancle')">
关闭
</a-button>
</a-form-model-item>
</a-form-model>
</a-spin>
</div>
</template>
<script>
import { postJSON, URL_MAP } from "@/utils/http";
export default {
data() {
return {
form: {
old: "",
new: "",
new2: "",
},
loading: false,
};
},
methods: {
async onSubmit() {
if (this.form.old && this.form.new2 && this.form.new == this.form.new2) {
this.loading = true;
try {
await postJSON(URL_MAP.CHANGE_PASSWD, this.form);
this.$message.success('更改密码成功!请重新登录!')
this.$emit("ok");
} catch (e) {
console.log(e);
this.$message.error('更改密码失败!')
} finally {
this.loading = false;
}
} else {
this.$message.error("请输入原密码或保证新密码一致");
}
},
},
mounted() {},
};
</script>
<style>
</style>

View File

@ -18,7 +18,7 @@
</a-table> </a-table>
<a-modal <a-modal
v-model="visible" v-model="visible"
:title="isCreate ? '添加设备' : '查看设备'" :title="isCreate ? '添加传感器' : '查看传感器'"
:destroyOnClose="true" :destroyOnClose="true"
:footer="null" :footer="null"
> >

View File

@ -19,11 +19,13 @@
<a-button size="small" type="link" @click="() => handleDetail(record)" >查看</a-button> <a-button size="small" type="link" @click="() => handleDetail(record)" >查看</a-button>
<a-divider type="vertical" /> <a-divider type="vertical" />
<a-button type="danger" size="small" @click="() => handleDelete(record)" >删除</a-button> <a-button type="danger" size="small" @click="() => handleDelete(record)" >删除</a-button>
<a-divider type="vertical" />
<a-button type="danger" size="small" @click="() => handlePasswdReset(record)" >密码重置</a-button>
</span> </span>
</a-table> </a-table>
<a-modal <a-modal
v-model="visible" v-model="visible"
:title="isCreate ? '添加用户' : '添加用户'" :title="isCreate ? '添加用户' : '查看用户'"
:destroyOnClose="true" :destroyOnClose="true"
:footer="null" :footer="null"
> >
@ -37,7 +39,7 @@
</template> </template>
<script> <script>
import { deleteJSON, getData, patchJSON, postJSON, URL_MAP } from '@/utils/http' import { deleteJSON, getData, logout, patchJSON, postJSON, URL_MAP } from '@/utils/http'
import UserDetail from '../forms/UserDetail.vue'; import UserDetail from '../forms/UserDetail.vue';
export default { export default {
components: { UserDetail }, components: { UserDetail },
@ -108,6 +110,7 @@ export default {
try{ try{
await deleteJSON(URL_MAP.USER_DETAIL, { 'id': record._id }) await deleteJSON(URL_MAP.USER_DETAIL, { 'id': record._id })
await this.fetch({}) await this.fetch({})
this.$message.success('删除成功!')
}catch(e) }catch(e)
{ {
console.log(e) console.log(e)
@ -145,6 +148,31 @@ export default {
permission: 0x000 permission: 0x000
}; };
}, },
async handlePasswdReset(record) {
this.loading = true
try{
await postJSON(URL_MAP.RESET_PASSWD, {
'id':record._id
})
console.log(record._id)
console.log(this.$store.getters.userid)
if (record._id === this.$store.getters.userid) {
logout()
sessionStorage.clear()
this.$store.commit('logout')
this.$router.push({
path: '/login'
})
}
this.$message.success('重置密码成功!')
}catch(e)
{
console.log(e)
}
finally{
this.loading = false
}
}
}, },
mounted() { mounted() {
this.fetch({}) this.fetch({})

View File

@ -16,7 +16,9 @@ export const URL_MAP = {
SENSOR_DETAIL: 'sensor/detail/', SENSOR_DETAIL: 'sensor/detail/',
WATER_LIST: 'v1/api/water_detail/', WATER_LIST: 'v1/api/water_detail/',
USER_LIST: 'user/', USER_LIST: 'user/',
USER_DETAIL: 'user/detail/' USER_DETAIL: 'user/detail/',
CHANGE_PASSWD: 'current/chpass/',
RESET_PASSWD: 'passwd/reset/'
} }

View File

@ -119,6 +119,19 @@ const store = new Vuex.Store({
}, },
sensorList(state) { sensorList(state) {
return state.sensorList return state.sensorList
},
username(state, getters) {
if (getters.isLogin)
{
return state.userInfo.username
}
return '未登录'
},
userid(state, getters) {
if (getters.isLogin)
{
return state.userInfo._id
}
} }
}, },
plugins: [storeToSession] plugins: [storeToSession]