uniapp 实现个人信息的修改

今天设计用户界面和用户基本信息设计页面,完成登录后用户的信息就会显示在此页面,然后进入修改页面后就可以对用户的对应信息进行修改。

复制代码
<template>
  <view class="container">
    <view class="profile">
      <image :src="userInfo.headshot || defaultAvatar" class="avatar" @dblclick="toLogin()"></image>
      <text class="username">{{ userInfo.username || '用户名未设置' }}</text>
      <view v-if="showDetails" class="details-container" ref="details" @dblclick="changeInfo">
        <view class="detail-item">
          <text class="detail-label">手机号:</text>
          <text class="detail-value">{{ userInfo.phone || '暂无' }}</text>
        </view>
        <view class="detail-item">
          <text class="detail-label">性别:</text>
          <text class="detail-value">{{ userInfo.gender || '暂无' }}</text>
        </view>
        <view class="detail-item">
          <text class="detail-label">生日:</text>
          <text class="detail-value">{{ userInfo.birthday || '暂无' }}</text>
        </view>
        <view class="detail-item">
          <text class="detail-label">位置:</text>
          <text class="detail-value">{{ userInfo.location || '暂无' }}</text>
        </view>
        <view class="detail-item">
          <text class="detail-label">账号:</text>
          <text class="detail-value">{{ userInfo.account || '暂无' }}</text>
        </view>
      </view>
      <text v-if="!showDetails" class="details-hint" @click="toggleDetails">查看详细信息</text>
      <text v-else class="details-hint" @click="toggleDetails">收起</text>
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
        isPopupVisible: false,
        showDetails: false,
        userInfo: {},
        defaultAvatar:'/static/logo.png'
    };
  },
    onShow() {
     // 页面显示时调用的方法
     console.log('页面显示了');
    // 获取存储的数据
    this.userInfo = uni.getStorageSync('userInfo');//读取登录成功后的存入的信息

    // 检查存储的数据是否存在
    if (this.userInfo) {
        // 存储的数据存在,您可以在这里使用它
        console.log(this.userInfo===null);
    } else {
        // 如果存储的数据不存在,则可能出现错误或者之前没有存储任何数据
        console.log("没有找到存储的数据");
        console.log(this.userInfo===null);
    }

    },
    methods: {
    changeInfo(){
        console.log(this.userInfo===null)
        if(this.userInfo)
        {
            uni.navigateTo({
                url:"/pages/userinformation/changeinfo/changeinfo"
            })

        }
        else{
            uni.showToast({
                title:"请登陆后再试",
                icon:"none",
            })
            uni.navigateTo({
                    url:"/pages/userinformation/login/login"
            })
        }
    },
    toLogin()//登录或切换账号
    {
        uni.navigateTo({
                url:"/pages/userinformation/login/login"
        })
    },
    toggleDetails() {
      this.showDetails = !this.showDetails;
    },

    },
}
</script>

<style >
body, html {
    margin: 0;
    padding: 0;
    height: 100%;
    display: flex;
    flex-direction: column;
    justify-content: flex-start; /* 页面内容置于顶部 */
    align-items: center;
    background-color: #f0f0f0; /* 设置页面背景颜色 */
  }
  .container {
    width: 80%;
    max-width: 800px;
    height: auto; /* 让容器高度自适应内容 */
    border: 1px solid #ccc;
    border-radius: 10px;
    padding: 20px;
    margin-top: 20px; /* 上方留出一些空白 */
    background-color: white; /* 设置容器背景颜色 */
  }

.profile {
  display: flex;
  flex-direction: column;
  align-items: center;
  cursor: pointer;
  background-color: #fff;
  padding: 15px 20px;
  border-radius: 10px;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  transition: background-color 0.3s ease;
}

.profile:hover {
  background-color: #f0f0f0;
}

.avatar {
  width: 100px;
  height: 100px;
  border-radius: 50%;
  margin-bottom: 10px;
}

.username {
  font-size: 20px;
}

.details-hint {
  font-size: 14px;
  color: #ccc; /* 浅一点的颜色 */
  margin-top: 10px;
}

.details-container {
  background-color: #fff;
  border-radius: 10px;
  padding: 15px 20px;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}

.detail-item {
  margin-bottom: 10px;
}

.detail-label {
  font-weight: bold;
}

.detail-value {
  margin-left: 10px;
  color: #666;
}
</style>
复制代码

未登录时:

 登录完成后:

 

 然后进入修改页面

复制代码
<template>
  <view class="container">
    <view class="header">
      <text class="title">用户信息</text>
    </view>
    <view class="avatar">
      <image class="avatar-img" :src="userInfo.headshot || defaultAvatar" mode="aspectFill" @tap="changeAvatar"></image>
    </view>
    <view class="form-group">
      <text class="label">用户名:</text>
      <input class="input" type="text" v-model="userInfo.username" placeholder="未填写用户名" />
    </view>
    <view class="form-group">
      <text class="label">手机号:</text>
      <input class="input" type="tel" v-model="userInfo.phone" placeholder="手机号" disabled/>
    </view>
    <view class="form-group">
      <text class="label">账号:</text>
      <input class="input" type="text" v-model="userInfo.account" disabled />
    </view>
    <view class="form-group">
      <text class="label">性别:</text>
      <picker class="input" mode="selector" :range="genderOptions" @change="handleGenderChange">
        <text>{{ userInfo.gender||'未填写' }}</text>
      </picker>
    </view>
    <view class="form-group">
      <text class="label">生日:</text>
      <picker class="input" mode="date" @change="handleDateChange">
        <view>{{ userInfo.birthday||'未填写' }}</view>
      </picker>
    </view>
    <view class="form-group">
      <text class="label">位置:</text>
      <input class="input" type="text" v-model="userInfo.location" placeholder="未填写位置" />
    </view>
    <view class="form-group">
      <text class="label">个人简介:</text>
      <input class="input" type="text" v-model="userInfo.message" placeholder="这个人很懒,什么都没有留下" />
    </view>
    <view class="form-group">
      <button class="btn" @click="updateUserInfo">更新信息</button>
    </view>
  </view>
</template>


<script>
export default {
  data() {
    return {
        genderOptions: ['男', '女', '其他'], // 性别选项列表
        defaultAvatar:'/static/logo.png',
        username:"",
        message:"",
        location:"",
        userInfo: {
      },
    };
  },
  onShow() {
   // 页面显示时调用的方法
   console.log('页面显示了');
  // 获取存储的数据
  this.userInfo = uni.getStorageSync('userInfo');
  this.gender+=this.userInfo.gender;
  // 检查存储的数据是否存在
  if (this.userInfo) {
      // 存储的数据存在,您可以在这里使用它
      console.log(this.userInfo);
  } else {
      // 如果存储的数据不存在,则可能出现错误或者之前没有存储任何数据
      console.log("没有找到存储的数据");
  }
  
  },
  methods: {
    handleGenderChange(event) {
      const index = event.detail.value; // 获取选择的索引
      this.userInfo.gender = this.genderOptions[index]; // 更新性别
      // 在这里可以添加其他逻辑,例如将选择的性别发送到后端或执行其他操作
    },
    handleDateChange(event) {
      // 处理日期选择器变化事件
      this.userInfo.birthday = event.detail.value;
    },
    changeAvatar() {
      uni.chooseImage({
        count: 1,
        success: (res) => {
          // 选择成功后将头像地址赋给userInfo.headshot
          this.defaultAvatar = res.tempFilePaths[0];
          uni.uploadFile({
                    url: this.$BASE_URL.BASE_URL+'/upload',
                    name: 'file',
                    filePath: this.defaultAvatar,
                    success: function(uploadRes) {
                      console.log(uploadRes.data);
                        this.defaultAvatar=uploadRes.data;
                    uni.setStorageSync('headshot', this.defaultAvatar);
                    console.log(this.defaultAvatar)
                    
                    },
                    fail(){
                      uni.showToast({
                          title:"请检查网络设置",
                          icon:"none"
                      })
                    }
          })
        },
      });
    },
    updateUserInfo() {
        console.info(this.userInfo)
        this.username+=this.userInfo.username;
        this.message+=this.userInfo.message;
        this.location+=this.userInfo.location;
        console.log(this.defaultAvatar)
        this.userInfo.headshot=uni.getStorageSync('headshot', this.defaultAvatar);
        console.log(this.userInfo);
        if(this.username.length>20)
        {
            uni.showToast({
                title:"用户名长度应小于20位",
                icon:"none"
            })
            return;
        };
        if(this.location.length>50)
        {
            uni.showToast({
                title:"位置信息长度应小于20位",
                icon:"none"
            })
            return;
        };
        if(this.message.length>200)
        {
            uni.showToast({
                title:"个人简介长度应小于200位",
                icon:"none"
            })
            return;
        }
        uni.request({
            url:this.$BASE_URL.BASE_URL+'/updata/user',
            method:"POST",
            data:this.userInfo,
            success: (res) => {
                if(res.data.code===1)
                {
                    uni.showToast({
                        title:"信息修改成功",
                    })
                    uni.setStorageSync('userInfo', this.userInfo);
                    uni.redirectTo({
                        url:"/pages/userinformation/userinformation"
                    })
                }
                else{
                    uni.showToast({
                        title:"信息修改失败",
                        icon:"none"
                    })
                }
            }
        })
    }, 
  },
};
</script>

<style>
.error {
  color: #ff0000;
  font-size: 12px;
}
.container {
  padding: 20px;
}

.header {
  text-align: center;
  margin-bottom: 20px;
}

.title {
  font-size: 24px;
  font-weight: bold;
}

.avatar {
  text-align: center;
  margin-bottom: 20px;
}

.avatar-img {
  width: 100px;
  height: 100px;
  border-radius: 50%;
}

.btn-edit-avatar {
  background-color: #007bff;
  color: #fff;
  border: none;
  padding: 8px 16px;
  border-radius: 20px;
  cursor: pointer;
  font-size: 14px;
  margin-top: 10px;
}

.form-group {
  margin-bottom: 15px;
  display: flex;
  align-items: center;
}

.label {
  width: 80px;
  margin-right: 10px;
}

.input {
  flex: 1;
  padding: 5px;
  border: none;
  border-bottom: 1px solid #ccc;
}

.btn {
  background-color: #007bff;
  color: #fff;
  border: none;
  padding: 10px 20px;
  border-radius: 5px;
  cursor: pointer;
  font-size: 16px;
}
</style>
复制代码

 

posted @ 2024-06-18 01:29  财神给你送元宝  阅读(89)  评论(0编辑  收藏  举报