You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
275 lines
6.2 KiB
275 lines
6.2 KiB
<template> |
|
<view class="container"> |
|
<u-navbar title="安全设置" bgColor='#D3832A' leftIconColor='#ffffff' titleStyle='color:#ffffff' placeholder |
|
:autoBack="true" leftIconSize='35'></u-navbar> |
|
<view class="list"> |
|
<!-- 设置密码 --> |
|
<view class="list_item" style="display: flex;" @click="showEditPwd"> |
|
<view class="uni-list-cell-left"> |
|
<u-icon class="margin-right-10" name="setting-fill" color="#47beff"></u-icon> |
|
<view> |
|
设置密码: |
|
</view> |
|
</view> |
|
<u-icon name="arrow-right" color="#000"></u-icon> |
|
</view> |
|
</view> |
|
</view> |
|
|
|
<!-- 弹出层 -- 设置密码 --> |
|
<PopUp ref="EditPwdPop"> |
|
<!-- 原密码 --> |
|
<view class="flex-c-sb"> |
|
<view class="EditPwdPop-title"> |
|
原密码: |
|
</view> |
|
<u-input placeholder="原密码" border="none" :input="handleTrim('oldPwd')" v-model="editPwdForm.oldPwd" |
|
:password="!ShowPwdObj.oldPwd" clearable> |
|
<template #suffix> |
|
<view @click="isShowPwd('oldPwd')"> |
|
<u-icon v-if="ShowPwdObj.oldPwd" name="eye-off" size="40"></u-icon> |
|
<u-icon v-else name="eye-fill" size="40"></u-icon> |
|
</view> |
|
</template> |
|
</u-input> |
|
</view> |
|
|
|
<!-- 新密码 --> |
|
<view class="flex-c-sb"> |
|
<view class="EditPwdPop-title"> |
|
新密码: |
|
</view> |
|
<u-input placeholder="新密码" border="none" :input="handleTrim('newPwd1')" |
|
onkeypress="javascript:if(event.keyCode == 32)event.returnValue = false;" v-model="editPwdForm.newPwd1" |
|
:password="!ShowPwdObj.newPwd1" clearable> |
|
<template #suffix> |
|
<view @click="isShowPwd('newPwd1')"> |
|
<u-icon v-if="ShowPwdObj.newPwd1" name="eye-off" size="40"></u-icon> |
|
<u-icon v-else name="eye-fill" size="40"></u-icon> |
|
</view> |
|
</template> |
|
</u-input> |
|
</view> |
|
|
|
<!-- 确认新密码 --> |
|
<view class="flex-c-sb"> |
|
<view class="EditPwdPop-title"> |
|
确认新密码: |
|
</view> |
|
<u-input placeholder="确认新密码" border="none" :input="handleTrim('newPwd2')" v-model.trim="editPwdForm.newPwd2" |
|
:password="!ShowPwdObj.newPwd2" clearable> |
|
<template #suffix> |
|
<view @click="isShowPwd('newPwd2')"> |
|
<u-icon v-if="ShowPwdObj.newPwd2" name="eye-off" size="40"></u-icon> |
|
<u-icon v-else name="eye-fill" size="40"></u-icon> |
|
</view> |
|
</template> |
|
</u-input> |
|
</view> |
|
|
|
</PopUp> |
|
</template> |
|
|
|
<script lang="ts" setup> |
|
import { |
|
onShow, |
|
onLoad, |
|
onHide, |
|
onPullDownRefresh |
|
} from '@dcloudio/uni-app' |
|
import { reactive, ref, toRefs } from 'vue'; |
|
import { editPassword } from '@/api/user.js'; |
|
import { |
|
hexMD5 |
|
} from '@/utils/md5.js' |
|
|
|
onPullDownRefresh(() => { |
|
const timer = setTimeout(() => { |
|
// 关闭下拉刷新 |
|
uni.stopPullDownRefresh() |
|
clearTimeout(timer) |
|
}, 500) |
|
}) |
|
|
|
const details = reactive({ |
|
// |
|
scanStateList: [], |
|
// 选中的索引 -- 默认为关闭 |
|
scanStateChooseIndex: 0 |
|
}) |
|
|
|
// 组件实例 |
|
/** 修改密码 */ |
|
const EditPwdPop = ref() |
|
|
|
const ShowPwdObj = reactive({ |
|
oldPwd: false, |
|
newPwd1: false, |
|
newPwd2: false, |
|
}) |
|
|
|
const editPwdForm = reactive({ |
|
oldPwd: '', |
|
newPwd1: '', |
|
newPwd2: '', |
|
}) |
|
|
|
/** 退出登录 */ |
|
function removeall() { |
|
const res = uni.getStorageInfoSync(); |
|
res.keys.map(item => { |
|
if (item == 'loginuser' || item == 'HistoryDate' || item == 'setip' || item == 'checkname' || item.indexOf('IMAGE_CACHE_INFO') != -1) { |
|
return |
|
} |
|
uni.removeStorageSync(item) |
|
}) |
|
uni.reLaunch({ |
|
url: '/pages/login/login' |
|
}) |
|
console.log(res.currentSize); |
|
console.log(String(res.limitSize)); |
|
} |
|
|
|
/** 显示设置密码弹窗 */ |
|
const showEditPwd = () => { |
|
EditPwdPop.value.setDetails({ |
|
title: '设置密码', |
|
showPopUp: true, |
|
async success() { |
|
console.log('editPwdForm :>> ', editPwdForm); |
|
let _isReturn = false |
|
// 循环验证密码是否符合规则 |
|
for (let key in editPwdForm) { |
|
if (editPwdForm[key].length < 6) { |
|
_isReturn = true |
|
uni.showToast({ |
|
title: '请输入6位以上密码', |
|
icon: 'none' |
|
}) |
|
// 退出循环 |
|
break |
|
} |
|
} |
|
|
|
if (_isReturn) return |
|
|
|
// 原密码 |
|
let { password } = <{ password : string; tenantId : string; username : string }>uni.getStorageSync('loginuser') |
|
if (editPwdForm.oldPwd !== password) { |
|
uni.showToast({ |
|
title: '密码与原密码不一致', |
|
icon: 'none' |
|
}) |
|
return |
|
} |
|
|
|
// 两次密码比对 |
|
if (editPwdForm.newPwd1 !== editPwdForm.newPwd2) { |
|
uni.showToast({ |
|
title: '确认密码与新密码不一致', |
|
icon: 'none' |
|
}) |
|
return |
|
} |
|
|
|
/** 加密密码 */ |
|
const submitData = { |
|
oldPassword: hexMD5(editPwdForm.oldPwd), |
|
newPassword: hexMD5(editPwdForm.newPwd1), |
|
newPassword1: hexMD5(editPwdForm.newPwd2), |
|
} |
|
|
|
const response = await editPassword(submitData) |
|
|
|
console.log('response :>> ', response); |
|
if (response.msg) uni.showToast({ |
|
title: response.msg, |
|
icon: 'none' |
|
}) |
|
if (response.code !== 200) return |
|
removeall() |
|
} |
|
}) |
|
} |
|
|
|
/** 处理文本输入 -- 去除收尾空格 */ |
|
const handleTrim = (item) => { |
|
editPwdForm[item] = uni.$u.trim(editPwdForm[item].trim(), 'all') |
|
} |
|
|
|
/** 是否显示密码 */ |
|
const isShowPwd = (item) => { |
|
ShowPwdObj[item] = !ShowPwdObj[item] |
|
} |
|
|
|
const { } = toRefs(details) |
|
</script> |
|
|
|
<style lang="scss" scoped> |
|
.container { |
|
width: 100vw; |
|
height: 100vh; |
|
// background: #fff; |
|
} |
|
|
|
.list {} |
|
|
|
.list_item { |
|
display: flex; |
|
justify-content: space-between; |
|
padding: 20upx; |
|
border-bottom: 2upx solid #eee; |
|
background: #fff; |
|
position: relative; |
|
|
|
.uni-list-cell-db { |
|
position: absolute; |
|
top: 0; |
|
left: 0; |
|
padding: 20upx; |
|
width: 100%; |
|
height: 100%; |
|
text-align: right; |
|
box-sizing: border-box; |
|
} |
|
|
|
&:last-child { |
|
border-bottom: 0px; |
|
} |
|
|
|
.uni-list-cell-left { |
|
display: inline-flex; |
|
} |
|
} |
|
|
|
.margin-right-10 { |
|
margin-right: 10upx; |
|
} |
|
|
|
// 修改密码弹窗 |
|
.EditPwdPop-title { |
|
position: relative; |
|
width: 200upx; |
|
flex: none; |
|
|
|
&::after { |
|
right: 20upx; |
|
top: 50%; |
|
transform: translateY(-50%); |
|
position: absolute; |
|
content: ''; |
|
display: block; |
|
width: 2upx; |
|
height: 40upx; |
|
background: #000; |
|
} |
|
} |
|
|
|
.flex-c-sb { |
|
display: flex; |
|
align-items: center; |
|
margin: 20upx 0 10upx; |
|
border-bottom: 1upx solid #aaa; |
|
padding: 20upx 0 10upx; |
|
} |
|
</style> |