1036 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			1036 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
<template>
 | 
						|
  <view class="editprofile-container">
 | 
						|
    <!-- 移动设备顶部状态栏 -->
 | 
						|
    <view v-if="isMobile" class="top_bar">
 | 
						|
      <view class="chat-header">
 | 
						|
        <view class="header-left">
 | 
						|
          <view class="header-icon" @click="goBack">
 | 
						|
            <i class="fas fa-arrow-left"></i>
 | 
						|
          </view>
 | 
						|
        </view>
 | 
						|
        <view class="header-title">编辑个人资料</view>
 | 
						|
        <view class="header-right">
 | 
						|
          <view class="header-icon" @click="saveProfile">
 | 
						|
            <i class="fas fa-check"></i>
 | 
						|
          </view>
 | 
						|
        </view>
 | 
						|
      </view>
 | 
						|
    </view>
 | 
						|
 | 
						|
    <!-- 浏览器环境头部 -->
 | 
						|
    <view v-else class="chat-header">
 | 
						|
      <view class="header-left">
 | 
						|
        <view class="header-icon" @click="goBack">
 | 
						|
          <i class="fas fa-arrow-left"></i>
 | 
						|
        </view>
 | 
						|
      </view>
 | 
						|
      <view class="header-title">编辑个人资料</view>
 | 
						|
      <view class="header-right">
 | 
						|
        <view class="header-icon" @click="saveProfile">
 | 
						|
          <i class="fas fa-check"></i>
 | 
						|
        </view>
 | 
						|
      </view>
 | 
						|
    </view>
 | 
						|
 | 
						|
    <!-- 主要内容区域 -->
 | 
						|
    <view class="editprofile-content">
 | 
						|
      <view class="profile-form">
 | 
						|
        <!-- 头像区域 -->
 | 
						|
        <!-- <view class="avatar-section">
 | 
						|
          <image 
 | 
						|
            :src="profile.avatar || defaultAvatar" 
 | 
						|
            class="profile-avatar" 
 | 
						|
            mode="aspectFill"
 | 
						|
            @error="handleAvatarError"
 | 
						|
          />
 | 
						|
          <view class="avatar-upload-btn" @click="changeAvatar">
 | 
						|
            <i class="fas fa-camera"></i>
 | 
						|
            <text>更换头像</text>
 | 
						|
          </view>
 | 
						|
        </view> -->
 | 
						|
 | 
						|
        <!-- 表单区域 -->
 | 
						|
        <view class="form-section">
 | 
						|
          <!-- 姓名 -->
 | 
						|
          <view class="form-group">
 | 
						|
            <view class="form-label">
 | 
						|
              <i class="fas fa-user"></i>
 | 
						|
              <text>姓名</text>
 | 
						|
            </view>
 | 
						|
            <input
 | 
						|
              type="text"
 | 
						|
              v-model="profile.name"
 | 
						|
              placeholder="请输入真实姓名"
 | 
						|
              maxlength="20"
 | 
						|
              class="form-input"
 | 
						|
            />
 | 
						|
          </view>
 | 
						|
 | 
						|
          <!-- 生日 -->
 | 
						|
          <view class="form-group">
 | 
						|
            <view class="form-label">
 | 
						|
              <i class="fas fa-birthday-cake"></i>
 | 
						|
              <text>生日</text>
 | 
						|
            </view>
 | 
						|
            <picker
 | 
						|
              mode="date"
 | 
						|
              :value="profile.birthday"
 | 
						|
              @change="onBirthdayChange"
 | 
						|
              class="form-picker"
 | 
						|
            >
 | 
						|
              <view class="picker-display">
 | 
						|
                {{ profile.birthday || "请选择生日" }}
 | 
						|
                <i class="fas fa-calendar-alt"></i>
 | 
						|
              </view>
 | 
						|
            </picker>
 | 
						|
          </view>
 | 
						|
 | 
						|
          <!-- 性别 -->
 | 
						|
          <view class="form-group">
 | 
						|
            <view class="form-label">
 | 
						|
              <i class="fas fa-venus-mars"></i>
 | 
						|
              <text>性别</text>
 | 
						|
            </view>
 | 
						|
            <view class="gender-options">
 | 
						|
              <view
 | 
						|
                class="gender-option"
 | 
						|
                :class="{ active: profile.gender === '男' }"
 | 
						|
                @click="profile.gender = '男'"
 | 
						|
              >
 | 
						|
                <i class="fas fa-male"></i>
 | 
						|
                <text>男</text>
 | 
						|
              </view>
 | 
						|
              <view
 | 
						|
                class="gender-option"
 | 
						|
                :class="{ active: profile.gender === '女' }"
 | 
						|
                @click="profile.gender = '女'"
 | 
						|
              >
 | 
						|
                <i class="fas fa-female"></i>
 | 
						|
                <text>女</text>
 | 
						|
              </view>
 | 
						|
              <view
 | 
						|
                class="gender-option"
 | 
						|
                :class="{ active: profile.gender === '保密' }"
 | 
						|
                @click="profile.gender = '保密'"
 | 
						|
              >
 | 
						|
                <i class="fas fa-lock"></i>
 | 
						|
                <text>保密</text>
 | 
						|
              </view>
 | 
						|
            </view>
 | 
						|
          </view>
 | 
						|
 | 
						|
          <!-- 婚姻状况 -->
 | 
						|
          <view class="form-group">
 | 
						|
            <view class="form-label">
 | 
						|
              <i class="fas fa-heart"></i>
 | 
						|
              <text>婚姻状况</text>
 | 
						|
            </view>
 | 
						|
            <view class="marriage-options">
 | 
						|
              <view
 | 
						|
                class="marriage-option"
 | 
						|
                :class="{ active: profile.marriage === '未婚' }"
 | 
						|
                @click="profile.marriage = '未婚'"
 | 
						|
              >
 | 
						|
                <i class="fas fa-user"></i>
 | 
						|
                <text>未婚</text>
 | 
						|
              </view>
 | 
						|
              <view
 | 
						|
                class="marriage-option"
 | 
						|
                :class="{ active: profile.marriage === '已婚' }"
 | 
						|
                @click="profile.marriage = '已婚'"
 | 
						|
              >
 | 
						|
                <i class="fas fa-heart"></i>
 | 
						|
                <text>已婚</text>
 | 
						|
              </view>
 | 
						|
              <view
 | 
						|
                class="marriage-option"
 | 
						|
                :class="{ active: profile.marriage === '离异' }"
 | 
						|
                @click="profile.marriage = '离异'"
 | 
						|
              >
 | 
						|
                <i class="fas fa-heart-broken"></i>
 | 
						|
                <text>离异</text>
 | 
						|
              </view>
 | 
						|
              <view
 | 
						|
                class="marriage-option"
 | 
						|
                :class="{ active: profile.marriage === '保密' }"
 | 
						|
                @click="profile.marriage = '保密'"
 | 
						|
              >
 | 
						|
                <i class="fas fa-lock"></i>
 | 
						|
                <text>保密</text>
 | 
						|
              </view>
 | 
						|
            </view>
 | 
						|
          </view>
 | 
						|
 | 
						|
          <!-- 家庭住址 -->
 | 
						|
          <view class="form-group">
 | 
						|
            <view class="form-label">
 | 
						|
              <i class="fas fa-home"></i>
 | 
						|
              <text>家庭住址</text>
 | 
						|
            </view>
 | 
						|
            <input
 | 
						|
              type="text"
 | 
						|
              v-model="profile.address"
 | 
						|
              placeholder="请输入家庭住址"
 | 
						|
              maxlength="100"
 | 
						|
              class="form-input"
 | 
						|
            />
 | 
						|
          </view>
 | 
						|
 | 
						|
          <!-- 手机号 -->
 | 
						|
          <view class="form-group">
 | 
						|
            <view class="form-label">
 | 
						|
              <i class="fas fa-phone"></i>
 | 
						|
              <text>手机号</text>
 | 
						|
            </view>
 | 
						|
            <input
 | 
						|
              type="text"
 | 
						|
              v-model="profile.phone"
 | 
						|
              placeholder="请输入手机号"
 | 
						|
              maxlength="11"
 | 
						|
              class="form-input"
 | 
						|
            />
 | 
						|
          </view>
 | 
						|
 | 
						|
          <!-- 微信号 -->
 | 
						|
          <view class="form-group">
 | 
						|
            <view class="form-label">
 | 
						|
              <i class="fab fa-weixin"></i>
 | 
						|
              <text>微信号</text>
 | 
						|
            </view>
 | 
						|
            <input
 | 
						|
              type="text"
 | 
						|
              v-model="profile.wechat"
 | 
						|
              placeholder="请输入微信号"
 | 
						|
              maxlength="30"
 | 
						|
              class="form-input"
 | 
						|
            />
 | 
						|
          </view>
 | 
						|
 | 
						|
          <!-- 电子邮箱 -->
 | 
						|
          <view class="form-group">
 | 
						|
            <view class="form-label">
 | 
						|
              <i class="fas fa-envelope"></i>
 | 
						|
              <text>电子邮箱</text>
 | 
						|
            </view>
 | 
						|
            <input
 | 
						|
              type="text"
 | 
						|
              v-model="profile.email"
 | 
						|
              placeholder="请输入电子邮箱"
 | 
						|
              maxlength="50"
 | 
						|
              class="form-input"
 | 
						|
            />
 | 
						|
          </view>
 | 
						|
 | 
						|
          <!-- 个人简介 -->
 | 
						|
          <view class="form-group">
 | 
						|
            <view class="form-label">
 | 
						|
              <i class="fas fa-quote-left"></i>
 | 
						|
              <text>个人简介</text>
 | 
						|
            </view>
 | 
						|
            <textarea
 | 
						|
              v-model="profile.bio"
 | 
						|
              placeholder="请简单介绍一下自己"
 | 
						|
              maxlength="200"
 | 
						|
              class="form-textarea"
 | 
						|
            />
 | 
						|
          </view>
 | 
						|
 | 
						|
          <!-- 工作经历 -->
 | 
						|
          <view class="form-group">
 | 
						|
            <view class="form-label">
 | 
						|
              <i class="fas fa-briefcase"></i>
 | 
						|
              <text>工作经历</text>
 | 
						|
            </view>
 | 
						|
            <view class="experience-item" v-for="(item, index) in profile.workExperience" :key="index">
 | 
						|
              <view class="experience-header">
 | 
						|
                <text class="experience-title">工作经历 {{ index + 1 }}</text>
 | 
						|
                <view class="experience-actions">
 | 
						|
                  <i class="fas fa-edit" @click="editWorkExperience(index)"></i>
 | 
						|
                  <i class="fas fa-trash" @click="removeWorkExperience(index)" v-if="profile.workExperience.length > 1"></i>
 | 
						|
                </view>
 | 
						|
              </view>
 | 
						|
              <view class="experience-content">
 | 
						|
                <view class="time-range">
 | 
						|
                  <picker mode="date" :value="item.startDate" @change="(e) => updateWorkExperience(index, 'startDate', e.detail.value)">
 | 
						|
                    <view class="date-picker">
 | 
						|
                      <text>{{ item.startDate || '开始年月' }}</text>
 | 
						|
                      <i class="fas fa-calendar"></i>
 | 
						|
                    </view>
 | 
						|
                  </picker>
 | 
						|
                  <text class="date-separator">至</text>
 | 
						|
                  <picker mode="date" :value="item.endDate" @change="(e) => updateWorkExperience(index, 'endDate', e.detail.value)">
 | 
						|
                    <view class="date-picker">
 | 
						|
                      <text>{{ item.endDate || '结束年月' }}</text>
 | 
						|
                      <i class="fas fa-calendar"></i>
 | 
						|
                    </view>
 | 
						|
                  </picker>
 | 
						|
                </view>
 | 
						|
                <input
 | 
						|
                  type="text"
 | 
						|
                  v-model="item.company"
 | 
						|
                  placeholder="公司名称"
 | 
						|
                  maxlength="50"
 | 
						|
                  class="form-input"
 | 
						|
                />
 | 
						|
                <input
 | 
						|
                  type="text"
 | 
						|
                  v-model="item.position"
 | 
						|
                  placeholder="职位"
 | 
						|
                  maxlength="30"
 | 
						|
                  class="form-input"
 | 
						|
                />
 | 
						|
                <textarea
 | 
						|
                  v-model="item.description"
 | 
						|
                  placeholder="工作内容描述"
 | 
						|
                  maxlength="200"
 | 
						|
                  class="form-textarea"
 | 
						|
                />
 | 
						|
              </view>
 | 
						|
            </view>
 | 
						|
            <view class="add-experience-btn" @click="addWorkExperience">
 | 
						|
              <i class="fas fa-plus"></i>
 | 
						|
              <text>添加工作经历</text>
 | 
						|
            </view>
 | 
						|
          </view>
 | 
						|
 | 
						|
          <!-- 教育经历 -->
 | 
						|
          <view class="form-group">
 | 
						|
            <view class="form-label">
 | 
						|
              <i class="fas fa-graduation-cap"></i>
 | 
						|
              <text>教育经历</text>
 | 
						|
            </view>
 | 
						|
            <view class="experience-item" v-for="(item, index) in profile.educationExperience" :key="index">
 | 
						|
              <view class="experience-header">
 | 
						|
                <text class="experience-title">教育经历 {{ index + 1 }}</text>
 | 
						|
                <view class="experience-actions">
 | 
						|
                  <i class="fas fa-edit" @click="editEducationExperience(index)"></i>
 | 
						|
                  <i class="fas fa-trash" @click="removeEducationExperience(index)" v-if="profile.educationExperience.length > 1"></i>
 | 
						|
                </view>
 | 
						|
              </view>
 | 
						|
              <view class="experience-content">
 | 
						|
                <view class="time-range">
 | 
						|
                  <picker mode="date" :value="item.startDate" @change="(e) => updateEducationExperience(index, 'startDate', e.detail.value)">
 | 
						|
                    <view class="date-picker">
 | 
						|
                      <text>{{ item.startDate || '开始年月' }}</text>
 | 
						|
                      <i class="fas fa-calendar"></i>
 | 
						|
                    </view>
 | 
						|
                  </picker>
 | 
						|
                  <text class="date-separator">至</text>
 | 
						|
                  <picker mode="date" :value="item.endDate" @change="(e) => updateEducationExperience(index, 'endDate', e.detail.value)">
 | 
						|
                    <view class="date-picker">
 | 
						|
                      <text>{{ item.endDate || '结束年月' }}</text>
 | 
						|
                      <i class="fas fa-calendar"></i>
 | 
						|
                    </view>
 | 
						|
                  </picker>
 | 
						|
                </view>
 | 
						|
                <input
 | 
						|
                  type="text"
 | 
						|
                  v-model="item.school"
 | 
						|
                  placeholder="学校名称"
 | 
						|
                  maxlength="50"
 | 
						|
                  class="form-input"
 | 
						|
                />
 | 
						|
                <input
 | 
						|
                  type="text"
 | 
						|
                  v-model="item.major"
 | 
						|
                  placeholder="专业"
 | 
						|
                  maxlength="30"
 | 
						|
                  class="form-input"
 | 
						|
                />
 | 
						|
                <input
 | 
						|
                  type="text"
 | 
						|
                  v-model="item.degree"
 | 
						|
                  placeholder="学历/学位"
 | 
						|
                  maxlength="20"
 | 
						|
                  class="form-input"
 | 
						|
                />
 | 
						|
                <textarea
 | 
						|
                  v-model="item.description"
 | 
						|
                  placeholder="学习内容描述"
 | 
						|
                  maxlength="200"
 | 
						|
                  class="form-textarea"
 | 
						|
                />
 | 
						|
              </view>
 | 
						|
            </view>
 | 
						|
            <view class="add-experience-btn" @click="addEducationExperience">
 | 
						|
              <i class="fas fa-plus"></i>
 | 
						|
              <text>添加教育经历</text>
 | 
						|
            </view>
 | 
						|
          </view>
 | 
						|
        </view>
 | 
						|
 | 
						|
        <!-- 保存按钮 -->
 | 
						|
        <view class="submit-section">
 | 
						|
          <view class="submit-btn" @click="saveProfile">
 | 
						|
            <i class="fas fa-save"></i>
 | 
						|
            <text>保存修改</text>
 | 
						|
          </view>
 | 
						|
        </view>
 | 
						|
      </view>
 | 
						|
    </view>
 | 
						|
  </view>
 | 
						|
</template>
 | 
						|
 | 
						|
<script>
 | 
						|
export default {
 | 
						|
  data() {
 | 
						|
    return {
 | 
						|
      defaultAvatar: "/static/imgs/default_avatar.png",
 | 
						|
      profile: {
 | 
						|
          avatar: "",
 | 
						|
          name: "",
 | 
						|
          gender: "保密",
 | 
						|
          birthday: "",
 | 
						|
          email: "",
 | 
						|
          marriage: "保密",
 | 
						|
          address: "",
 | 
						|
          phone: "",
 | 
						|
          wechat: "",
 | 
						|
          bio: "",
 | 
						|
          workExperience: [
 | 
						|
            {
 | 
						|
              startDate: "",
 | 
						|
              endDate: "",
 | 
						|
              company: "",
 | 
						|
              position: "",
 | 
						|
              description: ""
 | 
						|
            }
 | 
						|
          ],
 | 
						|
          educationExperience: [
 | 
						|
            {
 | 
						|
              startDate: "",
 | 
						|
              endDate: "",
 | 
						|
              school: "",
 | 
						|
              major: "",
 | 
						|
              degree: "",
 | 
						|
              description: ""
 | 
						|
            }
 | 
						|
          ],
 | 
						|
        },
 | 
						|
    };
 | 
						|
  },
 | 
						|
  computed: {
 | 
						|
    isMobile() {
 | 
						|
      return getApp().globalData.isMobile;
 | 
						|
    },
 | 
						|
  },
 | 
						|
  methods: {
 | 
						|
    goBack() {
 | 
						|
      uni.navigateBack();
 | 
						|
    },
 | 
						|
    changeAvatar() {
 | 
						|
      uni.chooseImage({
 | 
						|
        count: 1,
 | 
						|
        sizeType: ["compressed"],
 | 
						|
        sourceType: ["album", "camera"],
 | 
						|
        success: (res) => {
 | 
						|
          this.profile.avatar = res.tempFilePaths[0];
 | 
						|
          uni.showToast({
 | 
						|
            title: "头像已选择",
 | 
						|
            icon: "success",
 | 
						|
          });
 | 
						|
        },
 | 
						|
        fail: (err) => {
 | 
						|
          console.error("选择头像失败:", err);
 | 
						|
          uni.showToast({
 | 
						|
            title: "选择头像失败",
 | 
						|
            icon: "none",
 | 
						|
          });
 | 
						|
        },
 | 
						|
      });
 | 
						|
    },
 | 
						|
    handleAvatarError() {
 | 
						|
      this.profile.avatar = this.defaultAvatar;
 | 
						|
    },
 | 
						|
    onBirthdayChange(e) {
 | 
						|
      this.profile.birthday = e.detail.value;
 | 
						|
    },
 | 
						|
    // 工作经历相关方法
 | 
						|
    addWorkExperience() {
 | 
						|
      this.profile.workExperience.push({
 | 
						|
        startDate: "",
 | 
						|
        endDate: "",
 | 
						|
        company: "",
 | 
						|
        position: "",
 | 
						|
        description: ""
 | 
						|
      });
 | 
						|
    },
 | 
						|
    removeWorkExperience(index) {
 | 
						|
      if (this.profile.workExperience.length > 1) {
 | 
						|
        this.profile.workExperience.splice(index, 1);
 | 
						|
      }
 | 
						|
    },
 | 
						|
    updateWorkExperience(index, field, value) {
 | 
						|
      this.$set(this.profile.workExperience[index], field, value);
 | 
						|
    },
 | 
						|
    editWorkExperience(index) {
 | 
						|
      // 可以添加编辑逻辑,比如展开/收起
 | 
						|
      console.log('编辑工作经历', index);
 | 
						|
    },
 | 
						|
    // 教育经历相关方法
 | 
						|
    addEducationExperience() {
 | 
						|
      this.profile.educationExperience.push({
 | 
						|
        startDate: "",
 | 
						|
        endDate: "",
 | 
						|
        school: "",
 | 
						|
        major: "",
 | 
						|
        degree: "",
 | 
						|
        description: ""
 | 
						|
      });
 | 
						|
    },
 | 
						|
    removeEducationExperience(index) {
 | 
						|
      if (this.profile.educationExperience.length > 1) {
 | 
						|
        this.profile.educationExperience.splice(index, 1);
 | 
						|
      }
 | 
						|
    },
 | 
						|
    updateEducationExperience(index, field, value) {
 | 
						|
      this.$set(this.profile.educationExperience[index], field, value);
 | 
						|
    },
 | 
						|
    editEducationExperience(index) {
 | 
						|
      // 可以添加编辑逻辑,比如展开/收起
 | 
						|
      console.log('编辑教育经历', index);
 | 
						|
    },
 | 
						|
    saveProfile() {
 | 
						|
      // 验证表单
 | 
						|
      if (!this.profile.name.trim()) {
 | 
						|
        uni.showToast({
 | 
						|
          title: "请输入姓名",
 | 
						|
          icon: "none",
 | 
						|
        });
 | 
						|
        return;
 | 
						|
      }
 | 
						|
 | 
						|
      if (!this.profile.phone.trim()) {
 | 
						|
        uni.showToast({
 | 
						|
          title: "请输入手机号",
 | 
						|
          icon: "none",
 | 
						|
        });
 | 
						|
        return;
 | 
						|
      }
 | 
						|
 | 
						|
      // 验证手机号格式
 | 
						|
      const phoneRegex = /^1[3-9]\d{9}$/;
 | 
						|
      if (!phoneRegex.test(this.profile.phone)) {
 | 
						|
        uni.showToast({
 | 
						|
          title: "请输入正确的手机号",
 | 
						|
          icon: "none",
 | 
						|
        });
 | 
						|
        return;
 | 
						|
      }
 | 
						|
 | 
						|
      if (
 | 
						|
        this.profile.wechat &&
 | 
						|
        !/^[a-zA-Z0-9_-]{6,20}$/.test(this.profile.wechat)
 | 
						|
      ) {
 | 
						|
        uni.showToast({
 | 
						|
          title: "微信号格式不正确",
 | 
						|
          icon: "none",
 | 
						|
        });
 | 
						|
        return;
 | 
						|
      }
 | 
						|
 | 
						|
      if (
 | 
						|
        this.profile.email &&
 | 
						|
        !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(this.profile.email)
 | 
						|
      ) {
 | 
						|
        uni.showToast({
 | 
						|
          title: "邮箱格式不正确",
 | 
						|
          icon: "none",
 | 
						|
        });
 | 
						|
        return;
 | 
						|
      }
 | 
						|
 | 
						|
      // 保存逻辑
 | 
						|
      uni.showLoading({
 | 
						|
        title: "保存中...",
 | 
						|
      });
 | 
						|
 | 
						|
      // 模拟保存
 | 
						|
      setTimeout(() => {
 | 
						|
        uni.hideLoading();
 | 
						|
        uni.showToast({
 | 
						|
          title: "保存成功",
 | 
						|
          icon: "success",
 | 
						|
        });
 | 
						|
 | 
						|
        // 保存成功后返回上一页
 | 
						|
        setTimeout(() => {
 | 
						|
          uni.navigateBack();
 | 
						|
        }, 1500);
 | 
						|
      }, 1000);
 | 
						|
    },
 | 
						|
  },
 | 
						|
};
 | 
						|
</script>
 | 
						|
 | 
						|
<style lang="scss" scoped>
 | 
						|
/* 移动设备顶部状态栏 */
 | 
						|
.top_bar {
 | 
						|
  position: fixed;
 | 
						|
  top: 0;
 | 
						|
  left: 0;
 | 
						|
  right: 0;
 | 
						|
  z-index: 99999;
 | 
						|
  height: calc(var(--status-bar-height, 20px) + 88rpx);
 | 
						|
  background: var(--gradient-primary);
 | 
						|
  box-shadow: var(--shadow-lg);
 | 
						|
}
 | 
						|
 | 
						|
.top_bar .chat-header {
 | 
						|
  background: transparent;
 | 
						|
  border-bottom: none;
 | 
						|
  box-shadow: none;
 | 
						|
  width: 100%;
 | 
						|
  height: 88rpx;
 | 
						|
  padding: 0 20rpx;
 | 
						|
  box-sizing: border-box;
 | 
						|
  display: flex;
 | 
						|
  align-items: center;
 | 
						|
  justify-content: space-between;
 | 
						|
}
 | 
						|
 | 
						|
/* 浏览器环境头部 */
 | 
						|
.chat-header:not(.top_bar .chat-header) {
 | 
						|
  position: fixed;
 | 
						|
  top: 0;
 | 
						|
  left: 0;
 | 
						|
  right: 0;
 | 
						|
  z-index: 9999;
 | 
						|
  background: var(--gradient-primary);
 | 
						|
  box-shadow: var(--shadow-lg);
 | 
						|
  height: calc(var(--status-bar-height) + 88rpx);
 | 
						|
  padding-top: var(--status-bar-height);
 | 
						|
  display: flex;
 | 
						|
  align-items: center;
 | 
						|
  justify-content: space-between;
 | 
						|
  padding-left: 20rpx;
 | 
						|
  padding-right: 20rpx;
 | 
						|
  box-sizing: border-box;
 | 
						|
}
 | 
						|
 | 
						|
.header-left,
 | 
						|
.header-right {
 | 
						|
  display: flex;
 | 
						|
  align-items: center;
 | 
						|
  min-width: 80rpx;
 | 
						|
}
 | 
						|
 | 
						|
.header-right {
 | 
						|
  justify-content: flex-end;
 | 
						|
}
 | 
						|
 | 
						|
.header-title {
 | 
						|
  flex: 1;
 | 
						|
  text-align: center;
 | 
						|
  color: var(--white);
 | 
						|
  font-size: 32rpx;
 | 
						|
  font-weight: 600;
 | 
						|
  margin: 0 20rpx;
 | 
						|
}
 | 
						|
 | 
						|
.header-icon {
 | 
						|
  color: var(--white);
 | 
						|
  font-size: 36rpx;
 | 
						|
  padding: 10rpx;
 | 
						|
  border-radius: 50%;
 | 
						|
  transition: all 0.3s ease;
 | 
						|
}
 | 
						|
 | 
						|
.header-icon:active {
 | 
						|
  background: rgba(255, 255, 255, 0.2);
 | 
						|
  transform: scale(0.95);
 | 
						|
}
 | 
						|
 | 
						|
/* 内容区域 */
 | 
						|
.editprofile-content {
 | 
						|
  padding: 30rpx;
 | 
						|
  padding-top: calc(var(--status-bar-height, 20px) + 118rpx);
 | 
						|
  min-height: 100vh;
 | 
						|
  background: var(--background);
 | 
						|
  box-sizing: border-box;
 | 
						|
}
 | 
						|
 | 
						|
/* 支持安全区域的设备 */
 | 
						|
@supports (padding: max(0px)) {
 | 
						|
  .top_bar {
 | 
						|
    height: calc(
 | 
						|
      var(--status-bar-height, 20px) + 88rpx + env(safe-area-inset-top)
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  .top_bar .chat-header {
 | 
						|
    padding-top: env(safe-area-inset-top);
 | 
						|
  }
 | 
						|
 | 
						|
  .chat-header:not(.top_bar .chat-header) {
 | 
						|
    height: calc(var(--status-bar-height) + 88rpx + env(safe-area-inset-top));
 | 
						|
    padding-top: calc(var(--status-bar-height) + env(safe-area-inset-top));
 | 
						|
  }
 | 
						|
 | 
						|
  .editprofile-content {
 | 
						|
    padding-top: calc(
 | 
						|
      var(--status-bar-height, 20px) + 118rpx + env(safe-area-inset-top)
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/* 表单容器 */
 | 
						|
.profile-form {
 | 
						|
  background: var(--surface);
 | 
						|
  border-radius: 16rpx;
 | 
						|
  box-shadow: var(--shadow-md);
 | 
						|
  overflow: hidden;
 | 
						|
  border: 1rpx solid var(--border);
 | 
						|
}
 | 
						|
 | 
						|
/* 头像区域 */
 | 
						|
.avatar-section {
 | 
						|
  display: flex;
 | 
						|
  flex-direction: column;
 | 
						|
  align-items: center;
 | 
						|
  padding: 40rpx 30rpx;
 | 
						|
  background: var(--gradient-surface);
 | 
						|
  border-bottom: 1rpx solid var(--border-light);
 | 
						|
}
 | 
						|
 | 
						|
.profile-avatar {
 | 
						|
  width: 120rpx;
 | 
						|
  height: 120rpx;
 | 
						|
  border-radius: 50%;
 | 
						|
  box-shadow: var(--shadow-lg);
 | 
						|
  border: 3rpx solid var(--primary-color);
 | 
						|
}
 | 
						|
 | 
						|
.avatar-upload-btn {
 | 
						|
  display: flex;
 | 
						|
  align-items: center;
 | 
						|
  gap: 8rpx;
 | 
						|
  margin-top: 20rpx;
 | 
						|
  background: var(--button-secondary);
 | 
						|
  color: var(--text-color);
 | 
						|
  padding: 12rpx 24rpx;
 | 
						|
  border-radius: 50rpx;
 | 
						|
  font-size: 24rpx;
 | 
						|
  transition: all 0.3s ease;
 | 
						|
  border: 1rpx solid var(--border);
 | 
						|
}
 | 
						|
 | 
						|
.avatar-upload-btn:active {
 | 
						|
  background: var(--button-secondary-hover);
 | 
						|
  transform: scale(0.98);
 | 
						|
}
 | 
						|
 | 
						|
.avatar-upload-btn i {
 | 
						|
  font-size: 20rpx;
 | 
						|
}
 | 
						|
 | 
						|
/* 表单区域 */
 | 
						|
.form-section {
 | 
						|
  padding: 30rpx;
 | 
						|
}
 | 
						|
 | 
						|
.form-group {
 | 
						|
  margin-bottom: 32rpx;
 | 
						|
}
 | 
						|
 | 
						|
.form-label {
 | 
						|
  display: flex;
 | 
						|
  align-items: center;
 | 
						|
  gap: 12rpx;
 | 
						|
  margin-bottom: 16rpx;
 | 
						|
  color: var(--text-secondary);
 | 
						|
  font-size: 28rpx;
 | 
						|
  font-weight: 500;
 | 
						|
}
 | 
						|
 | 
						|
.form-label i {
 | 
						|
  color: var(--primary-color);
 | 
						|
  font-size: 24rpx;
 | 
						|
  width: 24rpx;
 | 
						|
}
 | 
						|
 | 
						|
.form-input,
 | 
						|
.form-textarea {
 | 
						|
  width: 100%;
 | 
						|
  padding: 30rpx;
 | 
						|
  border: 1rpx solid var(--border);
 | 
						|
  border-radius: 12rpx;
 | 
						|
  font-size: 28rpx;
 | 
						|
  background: var(--background-light);
 | 
						|
  color: var(--text-color);
 | 
						|
  box-sizing: border-box;
 | 
						|
  transition: all 0.3s ease;
 | 
						|
}
 | 
						|
 | 
						|
.form-input:focus,
 | 
						|
.form-textarea:focus {
 | 
						|
  border-color: var(--primary-color);
 | 
						|
  box-shadow: 0 0 0 2rpx rgba(43, 124, 233, 0.1);
 | 
						|
  outline: none;
 | 
						|
}
 | 
						|
 | 
						|
.form-textarea {
 | 
						|
  min-height: 80rpx;
 | 
						|
  resize: none;
 | 
						|
}
 | 
						|
 | 
						|
/* 性别选择 */
 | 
						|
.gender-options {
 | 
						|
  display: flex;
 | 
						|
  gap: 16rpx;
 | 
						|
  margin-top: 8rpx;
 | 
						|
}
 | 
						|
 | 
						|
/* 婚姻状况选择 */
 | 
						|
.marriage-options {
 | 
						|
  display: flex;
 | 
						|
  flex-wrap: wrap;
 | 
						|
  gap: 12rpx;
 | 
						|
  margin-top: 8rpx;
 | 
						|
}
 | 
						|
 | 
						|
.gender-option {
 | 
						|
  flex: 1;
 | 
						|
  display: flex;
 | 
						|
  flex-direction: column;
 | 
						|
  align-items: center;
 | 
						|
  gap: 8rpx;
 | 
						|
  padding: 20rpx 16rpx;
 | 
						|
  background: var(--gray-lighter);
 | 
						|
  border: 1rpx solid var(--border-light);
 | 
						|
  border-radius: 12rpx;
 | 
						|
  transition: all 0.3s ease;
 | 
						|
  cursor: pointer;
 | 
						|
}
 | 
						|
 | 
						|
.gender-option.active {
 | 
						|
  background: var(--primary-color);
 | 
						|
  border-color: var(--primary-color);
 | 
						|
  color: var(--white);
 | 
						|
  box-shadow: var(--shadow-md);
 | 
						|
  transform: translateY(-2rpx);
 | 
						|
}
 | 
						|
 | 
						|
.gender-option:not(.active):active {
 | 
						|
  background: var(--primary-light);
 | 
						|
  color: var(--white);
 | 
						|
  transform: scale(0.98);
 | 
						|
}
 | 
						|
 | 
						|
.gender-option i {
 | 
						|
  font-size: 32rpx;
 | 
						|
}
 | 
						|
 | 
						|
.gender-option text {
 | 
						|
  font-size: 24rpx;
 | 
						|
  font-weight: 500;
 | 
						|
}
 | 
						|
 | 
						|
.marriage-option {
 | 
						|
  flex: 1;
 | 
						|
  min-width: calc(50% - 6rpx);
 | 
						|
  display: flex;
 | 
						|
  flex-direction: column;
 | 
						|
  align-items: center;
 | 
						|
  gap: 8rpx;
 | 
						|
  padding: 20rpx 16rpx;
 | 
						|
  background: var(--gray-lighter);
 | 
						|
  border: 1rpx solid var(--border-light);
 | 
						|
  border-radius: 12rpx;
 | 
						|
  transition: all 0.3s ease;
 | 
						|
  cursor: pointer;
 | 
						|
}
 | 
						|
 | 
						|
.marriage-option.active {
 | 
						|
  background: var(--primary-color);
 | 
						|
  border-color: var(--primary-color);
 | 
						|
  color: var(--white);
 | 
						|
  box-shadow: var(--shadow-md);
 | 
						|
  transform: translateY(-2rpx);
 | 
						|
}
 | 
						|
 | 
						|
.marriage-option:not(.active):active {
 | 
						|
  background: var(--primary-light);
 | 
						|
  color: var(--white);
 | 
						|
  transform: scale(0.98);
 | 
						|
}
 | 
						|
 | 
						|
.marriage-option i {
 | 
						|
  font-size: 28rpx;
 | 
						|
}
 | 
						|
 | 
						|
.marriage-option text {
 | 
						|
  font-size: 22rpx;
 | 
						|
  font-weight: 500;
 | 
						|
}
 | 
						|
 | 
						|
/* 经历相关样式 */
 | 
						|
.experience-item {
 | 
						|
  background: var(--white);
 | 
						|
  border: 1rpx solid var(--border-light);
 | 
						|
  border-radius: 12rpx;
 | 
						|
  margin-bottom: 16rpx;
 | 
						|
  overflow: hidden;
 | 
						|
}
 | 
						|
 | 
						|
.experience-header {
 | 
						|
  display: flex;
 | 
						|
  justify-content: space-between;
 | 
						|
  align-items: center;
 | 
						|
  padding: 20rpx 24rpx;
 | 
						|
  background: var(--gray-lighter);
 | 
						|
  border-bottom: 1rpx solid var(--border-light);
 | 
						|
}
 | 
						|
 | 
						|
.experience-title {
 | 
						|
  font-size: 28rpx;
 | 
						|
  font-weight: 600;
 | 
						|
  color: var(--text-primary);
 | 
						|
}
 | 
						|
 | 
						|
.experience-actions {
 | 
						|
  display: flex;
 | 
						|
  gap: 16rpx;
 | 
						|
}
 | 
						|
 | 
						|
.experience-actions i {
 | 
						|
  font-size: 24rpx;
 | 
						|
  color: var(--text-secondary);
 | 
						|
  padding: 8rpx;
 | 
						|
  border-radius: 6rpx;
 | 
						|
  transition: all 0.3s ease;
 | 
						|
}
 | 
						|
 | 
						|
.experience-actions i:active {
 | 
						|
  background: var(--primary-light);
 | 
						|
  color: var(--white);
 | 
						|
}
 | 
						|
 | 
						|
.experience-content {
 | 
						|
  padding: 24rpx;
 | 
						|
}
 | 
						|
 | 
						|
.time-range {
 | 
						|
  display: flex;
 | 
						|
  align-items: center;
 | 
						|
  gap: 16rpx;
 | 
						|
  margin-bottom: 20rpx;
 | 
						|
}
 | 
						|
 | 
						|
.date-picker {
 | 
						|
  flex: 1;
 | 
						|
  display: flex;
 | 
						|
  align-items: center;
 | 
						|
  justify-content: space-between;
 | 
						|
  padding: 16rpx 20rpx;
 | 
						|
  background: var(--gray-lighter);
 | 
						|
  border: 1rpx solid var(--border-light);
 | 
						|
  border-radius: 8rpx;
 | 
						|
  font-size: 26rpx;
 | 
						|
  color: var(--text-primary);
 | 
						|
}
 | 
						|
 | 
						|
.date-picker text {
 | 
						|
  color: var(--text-secondary);
 | 
						|
}
 | 
						|
 | 
						|
.date-picker i {
 | 
						|
  font-size: 20rpx;
 | 
						|
  color: var(--text-secondary);
 | 
						|
}
 | 
						|
 | 
						|
.date-separator {
 | 
						|
  font-size: 24rpx;
 | 
						|
  color: var(--text-secondary);
 | 
						|
  font-weight: 500;
 | 
						|
}
 | 
						|
 | 
						|
.add-experience-btn {
 | 
						|
  display: flex;
 | 
						|
  align-items: center;
 | 
						|
  justify-content: center;
 | 
						|
  gap: 12rpx;
 | 
						|
  padding: 20rpx;
 | 
						|
  background: var(--gray-lighter);
 | 
						|
  border: 2rpx dashed var(--border-light);
 | 
						|
  border-radius: 12rpx;
 | 
						|
  color: var(--text-secondary);
 | 
						|
  font-size: 26rpx;
 | 
						|
  transition: all 0.3s ease;
 | 
						|
  cursor: pointer;
 | 
						|
}
 | 
						|
 | 
						|
.add-experience-btn:active {
 | 
						|
  background: var(--primary-light);
 | 
						|
  color: var(--white);
 | 
						|
  border-color: var(--primary-color);
 | 
						|
}
 | 
						|
 | 
						|
.add-experience-btn i {
 | 
						|
  font-size: 24rpx;
 | 
						|
}
 | 
						|
 | 
						|
/* 日期选择器 */
 | 
						|
.form-picker {
 | 
						|
  width: 100%;
 | 
						|
}
 | 
						|
 | 
						|
.picker-display {
 | 
						|
  display: flex;
 | 
						|
  align-items: center;
 | 
						|
  justify-content: space-between;
 | 
						|
  padding: 20rpx 16rpx;
 | 
						|
  background: var(--background-light);
 | 
						|
  border: 1rpx solid var(--border);
 | 
						|
  border-radius: 12rpx;
 | 
						|
  font-size: 28rpx;
 | 
						|
  color: var(--text-color);
 | 
						|
  transition: all 0.3s ease;
 | 
						|
}
 | 
						|
 | 
						|
.picker-display:active {
 | 
						|
  border-color: var(--primary-color);
 | 
						|
  background: var(--primary-light);
 | 
						|
  color: var(--white);
 | 
						|
}
 | 
						|
 | 
						|
.picker-display i {
 | 
						|
  color: var(--text-muted);
 | 
						|
  font-size: 24rpx;
 | 
						|
}
 | 
						|
 | 
						|
/* 保存按钮区域 */
 | 
						|
.submit-section {
 | 
						|
  padding: 30rpx;
 | 
						|
  background: var(--gray-lighter);
 | 
						|
  border-top: 1rpx solid var(--border-light);
 | 
						|
}
 | 
						|
 | 
						|
.submit-btn {
 | 
						|
  display: flex;
 | 
						|
  align-items: center;
 | 
						|
  justify-content: center;
 | 
						|
  gap: 12rpx;
 | 
						|
  width: 100%;
 | 
						|
  padding: 24rpx 0;
 | 
						|
  background: var(--gradient-primary);
 | 
						|
  color: var(--white);
 | 
						|
  border-radius: 12rpx;
 | 
						|
  font-size: 32rpx;
 | 
						|
  font-weight: 600;
 | 
						|
  box-shadow: var(--shadow-md);
 | 
						|
  transition: all 0.3s ease;
 | 
						|
  border: none;
 | 
						|
}
 | 
						|
 | 
						|
.submit-btn:active {
 | 
						|
  opacity: 0.9;
 | 
						|
  transform: translateY(1rpx);
 | 
						|
  box-shadow: var(--shadow);
 | 
						|
}
 | 
						|
 | 
						|
.submit-btn i {
 | 
						|
  font-size: 28rpx;
 | 
						|
}
 | 
						|
</style>
 |