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>
|