Files
uniapp-im-shop/pages/my-index/wallet/edit-password.vue
2026-01-06 16:35:57 +08:00

149 lines
3.5 KiB
Vue

<script setup>
import { onLoad } from '@dcloudio/uni-app'
import { reactive } from 'vue'
import CardInput from '../components/card-input.vue'
import { useUI } from '@/utils/use-ui'
import { navigateBack } from '@/utils/router'
import { validateTransactionPassword } from '@/utils/validate'
import { updateUserPayPwd, getUserPayPwd } from '@/api/my-index'
const { showToast } = useUI()
const formData = reactive({
id: '',
state: '0',
// 旧密码
password: '',
// 新密码
newPassword: '',
// 确认密码
confirmPassword: ''
})
const onEdit = async () => {
let data = {}
if (formData.state === '1') {
const passwordValue = validateTransactionPassword(
formData.password,
'旧密码'
)
if (!passwordValue.valid) {
showToast(passwordValue.message)
return
}
const newPasswordValue = validateTransactionPassword(
formData.newPassword,
'新的交易密码'
)
if (!newPasswordValue.valid) {
showToast(newPasswordValue.message)
return
}
const confirmPasswordValue = validateTransactionPassword(
formData.confirmPassword,
'确认交易密码'
)
if (!confirmPasswordValue.valid) {
showToast(confirmPasswordValue.message)
return
}
if (formData.newPassword !== formData.confirmPassword) {
showToast('两次密码不一致')
return
}
data = {
id: formData.id,
oldPassword: formData.password,
password: formData.confirmPassword
}
} else {
const passwordValue = validateTransactionPassword(
formData.password,
'交易密码'
)
if (!passwordValue.valid) {
showToast(passwordValue.message)
return
}
data = {
password: formData.password
}
}
await updateUserPayPwd(data, formData.id ? 'put' : 'post')
await showToast(`${formData.id ? '修改' : '添加'}成功`, 'success')
navigateBack()
}
const getData = async () => {
const res = await getUserPayPwd()
formData.id = res.data.id
}
onLoad(e => {
formData.state = e.type
if (e.type === '1') {
getData()
}
})
</script>
<template>
<view class="edit-password">
<nav-bar isTopBg isPlaceholder title="交易密码">
<template #right>
<text class="top-right-name" @click="onEdit">确认</text>
</template>
</nav-bar>
<view v-if="formData.state === '1'" class="input-box">
<CardInput
v-model="formData.password"
title="旧密码"
type="password"
></CardInput>
<CardInput
v-model="formData.newPassword"
title="设置新的交易密码"
type="password"
></CardInput>
<CardInput
v-model="formData.confirmPassword"
title="重复新的交易密码"
type="password"
></CardInput>
</view>
<view v-else class="input-box">
<CardInput
v-model="formData.password"
title="设置交易密码"
type="password"
></CardInput>
</view>
</view>
</template>
<style lang="scss" scoped>
@import '../styles/index.scss';
.top-right-name {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 28rpx;
color: #ffffff;
text-align: center;
font-style: normal;
text-transform: none;
background: #00d993;
padding: 6rpx 20rpx;
border-radius: 8rpx;
}
.input-box {
padding: 32rpx 24rpx;
}
</style>