<template> <view class="container"> <view class="back-btn" @click="backToBefore()"> <u-icon name="arrow-left" color="#fff" size="20" customStyle="margin:0 auto"></u-icon> <text class="back-text">编辑信息</text> </view> <view class="avatar" @click="changeAvatar()"> <image src="@/static/images/profile.jpg" mode=""></image> <view class="avatar-description">更换</view> </view> <view class="info-area"> <view class="info-item"> 姓名 <input type="text" v-model="userName"> </view> <view class="info-item" @click="showSexChoose()"> 性别 <view class="info-item-content"> <view v-if="userSex">{{userSex}}</view> <view v-else class="remind-text">请选择性别</view> <u-icon name="arrow-right" color="#343437" size="16" customStyle="margin-left:10rpx"></u-icon> </view> </view> <view class="info-item" @click="showBirChoose()"> 出生年月 <view class="info-item-content"> <view v-if="userBir">{{userBir}}</view> <view v-else class="remind-text">请选择出生年月</view> <u-icon name="arrow-right" color="#343437" size="16" customStyle="margin-left:10rpx"></u-icon> </view> </view> </view> <!-- 性别 --> <u-picker :show="sexShow" :columns="sexList" @confirm="sexClose" @cancel="sexClose"></u-picker> <!-- 年龄 --> <u-datetime-picker :show="birShow" @confirm="birClose" @cancel="birClose" v-model="userBirStamp" mode="date"></u-datetime-picker> </view> </template> <script setup> import { ref } from 'vue' import { onLoad } from "@dcloudio/uni-app" import { getInfo } from "@/api/login.js" import { timeFormat } from "@/utils/timeFormatter.js" function backToBefore() { uni.navigateBack({}) }; let userInfo = ref({}) let userName = ref(null) let userSex = ref(null) let userBir = ref(null) // ====================================选择性别 let sexList = ref([ ["男", "女"] ]) let sexShow = ref(false) function showSexChoose() { sexShow.value = true } function sexClose(e) { if (e) userSex.value = e.value[0]; sexShow.value = false; } // ====================================选择年月 let userBirStamp = ref(null) let birShow = ref(false) function showBirChoose() { birShow.value = true } function birClose(e) { if (e) { let time = timeFormat(e.value) userBir.value = time } birShow.value = false } function changeAvatar() { uni.showToast({ title: "功能建设中...", icon: "none", duration: 2000 }) } onLoad(() => { getInfo().then(res => { userInfo.value = res.data.user; userName.value = userInfo.value.realName; }) }) </script> <style lang="scss" scoped> page { height: 100%; background-color: #EAF0FA; } .container { position: relative; width: 100%; height: 100%; background: linear-gradient(180deg, #1869F6 0%, #EAF0FA 64%, #EAF0FA 100%); .back-btn { position: absolute; top: 8%; left: 4%; display: flex; font-size: 40rpx; font-weight: 500; color: #FFF; .back-text { margin-left: 28rpx; } } .avatar { position: absolute; top: 229rpx; left: 295rpx; width: 160rpx; height: 160rpx; border-radius: 50%; background-color: #fff; overflow: hidden; image { width: 100%; height: 100%; } .avatar-description { position: absolute; bottom: 0; left: 0; width: 100%; height: 34rpx; line-height: 34rpx; font-size: 24rpx; font-weight: 400; color: #FFF; text-align: center; background: rgba(24, 105, 246, 0.46); } } .info-area { position: absolute; top: 446rpx; left: 4%; width: 92%; height: 272rpx; padding: 31rpx 28rpx; box-sizing: border-box; background-color: #fff; border-radius: 40rpx; } .info-item { display: flex; justify-content: space-between; align-items: center; height: 70rpx; color: #9E9E9E; font-size: 32rpx; input { text-align: right; font-size: 32rpx; color: #343437; } .info-item-content { display: flex; align-items: center; color: #343437; font-size: 32rpx; } .remind-text { color: #9E9E9E } } } </style>