You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

502 lines
13 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view class="main">
<navBar navTitle="" :hasLogo="true" :hasRight="true" :backToUrl="'/pages/mine/index'" :isSwitchTab="true"
@clickRight="clickRight" :color="'#000000'" :backBackGroundColor="'rgb(105, 154, 112)'" />
<view class="avtor">
<image :src="userInfo.avatar + '?x-oss-process=image/resize,w_158,h_158'"></image>
<view>
<u-button :text="$t('avatar.def')" shape="circle" class="size" style="background-color: #000000;"
@click="backDafult"></u-button>
<u-upload :fileList="fileList" name="1" accept="image" @afterRead="upLoaded">
<u-button :text="$t('avatar.update')" shape="circle" class="size"></u-button>
</u-upload>
</view>
</view>
<view class="info">
<view class="item">
<view class="title">{{ $t('userInfo.name') }}</view>
<view class="gray" style="display:flex;justify-content: center;align-items: center;">
<view>{{ userInfo.nickName }}</view>
<text class="rz" @click="showName = true">{{ $t('userInfo.updateName') }}</text>
</view>
</view>
<u-divider></u-divider>
<view class="item">
<view class="title">{{ $t('userInfo.createTime') }}</view>
<view class="gray">{{ userInfo.createdAt }}</view>
</view>
<u-divider></u-divider>
<view class="item">
<view class="title">{{ $t('userInfo.idNum') }}</view>
<view class="gray">{{ userInfo.ID }}</view>
</view>
</view>
<view class="info">
<view class="item">
<view class="title">{{ $t('userInfo.phone') }}</view>
<view class="gray" style="display: flex;">
<u--text mode="phone" :text="userInfo.telNum" format="encrypt"></u--text>
<view class="rz" style="background-color:#676767;" @click="goChangeNum">{{ $t('phone.update') }}</view>
</view>
</view>
</view>
<view style="width: 100%; text-align: right;color: #656565;margin-top: 20upx;font-size:20rpx">
*{{ $t('phone.verInfo') }}</view>
<view v-if="!userInfo.realName" class="info" style="margin-top: 20upx;">
<view class="item">
<view class="title">{{ $t('user.realName') }}</view>
<view class="gray"><text class="rz" @click="goRealName">{{ $t('user.verfy') }}</text></view>
</view>
</view>
<view v-if="userInfo.realName" class="info" style="margin-top: 20upx;">
<view class="item">
<view class="title" style="display: flex;
align-items: center;
justify-content: center;">
{{ $t('user.username') }}
<view
style="background-color:#699A70 ;border-radius: 40rpx;font-size: 20rpx;padding: 0 15rpx 0 15rpx;color:#FFFFFF;margin-left:10rpx">
{{ $t('user.verDone') }}
</view>
</view>
<view class="gray">
{{ userInfo.realName }}
</view>
</view>
<u-divider></u-divider>
<view class="item">
<view class="title">{{ $t('user.idNum') }}</view>
<view class="gray">{{ userInfo.idNum }}</view>
</view>
</view>
<view class="btn">
<u-button :text="$t('account.logout')" shape="circle" class="size"
style=" background-color:#ED6666;color: #fff;border: 0;margin-right: 20upx;"
@click="showDestory = true"></u-button>
<u-button @click="showLogout = true" :text="$t('account.signOut')" shape="circle" class="size"
style="background-color: #3E3E3E;color: #fff;border: 0;"></u-button>
</view>
<u-popup :show="showName" mode="center" @close="showName = false" bgColor="transparent">
<view class="popupLocale-box">
<view class="title" style="color:#FFFFFF;font-size:40rpx">{{ $t('set.name') }}</view>
<view class="item">
<u--input :placeholder="$t('set.input')" shape="circle" v-model="changeName"
style="background-color: rgba(255, 255, 255, 0.5);border: 0;margin-left: 50upx;"
class="setName"></u--input>
</view>
</view>
<view style="display: flex;">
<u-button :text="$t('navbar.back')" color="#EDC466" @click="showName = false"
style="width: 260rpx;height: 56rpx;border-radius: 40rpx;margin-top: 30rpx;"></u-button>
<u-button :text="$t('comfrim')" color="#699A70" @click="updateName"
style="width: 260rpx;height: 56rpx;border-radius: 40rpx;margin-top: 30rpx;"></u-button>
</view>
</u-popup>
<feedback :showQa="showQa" @closeFeed='closeFeed' />
<u-popup :show="showDestory" mode="center" @close="showDestory = false" bgColor="transparent">
<view class="popupLocale-box">
<view class="title" style="margin-bottom: 0;">
<image style="width: 76upx;height: 76upx;" src="../../../static/image/mine/warning.png"></image>
</view>
<view class="item" style="font-size: 32upx;">{{ $t('logout.info') }}</view>
</view>
<view style="display: flex;">
<u-button :text="$t('navbar.back')" color="#EDC466" @click="showDestory = false"
style="width: 260rpx;height: 56rpx;border-radius: 40rpx;margin-top: 30rpx;"></u-button>
<u-button :text="$t('comfrim')" color="#ED6666" @click="goConfirm"
style="width: 260rpx;height: 56rpx;border-radius: 40rpx;margin-top: 30rpx;"></u-button>
</view>
</u-popup>
<u-popup :show="confirmDestory" mode="center" @close="confirmDestory = false" bgColor="transparent">
<view class="popupLocale-box">
<view class="title" style="margin-bottom: 0;">
<image style="width: 76upx;height: 76upx;" src="../../../static/image/mine/confim-warning.png"></image>
</view>
<view class="item">
<view class="sec">
<view>{{ $t('sendCode.send') }}{{ userInfo.telNum }}</view>
<view class="resend" @tap="getCode">{{ tips }}</view>
</view>
<view class="code-box">
<u-code-input v-model="Code" :focus="focus"></u-code-input>
</view>
</view>
<view class="action-box">
<view class="confirm-input">
<view style="margin-bottom: 15upx;color: rgba(255, 255, 255, 0.6);">{{ $t('password.input') }}
</view>
<u-code-input v-model="actCode"></u-code-input>
</view>
</view>
<view class="tips">*注意此操作将彻底删除该账号所有信息</view>
</view>
<view style="display: flex;">
<u-button :text="$t('navbar.back')" color="#ECC366" @click="confirmDestory = false"
style="width: 260rpx;height: 56rpx;border-radius: 40rpx;margin-top: 30rpx;"></u-button>
<u-button :text="$t('logout.btn')" color="#ED6666" @click="destoryAccount"
style="width: 260rpx;height: 56rpx;border-radius: 40rpx;margin-top: 30rpx;"></u-button>
</view>
</u-popup>
<u-popup :show="showLogout" mode="center" @close="showLogout = false" bgColor="transparent">
<view class="popupLocale-box">
<view class="title" style="margin-bottom: 0;">
<image style="width: 80upx;height: 80upx;" src="../../../static/image/mine/warning.png"></image>
</view>
<view class="item" style="font-size: 30upx;">{{ $t('signout.info') }}</view>
</view>
<view style="display: flex;">
<u-button :text="$t('navbar.back')" color="#ECC366" @click="showLogout = false"
style="width: 260rpx;height: 56rpx;border-radius: 40rpx;margin-top: 30rpx;"></u-button>
<u-button :text="$t('comfrim')" color="#ED6666" @click="logout"
style="width: 260rpx;height: 56rpx;border-radius: 40rpx;margin-top: 30rpx;"></u-button>
</view>
</u-popup>
<u-code :seconds="seconds" @start="start" ref="uCode" @change="codeChange"></u-code>
</view>
</template>
<script>
import feedback from '../feedback/feedback.vue';
export default {
components: {
feedback
},
data() {
return {
showName: false,
showQa: false,
showDestory: false,
showLogout: false,
confirmDestory: false,
fileList: [],
tips: '',
seconds: 60,
wathTime: 10,
changeName: '',
focus: false,
Code: '',
actCode: '',
userInfo: {},
// content: ''
};
},
onShow() {
this.getInfo()
},
methods: {
// 获取信息
async getInfo() {
let res = await this.$api.mine.getInfo();
if (res.status === 0) {
this.userInfo = res.data;
} else {
this.$common.msgToast(res.msg, null, 'error');
}
},
// 获取头像
uploadFilePromise(url) {
return new Promise((resolve, reject) => {
const Authorization = uni.getStorageSync('token');
const userId = uni.getStorageSync('mall-user-info').ID
let a = uni.uploadFile({
url: this.$baseUrl + '/mall/upload/file',
filePath: url,
name: 'file',
formData: {
type: 'image',
source: 'user',
mask: userId
},
header: {
Authorization
},
success: res => {
resolve(res.data);
this.updateInfo({
avatar: JSON.parse(res.data).data.ori_url
})
}
});
});
},
// 上传头像
async upLoaded(file, lists, name) {
this.uploadFilePromise(file.file.url);
},
// 发送验证码
start() {
uni.$u.toast(this.$t('sendCode'));
},
// 改变提示
codeChange(text) {
this.tips = text;
},
async destoryAccount() {
if (!this.Code || !this.actCode) {
this.$common.msgToast(this.$t('code.actPass'), null, 'error');
return;
}
const data = {
password: this.actCode,
code: this.Code
}
const res = await this.$api.mine.logout(data)
if (res.status === 0) {
console.log(res)
this.confirmDestory = false;
this.logout()
} else {
uni.$u.toast(res.msg);
}
},
// 获取验证码
async getCode() {
if (this.$refs.uCode.canGetCode) {
uni.showLoading({
title: this.$t('sendCode.loading')
});
let res = await this.$api.mine.mineCode({
TelNum: this.userInfo.telNum
});
if (res.status === 0) {
uni.hideLoading();
// 这里此提示会被this.start()方法中的提示覆盖
this.focus = true;
this.$refs.uCode.start();
// 通知验证码组件内部开始倒计时
} else {
uni.hideLoading();
uni.$u.toast(res.msg);
}
} else {
uni.$u.toast(this.$t('sendCode.toast'));
}
},
// 退出登录
logout() {
// uni.removeStorageSync("mall-user-info");
// uni.removeStorageSync("token");
uni.clearStorageSync();
uni.switchTab({
url: '/pages/index/index'
});
},
// 确认销毁
goConfirm() {
this.showDestory = false;
this.confirmDestory = true;
},
// 修改电话
goChangeNum() {
if (!this.userInfo.realName) {
return
}
uni.navigateTo({
url: '/pages/mine/changePhone/changePhone?telNum=' + this.userInfo.telNum
});
},
// 实名认证
goRealName() {
uni.navigateTo({
url: '/pages/mine/realName/realName'
});
},
// 更新昵称
async updateName() {
await this.updateInfo({
nickName: this.changeName
})
this.showName = false
},
// 更新信息
async updateInfo(data) {
let res = await this.$api.mine.update(data);
if (res.status === 0) {
uni.$u.toast(this.$t('update.succes'));
this.getInfo()
uni.setStorageSync('mall-user-info', this.userInfo);
} else {
uni.$u.toast(res.msg);
}
},
// ,默认头像
backDafult() {
this.updateInfo({
avatar: 'https://dci-file.bj.bcebos.com/shop-main/prod/image/0/user/6ae57adf-7d05-4f84-9053-d39967870327.jpg'
})
},
// 反馈
clickRight() {
this.showQa = true;
},
closeFeed(isShow) {
this.showQa = isShow
}
}
};
</script>
<style lang="scss">
page {
background: url('@/static/image/home/new_bg.png') no-repeat;
background-size: 100% 100%;
background-attachment: fixed;
height: 100vh;
box-sizing: border-box;
}
.title {
color: #434343;
}
.sec {
color: #ffffff;
position: absolute;
display: flex;
top: 120upx;
.resend {
margin-left: 100upx;
color: #fcb462;
}
}
.code-box {
margin-top: 70upx;
}
/deep/ .u-code-input__item {
border: 0;
border-radius: 20upx;
background-color: rgba(255, 255, 255, 0.65);
}
.main {
display: grid;
justify-content: center;
.avtor {
margin-top: 40upx;
display: flex;
width: 100%;
justify-content: space-around;
image {
width: 160upx;
height: 160upx;
border-radius: 40upx;
}
.size {
color: #fff;
border: 0;
background-color: #699A70;
margin-bottom: 20upx;
width: 348upx;
height: 64upx;
}
}
.action-box {
margin-top: 50upx;
position: relative;
height: 250upx;
background-color: rgba(255, 255, 255, 0.3);
.confirm-input {
position: absolute;
top: 30%;
left: 4%;
}
}
.info {
width: 600upx;
background: #FFFFFF;
margin-top: 65upx;
padding: 34rpx 40upx;
.item {
font-size: 30upx;
display: flex;
justify-content: space-between;
align-items: center;
.rz {
box-sizing: border-box;
margin-left: 10upx;
font-size: 20rpx;
background-color: #699A70;
color: #FFFFFF;
border-radius: 40upx;
padding: 6rpx 34rpx;
text-align: center;
}
}
.gray {
color: #878787;
}
}
.btn {
margin-top: 100upx;
width: 100%;
display: inline-flex;
align-items: center;
justify-content: center;
}
.popupLocale-box {
background: rgba(0, 0, 0, 0.8);
width: 582rpx;
overflow: hidden;
padding: 30rpx 42rpx;
.title {
font-size: 40rpx;
text-align: center;
margin-bottom: 40rpx;
}
.u-button {
width: 260rpx;
height: 56rpx;
border-radius: 40rpx;
}
.item {
display: flex;
align-items: center;
justify-content: center;
padding: 34rpx 0 38rpx 0;
}
.tips {
color: #DC0023;
font-size: 20rpx;
text-align: center;
margin-top: 80rpx;
}
}
}
.setName {
/deep/ .uni-input-placeholder {
padding: 0 20rpx;
}
/deep/ .uni-input-input {
color: #ffffff;
padding: 0 20rpx;
}
}</style>