LtyhShop/pc/pages/users/user_account.vue
2025-04-09 14:59:26 +08:00

146 lines
4.0 KiB
Vue
Raw 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.

<script setup lang="ts">
import { reactive, ref } from 'vue'
import { UseInfoFrom } from '~/types/user'
import { userFromDefault } from '~/pages/users/defaultUser'
import { loginLogout, userInfoApi } from '~/server/userApi'
import { useCopy } from '~/composables/useCopy'
import { FormInstance } from 'element-plus'
import EditUserPhoneFrom from './components/editUserPhoneFrom.vue'
import EditUserPasswordFrom from './components/editUserPasswordFrom.vue'
import useDialog from '~/composables/useDialog'
import { useUserStore } from '~/stores/user'
import { useAppStore } from '~/stores/app'
import feedback from '~/utils/feedback'
//表单数据
const userFormRef = ref<FormInstance>()
const loading = ref<boolean>(false)
const password = ref('******')
const userForm = reactive<UseInfoFrom>(Object.assign(userFromDefault()))
//个人信息
const getUserInfo = async () => {
try {
loading.value = true
let data = await userInfoApi()
loading.value = false
Object.assign(userForm, data)
} catch (err) {
loading.value = false
}
}
getUserInfo()
loading.value = false
//复制
const { handleCopy } = useCopy()
const copyText = () => {
handleCopy(userForm.id)
}
//提交成功后回调
const stepsActive = ref<number>(1) //步骤条选中的值3是完成
//更换手机号
const title = ref<string>('')
const { bool: userVisible, DialogOpen, DialogClose } = useDialog()
const handleChangePhone = () => {
title.value = '修改手机号'
stepsActive.value = 1
DialogOpen()
}
//修改密码
const handleChangePassword = () => {
title.value = '修改密码'
stepsActive.value = 1
DialogOpen()
}
//关闭弹窗
const handleClose = () => {
DialogClose()
if (stepsActive.value === 3) getUserInfo()
}
//关闭弹窗
const handleSubmitClose = (active: number) => {
stepsActive.value = active
}
//退出登录
const userStore = useUserStore()
//购物车没登录状态下显示0
const { getCarNumber } = useAppStore()
const handleLogout = async () => {
await feedback.confirm('确定退出吗?')
await loginLogout()
await getCarNumber(0)
await userStore.logout()
}
</script>
<template>
<div class="user-account">
<div class="acea-row header">
<div class="font18 fontColor333 mb-50px">账号密码</div>
</div>
<el-form
ref="userFormRef"
:model="userForm"
label-width="82px"
class="demo-ruleForm"
size="large"
status-icon
v-loading="loading"
>
<el-form-item label="ID号">
<el-input v-model="userForm.id" disabled />
<el-button class="ml-10px" link color="#E93323" @click="copyText">复制</el-button>
</el-form-item>
<el-form-item label="手机号:">
<el-input v-model="userForm.phone" disabled class="w-500px" />
<span class="ml-10px font-color cursors" @click="handleChangePhone">更换手机号</span>
</el-form-item>
<el-form-item label="登录密码:">
<el-input v-model="password" disabled class="w-500px" />
<span class="ml-10px font-color cursors" @click="handleChangePassword">修改密码</span>
</el-form-item>
<el-form-item class="mt-60px">
<div @click="handleLogout" class="w-120px h-44px text-16px handleBtn cursors lh-44px">退出登录</div>
</el-form-item>
</el-form>
<el-dialog
v-model="userVisible"
:title="title"
width="690px"
center
:before-close="handleClose"
:close-on-click-modal="false"
>
<edit-user-phone-from
v-if="userVisible && title === '修改手机号'"
:phone="userForm.phone"
@handleSubmitClose="handleSubmitClose"
></edit-user-phone-from>
<edit-user-password-from
v-if="userVisible && title === '修改密码'"
:phone="userForm.phone"
@handleSubmitClose="handleSubmitClose"
></edit-user-password-from>
</el-dialog>
</div>
</template>
<style lang="scss">
.user-account {
.el-input {
--el-input-width: 500px;
}
.el-button.is-link {
--el-button-text-color: #e93323 !important;
}
}
</style>