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.

391 lines
9.2 KiB

3 weeks ago
<template>
<view class="page">
<!-- 基础表单校验 -->
<uni-forms ref="valiForm" :modelValue="valiFormData" label-position="left">
<view class="example">
<uni-forms-item label="头像" labelWidth="180rpx" required name="avatar">
<view class="avatar">
<view style="display: flex;flex:1"></view>
<uni-file-picker limit="1" :del-icon="false" disable-preview :imageStyles="imageStyles"
file-mediatype="image" :value="avatars" @select="upload">
<image style="width: 40rpx; height: 40rpx;" src="/static/icon/head.png"></image>
</uni-file-picker>
<uni-icons custom-prefix="iconfont" type="right" size="16" color="#777777"></uni-icons>
</view>
</uni-forms-item>
<uni-forms-item label="昵称" labelWidth="180rpx" required name="nickName">
<uni-easyinput v-model="valiFormData.nickName" maxlength="10" placeholder="请输入" :inputBorder="false"
placeholderStyle="color: #999;font-size:32rpx"
style="borderColor:#FFF;color:#0E1521;font-size:32rpx" />
</uni-forms-item>
<uni-forms-item label="性别" labelWidth="180rpx" required name="sex">
<uni-data-checkbox v-model="valiFormData.sex" :localdata="sexs" style="margin-top: 10rpx;" />
</uni-forms-item>
<uni-forms-item label="个性签名" labelWidth="180rpx" required name="signature">
<uni-easyinput v-model="valiFormData.signature" maxlength="10" placeholder="请输入" :inputBorder="false"
placeholderStyle="color: #999;font-size:32rpx" style="borderColor:#FFF;color:#0E1521;font-size:32rpx" />
</uni-forms-item>
</view>
</uni-forms>
<view class="submitcon">
<button type="primary" class="bbtn" @click="submit('valiForm')"></button>
</view>
<!-- 提示信息弹窗 -->
<uni-popup ref="message" type="message">
<uni-popup-message :type="msgType" :message="messageText" :duration="2000"></uni-popup-message>
</uni-popup>
</view>
</template>
<script>
import { myCache } from '@/utils/utils.js';
export default {
data() {
return {
openId:"",
phone:"",
userid:"",
imageStyles: {
width: 40,
height: 40,
border: false
},
listStyles: {
border: false
},
id: '',
avatars: [],
messageText: '', //错误提示框
msgType: 'error',
sexs: [
{
text: '未知',
value: 0
},
{
text: '男',
value: 2
}, {
text: '女',
value: 1
}],
// 校验表单数据
valiFormData: {
id: 1,
nickName: "",
avatar: "",
sex: "",
signature: '',
},
// 校验规则
rules: {
nickName: {
rules: [{
required: true,
errorMessage: '昵称不能为空'
}]
},
sex: {
rules: [{
required: true,
errorMessage: '性别不能为空'
}]
},
signature: {
rules: [{
required: true,
errorMessage: '个性签名不能为空'
}]
}
},
}
},
onReady() {
// 需要在onReady中设置规则
this.$refs.valiForm.setRules(this.rules);
},
onLoad(options) {
// 获取用户信息
this.getmember();
},
onShow() {
this.iflogin();
},
methods: {
iflogin(){
this.openId = myCache('openId');
var user = myCache('user');
this.userid = user.userid? user.userid:'';
this.phone = user.userphone;
if(this.userid==""||this.userid=="0"||this.phone==""){
uni.navigateTo({
url: `/pages/login/login`
});
return false;
}
else{
return true;
}
},
upload(e) {
var that = this;
const tempFilePaths = e.tempFilePaths; //e是获取的图片源
console.log(tempFilePaths)
uni.showLoading({
title: '头像上传中...'
});
tempFilePaths.forEach(item => {
console.log(item)
this.upimg(item)
});
},
// 先上传图片
upimg(tempFilePaths) {
var that = this;
var token = uni.getStorageSync("token");
try{
uni.uploadFile({
url: 'https://www.sanduolantoyoga.com/yoga/api/my/avatarUpload', //上传图片的后端接口
filePath: tempFilePaths,
name: 'file',
header: {
// 'content-type': 'multipart/form-data',
'Authorization': token
},
success: res => {
uni.hideLoading();
myCache("ifuserEdit", true);
var data = JSON.parse(res.data);
if (data.success) {
uni.showToast({
title: "头像上传成功!",
icon: 'success'
});
that.valiFormData.avatar = data.data;
that.avatars = [];
var img = {
url: data.data,
imgurl: data.data
}
that.avatars.push(img);
} else {
uni.showToast({
title: "头像上传失败!" + data.msg,
icon: 'error'
});
}
}
});
}
catch(e){
console.log(e)
}
},
// 获取用户基本编辑信息
async getmember() {
const { data: res } = await uni.$http.get("/api/my/myInformation");
if (res.data) {
myCache('member', res.data);
this.valiFormData.id = res.data.id ? res.data.id : '';
this.valiFormData.nickName = res.data.nickName ? res.data.nickName : '';
this.valiFormData.avatar = res.data.avatar ? res.data.avatar : '';
this.valiFormData.sex = res.data.sex ? res.data.sex : '';
this.valiFormData.signature = res.data.signature ? res.data.signature : '';
if (this.valiFormData.avatar) {
this.avatars.push({
imgurl: this.valiFormData.avatar,
url: this.valiFormData.avatar
})
}
this.$forceUpdate();
}
},
submit(ref) {
var that = this;
this.$refs[ref].validate().then(res => {
that.savedo();
}).catch(err => {
console.log('err', err);
});
},
async savedo() {
var that = this;
try {
uni.showLoading({
title: '信息保存中....'
});
const { data: res } = await uni.$http.post("/api/my/modifyMyInformation", that.valiFormData);
if (res.success) {
this.msgType = 'success';
this.messageText = `提交成功!`;
this.$refs.message.open();
myCache("ifuserEdit", true);
setTimeout(() => {
// 返回 关闭当前页面
uni.navigateBack({
delta: 1
});
}, 2000);
} else {
this.msgType = 'error';
this.messageText = res.msg ? res.msg : '提交失败!';
this.$refs.message.open();
}
} catch (res) {
this.msgType = 'error';
this.messageText = res.msg ? res.msg : '提交失败!';
this.$refs.message.open();
}
}
}
}
</script>
<style lang="scss" scoped>
::v-deep .uni-icon-wrapper {
padding: 0 0 0 8rpx !important;
}
::v-deep .uni-forms-item {
display: flex;
align-items: center;
justify-items: flex-start;
justify-content: center;
border-radius: 0 !important;
border-bottom: 2rpx solid #eeeeee !important;
padding-bottom: 10rpx !important;
margin-top: 20rpx !important;
margin-bottom: 20rpx !important;
}
::v-deep .uni-forms-item__label {
font-size: 32rpx;
font-family: PingFang SC-Regular, PingFang SC;
font-weight: 400;
color: #0E1521;
}
::v-deep .uni-data-checklist .checklist-group {
justify-content: flex-end !important;
}
::v-deep .uni-data-checklist .checklist-group .checklist-box {
margin-left: 20px;
margin-right: 5px;
}
::v-deep .uni-data-checklist .checklist-group .checklist-box .checklist-content .checklist-text {
font-size: 32rpx !important;
font-family: PingFang SC-Regular, PingFang SC;
font-weight: 400 !important;
color: #0E1521 !important;
}
::v-deep .uni-easyinput__content-input {
text-align: right;
}
.avatar {
display: flex;
flex-direction: row;
flex-wrap: wrap;
align-items: center;
justify-content: flex-end;
width: 200rpx;
height: 80rpx;
position: absolute;
right: 0;
top: -40rpx;
}
.ftext {
height: 44rpx;
line-height: 44rpx;
font-size: 32rpx;
font-family: PingFang SC-Regular, PingFang SC;
font-weight: 400;
color: #0E1521;
}
.sconr {
display: flex;
flex-direction: row;
align-items: center;
}
.tvalue {
display: flex;
flex: 1;
justify-content: flex-end;
font-size: 32rpx;
font-family: PingFang SC-Regular, PingFang SC;
font-weight: 400;
color: #0E1521;
height: 40rpx;
line-height: 40rpx;
margin-right: 16rpx;
}
.nvalue {
display: flex;
flex: 1;
justify-content: flex-end;
font-size: 32rpx;
font-family: PingFang SC-Regular, PingFang SC;
font-weight: 400;
color: #999999;
height: 40rpx;
line-height: 40rpx;
margin-right: 16rpx;
}
.page {
height: calc(100vh - var(--window-top) - var(--window-bottom));
box-shadow: 0rpx -4rpx 60rpx 2rpx rgba(1, 31, 63, 0.1);
background: #f7f8fa;
}
.submitcon {
margin-top: 100rpx;
display: flex;
align-items: center;
justify-content: center;
}
.bbtn {
margin: 20rpx 10rpx 54rpx;
font-size: 32rpx;
font-family: PingFang SC-Medium, PingFang SC;
font-weight: 500;
color: #FCFCFD;
width: 560rpx;
height: 76rpx;
line-height: 76rpx;
background: #89965f;
box-shadow: 0rpx 12rpx 64rpx 2rpx rgba(137,150,95,0.4);
border-radius: 10rpx;
opacity: 1;
&::after{
border:none;
}
}
.example {
width: 750rpx;
height: 800rpx;
background: #FFFFFF;
border-radius: 0rpx 0rpx 0rpx 0rpx;
opacity: 1;
padding: 10rpx 48rpx;
box-sizing: border-box;
}
</style>