货无忧
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

<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>