Files
2026-02-08 09:30:43 +08:00

179 lines
4.2 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="page">
<view class="padding bg-white margin-top">
<!-- 旧密码 -->
<view class="form-item solid-bottom">
<view class="form-label">旧密码</view>
<view class="form-input-wrap">
<input
class="form-input"
v-model="formData.oldPassword"
:type="showOldPwd ? 'text' : 'password'"
placeholder="请输入旧密码"
/>
<view class="pwd-toggle" @click="showOldPwd = !showOldPwd">
<text :class="showOldPwd ? 'cuIcon-attention' : 'cuIcon-attentionforbid'"></text>
</view>
</view>
</view>
<!-- 新密码 -->
<view class="form-item solid-bottom">
<view class="form-label">新密码</view>
<view class="form-input-wrap">
<input
class="form-input"
v-model="formData.newPassword"
:type="showNewPwd ? 'text' : 'password'"
placeholder="请输入新密码"
/>
<view class="pwd-toggle" @click="showNewPwd = !showNewPwd">
<text :class="showNewPwd ? 'cuIcon-attention' : 'cuIcon-attentionforbid'"></text>
</view>
</view>
</view>
<!-- 确认密码 -->
<view class="form-item">
<view class="form-label">确认密码</view>
<view class="form-input-wrap">
<input
class="form-input"
v-model="formData.confirmPassword"
:type="showConfirmPwd ? 'text' : 'password'"
placeholder="请再次输入新密码"
/>
<view class="pwd-toggle" @click="showConfirmPwd = !showConfirmPwd">
<text :class="showConfirmPwd ? 'cuIcon-attention' : 'cuIcon-attentionforbid'"></text>
</view>
</view>
</view>
</view>
<!-- 提示信息 -->
<view class="tips">
<text class="text-gray text-sm">密码长度至少6位建议包含字母和数字</text>
</view>
<!-- 保存按钮 -->
<view class="padding">
<button class="bg-blue round" @click="handleSave" :loading="saving">保存</button>
</view>
</view>
</template>
<script setup>
import { ref, reactive } from 'vue';
import { updatePassword } from '@/request/three_one_api/info.js';
const saving = ref(false);
const showOldPwd = ref(false);
const showNewPwd = ref(false);
const showConfirmPwd = ref(false);
const formData = reactive({
oldPassword: '',
newPassword: '',
confirmPassword: ''
});
// 保存
const handleSave = async () => {
// 表单验证
if (!formData.oldPassword) {
uni.showToast({ title: '请输入旧密码', icon: 'none' });
return;
}
if (!formData.newPassword) {
uni.showToast({ title: '请输入新密码', icon: 'none' });
return;
}
if (formData.newPassword.length < 6) {
uni.showToast({ title: '新密码长度至少6位', icon: 'none' });
return;
}
if (!formData.confirmPassword) {
uni.showToast({ title: '请确认新密码', icon: 'none' });
return;
}
if (formData.newPassword !== formData.confirmPassword) {
uni.showToast({ title: '两次输入的密码不一致', icon: 'none' });
return;
}
if (formData.oldPassword === formData.newPassword) {
uni.showToast({ title: '新密码不能与旧密码相同', icon: 'none' });
return;
}
saving.value = true;
try {
const params = {
oldPassword: formData.oldPassword,
newPassword: formData.newPassword,
confirmPassword: formData.confirmPassword
};
const res = await updatePassword(params);
if (res.code === 0) {
uni.showToast({ title: '密码修改成功', icon: 'success' });
// 清空表单
formData.oldPassword = '';
formData.newPassword = '';
formData.confirmPassword = '';
// 延迟返回
setTimeout(() => {
uni.navigateBack();
}, 1500);
} else {
uni.showToast({ title: res.msg || '修改失败', icon: 'none' });
}
} catch (err) {
console.error('修改密码失败:', err);
uni.showToast({ title: '修改失败', icon: 'none' });
} finally {
saving.value = false;
}
};
</script>
<style lang="scss" scoped>
.page {
min-height: 100vh;
background: #EBF2FC;
}
.form-item {
padding: 30rpx 0;
}
.form-label {
font-size: 28rpx;
color: #333;
margin-bottom: 20rpx;
}
.form-input-wrap {
display: flex;
align-items: center;
background: #f5f5f5;
border-radius: 12rpx;
padding: 0 20rpx;
}
.form-input {
flex: 1;
height: 80rpx;
font-size: 28rpx;
}
.pwd-toggle {
padding: 10rpx;
font-size: 36rpx;
color: #999;
}
.tips {
padding: 20rpx 30rpx;
}
</style>