|
@@ -0,0 +1,2243 @@
|
|
|
+<template>
|
|
|
+ <view class="personal-container">
|
|
|
+ <!-- 添加承诺书弹框 -->
|
|
|
+ <view class="promise-modal" v-if="showPromiseModal">
|
|
|
+ <view class="promise-content">
|
|
|
+ <view class="promise-title">入职承诺书</view>
|
|
|
+ <scroll-view scroll-y class="promise-text">
|
|
|
+ <text>
|
|
|
+ 本人郑重承诺:
|
|
|
+ 所提交的入职登记表、学历证书、职业资格证明、工作履历等全部个人信息及证明材料均真实、准确、完整。若经公司核查发现存在虚构工作经历、伪造学历证书、隐瞒竞业限制义务、虚报健康状况等任何不实或欺诈情形,本人自愿承担以下责任:
|
|
|
+
|
|
|
+ 1. 法律责任:因信息不实引发的劳动纠纷、民事赔偿、行政处罚或刑事追责,由本人独立承担全部法律后果,公司不承担任何连带责任;
|
|
|
+
|
|
|
+ 2. 劳动关系处理:公司有权立即解除劳动合同,无需支付经济补偿,并保留向本人追偿因信息欺诈导致公司经济损失(包括但不限于招聘成本、培训费用、商誉损失等)的权利;
|
|
|
+
|
|
|
+ 3. 其他后果:若已入职,公司可单方撤销录用决定,要求返还已发放的工资、福利等费用,并可将不实行为记入个人档案。
|
|
|
+
|
|
|
+ 本人确认已充分理解上述条款内容,无任何歧义,并自愿受其约束。
|
|
|
+ </text>
|
|
|
+ </scroll-view>
|
|
|
+ <view class="promise-checkbox">
|
|
|
+ <checkbox :checked="promiseChecked" @click="togglePromiseChecked" />
|
|
|
+ <text>我已阅读并同意以上承诺书内容</text>
|
|
|
+ </view>
|
|
|
+ <view class="promise-buttons">
|
|
|
+ <button class="promise-btn confirm-btn" :disabled="!promiseChecked" @click="confirmPromise">确认</button>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="form-title">个人信息表</view>
|
|
|
+
|
|
|
+ <!-- 添加步骤指示器 -->
|
|
|
+ <!-- <view class="steps-indicator">
|
|
|
+ <view
|
|
|
+ v-for="(step, index) in steps"
|
|
|
+ :key="step.id"
|
|
|
+ class="step-item"
|
|
|
+ :class="{ 'active': currentStep >= step.id, 'current': currentStep === step.id }"
|
|
|
+ >
|
|
|
+ <view class="step-number">{{ step.id }}</view>
|
|
|
+ <view class="step-name">{{ step.name }}</view>
|
|
|
+ </view>
|
|
|
+ </view> -->
|
|
|
+
|
|
|
+ <!-- 第一步:个人基本信息 -->
|
|
|
+ <view v-if="currentStep === 1" class="form-container">
|
|
|
+ <!-- 第一行 -->
|
|
|
+ <view class="form-row">
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">姓名</text>
|
|
|
+ <input type="text" v-model="formData.name" placeholder="请输入姓名" :class="{'input-error': formErrors.name}" />
|
|
|
+ <text v-if="formErrors.name" class="error-message">{{formErrors.name}}</text>
|
|
|
+ </view>
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">性别</text>
|
|
|
+ <picker @change="bindGenderChange" :value="genderIndex" :range="genderOptions">
|
|
|
+ <view class="picker-text">{{ genderOptions[genderIndex] || '请选择性别' }}</view>
|
|
|
+ </picker>
|
|
|
+ </view>
|
|
|
+ <!-- 当性别为女时显示三期选择 -->
|
|
|
+ <view class="form-item" v-if="formData.gender === '女'">
|
|
|
+ <text class="label">是否为三期</text>
|
|
|
+ <picker @change="bindThreePeriodChange" :value="threePeriodIndex" :range="threePeriodOptions">
|
|
|
+ <view class="picker-text">{{ threePeriodOptions[threePeriodIndex] || '请选择' }}</view>
|
|
|
+ </picker>
|
|
|
+ </view>
|
|
|
+ <view class="form-row">
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">手机号</text>
|
|
|
+ <input type="number" v-model="formData.phone" placeholder="请输入手机号" :class="{'input-error': formErrors.phone}" />
|
|
|
+ <text v-if="formErrors.phone" class="error-message">{{formErrors.phone}}</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <!-- <view class="form-item">
|
|
|
+ <text class="label">出生日期</text>
|
|
|
+ <picker mode="date" :value="formData.birthDate" @change="bindDateChange">
|
|
|
+ <view class="picker-text">{{ formData.birthDate || '请选择日期' }}</view>
|
|
|
+ </picker>
|
|
|
+ </view> -->
|
|
|
+ </view>
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">身份证号</text>
|
|
|
+ <input type="idcard" v-model="formData.idCard" placeholder="请输入身份证号" :class="{'input-error': formErrors.idCard}" />
|
|
|
+ <text v-if="formErrors.idCard" class="error-message">{{formErrors.idCard}}</text>
|
|
|
+ </view>
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">政治面貌</text>
|
|
|
+ <picker @change="bindPoliticalChange" :value="politicalIndex" :range="politicalOptions">
|
|
|
+ <view class="picker-text">{{ politicalOptions[politicalIndex] || '请选择政治面貌' }}</view>
|
|
|
+ </picker>
|
|
|
+ </view>
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">民族</text>
|
|
|
+ <picker @change="bindEthnicChange" :value="ethnicIndex" :range="ethnicOptions">
|
|
|
+ <view class="picker-text">{{ ethnicOptions[ethnicIndex] || '请选择民族' }}</view>
|
|
|
+ </picker>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 第三行 -->
|
|
|
+ <view class="form-row">
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">身高(cm)</text>
|
|
|
+ <input type="digit" v-model="formData.height" placeholder="请输入身高" />
|
|
|
+ </view>
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">体重(kg)</text>
|
|
|
+ <input type="digit" v-model="formData.weight" placeholder="请输入体重" />
|
|
|
+ </view>
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">籍贯</text>
|
|
|
+ <input type="text" v-model="formData.nativePlace" placeholder="请输入籍贯" />
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 第四行 -->
|
|
|
+ <view class="form-row">
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">户口所在地</text>
|
|
|
+ <input type="text" v-model="formData.residence" placeholder="请输入户口所在地" />
|
|
|
+ </view>
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">婚育状况</text>
|
|
|
+ <picker @change="bindMarriageChange" :value="marriageIndex" :range="marriageOptions">
|
|
|
+ <view class="picker-text">{{ marriageOptions[marriageIndex] || '请选择婚育状况' }}</view>
|
|
|
+ </picker>
|
|
|
+ </view>
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">期望薪资(元/月)</text>
|
|
|
+ <input type="digit" v-model="formData.expectedSalary" placeholder="请输入期望薪资" />
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 第二步:紧急联系人信息 -->
|
|
|
+ <view v-if="currentStep === 2" class="form-container">
|
|
|
+ <view class="section-title">紧急联系人信息</view>
|
|
|
+
|
|
|
+ <view class="form-row">
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">Email</text>
|
|
|
+ <input type="text" v-model="formData.email" placeholder="请输入电子邮箱" />
|
|
|
+ </view>
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">现居住地址</text>
|
|
|
+ <input type="text" v-model="formData.currentAddress" placeholder="请输入现居住地址" />
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="form-row">
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">紧急联系人</text>
|
|
|
+ <input type="text" v-model="formData.emergencyContact" placeholder="请输入紧急联系人姓名" />
|
|
|
+ </view>
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">紧急联系人电话</text>
|
|
|
+ <input type="number" v-model="formData.emergencyPhone" placeholder="请输入紧急联系人电话" />
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="form-row">
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">个人专长/业余爱好</text>
|
|
|
+ <input type="text" v-model="formData.hobby" placeholder="请输入个人专长或业余爱好" />
|
|
|
+ </view>
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">人生信条或座右铭</text>
|
|
|
+ <input type="text" v-model="formData.motto" placeholder="请输入人生信条或座右铭" />
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 第三步:家庭成员信息 -->
|
|
|
+ <view v-if="currentStep === 3">
|
|
|
+ <view class="section-title">家庭主要成员信息</view>
|
|
|
+
|
|
|
+ <!-- 已添加的家庭成员列表 -->
|
|
|
+ <view class="family-members-list" v-if="familyMembers.length > 0">
|
|
|
+ <view class="family-member-item" v-for="(member, index) in familyMembers" :key="index">
|
|
|
+ <view class="family-member-header">
|
|
|
+ <text class="family-member-title">成员 {{index + 1}}</text>
|
|
|
+ <view class="family-member-actions">
|
|
|
+ <text class="family-member-edit" @click="editFamilyMember(index)">编辑</text>
|
|
|
+ <text class="family-member-delete" @click="deleteFamilyMember(index)">删除</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="family-member-content">
|
|
|
+ <view class="family-member-row">
|
|
|
+ <text class="family-member-label">称谓:</text>
|
|
|
+ <text class="family-member-value">{{member.relation}}</text>
|
|
|
+ </view>
|
|
|
+ <view class="family-member-row">
|
|
|
+ <text class="family-member-label">姓名:</text>
|
|
|
+ <text class="family-member-value">{{member.name}}</text>
|
|
|
+ </view>
|
|
|
+ <view class="family-member-row">
|
|
|
+ <text class="family-member-label">工作单位/家庭地址:</text>
|
|
|
+ <text class="family-member-value">{{member.workplaceOrAddress}}</text>
|
|
|
+ </view>
|
|
|
+ <view class="family-member-row">
|
|
|
+ <text class="family-member-label">职务:</text>
|
|
|
+ <text class="family-member-value">{{member.position}}</text>
|
|
|
+ </view>
|
|
|
+ <view class="family-member-row">
|
|
|
+ <text class="family-member-label">联系电话:</text>
|
|
|
+ <text class="family-member-value">{{member.phone}}</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 家庭成员信息表单 -->
|
|
|
+ <view class="family-member-form">
|
|
|
+ <view class="form-subtitle">
|
|
|
+ {{ isEditing ? '编辑家庭成员' : '添加家庭成员' }}
|
|
|
+ <text v-if="isEditing" class="cancel-edit" @click="cancelEdit">取消编辑</text>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="form-row">
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">称谓</text>
|
|
|
+ <input type="text" v-model="familyMemberForm.relation" placeholder="如:父亲、母亲、配偶等" />
|
|
|
+ </view>
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">姓名</text>
|
|
|
+ <input type="text" v-model="familyMemberForm.name" placeholder="请输入姓名" />
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="form-row">
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">工作单位/家庭地址</text>
|
|
|
+ <input type="text" v-model="familyMemberForm.workplaceOrAddress" placeholder="请输入工作单位或家庭地址" />
|
|
|
+ </view>
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">职务</text>
|
|
|
+ <input type="text" v-model="familyMemberForm.position" placeholder="请输入职务" />
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="form-row">
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">联系电话</text>
|
|
|
+ <input type="number" v-model="familyMemberForm.phone" placeholder="请输入联系电话" />
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="form-row button-row">
|
|
|
+ <view class="form-item button-container">
|
|
|
+ <button class="circle-btn" @click="saveFamilyMember">
|
|
|
+ <text class="btn-icon">{{ isEditing ? '✓' : '+' }}</text>
|
|
|
+ </button>
|
|
|
+ <text class="btn-text">{{ isEditing ? '保存修改' : '添加成员' }}</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 第四步:应聘来源 -->
|
|
|
+ <view v-if="currentStep === 4">
|
|
|
+ <view class="section-title">应聘来源</view>
|
|
|
+ <view class="source-container">
|
|
|
+ <!-- <view class="source-row">
|
|
|
+ <view class="source-label">实习生:</view>
|
|
|
+ <view class="source-options">
|
|
|
+ <view class="source-option">
|
|
|
+ <checkbox :checked="formData.sourceType === 'school'" @click="selectSourceType('school')" />
|
|
|
+ <text>学校</text>
|
|
|
+ </view>
|
|
|
+ <view class="source-option other-option">
|
|
|
+ <text>其他渠道:</text>
|
|
|
+ <input
|
|
|
+ type="text"
|
|
|
+ v-model="formData.otherSchoolSource"
|
|
|
+ placeholder="请填写"
|
|
|
+ :disabled="formData.sourceType !== 'school'"
|
|
|
+ />
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view> -->
|
|
|
+
|
|
|
+ <view class="source-row">
|
|
|
+ <view class="source-label">社招:</view>
|
|
|
+ <view class="source-options">
|
|
|
+ <view class="source-option">
|
|
|
+ <checkbox :checked="formData.sourceType === 'social' && formData.socialSource === 'BOSS'" @click="selectSocialSource('BOSS')" />
|
|
|
+ <text>BOSS直聘</text>
|
|
|
+ </view>
|
|
|
+ <view class="source-option">
|
|
|
+ <checkbox :checked="formData.sourceType === 'social' && formData.socialSource === 'zhilian'" @click="selectSocialSource('zhilian')" />
|
|
|
+ <text>智联招聘</text>
|
|
|
+ </view>
|
|
|
+ <view class="source-option">
|
|
|
+ <checkbox :checked="formData.sourceType === 'social' && formData.socialSource === 'liepin'" @click="selectSocialSource('liepin')" />
|
|
|
+ <text>猎聘</text>
|
|
|
+ </view>
|
|
|
+ <view class="source-option other-option">
|
|
|
+ <text>其他渠道:</text>
|
|
|
+ <input
|
|
|
+ type="text"
|
|
|
+ v-model="formData.otherSocialSource"
|
|
|
+ placeholder="请填写"
|
|
|
+ :disabled="formData.sourceType !== 'social' || formData.socialSource !== 'other'"
|
|
|
+ @click="selectSocialSource('other')"
|
|
|
+ />
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 第五步:教育经历 -->
|
|
|
+ <view v-if="currentStep === 5">
|
|
|
+ <view class="section-title">教育经历</view>
|
|
|
+
|
|
|
+ <!-- 已添加的教育经历列表 -->
|
|
|
+ <view class="education-list" v-if="educationList.length > 0">
|
|
|
+ <view class="education-item" v-for="(edu, index) in educationList" :key="index">
|
|
|
+ <view class="education-header">
|
|
|
+ <text class="education-title">{{ index === 0 ? '第一学历' : '最高学历' }}</text>
|
|
|
+ <view class="education-actions">
|
|
|
+ <text class="education-edit" @click="editEducation(index)">编辑</text>
|
|
|
+ <text class="education-delete" @click="deleteEducation(index)">删除</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="education-content">
|
|
|
+ <view class="education-row">
|
|
|
+ <text class="education-label">起止时间:</text>
|
|
|
+ <text class="education-value">{{edu.startTime}} 至 {{edu.endTime}}</text>
|
|
|
+ </view>
|
|
|
+ <view class="education-row">
|
|
|
+ <text class="education-label">学校名称:</text>
|
|
|
+ <text class="education-value">{{edu.schoolName}}</text>
|
|
|
+ </view>
|
|
|
+ <view class="education-row">
|
|
|
+ <text class="education-label">专业:</text>
|
|
|
+ <text class="education-value">{{edu.major}}</text>
|
|
|
+ </view>
|
|
|
+ <view class="education-row">
|
|
|
+ <text class="education-label">学历:</text>
|
|
|
+ <text class="education-value">{{edu.degree}}</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 教育经历表单 -->
|
|
|
+ <view class="education-form" v-if="educationList.length < 2 || isEditingEducation">
|
|
|
+ <view class="form-subtitle">
|
|
|
+ {{ isEditingEducation ? '编辑教育经历' : (educationList.length === 0 ? '添加第一学历' : '添加最高学历') }}
|
|
|
+ <text v-if="isEditingEducation" class="cancel-edit" @click="cancelEditEducation">取消编辑</text>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="form-row">
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">起止时间</text>
|
|
|
+ <view class="date-range">
|
|
|
+ <picker mode="date" :value="educationForm.startTime" @change="bindStartTimeChange">
|
|
|
+ <view class="picker-text">{{ educationForm.startTime || '开始时间' }}</view>
|
|
|
+ </picker>
|
|
|
+ <text class="date-separator">至</text>
|
|
|
+ <picker mode="date" :value="educationForm.endTime" @change="bindEndTimeChange">
|
|
|
+ <view class="picker-text">{{ educationForm.endTime || '结束时间' }}</view>
|
|
|
+ </picker>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="form-row">
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">学校名称</text>
|
|
|
+ <input type="text" v-model="educationForm.schoolName" placeholder="请输入学校名称" />
|
|
|
+ </view>
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">专业</text>
|
|
|
+ <input type="text" v-model="educationForm.major" placeholder="请输入专业" />
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="form-row">
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">学历</text>
|
|
|
+ <picker @change="bindDegreeChange" :value="degreeIndex" :range="degreeOptions">
|
|
|
+ <view class="picker-text">{{ degreeOptions[degreeIndex] || '请选择学历' }}</view>
|
|
|
+ </picker>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="form-row button-row">
|
|
|
+ <view class="form-item button-container">
|
|
|
+ <button class="circle-btn" @click="saveEducation">
|
|
|
+ <text class="btn-icon">{{ isEditingEducation ? '✓' : '+' }}</text>
|
|
|
+ </button>
|
|
|
+ <text class="btn-text">{{ isEditingEducation ? '保存修改' : '添加学历' }}</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 第六步:专业技能 -->
|
|
|
+ <view v-if="currentStep === 6">
|
|
|
+ <view class="section-title">专业技能</view>
|
|
|
+ <view class="skills-container">
|
|
|
+ <textarea v-model="formData.skills" placeholder="请描述您的专业技能" class="skills-textarea"></textarea>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 第七步:培训经历 -->
|
|
|
+ <view v-if="currentStep === 7">
|
|
|
+ <view class="section-title">受过的培训</view>
|
|
|
+ <view class="training-container">
|
|
|
+ <textarea v-model="formData.training" placeholder="请描述您接受过的培训经历" class="training-textarea"></textarea>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 第八步:工作经历 -->
|
|
|
+ <view v-if="currentStep === 8">
|
|
|
+ <view class="section-title">工作经历</view>
|
|
|
+
|
|
|
+ <!-- 已添加的工作经历列表 -->
|
|
|
+ <view class="work-list" v-if="workList.length > 0">
|
|
|
+ <view class="work-item" v-for="(work, index) in workList" :key="index">
|
|
|
+ <view class="work-header">
|
|
|
+ <text class="work-title">单位{{ index + 1 }}</text>
|
|
|
+ <view class="work-actions">
|
|
|
+ <text class="work-edit" @click="editWork(index)">编辑</text>
|
|
|
+ <text class="work-delete" @click="deleteWork(index)">删除</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="work-content">
|
|
|
+ <view class="work-row">
|
|
|
+ <text class="work-label">起止时间:</text>
|
|
|
+ <text class="work-value">{{work.startTime}} 至 {{work.endTime}}</text>
|
|
|
+ </view>
|
|
|
+ <view class="work-row">
|
|
|
+ <text class="work-label">单位名称:</text>
|
|
|
+ <text class="work-value">{{work.companyName}}</text>
|
|
|
+ </view>
|
|
|
+ <view class="work-row">
|
|
|
+ <text class="work-label">任职部门:</text>
|
|
|
+ <text class="work-value">{{work.department}}</text>
|
|
|
+ </view>
|
|
|
+ <view class="work-row">
|
|
|
+ <text class="work-label">单位人数:</text>
|
|
|
+ <text class="work-value">{{work.employeeCount}}</text>
|
|
|
+ </view>
|
|
|
+ <view class="work-row">
|
|
|
+ <text class="work-label">担任职务:</text>
|
|
|
+ <text class="work-value">{{work.position}}</text>
|
|
|
+ </view>
|
|
|
+ <view class="work-row">
|
|
|
+ <text class="work-label">月总收入:</text>
|
|
|
+ <text class="work-value">{{work.monthlySalary}}</text>
|
|
|
+ </view>
|
|
|
+ <view class="work-row">
|
|
|
+ <text class="work-label">直接领导:</text>
|
|
|
+ <text class="work-value">{{work.supervisor}}</text>
|
|
|
+ </view>
|
|
|
+ <view class="work-row">
|
|
|
+ <text class="work-label">领导电话:</text>
|
|
|
+ <text class="work-value">{{work.supervisorPhone}}</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 工作经历表单 -->
|
|
|
+ <view class="work-form" v-if="workList.length < 2 || isEditingWork">
|
|
|
+ <view class="form-subtitle">
|
|
|
+ {{ isEditingWork ? '编辑工作经历' : '添加工作经历' }}
|
|
|
+ <text v-if="isEditingWork" class="cancel-edit" @click="cancelEditWork">取消编辑</text>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="form-row">
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">起止时间</text>
|
|
|
+ <view class="date-range">
|
|
|
+ <picker mode="date" :value="workForm.startTime" @change="bindWorkStartTimeChange">
|
|
|
+ <view class="picker-text">{{ workForm.startTime || '开始时间' }}</view>
|
|
|
+ </picker>
|
|
|
+ <text class="date-separator">至</text>
|
|
|
+ <picker mode="date" :value="workForm.endTime" @change="bindWorkEndTimeChange">
|
|
|
+ <view class="picker-text">{{ workForm.endTime || '结束时间' }}</view>
|
|
|
+ </picker>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="form-row">
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">单位名称</text>
|
|
|
+ <input type="text" v-model="workForm.companyName" placeholder="请输入单位名称" />
|
|
|
+ </view>
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">单位人数</text>
|
|
|
+ <input type="number" v-model="workForm.employeeCount" placeholder="请输入单位人数" />
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="form-row">
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">任职部门</text>
|
|
|
+ <input type="text" v-model="workForm.department" placeholder="请输入任职部门" />
|
|
|
+ </view>
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">担任职务</text>
|
|
|
+ <input type="text" v-model="workForm.position" placeholder="请输入担任职务" />
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="form-row">
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">月总收入</text>
|
|
|
+ <input type="digit" v-model="workForm.monthlySalary" placeholder="请输入月总收入" />
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="form-row">
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">直接领导</text>
|
|
|
+ <input type="text" v-model="workForm.supervisor" placeholder="请输入直接领导姓名" />
|
|
|
+ </view>
|
|
|
+ <view class="form-item">
|
|
|
+ <text class="label">领导电话</text>
|
|
|
+ <input type="number" v-model="workForm.supervisorPhone" placeholder="请输入领导电话" />
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="form-row button-row">
|
|
|
+ <view class="form-item button-container">
|
|
|
+ <button class="circle-btn" @click="saveWork">
|
|
|
+ <text class="btn-icon">{{ isEditingWork ? '✓' : '+' }}</text>
|
|
|
+ </button>
|
|
|
+ <text class="btn-text">{{ isEditingWork ? '保存修改' : '添加工作经历' }}</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 第九步:确认提交 -->
|
|
|
+ <view v-if="currentStep === 9" class="confirm-container">
|
|
|
+ <view class="section-title">确认提交</view>
|
|
|
+ <view class="confirm-message">
|
|
|
+ <text>您已完成所有信息的填写,请确认信息无误后提交。</text>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 可以在这里添加信息摘要展示 -->
|
|
|
+ <view class="info-summary">
|
|
|
+ <view class="summary-item">
|
|
|
+ <text class="summary-label">姓名:</text>
|
|
|
+ <text class="summary-value">{{ formData.name }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="summary-item">
|
|
|
+ <text class="summary-label">性别:</text>
|
|
|
+ <text class="summary-value">{{ formData.gender }}</text>
|
|
|
+ </view>
|
|
|
+ <!-- 其他关键信息摘要 -->
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 导航按钮 -->
|
|
|
+ <view class="nav-buttons">
|
|
|
+ <button
|
|
|
+ v-if="currentStep > 1"
|
|
|
+ class="nav-btn prev-btn"
|
|
|
+ @click="prevStep"
|
|
|
+ >上一步</button>
|
|
|
+
|
|
|
+ <button
|
|
|
+ v-if="currentStep < steps.length"
|
|
|
+ class="nav-btn next-btn"
|
|
|
+ @click="nextStep"
|
|
|
+ >下一步</button>
|
|
|
+
|
|
|
+ <button
|
|
|
+ v-if="currentStep === steps.length"
|
|
|
+ class="submit-btn"
|
|
|
+ @click="submitForm"
|
|
|
+ >提交</button>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import { apiBaseUrl } from '@/common/config.js';
|
|
|
+ export default {
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ // 添加承诺书相关数据
|
|
|
+ showPromiseModal: true,
|
|
|
+ promiseChecked: false,
|
|
|
+
|
|
|
+ formData: {
|
|
|
+ name: '',
|
|
|
+ gender: '',
|
|
|
+ threePeriod: '',
|
|
|
+ birthDate: '',
|
|
|
+ idCard: '',
|
|
|
+ political: '',
|
|
|
+ ethnic: '',
|
|
|
+ height: '',
|
|
|
+ weight: '',
|
|
|
+ nativePlace: '',
|
|
|
+ residence: '',
|
|
|
+ marriage: '',
|
|
|
+ expectedSalary: '',
|
|
|
+ phone: '',
|
|
|
+ email: '',
|
|
|
+ currentAddress: '',
|
|
|
+ emergencyContact: '',
|
|
|
+ emergencyPhone: '',
|
|
|
+ hobby: '',
|
|
|
+ motto: '',
|
|
|
+ // 添加应聘来源相关字段
|
|
|
+ sourceType: 'social', // 默认为社招
|
|
|
+ socialSource: '', // 社招来源
|
|
|
+ otherSocialSource: '', // 其他社招来源
|
|
|
+ otherSchoolSource: '', // 其他学校来源
|
|
|
+ // 添加技能和培训字段
|
|
|
+ skills: '',
|
|
|
+ training: '',
|
|
|
+ },
|
|
|
+ genderOptions: ['男', '女'],
|
|
|
+ genderIndex: -1,
|
|
|
+ threePeriodOptions: ['无', '孕期', '产期', '哺乳期'],
|
|
|
+ threePeriodIndex: -1,
|
|
|
+ politicalOptions: ['群众', '共青团员', '中共党员', '民主党派'],
|
|
|
+ politicalIndex: -1,
|
|
|
+ ethnicOptions: ['汉族', '蒙古族', '回族', '藏族', '维吾尔族', '其他'],
|
|
|
+ ethnicIndex: -1,
|
|
|
+ marriageOptions: ['未婚', '已婚', '离异', '丧偶'],
|
|
|
+ marriageIndex: -1,
|
|
|
+ familyMembers: [],
|
|
|
+ familyMemberForm: {
|
|
|
+ relation: '',
|
|
|
+ name: '',
|
|
|
+ workplaceOrAddress: '',
|
|
|
+ position: '',
|
|
|
+ phone: ''
|
|
|
+ },
|
|
|
+ isEditing: false,
|
|
|
+ editingIndex: -1,
|
|
|
+ // 添加教育经历相关数据
|
|
|
+ educationList: [],
|
|
|
+ educationForm: {
|
|
|
+ startTime: '',
|
|
|
+ endTime: '',
|
|
|
+ schoolName: '',
|
|
|
+ major: '',
|
|
|
+ degree: ''
|
|
|
+ },
|
|
|
+ isEditingEducation: false,
|
|
|
+ editingEducationIndex: -1,
|
|
|
+ degreeOptions: ['高中', '中专', '大专', '本科', '硕士', '博士'],
|
|
|
+ degreeIndex: -1,
|
|
|
+ // 添加工作经历相关数据
|
|
|
+ workList: [],
|
|
|
+ workForm: {
|
|
|
+ startTime: '',
|
|
|
+ endTime: '',
|
|
|
+ companyName: '',
|
|
|
+ department: '',
|
|
|
+ employeeCount: '',
|
|
|
+ position: '',
|
|
|
+ monthlySalary: '',
|
|
|
+ supervisor: '',
|
|
|
+ supervisorPhone: ''
|
|
|
+ },
|
|
|
+ isEditingWork: false,
|
|
|
+ editingWorkIndex: -1,
|
|
|
+ // 添加步骤控制
|
|
|
+ currentStep: 1,
|
|
|
+ steps: [
|
|
|
+ { id: 1, name: '个人基本信息' },
|
|
|
+ { id: 2, name: '紧急联系人信息' },
|
|
|
+ { id: 3, name: '家庭成员信息' },
|
|
|
+ { id: 4, name: '应聘来源' },
|
|
|
+ { id: 5, name: '教育经历' },
|
|
|
+ { id: 6, name: '专业技能' },
|
|
|
+ { id: 7, name: '培训经历' },
|
|
|
+ { id: 8, name: '工作经历' },
|
|
|
+ { id: 9, name: '确认提交' }
|
|
|
+ ],
|
|
|
+ formErrors: {
|
|
|
+ name: '',
|
|
|
+ idCard: '',
|
|
|
+ phone: ''
|
|
|
+ },
|
|
|
+ }
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ // 添加承诺书相关方法
|
|
|
+ togglePromiseChecked() {
|
|
|
+ this.promiseChecked = !this.promiseChecked;
|
|
|
+ },
|
|
|
+ confirmPromise() {
|
|
|
+ if (this.promiseChecked) {
|
|
|
+ this.showPromiseModal = false;
|
|
|
+ } else {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请先阅读并同意承诺书内容',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ bindGenderChange(e) {
|
|
|
+ this.genderIndex = e.detail.value;
|
|
|
+ this.formData.gender = this.genderOptions[this.genderIndex];
|
|
|
+
|
|
|
+ // 如果性别从女变为男,清空三期选择
|
|
|
+ if (this.formData.gender !== '女') {
|
|
|
+ this.formData.threePeriod = '';
|
|
|
+ this.threePeriodIndex = -1;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ bindThreePeriodChange(e) {
|
|
|
+ this.threePeriodIndex = e.detail.value;
|
|
|
+ this.formData.threePeriod = this.threePeriodOptions[this.threePeriodIndex];
|
|
|
+ },
|
|
|
+ bindPoliticalChange(e) {
|
|
|
+ this.politicalIndex = e.detail.value;
|
|
|
+ this.formData.political = this.politicalOptions[this.politicalIndex];
|
|
|
+ },
|
|
|
+ bindEthnicChange(e) {
|
|
|
+ this.ethnicIndex = e.detail.value;
|
|
|
+ this.formData.ethnic = this.ethnicOptions[this.ethnicIndex];
|
|
|
+ },
|
|
|
+ bindMarriageChange(e) {
|
|
|
+ this.marriageIndex = e.detail.value;
|
|
|
+ this.formData.marriage = this.marriageOptions[this.marriageIndex];
|
|
|
+ },
|
|
|
+ bindDateChange(e) {
|
|
|
+ this.formData.birthDate = e.detail.value;
|
|
|
+ },
|
|
|
+ saveFamilyMember() {
|
|
|
+ if (!this.familyMemberForm.relation) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请输入称谓',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!this.familyMemberForm.name) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请输入姓名',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!this.familyMemberForm.phone) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请输入联系电话',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (this.isEditing) {
|
|
|
+ this.familyMembers[this.editingIndex] = {...this.familyMemberForm};
|
|
|
+
|
|
|
+ uni.showToast({
|
|
|
+ title: '修改成功',
|
|
|
+ icon: 'success'
|
|
|
+ });
|
|
|
+
|
|
|
+ this.isEditing = false;
|
|
|
+ this.editingIndex = -1;
|
|
|
+ } else {
|
|
|
+ this.familyMembers.push({...this.familyMemberForm});
|
|
|
+
|
|
|
+ uni.showToast({
|
|
|
+ title: '添加成功',
|
|
|
+ icon: 'success'
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ this.familyMemberForm = {
|
|
|
+ relation: '',
|
|
|
+ name: '',
|
|
|
+ workplaceOrAddress: '',
|
|
|
+ position: '',
|
|
|
+ phone: ''
|
|
|
+ };
|
|
|
+ },
|
|
|
+ editFamilyMember(index) {
|
|
|
+ this.isEditing = true;
|
|
|
+ this.editingIndex = index;
|
|
|
+
|
|
|
+ this.familyMemberForm = {...this.familyMembers[index]};
|
|
|
+
|
|
|
+ uni.pageScrollTo({
|
|
|
+ selector: '.family-member-form',
|
|
|
+ duration: 300
|
|
|
+ });
|
|
|
+ },
|
|
|
+ cancelEdit() {
|
|
|
+ this.isEditing = false;
|
|
|
+ this.editingIndex = -1;
|
|
|
+
|
|
|
+ this.familyMemberForm = {
|
|
|
+ relation: '',
|
|
|
+ name: '',
|
|
|
+ workplaceOrAddress: '',
|
|
|
+ position: '',
|
|
|
+ phone: ''
|
|
|
+ };
|
|
|
+ },
|
|
|
+ deleteFamilyMember(index) {
|
|
|
+ if (this.isEditing && this.editingIndex === index) {
|
|
|
+ this.cancelEdit();
|
|
|
+ }
|
|
|
+
|
|
|
+ this.familyMembers.splice(index, 1);
|
|
|
+ uni.showToast({
|
|
|
+ title: '已删除',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 选择应聘来源类型
|
|
|
+ selectSourceType(type) {
|
|
|
+ this.formData.sourceType = type;
|
|
|
+ if (type === 'social') {
|
|
|
+ // 默认选择第一个社招来源
|
|
|
+ this.formData.socialSource = 'BOSS';
|
|
|
+ } else {
|
|
|
+ // 清空社招来源
|
|
|
+ this.formData.socialSource = '';
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ // 选择社招来源
|
|
|
+ selectSocialSource(source) {
|
|
|
+ this.formData.sourceType = 'social';
|
|
|
+ this.formData.socialSource = source;
|
|
|
+ },
|
|
|
+
|
|
|
+ // 教育经历相关方法
|
|
|
+ bindStartTimeChange(e) {
|
|
|
+ this.educationForm.startTime = e.detail.value;
|
|
|
+ },
|
|
|
+ bindEndTimeChange(e) {
|
|
|
+ this.educationForm.endTime = e.detail.value;
|
|
|
+ },
|
|
|
+ bindDegreeChange(e) {
|
|
|
+ this.degreeIndex = e.detail.value;
|
|
|
+ this.educationForm.degree = this.degreeOptions[this.degreeIndex];
|
|
|
+ },
|
|
|
+ saveEducation() {
|
|
|
+ if (!this.educationForm.startTime) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请选择开始时间',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!this.educationForm.endTime) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请选择结束时间',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!this.educationForm.schoolName) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请输入学校名称',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!this.educationForm.major) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请输入专业',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!this.educationForm.degree) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请选择学历',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (this.isEditingEducation) {
|
|
|
+ this.educationList[this.editingEducationIndex] = {...this.educationForm};
|
|
|
+
|
|
|
+ uni.showToast({
|
|
|
+ title: '修改成功',
|
|
|
+ icon: 'success'
|
|
|
+ });
|
|
|
+
|
|
|
+ this.isEditingEducation = false;
|
|
|
+ this.editingEducationIndex = -1;
|
|
|
+ } else {
|
|
|
+ this.educationList.push({...this.educationForm});
|
|
|
+
|
|
|
+ uni.showToast({
|
|
|
+ title: '添加成功',
|
|
|
+ icon: 'success'
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ this.educationForm = {
|
|
|
+ startTime: '',
|
|
|
+ endTime: '',
|
|
|
+ schoolName: '',
|
|
|
+ major: '',
|
|
|
+ degree: ''
|
|
|
+ };
|
|
|
+ this.degreeIndex = -1;
|
|
|
+ },
|
|
|
+ editEducation(index) {
|
|
|
+ this.isEditingEducation = true;
|
|
|
+ this.editingEducationIndex = index;
|
|
|
+
|
|
|
+ this.educationForm = {...this.educationList[index]};
|
|
|
+ // 设置学历索引
|
|
|
+ this.degreeIndex = this.degreeOptions.findIndex(item => item === this.educationForm.degree);
|
|
|
+
|
|
|
+ uni.pageScrollTo({
|
|
|
+ selector: '.education-form',
|
|
|
+ duration: 300
|
|
|
+ });
|
|
|
+ },
|
|
|
+ cancelEditEducation() {
|
|
|
+ this.isEditingEducation = false;
|
|
|
+ this.editingEducationIndex = -1;
|
|
|
+
|
|
|
+ this.educationForm = {
|
|
|
+ startTime: '',
|
|
|
+ endTime: '',
|
|
|
+ schoolName: '',
|
|
|
+ major: '',
|
|
|
+ degree: ''
|
|
|
+ };
|
|
|
+ this.degreeIndex = -1;
|
|
|
+ },
|
|
|
+ deleteEducation(index) {
|
|
|
+ if (this.isEditingEducation && this.editingEducationIndex === index) {
|
|
|
+ this.cancelEditEducation();
|
|
|
+ }
|
|
|
+
|
|
|
+ this.educationList.splice(index, 1);
|
|
|
+ uni.showToast({
|
|
|
+ title: '已删除',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 工作经历相关方法
|
|
|
+ bindWorkStartTimeChange(e) {
|
|
|
+ this.workForm.startTime = e.detail.value;
|
|
|
+ },
|
|
|
+ bindWorkEndTimeChange(e) {
|
|
|
+ this.workForm.endTime = e.detail.value;
|
|
|
+ },
|
|
|
+ saveWork() {
|
|
|
+ if (!this.workForm.startTime) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请选择开始时间',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!this.workForm.endTime) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请选择结束时间',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!this.workForm.companyName) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请输入单位名称',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!this.workForm.department) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请输入任职部门',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!this.workForm.position) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请输入担任职务',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (this.isEditingWork) {
|
|
|
+ this.workList[this.editingWorkIndex] = {...this.workForm};
|
|
|
+
|
|
|
+ uni.showToast({
|
|
|
+ title: '修改成功',
|
|
|
+ icon: 'success'
|
|
|
+ });
|
|
|
+
|
|
|
+ this.isEditingWork = false;
|
|
|
+ this.editingWorkIndex = -1;
|
|
|
+ } else {
|
|
|
+ this.workList.push({...this.workForm});
|
|
|
+
|
|
|
+ uni.showToast({
|
|
|
+ title: '添加成功',
|
|
|
+ icon: 'success'
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ this.workForm = {
|
|
|
+ startTime: '',
|
|
|
+ endTime: '',
|
|
|
+ companyName: '',
|
|
|
+ department: '',
|
|
|
+ employeeCount: '',
|
|
|
+ position: '',
|
|
|
+ monthlySalary: '',
|
|
|
+ supervisor: '',
|
|
|
+ supervisorPhone: ''
|
|
|
+ };
|
|
|
+ },
|
|
|
+ editWork(index) {
|
|
|
+ this.isEditingWork = true;
|
|
|
+ this.editingWorkIndex = index;
|
|
|
+
|
|
|
+ this.workForm = {...this.workList[index]};
|
|
|
+
|
|
|
+ uni.pageScrollTo({
|
|
|
+ selector: '.work-form',
|
|
|
+ duration: 300
|
|
|
+ });
|
|
|
+ },
|
|
|
+ cancelEditWork() {
|
|
|
+ this.isEditingWork = false;
|
|
|
+ this.editingWorkIndex = -1;
|
|
|
+
|
|
|
+ this.workForm = {
|
|
|
+ startTime: '',
|
|
|
+ endTime: '',
|
|
|
+ companyName: '',
|
|
|
+ department: '',
|
|
|
+ employeeCount: '',
|
|
|
+ position: '',
|
|
|
+ monthlySalary: '',
|
|
|
+ supervisor: '',
|
|
|
+ supervisorPhone: ''
|
|
|
+ };
|
|
|
+ },
|
|
|
+ deleteWork(index) {
|
|
|
+ if (this.isEditingWork && this.editingWorkIndex === index) {
|
|
|
+ this.cancelEditWork();
|
|
|
+ }
|
|
|
+
|
|
|
+ this.workList.splice(index, 1);
|
|
|
+ uni.showToast({
|
|
|
+ title: '已删除',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ },
|
|
|
+ submitForm() {
|
|
|
+ if (!this.formData.name) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请输入姓名',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (this.genderIndex === -1) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请选择性别',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (this.formData.gender === '女' && this.threePeriodIndex === -1) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请选择是否为三期',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!this.formData.emergencyContact) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请输入紧急联系人',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!this.formData.emergencyPhone) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请输入紧急联系人电话',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (this.familyMembers.length === 0) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请至少添加一位家庭成员',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加应聘来源验证
|
|
|
+ if (this.formData.sourceType === 'school' && !this.formData.otherSchoolSource) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请填写学校来源',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (this.formData.sourceType === 'social') {
|
|
|
+ if (!this.formData.socialSource) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请选择社招来源',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (this.formData.socialSource === 'other' && !this.formData.otherSocialSource) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请填写其他社招来源',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加教育经历验证
|
|
|
+ if (this.educationList.length === 0) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请至少添加一项教育经历',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加工作经历验证
|
|
|
+ if (this.workList.length === 0) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请至少添加一项工作经历',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 构建提交数据结构
|
|
|
+ const submitData = {
|
|
|
+ tenant_id: 1,
|
|
|
+ user_id: JSON.parse(uni.getStorageSync('userInfo')).id, // 从存储中获取用户ID
|
|
|
+ personal_info: {
|
|
|
+ name: this.formData.name,
|
|
|
+ gender: this.formData.gender,
|
|
|
+ birth_date: this.formData.birthDate,
|
|
|
+ phone: this.formData.phone,
|
|
|
+ id_card: this.formData.idCard,
|
|
|
+ email: this.formData.email,
|
|
|
+ address: this.formData.currentAddress,
|
|
|
+ professional_skills: this.formData.skills ? this.formData.skills.split(',') : []
|
|
|
+ },
|
|
|
+ profile: {
|
|
|
+ // 女性特殊状态映射
|
|
|
+ female_status: this.formData.gender === '女' ?
|
|
|
+ (this.formData.threePeriod === '孕期' ? 1 :
|
|
|
+ this.formData.threePeriod === '产期' ? 2 :
|
|
|
+ this.formData.threePeriod === '哺乳期' ? 3 : 0) : 0,
|
|
|
+
|
|
|
+ // 婚姻状况映射
|
|
|
+ marital_status: this.formData.marriage === '未婚' ? 0 :
|
|
|
+ this.formData.marriage === '已婚' ? 1 :
|
|
|
+ this.formData.marriage === '离异' ? 2 :
|
|
|
+ this.formData.marriage === '丧偶' ? 3 : 0,
|
|
|
+
|
|
|
+ height: parseFloat(this.formData.height) || 0,
|
|
|
+ weight: parseFloat(this.formData.weight) || 0,
|
|
|
+ political_status: this.formData.political,
|
|
|
+ ethnicity: this.formData.ethnic,
|
|
|
+ native_place: this.formData.nativePlace,
|
|
|
+ household_location: this.formData.residence,
|
|
|
+ current_address: this.formData.currentAddress,
|
|
|
+ expected_salary: parseFloat(this.formData.expectedSalary) || 0,
|
|
|
+ emergency_contact: this.formData.emergencyContact,
|
|
|
+ emergency_phone: this.formData.emergencyPhone,
|
|
|
+ specialties: this.formData.hobby,
|
|
|
+ life_motto: this.formData.motto,
|
|
|
+
|
|
|
+ // 应聘来源映射
|
|
|
+ recruitment_source: this.formData.sourceType === 'social' ?
|
|
|
+ (this.formData.socialSource === 'BOSS' ? 2 :
|
|
|
+ this.formData.socialSource === 'zhilian' ? 3 :
|
|
|
+ this.formData.socialSource === 'liepin' ? 4 : 5) : 1,
|
|
|
+
|
|
|
+ recruitment_source_detail: this.formData.sourceType === 'social' ?
|
|
|
+ (this.formData.socialSource === 'other' ? this.formData.otherSocialSource :
|
|
|
+ this.formData.socialSource === 'BOSS' ? 'BOSS直聘' :
|
|
|
+ this.formData.socialSource === 'zhilian' ? '智联招聘' :
|
|
|
+ this.formData.socialSource === 'liepin' ? '猎聘' : '') :
|
|
|
+ this.formData.otherSchoolSource
|
|
|
+ },
|
|
|
+
|
|
|
+ // 教育经历映射
|
|
|
+ education: this.educationList.map((edu, index) => ({
|
|
|
+ education_type: index === 0 ? 1 : 2, // 第一个为第一学历,第二个为最高学历
|
|
|
+ degree: this.mapDegreeToNumber(edu.degree),
|
|
|
+ start_date: edu.startTime,
|
|
|
+ end_date: edu.endTime,
|
|
|
+ school_name: edu.schoolName,
|
|
|
+ major: edu.major
|
|
|
+ })),
|
|
|
+
|
|
|
+ // 家庭成员映射
|
|
|
+ family_members: this.familyMembers.map(member => ({
|
|
|
+ relation: member.relation,
|
|
|
+ name: member.name,
|
|
|
+ workplace: member.workplaceOrAddress,
|
|
|
+ position: member.position,
|
|
|
+ phone: member.phone
|
|
|
+ })),
|
|
|
+
|
|
|
+ // 工作经历映射
|
|
|
+ work_experience: this.workList.map(work => ({
|
|
|
+ start_date: work.startTime,
|
|
|
+ end_date: work.endTime,
|
|
|
+ company_name: work.companyName,
|
|
|
+ department: work.department,
|
|
|
+ employee_count: work.employeeCount,
|
|
|
+ position: work.position,
|
|
|
+ monthly_salary: work.monthlySalary,
|
|
|
+ supervisor: work.supervisor,
|
|
|
+ supervisor_phone: work.supervisorPhone
|
|
|
+ })),
|
|
|
+
|
|
|
+ // 培训经历可以从技能和培训文本框中提取
|
|
|
+ trainings: this.formData.training ? [{
|
|
|
+ training_name: "培训经历",
|
|
|
+ description: this.formData.training
|
|
|
+ }] : []
|
|
|
+ };
|
|
|
+
|
|
|
+ console.log('提交的表单数据:', submitData);
|
|
|
+
|
|
|
+ // 显示加载提示
|
|
|
+ uni.showLoading({
|
|
|
+ title: '提交中...'
|
|
|
+ });
|
|
|
+
|
|
|
+ // 发送数据到服务器
|
|
|
+ uni.request({
|
|
|
+ url: `${apiBaseUrl}/wechat/user/profile/update`, // 根据实际API路径调整
|
|
|
+ method: 'POST',
|
|
|
+ data: submitData,
|
|
|
+ success: (res) => {
|
|
|
+ uni.hideLoading();
|
|
|
+
|
|
|
+ // 先清空所有错误信息
|
|
|
+ this.formErrors = {
|
|
|
+ name: '',
|
|
|
+ idCard: '',
|
|
|
+ phone: ''
|
|
|
+ };
|
|
|
+
|
|
|
+ // 根据接口返回判断验证是否通过
|
|
|
+ if (res.data.code === 2000) { // 假设0是成功状态码,根据实际情况调整
|
|
|
+ // 验证通过,进入下一步
|
|
|
+ this.currentStep++;
|
|
|
+ // 滚动到页面顶部
|
|
|
+ // uni.pageScrollTo({
|
|
|
+ // scrollTop: 0,
|
|
|
+ // duration: 300
|
|
|
+ // });
|
|
|
+ uni.switchTab({
|
|
|
+ url: '/pages/index/index'
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ // 验证失败,显示错误信息
|
|
|
+ let errorMsg = res.data.msg || '身份验证失败';
|
|
|
+ /*
|
|
|
+ // 根据错误类型设置对应字段的错误信息
|
|
|
+ if (res.data.code === 1001) { // 假设1001是姓名错误的状态码
|
|
|
+ this.formErrors.name = '姓名验证失败,请检查姓名是否正确';
|
|
|
+ } else if (res.data.code === 1002) { // 假设1002是身份证号错误的状态码
|
|
|
+ this.formErrors.idCard = '身份证号验证失败,请检查身份证号是否正确';
|
|
|
+ } else if (res.data.code === 1003) { // 假设1003是手机号错误的状态码
|
|
|
+ this.formErrors.phone = '手机号验证失败,请检查手机号是否正确';
|
|
|
+ } else { */
|
|
|
+ // 如果是其他错误,可能涉及多个字段,显示通用错误
|
|
|
+ uni.showToast({
|
|
|
+ title: errorMsg,
|
|
|
+ icon: 'none',
|
|
|
+ duration: 2000
|
|
|
+ });
|
|
|
+ /* } */
|
|
|
+ }
|
|
|
+ },
|
|
|
+ fail: (err) => {
|
|
|
+ uni.hideLoading();
|
|
|
+ uni.showToast({
|
|
|
+ title: '网络错误,请检查网络连接',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ console.error('提交失败:', err);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 学历映射辅助方法
|
|
|
+ mapDegreeToNumber(degreeText) {
|
|
|
+ const degreeMap = {
|
|
|
+ '高中': 1,
|
|
|
+ '中专': 1,
|
|
|
+ '大专': 2,
|
|
|
+ '本科': 3,
|
|
|
+ '硕士': 4,
|
|
|
+ '博士': 5
|
|
|
+ };
|
|
|
+ return degreeMap[degreeText] || 6; // 默认为其他
|
|
|
+ },
|
|
|
+ prevStep() {
|
|
|
+ if (this.currentStep > 1) {
|
|
|
+ this.currentStep--;
|
|
|
+ // 滚动到页面顶部
|
|
|
+ uni.pageScrollTo({
|
|
|
+ scrollTop: 0,
|
|
|
+ duration: 300
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ nextStep() {
|
|
|
+ // 验证当前步骤的必填项
|
|
|
+ if (!this.validateCurrentStep()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果是第一步,需要进行身份验证
|
|
|
+ if (this.currentStep === 1) {
|
|
|
+ // 清空之前的错误信息
|
|
|
+ this.formErrors = {
|
|
|
+ name: '',
|
|
|
+ idCard: '',
|
|
|
+ phone: ''
|
|
|
+ };
|
|
|
+
|
|
|
+ // 显示加载提示
|
|
|
+ uni.showLoading({
|
|
|
+ title: '身份验证中...'
|
|
|
+ });
|
|
|
+
|
|
|
+ // 调用身份验证接口
|
|
|
+ uni.request({
|
|
|
+ url: `${apiBaseUrl}/wechat/identity/verify`,
|
|
|
+ method: 'POST',
|
|
|
+ data: {
|
|
|
+ name: this.formData.name,
|
|
|
+ id_number: this.formData.idCard,
|
|
|
+ mobile: this.formData.phone
|
|
|
+ },
|
|
|
+ header: {
|
|
|
+ 'content-type': 'application/x-www-form-urlencoded'
|
|
|
+ },
|
|
|
+ success: (res) => {
|
|
|
+ uni.hideLoading();
|
|
|
+
|
|
|
+ // 根据接口返回判断验证是否通过
|
|
|
+ if (res.data.code === 200) { // 假设0是成功状态码,根据实际情况调整
|
|
|
+ // 验证通过,进入下一步
|
|
|
+ this.currentStep++;
|
|
|
+ // 滚动到页面顶部
|
|
|
+ uni.pageScrollTo({
|
|
|
+ scrollTop: 0,
|
|
|
+ duration: 300
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ // 验证失败,显示错误信息
|
|
|
+ let errorMsg = res.data.msg || '身份验证失败';
|
|
|
+
|
|
|
+
|
|
|
+ this.formErrors.name = '姓名验证失败,请检查姓名是否正确';
|
|
|
+
|
|
|
+ this.formErrors.idCard = '身份证号验证失败,请检查身份证号是否正确';
|
|
|
+
|
|
|
+ this.formErrors.phone = '手机号验证失败,请检查手机号是否正确';
|
|
|
+
|
|
|
+ }
|
|
|
+ },
|
|
|
+ fail: (err) => {
|
|
|
+ uni.hideLoading();
|
|
|
+ uni.showToast({
|
|
|
+ title: '网络错误,请检查网络连接',
|
|
|
+ icon: 'none',
|
|
|
+ duration: 2000
|
|
|
+ });
|
|
|
+ console.error('身份验证请求失败:', err);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ // 不是第一步,直接进入下一步
|
|
|
+ if (this.currentStep < this.steps.length) {
|
|
|
+ this.currentStep++;
|
|
|
+ // 滚动到页面顶部
|
|
|
+ uni.pageScrollTo({
|
|
|
+ scrollTop: 0,
|
|
|
+ duration: 300
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 验证当前步骤的必填项
|
|
|
+ validateCurrentStep() {
|
|
|
+ switch (this.currentStep) {
|
|
|
+ case 1: // 个人基本信息
|
|
|
+ if (!this.formData.name) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请输入姓名',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (this.genderIndex === -1) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请选择性别',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (this.formData.gender === '女' && this.threePeriodIndex === -1) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请选择是否为三期',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+
|
|
|
+ case 2: // 紧急联系人信息
|
|
|
+ if (!this.formData.emergencyContact) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请输入紧急联系人',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (!this.formData.emergencyPhone) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请输入紧急联系人电话',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+
|
|
|
+ case 3: // 家庭成员信息
|
|
|
+ if (this.familyMembers.length === 0) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请至少添加一位家庭成员',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+
|
|
|
+ case 4: // 应聘来源
|
|
|
+ if (this.formData.sourceType === 'school' && !this.formData.otherSchoolSource) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请填写学校来源',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (this.formData.sourceType === 'social') {
|
|
|
+ if (!this.formData.socialSource) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请选择社招来源',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (this.formData.socialSource === 'other' && !this.formData.otherSocialSource) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请填写其他社招来源',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+
|
|
|
+ case 5: // 教育经历
|
|
|
+ if (this.educationList.length === 0) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请至少添加一项教育经历',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+
|
|
|
+ case 6: // 专业技能
|
|
|
+ // 专业技能可以选填
|
|
|
+ return true;
|
|
|
+
|
|
|
+ case 7: // 培训经历
|
|
|
+ // 培训经历可以选填
|
|
|
+ return true;
|
|
|
+
|
|
|
+ case 8: // 工作经历
|
|
|
+ if (this.workList.length === 0) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请至少添加一项工作经历',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+
|
|
|
+ default:
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ },
|
|
|
+ // 添加监听器来清除错误信息
|
|
|
+ watch: {
|
|
|
+ 'formData.name': function(newVal) {
|
|
|
+ if (newVal && this.formErrors.name) {
|
|
|
+ this.formErrors.name = '';
|
|
|
+ }
|
|
|
+ },
|
|
|
+ 'formData.idCard': function(newVal) {
|
|
|
+ if (newVal && this.formErrors.idCard) {
|
|
|
+ this.formErrors.idCard = '';
|
|
|
+ }
|
|
|
+ },
|
|
|
+ 'formData.phone': function(newVal) {
|
|
|
+ if (newVal && this.formErrors.phone) {
|
|
|
+ this.formErrors.phone = '';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ }
|
|
|
+</script>
|
|
|
+
|
|
|
+<style>
|
|
|
+ .personal-container {
|
|
|
+ padding: 20rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .form-title {
|
|
|
+ font-size: 36rpx;
|
|
|
+ font-weight: bold;
|
|
|
+ text-align: center;
|
|
|
+ margin-bottom: 30rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .form-container {
|
|
|
+ background-color: #fff;
|
|
|
+ border-radius: 10rpx;
|
|
|
+ padding: 20rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .section-title {
|
|
|
+ font-size: 32rpx;
|
|
|
+ font-weight: bold;
|
|
|
+ margin: 30rpx 0 20rpx 10rpx;
|
|
|
+ color: #333;
|
|
|
+ border-left: 4rpx solid #007AFF;
|
|
|
+ padding-left: 15rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .form-row {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ margin-bottom: 20rpx;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ }
|
|
|
+
|
|
|
+ .form-item {
|
|
|
+ flex: 1;
|
|
|
+ min-width: 300rpx;
|
|
|
+ margin: 10rpx;
|
|
|
+ border-bottom: 1px solid #eee;
|
|
|
+ padding-bottom: 10rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .label {
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #333;
|
|
|
+ margin-right: 10rpx;
|
|
|
+ display: block;
|
|
|
+ margin-bottom: 10rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ input {
|
|
|
+ font-size: 28rpx;
|
|
|
+ height: 60rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .picker-text {
|
|
|
+ font-size: 28rpx;
|
|
|
+ height: 60rpx;
|
|
|
+ line-height: 60rpx;
|
|
|
+ color: #666;
|
|
|
+ }
|
|
|
+
|
|
|
+ .submit-btn {
|
|
|
+ margin-top: 40rpx;
|
|
|
+ background-color: #007AFF;
|
|
|
+ color: #fff;
|
|
|
+ }
|
|
|
+
|
|
|
+ .family-members-list {
|
|
|
+ margin-top: 20rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .family-member-item {
|
|
|
+ background-color: #f8f8f8;
|
|
|
+ border-radius: 8rpx;
|
|
|
+ padding: 20rpx;
|
|
|
+ margin-bottom: 20rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .family-member-header {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ margin-bottom: 15rpx;
|
|
|
+ border-bottom: 1px solid #eee;
|
|
|
+ padding-bottom: 10rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .family-member-title {
|
|
|
+ font-size: 30rpx;
|
|
|
+ font-weight: bold;
|
|
|
+ color: #333;
|
|
|
+ }
|
|
|
+
|
|
|
+ .family-member-actions {
|
|
|
+ display: flex;
|
|
|
+ gap: 20rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .family-member-edit {
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #1890ff;
|
|
|
+ }
|
|
|
+
|
|
|
+ .family-member-delete {
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #ff4d4f;
|
|
|
+ }
|
|
|
+
|
|
|
+ .form-subtitle {
|
|
|
+ font-size: 28rpx;
|
|
|
+ font-weight: bold;
|
|
|
+ margin-bottom: 20rpx;
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .cancel-edit {
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #999;
|
|
|
+ font-weight: normal;
|
|
|
+ }
|
|
|
+
|
|
|
+ .family-member-content {
|
|
|
+ padding: 10rpx 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .family-member-row {
|
|
|
+ display: flex;
|
|
|
+ margin-bottom: 10rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .family-member-label {
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #666;
|
|
|
+ width: 200rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .family-member-value {
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #333;
|
|
|
+ flex: 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ .family-member-form {
|
|
|
+ background-color: #fff;
|
|
|
+ border-radius: 8rpx;
|
|
|
+ padding: 20rpx;
|
|
|
+ margin-top: 20rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .form-row button-row {
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ margin-top: 20rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .form-item button-container {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ align-items: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .circle-btn {
|
|
|
+ width: 40rpx;
|
|
|
+ height: 40rpx;
|
|
|
+ border-radius: 50%;
|
|
|
+ background-color: #007AFF;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ margin-bottom: 10rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .btn-icon {
|
|
|
+ font-size: 32rpx;
|
|
|
+ color: #fff;
|
|
|
+ }
|
|
|
+
|
|
|
+ .btn-text {
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #333;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 添加圆形按钮相关样式 */
|
|
|
+ .button-row {
|
|
|
+ justify-content: center;
|
|
|
+ margin-top: 30rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .button-container {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ align-items: center;
|
|
|
+ border-bottom: none;
|
|
|
+ min-width: auto;
|
|
|
+ }
|
|
|
+
|
|
|
+ .circle-btn {
|
|
|
+ width: 100rpx;
|
|
|
+ height: 100rpx;
|
|
|
+ border-radius: 50%;
|
|
|
+ padding: 0;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ background-color: #52c41a;
|
|
|
+ box-shadow: 0 6rpx 16rpx rgba(0, 0, 0, 0.1);
|
|
|
+ margin: 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .btn-icon {
|
|
|
+ font-size: 50rpx;
|
|
|
+ color: #fff;
|
|
|
+ line-height: 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ .btn-text {
|
|
|
+ font-size: 24rpx;
|
|
|
+ color: #666;
|
|
|
+ margin-top: 10rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 编辑状态下的按钮颜色 */
|
|
|
+ .circle-btn.editing {
|
|
|
+ background-color: #1890ff;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 移除原来的添加按钮样式 */
|
|
|
+ .add-member-btn {
|
|
|
+ display: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 应聘来源样式 */
|
|
|
+ .source-container {
|
|
|
+ background-color: #fff;
|
|
|
+ border-radius: 10rpx;
|
|
|
+ padding: 20rpx;
|
|
|
+ margin-bottom: 30rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .source-row {
|
|
|
+ display: flex;
|
|
|
+ margin-bottom: 20rpx;
|
|
|
+ align-items: flex-start;
|
|
|
+ }
|
|
|
+
|
|
|
+ .source-label {
|
|
|
+ width: 120rpx;
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #333;
|
|
|
+ padding-top: 6rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .source-options {
|
|
|
+ flex: 1;
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ }
|
|
|
+
|
|
|
+ .source-option {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ margin-right: 30rpx;
|
|
|
+ margin-bottom: 15rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .source-option text {
|
|
|
+ font-size: 28rpx;
|
|
|
+ margin-left: 8rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .other-option {
|
|
|
+ flex-basis: 100%;
|
|
|
+ margin-top: 10rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .other-option input {
|
|
|
+ border-bottom: 1px solid #eee;
|
|
|
+ width: 300rpx;
|
|
|
+ margin-left: 10rpx;
|
|
|
+ font-size: 28rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 教育经历样式 */
|
|
|
+ .education-list {
|
|
|
+ margin-top: 20rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .education-item {
|
|
|
+ background-color: #f8f8f8;
|
|
|
+ border-radius: 8rpx;
|
|
|
+ padding: 20rpx;
|
|
|
+ margin-bottom: 20rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .education-header {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ margin-bottom: 15rpx;
|
|
|
+ border-bottom: 1px solid #eee;
|
|
|
+ padding-bottom: 10rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .education-title {
|
|
|
+ font-size: 30rpx;
|
|
|
+ font-weight: bold;
|
|
|
+ color: #333;
|
|
|
+ }
|
|
|
+
|
|
|
+ .education-actions {
|
|
|
+ display: flex;
|
|
|
+ gap: 20rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .education-edit {
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #1890ff;
|
|
|
+ }
|
|
|
+
|
|
|
+ .education-delete {
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #ff4d4f;
|
|
|
+ }
|
|
|
+
|
|
|
+ .education-content {
|
|
|
+ padding: 10rpx 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .education-row {
|
|
|
+ display: flex;
|
|
|
+ margin-bottom: 10rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .education-label {
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #666;
|
|
|
+ width: 150rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .education-value {
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #333;
|
|
|
+ flex: 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ .education-form {
|
|
|
+ background-color: #fff;
|
|
|
+ border-radius: 8rpx;
|
|
|
+ padding: 20rpx;
|
|
|
+ margin-top: 20rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .date-range {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-around;
|
|
|
+ }
|
|
|
+
|
|
|
+ .date-separator {
|
|
|
+ margin: 0 10rpx;
|
|
|
+ color: #666;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 专业技能和培训样式 */
|
|
|
+ .skills-container, .training-container {
|
|
|
+ background-color: #fff;
|
|
|
+ border-radius: 10rpx;
|
|
|
+ padding: 20rpx;
|
|
|
+ margin-bottom: 20rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .skills-textarea, .training-textarea {
|
|
|
+ width: 100%;
|
|
|
+ height: 200rpx;
|
|
|
+ font-size: 28rpx;
|
|
|
+ line-height: 1.5;
|
|
|
+ padding: 10rpx;
|
|
|
+ box-sizing: border-box;
|
|
|
+ border: 1px solid #eee;
|
|
|
+ border-radius: 6rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 工作经历样式 */
|
|
|
+ .work-list {
|
|
|
+ margin-top: 20rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .work-item {
|
|
|
+ background-color: #f8f8f8;
|
|
|
+ border-radius: 8rpx;
|
|
|
+ padding: 20rpx;
|
|
|
+ margin-bottom: 20rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .work-header {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ margin-bottom: 15rpx;
|
|
|
+ border-bottom: 1px solid #eee;
|
|
|
+ padding-bottom: 10rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .work-title {
|
|
|
+ font-size: 30rpx;
|
|
|
+ font-weight: bold;
|
|
|
+ color: #333;
|
|
|
+ }
|
|
|
+
|
|
|
+ .work-actions {
|
|
|
+ display: flex;
|
|
|
+ gap: 20rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .work-edit {
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #1890ff;
|
|
|
+ }
|
|
|
+
|
|
|
+ .work-delete {
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #ff4d4f;
|
|
|
+ }
|
|
|
+
|
|
|
+ .work-content {
|
|
|
+ padding: 10rpx 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .work-row {
|
|
|
+ display: flex;
|
|
|
+ margin-bottom: 10rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .work-label {
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #666;
|
|
|
+ width: 150rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .work-value {
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #333;
|
|
|
+ flex: 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ .work-form {
|
|
|
+ background-color: #fff;
|
|
|
+ border-radius: 8rpx;
|
|
|
+ padding: 20rpx;
|
|
|
+ margin-top: 20rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 步骤指示器样式 */
|
|
|
+ .steps-indicator {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ margin-bottom: 30rpx;
|
|
|
+ padding: 20rpx;
|
|
|
+ background-color: #fff;
|
|
|
+ border-radius: 10rpx;
|
|
|
+ overflow-x: auto;
|
|
|
+ }
|
|
|
+
|
|
|
+ .step-item {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ align-items: center;
|
|
|
+ position: relative;
|
|
|
+ min-width: 120rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .step-item:not(:last-child)::after {
|
|
|
+ content: '';
|
|
|
+ position: absolute;
|
|
|
+ top: 20rpx;
|
|
|
+ right: -50%;
|
|
|
+ width: 100%;
|
|
|
+ height: 2rpx;
|
|
|
+ background-color: #ddd;
|
|
|
+ z-index: 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ .step-item.active:not(:last-child)::after {
|
|
|
+ background-color: #007AFF;
|
|
|
+ }
|
|
|
+
|
|
|
+ .step-number {
|
|
|
+ width: 40rpx;
|
|
|
+ height: 40rpx;
|
|
|
+ border-radius: 50%;
|
|
|
+ background-color: #ddd;
|
|
|
+ color: #fff;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ font-size: 24rpx;
|
|
|
+ margin-bottom: 10rpx;
|
|
|
+ position: relative;
|
|
|
+ z-index: 2;
|
|
|
+ }
|
|
|
+
|
|
|
+ .step-item.active .step-number {
|
|
|
+ background-color: #007AFF;
|
|
|
+ }
|
|
|
+
|
|
|
+ .step-item.current .step-number {
|
|
|
+ background-color: #007AFF;
|
|
|
+ box-shadow: 0 0 0 4rpx rgba(0, 122, 255, 0.2);
|
|
|
+ }
|
|
|
+
|
|
|
+ .step-name {
|
|
|
+ font-size: 22rpx;
|
|
|
+ color: #999;
|
|
|
+ text-align: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .step-item.active .step-name {
|
|
|
+ color: #333;
|
|
|
+ }
|
|
|
+
|
|
|
+ .step-item.current .step-name {
|
|
|
+ color: #007AFF;
|
|
|
+ font-weight: bold;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 导航按钮样式 */
|
|
|
+ .nav-buttons {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ margin-top: 40rpx;
|
|
|
+ padding: 0 20rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .nav-btn {
|
|
|
+ flex: 1;
|
|
|
+ margin: 0 10rpx;
|
|
|
+ height: 80rpx;
|
|
|
+ line-height: 80rpx;
|
|
|
+ text-align: center;
|
|
|
+ border-radius: 40rpx;
|
|
|
+ font-size: 28rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .prev-btn {
|
|
|
+ background-color: #f0f0f0;
|
|
|
+ color: #666;
|
|
|
+ }
|
|
|
+
|
|
|
+ .next-btn {
|
|
|
+ background-color: #007AFF;
|
|
|
+ color: #fff;
|
|
|
+ }
|
|
|
+
|
|
|
+ .submit-btn {
|
|
|
+ flex: 1;
|
|
|
+ margin: 0 10rpx;
|
|
|
+ height: 80rpx;
|
|
|
+ line-height: 80rpx;
|
|
|
+ text-align: center;
|
|
|
+ border-radius: 40rpx;
|
|
|
+ font-size: 28rpx;
|
|
|
+ background-color: #52c41a;
|
|
|
+ color: #fff;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 确认提交页样式 */
|
|
|
+ .confirm-container {
|
|
|
+ background-color: #fff;
|
|
|
+ border-radius: 10rpx;
|
|
|
+ padding: 20rpx;
|
|
|
+ margin-bottom: 30rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .confirm-message {
|
|
|
+ padding: 20rpx;
|
|
|
+ background-color: #f6f6f6;
|
|
|
+ border-radius: 8rpx;
|
|
|
+ margin-bottom: 20rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .info-summary {
|
|
|
+ padding: 20rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .summary-item {
|
|
|
+ display: flex;
|
|
|
+ margin-bottom: 15rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .summary-label {
|
|
|
+ width: 150rpx;
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #666;
|
|
|
+ }
|
|
|
+
|
|
|
+ .summary-value {
|
|
|
+ flex: 1;
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #333;
|
|
|
+ }
|
|
|
+
|
|
|
+ .input-error {
|
|
|
+ border-bottom: 1px solid #ff4d4f !important;
|
|
|
+ }
|
|
|
+
|
|
|
+ .error-message {
|
|
|
+ color: #ff4d4f;
|
|
|
+ font-size: 24rpx;
|
|
|
+ margin-top: 6rpx;
|
|
|
+ display: block;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 添加承诺书弹框样式 */
|
|
|
+ .promise-modal {
|
|
|
+ position: fixed;
|
|
|
+ top: 0;
|
|
|
+ left: 0;
|
|
|
+ right: 0;
|
|
|
+ bottom: 0;
|
|
|
+ background-color: rgba(0, 0, 0, 0.5);
|
|
|
+ z-index: 999;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .promise-content {
|
|
|
+ width: 80%;
|
|
|
+ max-width: 600rpx;
|
|
|
+ background-color: #fff;
|
|
|
+ border-radius: 12rpx;
|
|
|
+ padding: 30rpx;
|
|
|
+ box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.1);
|
|
|
+ }
|
|
|
+
|
|
|
+ .promise-title {
|
|
|
+ font-size: 34rpx;
|
|
|
+ font-weight: bold;
|
|
|
+ text-align: center;
|
|
|
+ margin-bottom: 20rpx;
|
|
|
+ color: #333;
|
|
|
+ }
|
|
|
+
|
|
|
+ .promise-text {
|
|
|
+ height: 600rpx;
|
|
|
+ margin-bottom: 20rpx;
|
|
|
+ /* padding: 20rpx; */
|
|
|
+ background-color: #f8f8f8;
|
|
|
+ border-radius: 8rpx;
|
|
|
+ font-size: 28rpx;
|
|
|
+ line-height: 1.6;
|
|
|
+ color: #333;
|
|
|
+ }
|
|
|
+
|
|
|
+ .promise-checkbox {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ margin-bottom: 30rpx;
|
|
|
+ padding: 0 10rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .promise-checkbox text {
|
|
|
+ font-size: 28rpx;
|
|
|
+ margin-left: 10rpx;
|
|
|
+ color: #333;
|
|
|
+ }
|
|
|
+
|
|
|
+ .promise-buttons {
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .promise-btn {
|
|
|
+ width: 200rpx;
|
|
|
+ height: 80rpx;
|
|
|
+ line-height: 80rpx;
|
|
|
+ text-align: center;
|
|
|
+ border-radius: 40rpx;
|
|
|
+ font-size: 28rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .confirm-btn {
|
|
|
+ background-color: #007AFF;
|
|
|
+ color: #fff;
|
|
|
+ }
|
|
|
+
|
|
|
+ .confirm-btn[disabled] {
|
|
|
+ background-color: #cccccc;
|
|
|
+ color: #ffffff;
|
|
|
+ }
|
|
|
+</style>
|