|
|
@@ -1,1694 +1,1765 @@
|
|
|
<template>
|
|
|
- <view class="enrollment-container">
|
|
|
- <!-- 自定义导航栏 -->
|
|
|
- <u-navbar
|
|
|
+ <view class="enrollment-container">
|
|
|
+ <!-- 自定义导航栏 -->
|
|
|
+ <!-- <u-navbar
|
|
|
title="新生报名登记"
|
|
|
:border-bottom="false"
|
|
|
bg-color="#3c9cff"
|
|
|
title-color="#fff"
|
|
|
:is-back="false"
|
|
|
- ></u-navbar>
|
|
|
+ ></u-navbar> -->
|
|
|
|
|
|
- <!-- 页面头部 -->
|
|
|
- <view class="page-header">
|
|
|
- <view class="header-title">招生在线报名</view>
|
|
|
- <view class="header-desc">请认真填写以下信息,带 <text class="required">*</text> 的为必填项</view>
|
|
|
- </view>
|
|
|
-
|
|
|
- <!-- 表单内容 -->
|
|
|
- <view class="form-container">
|
|
|
- <u-form ref="enrollmentForm" :model="formData" :rules="rules" label-width="120">
|
|
|
-
|
|
|
- <!-- 基本信息 -->
|
|
|
- <view class="form-section">
|
|
|
- <view class="section-title">
|
|
|
- <u-icon name="account" color="#3c9cff" size="20"></u-icon>
|
|
|
- <text class="title-text">基本信息</text>
|
|
|
- </view>
|
|
|
-
|
|
|
- <u-form-item label="姓名" prop="name" required>
|
|
|
- <u-input v-model="formData.name" placeholder="请输入真实姓名" />
|
|
|
- </u-form-item>
|
|
|
-
|
|
|
- <u-form-item label="身份证号" prop="idCard" required>
|
|
|
- <u-input v-model="formData.idCard" placeholder="请输入身份证号" @change="onIdCardChange" />
|
|
|
- </u-form-item>
|
|
|
-
|
|
|
- <u-form-item label="性别" prop="gender" required>
|
|
|
- <u-input
|
|
|
- v-model="genderText"
|
|
|
- placeholder="请选择性别"
|
|
|
- readonly
|
|
|
- suffix-icon="arrow-down"
|
|
|
- @click="showGenderPicker"
|
|
|
- />
|
|
|
- <u-picker
|
|
|
- :show="genderPickerShow"
|
|
|
- :columns="genderPickerColumns"
|
|
|
- @confirm="onGenderConfirm"
|
|
|
- @cancel="genderPickerShow = false"
|
|
|
- ></u-picker>
|
|
|
- </u-form-item>
|
|
|
-
|
|
|
- <u-form-item label="出生日期" prop="birthDate">
|
|
|
- <u-input
|
|
|
- v-model="formData.birthDate"
|
|
|
- placeholder="选择出生日期"
|
|
|
- readonly
|
|
|
- suffix-icon="calendar"
|
|
|
- @click="showBirthDatePicker"
|
|
|
- />
|
|
|
- </u-form-item>
|
|
|
-
|
|
|
- <u-form-item label="联系电话" prop="phone1" required>
|
|
|
- <u-input v-model="formData.phone1" placeholder="请输入联系电话" />
|
|
|
- </u-form-item>
|
|
|
-
|
|
|
- <u-form-item label="备用电话" prop="phone2">
|
|
|
- <u-input v-model="formData.phone2" placeholder="请输入备用电话" />
|
|
|
- </u-form-item>
|
|
|
-
|
|
|
- <u-form-item label="民族" prop="nation">
|
|
|
- <u-input v-model="formData.nation" placeholder="请输入民族" />
|
|
|
- </u-form-item>
|
|
|
-
|
|
|
- <u-form-item label="是否住宿" prop="isBoarding">
|
|
|
- <view @click="showBoardingPicker" @tap="showBoardingPicker" style="width: 100%;">
|
|
|
- <u-input
|
|
|
- v-model="boardingText"
|
|
|
- placeholder="请选择是否住宿"
|
|
|
- readonly
|
|
|
- suffix-icon="arrow-down"
|
|
|
- @click.stop="showBoardingPicker"
|
|
|
- @tap.stop="showBoardingPicker"
|
|
|
- />
|
|
|
+ <!-- 页面头部 -->
|
|
|
+ <view class="page-header">
|
|
|
+ <view class="header-title">招生在线报名</view>
|
|
|
+ <view class="header-desc">
|
|
|
+ 请认真填写以下信息,带
|
|
|
+ <text class="required">*</text>
|
|
|
+ 的为必填项
|
|
|
</view>
|
|
|
- <u-picker
|
|
|
- :show="boardingPickerShow"
|
|
|
- :columns="boardingPickerColumns"
|
|
|
- @confirm="onBoardingConfirm"
|
|
|
- @cancel="boardingPickerShow = false"
|
|
|
- ></u-picker>
|
|
|
- </u-form-item>
|
|
|
-
|
|
|
- <u-form-item label="健康状况" prop="healthStatus">
|
|
|
- <u-input v-model="formData.healthStatus" placeholder="请输入健康状况" />
|
|
|
- </u-form-item>
|
|
|
-
|
|
|
- <u-form-item label="家庭住址" prop="homeAddress">
|
|
|
- <u-input
|
|
|
- v-model="formData.homeAddress"
|
|
|
- type="textarea"
|
|
|
- placeholder="请输入详细的家庭住址"
|
|
|
- :maxlength="200"
|
|
|
- />
|
|
|
- </u-form-item>
|
|
|
</view>
|
|
|
|
|
|
- <!-- 学业信息 -->
|
|
|
- <view class="form-section">
|
|
|
- <view class="section-title">
|
|
|
- <u-icon name="school" color="#3c9cff" size="20"></u-icon>
|
|
|
- <text class="title-text">学业信息</text>
|
|
|
- </view>
|
|
|
-
|
|
|
- <u-form-item label="毕业中学" prop="middleSchool">
|
|
|
- <u-input v-model="formData.middleSchool" placeholder="请输入毕业中学全称" />
|
|
|
- </u-form-item>
|
|
|
-
|
|
|
- <u-form-item label="准考证号" prop="examNumber">
|
|
|
- <u-input v-model="formData.examNumber" placeholder="请输入准考证号" />
|
|
|
- </u-form-item>
|
|
|
-
|
|
|
- <u-form-item label="中考地区" prop="examRegion">
|
|
|
- <u-input v-model="formData.examRegion" placeholder="请输入中考地区" />
|
|
|
- </u-form-item>
|
|
|
-
|
|
|
- <u-form-item label="中考满分" prop="totalScoreFull">
|
|
|
- <u-number-box
|
|
|
- v-model="formData.totalScoreFull"
|
|
|
- :min="0"
|
|
|
- :step="1"
|
|
|
- placeholder="请输入中考满分"
|
|
|
- ></u-number-box>
|
|
|
- </u-form-item>
|
|
|
-
|
|
|
- <u-form-item label="中考成绩" prop="totalScore">
|
|
|
- <u-number-box
|
|
|
- v-model="formData.totalScore"
|
|
|
- :min="0"
|
|
|
- :step="1"
|
|
|
- placeholder="请输入中考成绩"
|
|
|
- ></u-number-box>
|
|
|
- </u-form-item>
|
|
|
-
|
|
|
- <u-form-item label="语文成绩" prop="chineseScore">
|
|
|
- <u-number-box
|
|
|
- v-model="formData.chineseScore"
|
|
|
- :min="0"
|
|
|
- :step="1"
|
|
|
- placeholder="请输入语文成绩"
|
|
|
- ></u-number-box>
|
|
|
- </u-form-item>
|
|
|
-
|
|
|
- <u-form-item label="数学成绩" prop="mathScore">
|
|
|
- <u-number-box
|
|
|
- v-model="formData.mathScore"
|
|
|
- :min="0"
|
|
|
- :step="1"
|
|
|
- placeholder="请输入数学成绩"
|
|
|
- ></u-number-box>
|
|
|
- </u-form-item>
|
|
|
-
|
|
|
- <u-form-item label="英语成绩" prop="englishScore">
|
|
|
- <u-number-box
|
|
|
- v-model="formData.englishScore"
|
|
|
- :min="0"
|
|
|
- :step="1"
|
|
|
- placeholder="请输入英语成绩"
|
|
|
- ></u-number-box>
|
|
|
- </u-form-item>
|
|
|
-
|
|
|
- <u-form-item label="科学成绩" prop="scienceScore">
|
|
|
- <u-number-box
|
|
|
- v-model="formData.scienceScore"
|
|
|
- :min="0"
|
|
|
- :step="1"
|
|
|
- placeholder="请输入科学成绩"
|
|
|
- ></u-number-box>
|
|
|
- </u-form-item>
|
|
|
-
|
|
|
- <u-form-item label="社会成绩" prop="socialScore">
|
|
|
- <u-number-box
|
|
|
- v-model="formData.socialScore"
|
|
|
- :min="0"
|
|
|
- :step="1"
|
|
|
- placeholder="请输入社会成绩"
|
|
|
- ></u-number-box>
|
|
|
- </u-form-item>
|
|
|
-
|
|
|
- <u-form-item label="体育成绩" prop="peScore">
|
|
|
- <u-number-box
|
|
|
- v-model="formData.peScore"
|
|
|
- :min="0"
|
|
|
- :step="1"
|
|
|
- placeholder="请输入体育成绩"
|
|
|
- ></u-number-box>
|
|
|
- </u-form-item>
|
|
|
+ <!-- 表单内容 -->
|
|
|
+ <view class="form-container">
|
|
|
+ <u-form ref="enrollmentForm" :model="formData" :rules="rules" label-width="120">
|
|
|
+ <!-- 基本信息 -->
|
|
|
+ <view class="form-section">
|
|
|
+ <view class="section-title">
|
|
|
+ <u-icon name="account" color="#3c9cff" size="20"></u-icon>
|
|
|
+ <text class="title-text">基本信息</text>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <u-form-item label="姓名" prop="name" required>
|
|
|
+ <u-input v-model="formData.name" placeholder="请输入真实姓名" />
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="身份证号" prop="idCard" required>
|
|
|
+ <u-input
|
|
|
+ v-model="formData.idCard"
|
|
|
+ placeholder="请输入身份证号"
|
|
|
+ @change="onIdCardChange"
|
|
|
+ />
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="性别" prop="gender" required>
|
|
|
+ <u-input
|
|
|
+ v-model="genderText"
|
|
|
+ placeholder="请选择性别"
|
|
|
+ readonly
|
|
|
+ suffix-icon="arrow-down"
|
|
|
+ @click="showGenderPicker"
|
|
|
+ />
|
|
|
+ <u-picker
|
|
|
+ :show="genderPickerShow"
|
|
|
+ :columns="genderPickerColumns"
|
|
|
+ @confirm="onGenderConfirm"
|
|
|
+ @cancel="genderPickerShow = false"
|
|
|
+ ></u-picker>
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="出生日期" prop="birthDate">
|
|
|
+ <u-input
|
|
|
+ v-model="formData.birthDate"
|
|
|
+ placeholder="选择出生日期"
|
|
|
+ readonly
|
|
|
+ suffix-icon="calendar"
|
|
|
+ @click="showBirthDatePicker"
|
|
|
+ />
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="联系电话" prop="phone1" required>
|
|
|
+ <u-input v-model="formData.phone1" placeholder="请输入联系电话" />
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="备用电话" prop="phone2">
|
|
|
+ <u-input v-model="formData.phone2" placeholder="请输入备用电话" />
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="民族" prop="nation">
|
|
|
+ <u-input v-model="formData.nation" placeholder="请输入民族" />
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="是否住宿" prop="isBoarding">
|
|
|
+ <view
|
|
|
+ @click="showBoardingPicker"
|
|
|
+ @tap="showBoardingPicker"
|
|
|
+ style="width: 100%"
|
|
|
+ >
|
|
|
+ <u-input
|
|
|
+ v-model="boardingText"
|
|
|
+ placeholder="请选择是否住宿"
|
|
|
+ readonly
|
|
|
+ suffix-icon="arrow-down"
|
|
|
+ @click.stop="showBoardingPicker"
|
|
|
+ @tap.stop="showBoardingPicker"
|
|
|
+ />
|
|
|
+ </view>
|
|
|
+ <u-picker
|
|
|
+ :show="boardingPickerShow"
|
|
|
+ :columns="boardingPickerColumns"
|
|
|
+ @confirm="onBoardingConfirm"
|
|
|
+ @cancel="boardingPickerShow = false"
|
|
|
+ ></u-picker>
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="健康状况" prop="healthStatus">
|
|
|
+ <u-input v-model="formData.healthStatus" placeholder="请输入健康状况" />
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="家庭住址" prop="homeAddress">
|
|
|
+ <u-input
|
|
|
+ v-model="formData.homeAddress"
|
|
|
+ type="textarea"
|
|
|
+ placeholder="请输入详细的家庭住址"
|
|
|
+ :maxlength="200"
|
|
|
+ />
|
|
|
+ </u-form-item>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 学业信息 -->
|
|
|
+ <view class="form-section">
|
|
|
+ <view class="section-title">
|
|
|
+ <u-icon name="school" color="#3c9cff" size="20"></u-icon>
|
|
|
+ <text class="title-text">学业信息</text>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <u-form-item label="毕业中学" prop="middleSchool">
|
|
|
+ <u-input v-model="formData.middleSchool" placeholder="请输入毕业中学全称" />
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="准考证号" prop="examNumber">
|
|
|
+ <u-input v-model="formData.examNumber" placeholder="请输入准考证号" />
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="中考地区" prop="examRegion">
|
|
|
+ <u-input v-model="formData.examRegion" placeholder="请输入中考地区" />
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="中考满分" prop="totalScoreFull">
|
|
|
+ <u-number-box
|
|
|
+ v-model="formData.totalScoreFull"
|
|
|
+ :min="0"
|
|
|
+ :step="1"
|
|
|
+ placeholder="请输入中考满分"
|
|
|
+ ></u-number-box>
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="中考成绩" prop="totalScore">
|
|
|
+ <u-number-box
|
|
|
+ v-model="formData.totalScore"
|
|
|
+ :min="0"
|
|
|
+ :step="1"
|
|
|
+ placeholder="请输入中考成绩"
|
|
|
+ ></u-number-box>
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="语文成绩" prop="chineseScore">
|
|
|
+ <u-number-box
|
|
|
+ v-model="formData.chineseScore"
|
|
|
+ :min="0"
|
|
|
+ :step="1"
|
|
|
+ placeholder="请输入语文成绩"
|
|
|
+ ></u-number-box>
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="数学成绩" prop="mathScore">
|
|
|
+ <u-number-box
|
|
|
+ v-model="formData.mathScore"
|
|
|
+ :min="0"
|
|
|
+ :step="1"
|
|
|
+ placeholder="请输入数学成绩"
|
|
|
+ ></u-number-box>
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="英语成绩" prop="englishScore">
|
|
|
+ <u-number-box
|
|
|
+ v-model="formData.englishScore"
|
|
|
+ :min="0"
|
|
|
+ :step="1"
|
|
|
+ placeholder="请输入英语成绩"
|
|
|
+ ></u-number-box>
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="科学成绩" prop="scienceScore">
|
|
|
+ <u-number-box
|
|
|
+ v-model="formData.scienceScore"
|
|
|
+ :min="0"
|
|
|
+ :step="1"
|
|
|
+ placeholder="请输入科学成绩"
|
|
|
+ ></u-number-box>
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="社会成绩" prop="socialScore">
|
|
|
+ <u-number-box
|
|
|
+ v-model="formData.socialScore"
|
|
|
+ :min="0"
|
|
|
+ :step="1"
|
|
|
+ placeholder="请输入社会成绩"
|
|
|
+ ></u-number-box>
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="体育成绩" prop="peScore">
|
|
|
+ <u-number-box
|
|
|
+ v-model="formData.peScore"
|
|
|
+ :min="0"
|
|
|
+ :step="1"
|
|
|
+ placeholder="请输入体育成绩"
|
|
|
+ ></u-number-box>
|
|
|
+ </u-form-item>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 报考信息 -->
|
|
|
+ <view class="form-section">
|
|
|
+ <view class="section-title">
|
|
|
+ <u-icon name="star" color="#3c9cff" size="20"></u-icon>
|
|
|
+ <text class="title-text">报考信息</text>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <u-form-item label="所属学院" prop="collegeName" required>
|
|
|
+ <view
|
|
|
+ @click="showCollegePicker"
|
|
|
+ @tap="showCollegePicker"
|
|
|
+ style="width: 100%"
|
|
|
+ >
|
|
|
+ <u-input
|
|
|
+ v-model="collegeText"
|
|
|
+ placeholder="请选择所属学院"
|
|
|
+ readonly
|
|
|
+ suffix-icon="arrow-down"
|
|
|
+ @click.stop="showCollegePicker"
|
|
|
+ @tap.stop="showCollegePicker"
|
|
|
+ />
|
|
|
+ </view>
|
|
|
+ <u-picker
|
|
|
+ :show="collegePickerShow"
|
|
|
+ :columns="collegePickerColumns"
|
|
|
+ @confirm="onCollegeConfirm"
|
|
|
+ @cancel="collegePickerShow = false"
|
|
|
+ ></u-picker>
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="学院代码" prop="collegeId">
|
|
|
+ <u-input
|
|
|
+ v-model="formData.collegeId"
|
|
|
+ placeholder="学院代码将自动填入"
|
|
|
+ disabled
|
|
|
+ />
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="报考专业" prop="appliedMajor" required>
|
|
|
+ <view @click="showMajorPicker" @tap="showMajorPicker" style="width: 100%">
|
|
|
+ <u-input
|
|
|
+ v-model="majorText"
|
|
|
+ placeholder="请选择报考专业"
|
|
|
+ readonly
|
|
|
+ suffix-icon="arrow-down"
|
|
|
+ @click.stop="showMajorPicker"
|
|
|
+ @tap.stop="showMajorPicker"
|
|
|
+ />
|
|
|
+ </view>
|
|
|
+ <u-picker
|
|
|
+ :show="majorPickerShow"
|
|
|
+ :columns="majorPickerColumns"
|
|
|
+ @confirm="onMajorConfirm"
|
|
|
+ @cancel="majorPickerShow = false"
|
|
|
+ ></u-picker>
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="专业代码" prop="majorCode">
|
|
|
+ <u-input
|
|
|
+ v-model="formData.majorCode"
|
|
|
+ placeholder="专业代码将自动填入"
|
|
|
+ disabled
|
|
|
+ />
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="校服尺码" prop="uniformSize">
|
|
|
+ <view
|
|
|
+ @click="showUniformSizePicker"
|
|
|
+ @tap="showUniformSizePicker"
|
|
|
+ style="width: 100%"
|
|
|
+ >
|
|
|
+ <u-input
|
|
|
+ v-model="uniformSizeText"
|
|
|
+ placeholder="请选择校服尺码"
|
|
|
+ readonly
|
|
|
+ suffix-icon="arrow-down"
|
|
|
+ @click.stop="showUniformSizePicker"
|
|
|
+ @tap.stop="showUniformSizePicker"
|
|
|
+ />
|
|
|
+ </view>
|
|
|
+ <u-picker
|
|
|
+ :show="uniformSizePickerShow"
|
|
|
+ :columns="uniformSizePickerColumns"
|
|
|
+ @confirm="onUniformSizeConfirm"
|
|
|
+ @cancel="uniformSizePickerShow = false"
|
|
|
+ ></u-picker>
|
|
|
+ </u-form-item>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 其他信息 -->
|
|
|
+ <view class="form-section">
|
|
|
+ <view class="section-title">
|
|
|
+ <u-icon name="file-text" color="#3c9cff" size="20"></u-icon>
|
|
|
+ <text class="title-text">其他信息</text>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <u-form-item label="特长爱好" prop="specialties">
|
|
|
+ <u-input
|
|
|
+ v-model="formData.specialties"
|
|
|
+ type="textarea"
|
|
|
+ placeholder="请简要描述您的特长爱好"
|
|
|
+ :maxlength="300"
|
|
|
+ />
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="获奖情况" prop="awards">
|
|
|
+ <u-input
|
|
|
+ v-model="formData.awards"
|
|
|
+ type="textarea"
|
|
|
+ placeholder="请简要描述您的获奖情况"
|
|
|
+ :maxlength="300"
|
|
|
+ />
|
|
|
+ </u-form-item>
|
|
|
+ </view>
|
|
|
+ </u-form>
|
|
|
</view>
|
|
|
|
|
|
- <!-- 报考信息 -->
|
|
|
- <view class="form-section">
|
|
|
- <view class="section-title">
|
|
|
- <u-icon name="star" color="#3c9cff" size="20"></u-icon>
|
|
|
- <text class="title-text">报考信息</text>
|
|
|
- </view>
|
|
|
-
|
|
|
- <u-form-item label="所属学院" prop="collegeName" required>
|
|
|
- <view @click="showCollegePicker" @tap="showCollegePicker" style="width: 100%;">
|
|
|
- <u-input
|
|
|
- v-model="collegeText"
|
|
|
- placeholder="请选择所属学院"
|
|
|
- readonly
|
|
|
- suffix-icon="arrow-down"
|
|
|
- @click.stop="showCollegePicker"
|
|
|
- @tap.stop="showCollegePicker"
|
|
|
- />
|
|
|
- </view>
|
|
|
- <u-picker
|
|
|
- :show="collegePickerShow"
|
|
|
- :columns="collegePickerColumns"
|
|
|
- @confirm="onCollegeConfirm"
|
|
|
- @cancel="collegePickerShow = false"
|
|
|
- ></u-picker>
|
|
|
- </u-form-item>
|
|
|
-
|
|
|
- <u-form-item label="学院代码" prop="collegeId">
|
|
|
- <u-input v-model="formData.collegeId" placeholder="学院代码将自动填入" disabled />
|
|
|
- </u-form-item>
|
|
|
-
|
|
|
- <u-form-item label="报考专业" prop="appliedMajor" required>
|
|
|
- <view @click="showMajorPicker" @tap="showMajorPicker" style="width: 100%;">
|
|
|
- <u-input
|
|
|
- v-model="majorText"
|
|
|
- placeholder="请选择报考专业"
|
|
|
- readonly
|
|
|
- suffix-icon="arrow-down"
|
|
|
- @click.stop="showMajorPicker"
|
|
|
- @tap.stop="showMajorPicker"
|
|
|
- />
|
|
|
+ <!-- 操作按钮 -->
|
|
|
+ <view class="action-buttons">
|
|
|
+ <u-button
|
|
|
+ type="primary"
|
|
|
+ :loading="submitLoading"
|
|
|
+ @click="submitApplication"
|
|
|
+ :custom-style="{ marginBottom: '16rpx' }"
|
|
|
+ >
|
|
|
+ <u-icon name="checkmark" size="18" color="#fff"></u-icon>
|
|
|
+ 提交报名申请
|
|
|
+ </u-button>
|
|
|
+
|
|
|
+ <u-button type="default" @click="resetForm">
|
|
|
+ <u-icon name="reload" size="18" color="#909399"></u-icon>
|
|
|
+ 重置表单
|
|
|
+ </u-button>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 查询报名状态卡片 -->
|
|
|
+ <view class="query-card">
|
|
|
+ <view class="query-header">
|
|
|
+ <text class="query-title">查询报名状态</text>
|
|
|
</view>
|
|
|
- <u-picker
|
|
|
- :show="majorPickerShow"
|
|
|
- :columns="majorPickerColumns"
|
|
|
- @confirm="onMajorConfirm"
|
|
|
- @cancel="majorPickerShow = false"
|
|
|
- ></u-picker>
|
|
|
- </u-form-item>
|
|
|
-
|
|
|
- <u-form-item label="专业代码" prop="majorCode">
|
|
|
- <u-input v-model="formData.majorCode" placeholder="专业代码将自动填入" disabled />
|
|
|
- </u-form-item>
|
|
|
-
|
|
|
- <u-form-item label="校服尺码" prop="uniformSize">
|
|
|
- <view @click="showUniformSizePicker" @tap="showUniformSizePicker" style="width: 100%;">
|
|
|
- <u-input
|
|
|
- v-model="uniformSizeText"
|
|
|
- placeholder="请选择校服尺码"
|
|
|
- readonly
|
|
|
- suffix-icon="arrow-down"
|
|
|
- @click.stop="showUniformSizePicker"
|
|
|
- @tap.stop="showUniformSizePicker"
|
|
|
- />
|
|
|
+
|
|
|
+ <view class="query-form">
|
|
|
+ <u-form ref="queryForm" :model="queryData" label-width="120">
|
|
|
+ <u-form-item label="身份证号">
|
|
|
+ <u-input
|
|
|
+ v-model="queryData.idCard"
|
|
|
+ placeholder="请输入身份证号"
|
|
|
+ clearable
|
|
|
+ />
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="准考证号">
|
|
|
+ <u-input
|
|
|
+ v-model="queryData.examNumber"
|
|
|
+ placeholder="请输入准考证号"
|
|
|
+ clearable
|
|
|
+ />
|
|
|
+ </u-form-item>
|
|
|
+ </u-form>
|
|
|
+
|
|
|
+ <u-button type="primary" size="small" :loading="queryLoading" @click="queryStatus">
|
|
|
+ 查询状态
|
|
|
+ </u-button>
|
|
|
</view>
|
|
|
- <u-picker
|
|
|
- :show="uniformSizePickerShow"
|
|
|
- :columns="uniformSizePickerColumns"
|
|
|
- @confirm="onUniformSizeConfirm"
|
|
|
- @cancel="uniformSizePickerShow = false"
|
|
|
- ></u-picker>
|
|
|
- </u-form-item>
|
|
|
</view>
|
|
|
|
|
|
- <!-- 其他信息 -->
|
|
|
- <view class="form-section">
|
|
|
- <view class="section-title">
|
|
|
- <u-icon name="file-text" color="#3c9cff" size="20"></u-icon>
|
|
|
- <text class="title-text">其他信息</text>
|
|
|
- </view>
|
|
|
-
|
|
|
- <u-form-item label="特长爱好" prop="specialties">
|
|
|
- <u-input
|
|
|
- v-model="formData.specialties"
|
|
|
- type="textarea"
|
|
|
- placeholder="请简要描述您的特长爱好"
|
|
|
- :maxlength="300"
|
|
|
- />
|
|
|
- </u-form-item>
|
|
|
-
|
|
|
- <u-form-item label="获奖情况" prop="awards">
|
|
|
- <u-input
|
|
|
- v-model="formData.awards"
|
|
|
- type="textarea"
|
|
|
- placeholder="请简要描述您的获奖情况"
|
|
|
- :maxlength="300"
|
|
|
- />
|
|
|
- </u-form-item>
|
|
|
- </view>
|
|
|
- </u-form>
|
|
|
- </view>
|
|
|
+ <!-- 状态查询结果弹窗 -->
|
|
|
+ <u-popup v-model="statusPopup.show" mode="center" width="600rpx" border-radius="16">
|
|
|
+ <view class="status-popup">
|
|
|
+ <view class="popup-header">
|
|
|
+ <text class="popup-title">报名状态查询结果</text>
|
|
|
+ <u-icon name="close" @click="statusPopup.show = false" size="20"></u-icon>
|
|
|
+ </view>
|
|
|
|
|
|
- <!-- 操作按钮 -->
|
|
|
- <view class="action-buttons">
|
|
|
- <u-button
|
|
|
- type="primary"
|
|
|
- :loading="submitLoading"
|
|
|
- @click="submitApplication"
|
|
|
- :custom-style="{ marginBottom: '16rpx' }"
|
|
|
- >
|
|
|
- <u-icon name="checkmark" size="18" color="#fff"></u-icon>
|
|
|
- 提交报名申请
|
|
|
- </u-button>
|
|
|
-
|
|
|
- <u-button
|
|
|
- type="default"
|
|
|
- @click="resetForm"
|
|
|
- >
|
|
|
- <u-icon name="reload" size="18" color="#909399"></u-icon>
|
|
|
- 重置表单
|
|
|
- </u-button>
|
|
|
- </view>
|
|
|
+ <view v-if="statusInfo" class="status-content">
|
|
|
+ <view class="status-item">
|
|
|
+ <text class="status-label">姓名:</text>
|
|
|
+ <text class="status-value">{{ statusInfo.name || '-' }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="status-item">
|
|
|
+ <text class="status-label">身份证号:</text>
|
|
|
+ <text class="status-value">{{ statusInfo.idCard || '-' }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="status-item">
|
|
|
+ <text class="status-label">准考证号:</text>
|
|
|
+ <text class="status-value">{{ statusInfo.examNumber || '-' }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="status-item">
|
|
|
+ <text class="status-label">报考专业:</text>
|
|
|
+ <text class="status-value">{{ statusInfo.appliedMajor || '-' }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="status-item">
|
|
|
+ <text class="status-label">联系电话:</text>
|
|
|
+ <text class="status-value">{{ statusInfo.phone1 || '-' }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="status-item">
|
|
|
+ <text class="status-label">报名时间:</text>
|
|
|
+ <text class="status-value">
|
|
|
+ {{ formatTime(statusInfo.applicationTime) }}
|
|
|
+ </text>
|
|
|
+ </view>
|
|
|
|
|
|
- <!-- 查询报名状态卡片 -->
|
|
|
- <view class="query-card">
|
|
|
- <view class="query-header">
|
|
|
- <text class="query-title">查询报名状态</text>
|
|
|
- </view>
|
|
|
-
|
|
|
- <view class="query-form">
|
|
|
- <u-form ref="queryForm" :model="queryData" label-width="120">
|
|
|
- <u-form-item label="身份证号">
|
|
|
- <u-input
|
|
|
- v-model="queryData.idCard"
|
|
|
- placeholder="请输入身份证号"
|
|
|
- clearable
|
|
|
- />
|
|
|
- </u-form-item>
|
|
|
-
|
|
|
- <u-form-item label="准考证号">
|
|
|
- <u-input
|
|
|
- v-model="queryData.examNumber"
|
|
|
- placeholder="请输入准考证号"
|
|
|
- clearable
|
|
|
- />
|
|
|
- </u-form-item>
|
|
|
- </u-form>
|
|
|
-
|
|
|
- <u-button
|
|
|
- type="primary"
|
|
|
- size="small"
|
|
|
- :loading="queryLoading"
|
|
|
- @click="queryStatus"
|
|
|
- >
|
|
|
- 查询状态
|
|
|
- </u-button>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
+ <view class="status-tips">
|
|
|
+ <u-notice-bar
|
|
|
+ text="您的报名信息已成功提交,请耐心等待审核结果。如有疑问,请联系招生办公室。"
|
|
|
+ type="info"
|
|
|
+ :show-icon="true"
|
|
|
+ ></u-notice-bar>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
|
|
|
- <!-- 状态查询结果弹窗 -->
|
|
|
- <u-popup v-model="statusPopup.show" mode="center" width="600rpx" border-radius="16">
|
|
|
- <view class="status-popup">
|
|
|
- <view class="popup-header">
|
|
|
- <text class="popup-title">报名状态查询结果</text>
|
|
|
- <u-icon name="close" @click="statusPopup.show = false" size="20"></u-icon>
|
|
|
- </view>
|
|
|
-
|
|
|
- <view v-if="statusInfo" class="status-content">
|
|
|
- <view class="status-item">
|
|
|
- <text class="status-label">姓名:</text>
|
|
|
- <text class="status-value">{{ statusInfo.name || '-' }}</text>
|
|
|
- </view>
|
|
|
- <view class="status-item">
|
|
|
- <text class="status-label">身份证号:</text>
|
|
|
- <text class="status-value">{{ statusInfo.idCard || '-' }}</text>
|
|
|
- </view>
|
|
|
- <view class="status-item">
|
|
|
- <text class="status-label">准考证号:</text>
|
|
|
- <text class="status-value">{{ statusInfo.examNumber || '-' }}</text>
|
|
|
- </view>
|
|
|
- <view class="status-item">
|
|
|
- <text class="status-label">报考专业:</text>
|
|
|
- <text class="status-value">{{ statusInfo.appliedMajor || '-' }}</text>
|
|
|
- </view>
|
|
|
- <view class="status-item">
|
|
|
- <text class="status-label">联系电话:</text>
|
|
|
- <text class="status-value">{{ statusInfo.phone1 || '-' }}</text>
|
|
|
- </view>
|
|
|
- <view class="status-item">
|
|
|
- <text class="status-label">报名时间:</text>
|
|
|
- <text class="status-value">{{ formatTime(statusInfo.applicationTime) }}</text>
|
|
|
- </view>
|
|
|
-
|
|
|
- <view class="status-tips">
|
|
|
- <u-notice-bar
|
|
|
- text="您的报名信息已成功提交,请耐心等待审核结果。如有疑问,请联系招生办公室。"
|
|
|
- type="info"
|
|
|
- :show-icon="true"
|
|
|
- ></u-notice-bar>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
-
|
|
|
- <view class="popup-footer">
|
|
|
- <u-button type="primary" size="small" @click="statusPopup.show = false">关闭</u-button>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
- </u-popup>
|
|
|
-
|
|
|
- <!-- 日期选择器 -->
|
|
|
- <u-datetime-picker
|
|
|
- ref="datetimePicker"
|
|
|
- v-model="birthDateValue"
|
|
|
- mode="date"
|
|
|
- :show="birthDatePickerShow"
|
|
|
- @confirm="onBirthDateConfirm"
|
|
|
- @cancel="birthDatePickerShow = false"
|
|
|
- ></u-datetime-picker>
|
|
|
- </view>
|
|
|
+ <view class="popup-footer">
|
|
|
+ <u-button type="primary" size="small" @click="statusPopup.show = false">
|
|
|
+ 关闭
|
|
|
+ </u-button>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </u-popup>
|
|
|
+
|
|
|
+ <!-- 日期选择器 -->
|
|
|
+ <u-datetime-picker
|
|
|
+ ref="datetimePicker"
|
|
|
+ v-model="birthDateValue"
|
|
|
+ mode="date"
|
|
|
+ :show="birthDatePickerShow"
|
|
|
+ @confirm="onBirthDateConfirm"
|
|
|
+ @cancel="birthDatePickerShow = false"
|
|
|
+ ></u-datetime-picker>
|
|
|
+ </view>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-import { getDict } from '@/common/dict.js'
|
|
|
-import { request } from '@/common/request.js'
|
|
|
-import { getCollegeList, getMajorsByCollegeId } from '@/api/enrollment.js'
|
|
|
+import { getDict } from '@/common/dict.js';
|
|
|
+import { request } from '@/common/request.js';
|
|
|
+import { getCollegeList, getMajorsByCollegeId } from '@/api/enrollment.js';
|
|
|
|
|
|
export default {
|
|
|
- name: 'EnrollmentIndex',
|
|
|
- data() {
|
|
|
- return {
|
|
|
- // 表单数据
|
|
|
- formData: {
|
|
|
- name: '',
|
|
|
- idCard: '',
|
|
|
- gender: '',
|
|
|
- birthDate: '',
|
|
|
- phone1: '',
|
|
|
- phone2: '',
|
|
|
- nation: '',
|
|
|
- isBoarding: '',
|
|
|
- healthStatus: '',
|
|
|
- homeAddress: '',
|
|
|
- middleSchool: '',
|
|
|
- examNumber: '',
|
|
|
- examRegion: '',
|
|
|
- totalScoreFull: null,
|
|
|
- totalScore: null,
|
|
|
- chineseScore: null,
|
|
|
- mathScore: null,
|
|
|
- englishScore: null,
|
|
|
- scienceScore: null,
|
|
|
- socialScore: null,
|
|
|
- peScore: null,
|
|
|
- collegeName: '',
|
|
|
- collegeId: '',
|
|
|
- appliedMajor: '',
|
|
|
- majorCode: '',
|
|
|
- uniformSize: '',
|
|
|
- specialties: '',
|
|
|
- awards: ''
|
|
|
- },
|
|
|
-
|
|
|
- // 查询数据
|
|
|
- queryData: {
|
|
|
- idCard: '',
|
|
|
- examNumber: ''
|
|
|
- },
|
|
|
-
|
|
|
- // 加载状态
|
|
|
- submitLoading: false,
|
|
|
- queryLoading: false,
|
|
|
-
|
|
|
- // 弹窗状态
|
|
|
- statusPopup: {
|
|
|
- show: false
|
|
|
- },
|
|
|
- statusInfo: null,
|
|
|
-
|
|
|
- // 字典选项
|
|
|
- genderOptions: [],
|
|
|
- boardingOptions: [],
|
|
|
- collegeOptions: [],
|
|
|
- majorOptions: [],
|
|
|
- uniformSizeOptions: [],
|
|
|
-
|
|
|
- // 选择器索引
|
|
|
- genderIndex: null,
|
|
|
- boardingIndex: null,
|
|
|
- collegeIndex: null,
|
|
|
- majorIndex: null,
|
|
|
- uniformSizeIndex: null,
|
|
|
-
|
|
|
- // 显示文本
|
|
|
- genderText: '',
|
|
|
- boardingText: '',
|
|
|
- collegeText: '',
|
|
|
- majorText: '',
|
|
|
- uniformSizeText: '',
|
|
|
-
|
|
|
- // 日期选择器
|
|
|
- birthDateValue: Number(new Date()),
|
|
|
-
|
|
|
- // picker显示控制
|
|
|
- genderPickerShow: false,
|
|
|
- birthDatePickerShow: false,
|
|
|
- boardingPickerShow: false,
|
|
|
- collegePickerShow: false,
|
|
|
- majorPickerShow: false,
|
|
|
- uniformSizePickerShow: false,
|
|
|
-
|
|
|
- // picker数据格式(uview-ui 2.x 需要columns格式)
|
|
|
- genderPickerColumns: [],
|
|
|
- boardingPickerColumns: [],
|
|
|
- collegePickerColumns: [],
|
|
|
- majorPickerColumns: [],
|
|
|
- uniformSizePickerColumns: [],
|
|
|
-
|
|
|
- // 表单验证规则
|
|
|
- rules: {
|
|
|
- name: [
|
|
|
- { required: true, message: '姓名不能为空', trigger: 'blur' }
|
|
|
- ],
|
|
|
- idCard: [
|
|
|
- { required: true, message: '身份证号不能为空', trigger: 'blur' },
|
|
|
- {
|
|
|
- pattern: /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/,
|
|
|
- message: '身份证号格式不正确',
|
|
|
- trigger: 'blur'
|
|
|
- }
|
|
|
- ],
|
|
|
- gender: [
|
|
|
- { required: true, message: '性别不能为空', trigger: 'change' }
|
|
|
- ],
|
|
|
- phone1: [
|
|
|
- { required: true, message: '联系电话不能为空', trigger: 'blur' },
|
|
|
- { pattern: /^1[3-9]\d{9}$/, message: '手机号码格式不正确', trigger: 'blur' }
|
|
|
- ],
|
|
|
- phone2: [
|
|
|
- { pattern: /^1[3-9]\d{9}$/, message: '手机号码格式不正确', trigger: 'blur' }
|
|
|
- ],
|
|
|
- collegeName: [
|
|
|
- { required: true, message: '所属学院不能为空', trigger: 'change' }
|
|
|
- ],
|
|
|
- appliedMajor: [
|
|
|
- { required: true, message: '报考专业不能为空', trigger: 'change' }
|
|
|
- ]
|
|
|
- }
|
|
|
- }
|
|
|
- },
|
|
|
-
|
|
|
- async onLoad() {
|
|
|
- try {
|
|
|
- console.log('🚀 开始页面初始化...')
|
|
|
-
|
|
|
- // 先初始化兜底数据,确保页面能正常显示
|
|
|
- this.initDefaultDictData()
|
|
|
- this.initDefaultCollegeData()
|
|
|
-
|
|
|
- console.log('✅ 兜底数据初始化完成:', {
|
|
|
- genderOptions: this.genderOptions.length,
|
|
|
- collegeOptions: this.collegeOptions.length,
|
|
|
- majorOptions: this.majorOptions.length
|
|
|
- })
|
|
|
-
|
|
|
- // 并行加载数据,即使部分失败也不影响页面显示
|
|
|
- const results = await Promise.allSettled([
|
|
|
- this.initDictData(),
|
|
|
- this.loadCollegeOptions(),
|
|
|
- this.initMajorOptions()
|
|
|
- ])
|
|
|
-
|
|
|
- console.log('📋 异步数据加载结果:', results)
|
|
|
-
|
|
|
- console.log('📋 页面数据初始化完成')
|
|
|
- console.log('当前数据状态:', {
|
|
|
- genderOptions: this.genderOptions,
|
|
|
- collegeOptions: this.collegeOptions,
|
|
|
- majorOptions: this.majorOptions,
|
|
|
- boardingOptions: this.boardingOptions,
|
|
|
- uniformSizeOptions: this.uniformSizeOptions
|
|
|
- })
|
|
|
-
|
|
|
- // 检查picker组件是否能正常显示
|
|
|
- console.log('Picker组件数据检查:', {
|
|
|
- '性别数据长度': this.genderOptions.length,
|
|
|
- '学院数据长度': this.collegeOptions.length,
|
|
|
- '专业数据长度': this.majorOptions.length
|
|
|
- })
|
|
|
-
|
|
|
- // 强制更新视图确保数据正确显示
|
|
|
- this.$forceUpdate()
|
|
|
-
|
|
|
- console.log('✅ 页面初始化完成,准备就绪')
|
|
|
- } catch (error) {
|
|
|
- console.error('❌ 页面初始化失败:', error)
|
|
|
- // 确保使用兜底数据
|
|
|
- this.initDefaultDictData()
|
|
|
- this.initDefaultCollegeData()
|
|
|
- this.$forceUpdate()
|
|
|
- }
|
|
|
- },
|
|
|
-
|
|
|
- methods: {
|
|
|
- // 初始化picker数据格式
|
|
|
- initPickerColumns() {
|
|
|
- console.log('🔧 开始初始化picker数据格式...')
|
|
|
-
|
|
|
- // 性别picker数据
|
|
|
- if (this.genderOptions && this.genderOptions.length > 0) {
|
|
|
- this.genderPickerColumns = [this.genderOptions.map(item => item.label)]
|
|
|
- }
|
|
|
-
|
|
|
- // 住宿picker数据
|
|
|
- if (this.boardingOptions && this.boardingOptions.length > 0) {
|
|
|
- this.boardingPickerColumns = [this.boardingOptions.map(item => item.label)]
|
|
|
- console.log('住宿picker数据初始化:', {
|
|
|
- boardingOptions: this.boardingOptions,
|
|
|
- boardingPickerColumns: this.boardingPickerColumns
|
|
|
- })
|
|
|
- } else {
|
|
|
- console.warn('住宿选项为空,无法初始化picker数据')
|
|
|
- }
|
|
|
-
|
|
|
- // 学院picker数据
|
|
|
- if (this.collegeOptions && this.collegeOptions.length > 0) {
|
|
|
- this.collegePickerColumns = [this.collegeOptions.map(item => item.deptName)]
|
|
|
- }
|
|
|
-
|
|
|
- // 专业picker数据
|
|
|
- if (this.majorOptions && this.majorOptions.length > 0) {
|
|
|
- this.majorPickerColumns = [this.majorOptions.map(item => item.label)]
|
|
|
- }
|
|
|
-
|
|
|
- // 校服尺码picker数据
|
|
|
- if (this.uniformSizeOptions && this.uniformSizeOptions.length > 0) {
|
|
|
- this.uniformSizePickerColumns = [this.uniformSizeOptions.map(item => item.label)]
|
|
|
- }
|
|
|
-
|
|
|
- console.log('✅ Picker columns初始化完成:', {
|
|
|
- genderPickerColumns: this.genderPickerColumns,
|
|
|
- boardingPickerColumns: this.boardingPickerColumns,
|
|
|
- collegePickerColumns: this.collegePickerColumns,
|
|
|
- majorPickerColumns: this.majorPickerColumns,
|
|
|
- uniformSizePickerColumns: this.uniformSizePickerColumns
|
|
|
- })
|
|
|
- },
|
|
|
-
|
|
|
- // 初始化字典数据
|
|
|
- async initDictData() {
|
|
|
- try {
|
|
|
- // 获取性别字典
|
|
|
- const genderDict = await getDict('zsjy_gender')
|
|
|
- if (genderDict && genderDict.length > 0) {
|
|
|
- // 确保字典数据格式正确
|
|
|
- this.genderOptions = genderDict.map(item => ({
|
|
|
- value: item.dictValue || item.value,
|
|
|
- label: item.dictLabel || item.label
|
|
|
- }))
|
|
|
- } else {
|
|
|
- this.genderOptions = [
|
|
|
- { value: 'M', label: '男' },
|
|
|
- { value: 'F', label: '女' }
|
|
|
- ]
|
|
|
- }
|
|
|
-
|
|
|
- // 获取是否住宿字典
|
|
|
- const boardingDict = await getDict('sys_yes_no')
|
|
|
- if (boardingDict && boardingDict.length > 0) {
|
|
|
- this.boardingOptions = boardingDict.map(item => ({
|
|
|
- value: item.dictValue || item.value,
|
|
|
- label: item.dictLabel || item.label
|
|
|
- }))
|
|
|
- } else {
|
|
|
- this.boardingOptions = [
|
|
|
- { value: 'Y', label: '是' },
|
|
|
- { value: 'N', label: '否' }
|
|
|
- ]
|
|
|
- }
|
|
|
-
|
|
|
- // 获取校服尺码字典
|
|
|
- const uniformSizeDict = await getDict('zsjy_uniform_size')
|
|
|
- if (uniformSizeDict && uniformSizeDict.length > 0) {
|
|
|
- this.uniformSizeOptions = uniformSizeDict.map(item => ({
|
|
|
- value: item.dictValue || item.value,
|
|
|
- label: item.dictLabel || item.label
|
|
|
- }))
|
|
|
- } else {
|
|
|
- // 使用与web端一致的标准尺码格式(兜底数据)
|
|
|
- this.uniformSizeOptions = [
|
|
|
- { value: '150/84A', label: '150/84A(身高150cm)' },
|
|
|
- { value: '155/86A', label: '155/86A(身高155cm)' },
|
|
|
- { value: '160/88A', label: '160/88A(身高160cm)' },
|
|
|
- { value: '165/90A', label: '165/90A(身高165cm)' },
|
|
|
- { value: '170/92A', label: '170/92A(身高170cm)' },
|
|
|
- { value: '175/94A', label: '175/94A(身高175cm)' },
|
|
|
- { value: '180/96A', label: '180/96A(身高180cm)' },
|
|
|
- { value: '185/98A', label: '185/98A(身高185cm)' },
|
|
|
- { value: '190/100A', label: '190/100A(身高190cm)' }
|
|
|
- ]
|
|
|
- }
|
|
|
-
|
|
|
- console.log('字典数据加载完成:', {
|
|
|
- gender: this.genderOptions,
|
|
|
- boarding: this.boardingOptions,
|
|
|
- uniformSize: this.uniformSizeOptions
|
|
|
- })
|
|
|
-
|
|
|
- // 初始化picker columns数据
|
|
|
- this.initPickerColumns()
|
|
|
- } catch (error) {
|
|
|
- console.error('字典数据加载失败:', error)
|
|
|
- this.initDefaultDictData()
|
|
|
- // 即使失败也要初始化picker columns
|
|
|
- this.initPickerColumns()
|
|
|
- }
|
|
|
- },
|
|
|
-
|
|
|
- // 初始化默认字典数据(兜底)
|
|
|
- initDefaultDictData() {
|
|
|
- this.genderOptions = [
|
|
|
- { value: 'M', label: '男' },
|
|
|
- { value: 'F', label: '女' }
|
|
|
- ]
|
|
|
-
|
|
|
- this.boardingOptions = [
|
|
|
- { value: 'Y', label: '是' },
|
|
|
- { value: 'N', label: '否' }
|
|
|
- ]
|
|
|
-
|
|
|
- this.uniformSizeOptions = [
|
|
|
- { value: '150/84A', label: '150/84A(身高150cm)' },
|
|
|
- { value: '155/86A', label: '155/86A(身高155cm)' },
|
|
|
- { value: '160/88A', label: '160/88A(身高160cm)' },
|
|
|
- { value: '165/90A', label: '165/90A(身高165cm)' },
|
|
|
- { value: '170/92A', label: '170/92A(身高170cm)' },
|
|
|
- { value: '175/94A', label: '175/94A(身高175cm)' },
|
|
|
- { value: '180/96A', label: '180/96A(身高180cm)' },
|
|
|
- { value: '185/98A', label: '185/98A(身高185cm)' },
|
|
|
- { value: '190/100A', label: '190/100A(身高190cm)' }
|
|
|
- ]
|
|
|
-
|
|
|
- console.log('✅ 已使用默认字典数据(兜底方案)')
|
|
|
-
|
|
|
- // 强制更新picker columns
|
|
|
- this.$nextTick(() => {
|
|
|
- this.initPickerColumns()
|
|
|
- })
|
|
|
- },
|
|
|
+ name: 'EnrollmentIndex',
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ // 表单数据
|
|
|
+ formData: {
|
|
|
+ name: '',
|
|
|
+ idCard: '',
|
|
|
+ gender: '',
|
|
|
+ birthDate: '',
|
|
|
+ phone1: '',
|
|
|
+ phone2: '',
|
|
|
+ nation: '',
|
|
|
+ isBoarding: '',
|
|
|
+ healthStatus: '',
|
|
|
+ homeAddress: '',
|
|
|
+ middleSchool: '',
|
|
|
+ examNumber: '',
|
|
|
+ examRegion: '',
|
|
|
+ totalScoreFull: null,
|
|
|
+ totalScore: null,
|
|
|
+ chineseScore: null,
|
|
|
+ mathScore: null,
|
|
|
+ englishScore: null,
|
|
|
+ scienceScore: null,
|
|
|
+ socialScore: null,
|
|
|
+ peScore: null,
|
|
|
+ collegeName: '',
|
|
|
+ collegeId: '',
|
|
|
+ appliedMajor: '',
|
|
|
+ majorCode: '',
|
|
|
+ uniformSize: '',
|
|
|
+ specialties: '',
|
|
|
+ awards: '',
|
|
|
+ },
|
|
|
|
|
|
- // 初始化默认学院数据(兜底)
|
|
|
- initDefaultCollegeData() {
|
|
|
- this.collegeOptions = [
|
|
|
- { deptId: 1, deptName: '机械工程学院', deptCategory: 'JX' },
|
|
|
- { deptId: 2, deptName: '电气工程学院', deptCategory: 'DQ' },
|
|
|
- { deptId: 3, deptName: '信息工程学院', deptCategory: 'XX' },
|
|
|
- { deptId: 4, deptName: '经济管理学院', deptCategory: 'JG' },
|
|
|
- { deptId: 5, deptName: '建筑工程学院', deptCategory: 'JZ' }
|
|
|
- ]
|
|
|
-
|
|
|
- this.majorOptions = [
|
|
|
- { value: 'GYJQR', label: '工业机器人应用与维护', majorCode: 'GYJQR' },
|
|
|
- { value: 'DQZDHSB', label: '电气自动化设备安装与维修', majorCode: 'DQZDHSB' },
|
|
|
- { value: 'WRJYY', label: '无人机应用技术', majorCode: 'WRJYY' },
|
|
|
- { value: 'GYHLW', label: '工业互联网与大数据应用', majorCode: 'GYHLW' },
|
|
|
- { value: 'SZHSJ', label: '数字化设计与制造', majorCode: 'SZHSJ' }
|
|
|
- ]
|
|
|
-
|
|
|
- console.log('✅ 已初始化默认学院和专业数据(兜底方案)')
|
|
|
- },
|
|
|
-
|
|
|
- // 加载学院数据
|
|
|
- async loadCollegeOptions() {
|
|
|
- try {
|
|
|
- const response = await getCollegeList()
|
|
|
- if (response && response.data) {
|
|
|
- // 适配后端返回的XgSysDeptVo数据结构
|
|
|
- this.collegeOptions = response.data.map(item => ({
|
|
|
- deptId: item.deptId,
|
|
|
- deptName: item.deptName,
|
|
|
- deptCategory: item.deptCategory || item.deptId.toString()
|
|
|
- }))
|
|
|
- console.log('学院数据加载成功:', this.collegeOptions)
|
|
|
- } else {
|
|
|
- throw new Error('API返回数据为空')
|
|
|
- }
|
|
|
- } catch (error) {
|
|
|
- console.error('学院数据加载失败:', error)
|
|
|
- // 设置兜底学院数据
|
|
|
- this.collegeOptions = [
|
|
|
- { deptId: 1, deptName: '机械工程学院', deptCategory: 'JX' },
|
|
|
- { deptId: 2, deptName: '电气工程学院', deptCategory: 'DQ' },
|
|
|
- { deptId: 3, deptName: '信息工程学院', deptCategory: 'XX' },
|
|
|
- { deptId: 4, deptName: '经济管理学院', deptCategory: 'JG' },
|
|
|
- { deptId: 5, deptName: '建筑工程学院', deptCategory: 'JZ' }
|
|
|
- ]
|
|
|
- console.log('✅ 已使用默认学院数据(兜底方案)')
|
|
|
- }
|
|
|
-
|
|
|
- // 更新学院picker的columns数据
|
|
|
- this.collegePickerColumns = [this.collegeOptions.map(item => item.deptName)]
|
|
|
- console.log('学院picker columns更新完成:', this.collegePickerColumns)
|
|
|
- },
|
|
|
+ // 查询数据
|
|
|
+ queryData: {
|
|
|
+ idCard: '',
|
|
|
+ examNumber: '',
|
|
|
+ },
|
|
|
|
|
|
- // 初始化专业选项
|
|
|
- async initMajorOptions() {
|
|
|
- try {
|
|
|
- // 先尝试从字典获取专业数据
|
|
|
- const majorDict = await getDict('zsjy_major')
|
|
|
- if (majorDict && majorDict.length > 0) {
|
|
|
- this.majorOptions = majorDict.map(item => ({
|
|
|
- value: item.value,
|
|
|
- label: item.label,
|
|
|
- majorCode: item.value
|
|
|
- }))
|
|
|
- } else {
|
|
|
- // 使用默认专业选项(兜底)
|
|
|
- this.majorOptions = [
|
|
|
- { value: 'DQZDHSB', label: '电气自动化设备安装与维修', majorCode: 'DQZDHSB' },
|
|
|
- { value: 'GYJQR', label: '工业机器人应用与维护', majorCode: 'GYJQR' },
|
|
|
- { value: 'WRJYY', label: '无人机应用技术', majorCode: 'WRJYY' },
|
|
|
- { value: 'GYHLW', label: '工业互联网与大数据应用', majorCode: 'GYHLW' },
|
|
|
- { value: 'SZHSJ', label: '数字化设计与制造', majorCode: 'SZHSJ' },
|
|
|
- { value: 'ZNZZ', label: '智能制作技术应用', majorCode: 'ZNZZ' },
|
|
|
- { value: 'QCWX', label: '汽车维修', majorCode: 'QCWX' },
|
|
|
- { value: 'CPJC', label: '产品检测与质量控制', majorCode: 'CPJC' },
|
|
|
- { value: 'ZY', label: '中药', majorCode: 'ZY' },
|
|
|
- { value: 'YWZJ_YB', label: '药物制剂(预备技师)', majorCode: 'YWZJ_YB' },
|
|
|
- { value: 'YWZJ_GJ', label: '药物制剂(高级工)', majorCode: 'YWZJ_GJ' },
|
|
|
- { value: 'YPYX', label: '药品营销', majorCode: 'YPYX' },
|
|
|
- { value: 'JKFW', label: '健康服务与管理', majorCode: 'JKFW' },
|
|
|
- { value: 'YLJS_YB', label: '园林技术(预备技师)', majorCode: 'YLJS_YB' },
|
|
|
- { value: 'YLJS_GJ', label: '园林技术(高级工)', majorCode: 'YLJS_GJ' },
|
|
|
- { value: 'YLJS_JG', label: '园林技术(园林景观与工程施工)', majorCode: 'YLJS_JG' },
|
|
|
- { value: 'HJYS', label: '环境艺术设计', majorCode: 'HJYS' },
|
|
|
- { value: 'JDGL_YB', label: '酒店管理(预备技师)', majorCode: 'JDGL_YB' },
|
|
|
- { value: 'JDGL_GJ', label: '酒店管理(高级工)', majorCode: 'JDGL_GJ' },
|
|
|
- { value: 'PR_ZS', label: '烹饪(中式烹调)', majorCode: 'PR_ZS' },
|
|
|
- { value: 'PR_MD', label: '烹饪(中西式面点)', majorCode: 'PR_MD' },
|
|
|
- { value: 'DZSW', label: '电子商务', majorCode: 'DZSW' },
|
|
|
- { value: 'SZMT', label: '数字媒体技术应用', majorCode: 'SZMT' },
|
|
|
- { value: 'RGZN', label: '人工智能技术应用', majorCode: 'RGZN' },
|
|
|
- { value: 'WLXX', label: '网络与信息安全', majorCode: 'WLXX' },
|
|
|
- { value: 'MSSJ', label: '美术设计与制作', majorCode: 'MSSJ' }
|
|
|
- ]
|
|
|
- }
|
|
|
-
|
|
|
- console.log('专业选项加载完成:', this.majorOptions)
|
|
|
- } catch (error) {
|
|
|
- console.error('专业选项加载失败:', error)
|
|
|
- // 确保有兜底的专业数据
|
|
|
- if (!this.majorOptions || this.majorOptions.length === 0) {
|
|
|
- this.majorOptions = [
|
|
|
- { value: 'DQZDHSB', label: '电气自动化设备安装与维修', majorCode: 'DQZDHSB', collegeId: 2 },
|
|
|
- { value: 'GYJQR', label: '工业机器人应用与维护', majorCode: 'GYJQR', collegeId: 1 },
|
|
|
- { value: 'WRJYY', label: '无人机应用技术', majorCode: 'WRJYY', collegeId: 3 },
|
|
|
- { value: 'GYHLW', label: '工业互联网与大数据应用', majorCode: 'GYHLW', collegeId: 3 },
|
|
|
- { value: 'SZHSJ', label: '数字化设计与制造', majorCode: 'SZHSJ', collegeId: 1 }
|
|
|
- ]
|
|
|
- console.log('✅ 已使用默认专业数据(兜底方案)')
|
|
|
- }
|
|
|
- }
|
|
|
+ // 加载状态
|
|
|
+ submitLoading: false,
|
|
|
+ queryLoading: false,
|
|
|
+
|
|
|
+ // 弹窗状态
|
|
|
+ statusPopup: {
|
|
|
+ show: false,
|
|
|
+ },
|
|
|
+ statusInfo: null,
|
|
|
+
|
|
|
+ // 字典选项
|
|
|
+ genderOptions: [],
|
|
|
+ boardingOptions: [],
|
|
|
+ collegeOptions: [],
|
|
|
+ majorOptions: [],
|
|
|
+ uniformSizeOptions: [],
|
|
|
+
|
|
|
+ // 选择器索引
|
|
|
+ genderIndex: null,
|
|
|
+ boardingIndex: null,
|
|
|
+ collegeIndex: null,
|
|
|
+ majorIndex: null,
|
|
|
+ uniformSizeIndex: null,
|
|
|
+
|
|
|
+ // 显示文本
|
|
|
+ genderText: '',
|
|
|
+ boardingText: '',
|
|
|
+ collegeText: '',
|
|
|
+ majorText: '',
|
|
|
+ uniformSizeText: '',
|
|
|
+
|
|
|
+ // 日期选择器
|
|
|
+ birthDateValue: Number(new Date()),
|
|
|
+
|
|
|
+ // picker显示控制
|
|
|
+ genderPickerShow: false,
|
|
|
+ birthDatePickerShow: false,
|
|
|
+ boardingPickerShow: false,
|
|
|
+ collegePickerShow: false,
|
|
|
+ majorPickerShow: false,
|
|
|
+ uniformSizePickerShow: false,
|
|
|
+
|
|
|
+ // picker数据格式(uview-ui 2.x 需要columns格式)
|
|
|
+ genderPickerColumns: [],
|
|
|
+ boardingPickerColumns: [],
|
|
|
+ collegePickerColumns: [],
|
|
|
+ majorPickerColumns: [],
|
|
|
+ uniformSizePickerColumns: [],
|
|
|
+
|
|
|
+ // 表单验证规则
|
|
|
+ rules: {
|
|
|
+ name: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
|
|
|
+ idCard: [
|
|
|
+ { required: true, message: '身份证号不能为空', trigger: 'blur' },
|
|
|
+ {
|
|
|
+ pattern:
|
|
|
+ /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/,
|
|
|
+ message: '身份证号格式不正确',
|
|
|
+ trigger: 'blur',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ gender: [{ required: true, message: '性别不能为空', trigger: 'change' }],
|
|
|
+ phone1: [
|
|
|
+ { required: true, message: '联系电话不能为空', trigger: 'blur' },
|
|
|
+ { pattern: /^1[3-9]\d{9}$/, message: '手机号码格式不正确', trigger: 'blur' },
|
|
|
+ ],
|
|
|
+ phone2: [
|
|
|
+ { pattern: /^1[3-9]\d{9}$/, message: '手机号码格式不正确', trigger: 'blur' },
|
|
|
+ ],
|
|
|
+ collegeName: [{ required: true, message: '所属学院不能为空', trigger: 'change' }],
|
|
|
+ appliedMajor: [{ required: true, message: '报考专业不能为空', trigger: 'change' }],
|
|
|
+ },
|
|
|
+ };
|
|
|
},
|
|
|
-
|
|
|
- // 身份证号变化处理
|
|
|
- onIdCardChange() {
|
|
|
- const idCard = this.formData.idCard
|
|
|
- console.log('身份证号变化:', idCard)
|
|
|
- if (idCard && idCard.length === 18) {
|
|
|
+
|
|
|
+ async onLoad() {
|
|
|
try {
|
|
|
- // 提取出生日期
|
|
|
- const year = idCard.substring(6, 10)
|
|
|
- const month = idCard.substring(10, 12)
|
|
|
- const day = idCard.substring(12, 14)
|
|
|
- this.formData.birthDate = `${year}-${month}-${day}`
|
|
|
-
|
|
|
- // 更新出生日期显示值
|
|
|
- this.birthDateValue = new Date(`${year}-${month}-${day}`).getTime()
|
|
|
-
|
|
|
- // 提取性别(奇数为男,偶数为女)
|
|
|
- const genderCode = parseInt(idCard.substring(16, 17))
|
|
|
- const genderValue = genderCode % 2 === 1 ? 'M' : 'F'
|
|
|
-
|
|
|
- // 更新性别选择
|
|
|
- console.log('查找性别选项:', {
|
|
|
- genderValue,
|
|
|
- genderOptions: this.genderOptions,
|
|
|
- genderOptionsLength: this.genderOptions.length
|
|
|
- })
|
|
|
-
|
|
|
- // 确保性别选项已经初始化
|
|
|
- if (this.genderOptions.length === 0) {
|
|
|
- console.warn('性别选项未初始化,使用默认选项')
|
|
|
- this.genderOptions = [
|
|
|
- { value: 'M', label: '男' },
|
|
|
- { value: 'F', label: '女' }
|
|
|
- ]
|
|
|
- }
|
|
|
-
|
|
|
- const genderIndex = this.genderOptions.findIndex(item => item.value === genderValue)
|
|
|
- console.log('找到性别索引:', genderIndex)
|
|
|
- if (genderIndex !== -1) {
|
|
|
- this.genderIndex = genderIndex
|
|
|
- this.formData.gender = genderValue
|
|
|
- this.genderText = this.genderOptions[genderIndex].label
|
|
|
- console.log('性别更新成功:', { genderIndex, gender: genderValue, genderText: this.genderText })
|
|
|
-
|
|
|
- // 强制更新视图
|
|
|
- this.$nextTick(() => {
|
|
|
- this.$forceUpdate()
|
|
|
- })
|
|
|
- } else {
|
|
|
- console.warn('未找到匹配的性别选项:', genderValue, '可用选项:', this.genderOptions)
|
|
|
- }
|
|
|
-
|
|
|
- console.log('身份证信息解析成功:', {
|
|
|
- birthDate: this.formData.birthDate,
|
|
|
- gender: this.formData.gender,
|
|
|
- genderText: this.genderText,
|
|
|
- birthDateValue: this.birthDateValue,
|
|
|
- genderIndex: this.genderIndex
|
|
|
- })
|
|
|
-
|
|
|
- // 强制更新视图
|
|
|
- this.$forceUpdate()
|
|
|
-
|
|
|
+ console.log('🚀 开始页面初始化...');
|
|
|
+
|
|
|
+ // 先初始化兜底数据,确保页面能正常显示
|
|
|
+ this.initDefaultDictData();
|
|
|
+ this.initDefaultCollegeData();
|
|
|
+
|
|
|
+ console.log('✅ 兜底数据初始化完成:', {
|
|
|
+ genderOptions: this.genderOptions.length,
|
|
|
+ collegeOptions: this.collegeOptions.length,
|
|
|
+ majorOptions: this.majorOptions.length,
|
|
|
+ });
|
|
|
+
|
|
|
+ // 并行加载数据,即使部分失败也不影响页面显示
|
|
|
+ const results = await Promise.allSettled([
|
|
|
+ this.initDictData(),
|
|
|
+ this.loadCollegeOptions(),
|
|
|
+ this.initMajorOptions(),
|
|
|
+ ]);
|
|
|
+
|
|
|
+ console.log('📋 异步数据加载结果:', results);
|
|
|
+
|
|
|
+ console.log('📋 页面数据初始化完成');
|
|
|
+ console.log('当前数据状态:', {
|
|
|
+ genderOptions: this.genderOptions,
|
|
|
+ collegeOptions: this.collegeOptions,
|
|
|
+ majorOptions: this.majorOptions,
|
|
|
+ boardingOptions: this.boardingOptions,
|
|
|
+ uniformSizeOptions: this.uniformSizeOptions,
|
|
|
+ });
|
|
|
+
|
|
|
+ // 检查picker组件是否能正常显示
|
|
|
+ console.log('Picker组件数据检查:', {
|
|
|
+ 性别数据长度: this.genderOptions.length,
|
|
|
+ 学院数据长度: this.collegeOptions.length,
|
|
|
+ 专业数据长度: this.majorOptions.length,
|
|
|
+ });
|
|
|
+
|
|
|
+ // 强制更新视图确保数据正确显示
|
|
|
+ this.$forceUpdate();
|
|
|
+
|
|
|
+ console.log('✅ 页面初始化完成,准备就绪');
|
|
|
} catch (error) {
|
|
|
- console.error('解析身份证信息时出错:', error)
|
|
|
- }
|
|
|
- }
|
|
|
- },
|
|
|
-
|
|
|
- // 显示性别选择器
|
|
|
- showGenderPicker() {
|
|
|
- this.genderPickerShow = true
|
|
|
- console.log('显示性别选择器')
|
|
|
- },
|
|
|
-
|
|
|
- // 显示出生日期选择器
|
|
|
- showBirthDatePicker() {
|
|
|
- this.birthDatePickerShow = true
|
|
|
- console.log('显示出生日期选择器')
|
|
|
- },
|
|
|
-
|
|
|
- // 性别选择确认
|
|
|
- onGenderConfirm(e) {
|
|
|
- console.log('性别选择确认:', e)
|
|
|
- const { indexs, value } = e
|
|
|
- if (indexs && indexs.length > 0) {
|
|
|
- const index = indexs[0]
|
|
|
- if (this.genderOptions[index]) {
|
|
|
- this.formData.gender = this.genderOptions[index].value
|
|
|
- this.genderText = this.genderOptions[index].label
|
|
|
- console.log('性别选择成功:', {
|
|
|
- gender: this.formData.gender,
|
|
|
- genderText: this.genderText
|
|
|
- })
|
|
|
+ console.error('❌ 页面初始化失败:', error);
|
|
|
+ // 确保使用兜底数据
|
|
|
+ this.initDefaultDictData();
|
|
|
+ this.initDefaultCollegeData();
|
|
|
+ this.$forceUpdate();
|
|
|
}
|
|
|
- }
|
|
|
- this.genderPickerShow = false
|
|
|
- },
|
|
|
-
|
|
|
- // 出生日期变化
|
|
|
- onBirthDateChange(e) {
|
|
|
- this.birthDateValue = e.value
|
|
|
- this.formData.birthDate = this.formatDate(new Date(e.value))
|
|
|
- },
|
|
|
-
|
|
|
- // 出生日期确认
|
|
|
- onBirthDateConfirm(e) {
|
|
|
- console.log('出生日期选择确认:', e)
|
|
|
- this.birthDateValue = e.value
|
|
|
- this.formData.birthDate = this.formatDate(new Date(e.value))
|
|
|
- this.birthDatePickerShow = false
|
|
|
- console.log('出生日期选择成功:', {
|
|
|
- birthDateValue: this.birthDateValue,
|
|
|
- birthDate: this.formData.birthDate
|
|
|
- })
|
|
|
- },
|
|
|
-
|
|
|
- // 显示住宿选择器
|
|
|
- showBoardingPicker() {
|
|
|
- console.log('🔥 showBoardingPicker 被调用了!')
|
|
|
- console.log('准备显示住宿选择器', {
|
|
|
- boardingOptions: this.boardingOptions,
|
|
|
- boardingPickerColumns: this.boardingPickerColumns,
|
|
|
- boardingPickerShow: this.boardingPickerShow
|
|
|
- })
|
|
|
-
|
|
|
- // 如果住宿选项为空,先使用默认数据
|
|
|
- if (!this.boardingOptions || this.boardingOptions.length === 0) {
|
|
|
- console.log('住宿选项为空,使用默认数据')
|
|
|
- this.boardingOptions = [
|
|
|
- { value: 'Y', label: '是' },
|
|
|
- { value: 'N', label: '否' }
|
|
|
- ]
|
|
|
- }
|
|
|
-
|
|
|
- // 确保picker数据存在
|
|
|
- if (!this.boardingPickerColumns || this.boardingPickerColumns.length === 0) {
|
|
|
- console.log('住宿选择器数据未初始化,正在初始化...')
|
|
|
- this.initPickerColumns()
|
|
|
- }
|
|
|
-
|
|
|
- // 再次检查数据是否正确
|
|
|
- console.log('最终的picker数据:', {
|
|
|
- boardingPickerColumns: this.boardingPickerColumns,
|
|
|
- columnsLength: this.boardingPickerColumns?.length,
|
|
|
- firstColumn: this.boardingPickerColumns?.[0]
|
|
|
- })
|
|
|
-
|
|
|
- this.boardingPickerShow = true
|
|
|
- console.log('✅ 住宿选择器显示状态已设置为 true')
|
|
|
-
|
|
|
- // 使用 $nextTick 确保视图更新
|
|
|
- this.$nextTick(() => {
|
|
|
- console.log('视图更新后的 boardingPickerShow:', this.boardingPickerShow)
|
|
|
- })
|
|
|
- },
|
|
|
-
|
|
|
- // 住宿选择确认
|
|
|
- onBoardingConfirm(e) {
|
|
|
- console.log('住宿选择确认:', e)
|
|
|
- const { indexs, value } = e
|
|
|
- if (indexs && indexs.length > 0) {
|
|
|
- const index = indexs[0]
|
|
|
- if (this.boardingOptions[index]) {
|
|
|
- this.formData.isBoarding = this.boardingOptions[index].value
|
|
|
- this.boardingText = this.boardingOptions[index].label
|
|
|
- console.log('住宿选择成功:', {
|
|
|
- isBoarding: this.formData.isBoarding,
|
|
|
- boardingText: this.boardingText
|
|
|
- })
|
|
|
- }
|
|
|
- }
|
|
|
- this.boardingPickerShow = false
|
|
|
- },
|
|
|
-
|
|
|
- // 显示学院选择器
|
|
|
- showCollegePicker() {
|
|
|
- console.log('🎓 showCollegePicker 被调用了!')
|
|
|
-
|
|
|
- // 如果学院选项为空,先确保数据存在
|
|
|
- if (!this.collegeOptions || this.collegeOptions.length === 0) {
|
|
|
- console.log('学院选项为空,尝试重新加载...')
|
|
|
- this.loadCollegeOptions().then(() => {
|
|
|
- this.collegePickerShow = true
|
|
|
- })
|
|
|
- } else {
|
|
|
- // 确保picker数据存在并重新初始化
|
|
|
- if (!this.collegePickerColumns || this.collegePickerColumns.length === 0) {
|
|
|
- this.initPickerColumns()
|
|
|
- }
|
|
|
-
|
|
|
- this.collegePickerShow = true
|
|
|
- }
|
|
|
-
|
|
|
- console.log('学院选择器状态:', {
|
|
|
- collegePickerShow: this.collegePickerShow,
|
|
|
- collegeOptions: this.collegeOptions.length,
|
|
|
- collegePickerColumns: this.collegePickerColumns
|
|
|
- })
|
|
|
- },
|
|
|
-
|
|
|
- // 学院选择确认
|
|
|
- onCollegeConfirm(e) {
|
|
|
- console.log('学院选择确认:', e)
|
|
|
- const { indexs, value } = e
|
|
|
- if (indexs && indexs.length > 0) {
|
|
|
- const index = indexs[0]
|
|
|
- if (this.collegeOptions[index]) {
|
|
|
- const college = this.collegeOptions[index]
|
|
|
- this.formData.collegeName = college.deptName
|
|
|
- this.formData.collegeId = college.deptCategory || college.deptId
|
|
|
- this.collegeText = college.deptName
|
|
|
-
|
|
|
- console.log('学院选择成功:', {
|
|
|
- collegeName: this.formData.collegeName,
|
|
|
- collegeId: this.formData.collegeId,
|
|
|
- collegeText: this.collegeText
|
|
|
- })
|
|
|
-
|
|
|
- // 根据学院加载对应的专业
|
|
|
- this.loadMajorsByCollegeId(college.deptId)
|
|
|
-
|
|
|
- // 清空专业选择
|
|
|
- this.formData.appliedMajor = ''
|
|
|
- this.formData.majorCode = ''
|
|
|
- this.majorText = ''
|
|
|
- this.majorIndex = null
|
|
|
- }
|
|
|
- }
|
|
|
- this.collegePickerShow = false
|
|
|
},
|
|
|
|
|
|
- // 根据学院ID加载专业
|
|
|
- async loadMajorsByCollegeId(collegeId) {
|
|
|
- try {
|
|
|
- console.log('🔄 开始加载学院专业数据, collegeId:', collegeId)
|
|
|
-
|
|
|
- const response = await getMajorsByCollegeId(collegeId)
|
|
|
- if (response && response.data && response.data.length > 0) {
|
|
|
- // 适配后端返回的XgSysDeptVo数据结构
|
|
|
- this.majorOptions = response.data.map(major => ({
|
|
|
- value: major.deptId,
|
|
|
- label: major.deptName,
|
|
|
- majorCode: major.deptCategory || major.deptId.toString(),
|
|
|
- deptId: major.deptId,
|
|
|
- deptName: major.deptName,
|
|
|
- deptCategory: major.deptCategory
|
|
|
- }))
|
|
|
- console.log('✅ 专业数据加载成功:', this.majorOptions)
|
|
|
- } else {
|
|
|
- console.log('⚠️ 后端未返回专业数据,使用兜底数据')
|
|
|
- this.majorOptions = []
|
|
|
- }
|
|
|
- } catch (error) {
|
|
|
- console.error('❌ 专业数据加载失败:', error)
|
|
|
- this.majorOptions = []
|
|
|
- }
|
|
|
-
|
|
|
- // 如果API加载失败或无数据,使用兜底专业数据
|
|
|
- if (!this.majorOptions || this.majorOptions.length === 0) {
|
|
|
- const defaultMajors = this.getDefaultMajorsByCollegeId(collegeId)
|
|
|
- this.majorOptions = defaultMajors
|
|
|
- console.log('✅ 已使用默认专业数据(兜底方案):', defaultMajors)
|
|
|
- }
|
|
|
-
|
|
|
- // 更新专业picker的columns数据
|
|
|
- this.majorPickerColumns = [this.majorOptions.map(item => item.label)]
|
|
|
- console.log('✅ 专业picker columns更新完成:', {
|
|
|
- majorOptions: this.majorOptions.length,
|
|
|
- majorPickerColumns: this.majorPickerColumns
|
|
|
- })
|
|
|
-
|
|
|
- // 强制更新视图以确保数据显示
|
|
|
- this.$forceUpdate()
|
|
|
- },
|
|
|
+ methods: {
|
|
|
+ // 初始化picker数据格式
|
|
|
+ initPickerColumns() {
|
|
|
+ console.log('🔧 开始初始化picker数据格式...');
|
|
|
|
|
|
- // 根据学院ID获取默认专业数据
|
|
|
- getDefaultMajorsByCollegeId(collegeId) {
|
|
|
- const majorsByCollege = {
|
|
|
- 1: [ // 机械工程学院
|
|
|
- { value: 'GYJQR', label: '工业机器人应用与维护', majorCode: 'GYJQR' },
|
|
|
- { value: 'SZHSJ', label: '数字化设计与制造', majorCode: 'SZHSJ' },
|
|
|
- { value: 'QCWX', label: '汽车维修', majorCode: 'QCWX' }
|
|
|
- ],
|
|
|
- 2: [ // 电气工程学院
|
|
|
- { value: 'DQZDHSB', label: '电气自动化设备安装与维修', majorCode: 'DQZDHSB' },
|
|
|
- { value: 'ZNZZ', label: '智能制作技术应用', majorCode: 'ZNZZ' }
|
|
|
- ],
|
|
|
- 3: [ // 信息工程学院
|
|
|
- { value: 'WRJYY', label: '无人机应用技术', majorCode: 'WRJYY' },
|
|
|
- { value: 'GYHLW', label: '工业互联网与大数据应用', majorCode: 'GYHLW' },
|
|
|
- { value: 'RGZN', label: '人工智能技术应用', majorCode: 'RGZN' }
|
|
|
- ],
|
|
|
- 4: [ // 经济管理学院
|
|
|
- { value: 'DZSW', label: '电子商务', majorCode: 'DZSW' },
|
|
|
- { value: 'JDGL_GJ', label: '酒店管理(高级工)', majorCode: 'JDGL_GJ' }
|
|
|
- ],
|
|
|
- 5: [ // 建筑工程学院
|
|
|
- { value: 'YLJS_GJ', label: '园林技术(高级工)', majorCode: 'YLJS_GJ' },
|
|
|
- { value: 'HJYS', label: '环境艺术设计', majorCode: 'HJYS' }
|
|
|
- ]
|
|
|
- }
|
|
|
-
|
|
|
- return majorsByCollege[collegeId] || []
|
|
|
- },
|
|
|
+ // 性别picker数据
|
|
|
+ if (this.genderOptions && this.genderOptions.length > 0) {
|
|
|
+ this.genderPickerColumns = [this.genderOptions.map((item) => item.label)];
|
|
|
+ }
|
|
|
|
|
|
- // 显示专业选择器
|
|
|
- showMajorPicker() {
|
|
|
- console.log('🎓 showMajorPicker 被调用了!')
|
|
|
-
|
|
|
- // 检查是否已选择学院
|
|
|
- if (!this.formData.collegeId || !this.formData.collegeName) {
|
|
|
- uni.showToast({
|
|
|
- title: '请先选择所属学院',
|
|
|
- icon: 'none',
|
|
|
- duration: 2000
|
|
|
- })
|
|
|
- console.log('❌ 未选择学院,无法选择专业')
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- // 检查专业数据是否存在
|
|
|
- if (!this.majorOptions || this.majorOptions.length === 0) {
|
|
|
- console.log('专业选项为空,尝试重新加载...')
|
|
|
- // 根据当前选择的学院重新加载专业数据
|
|
|
- const collegeOption = this.collegeOptions.find(c => c.deptName === this.formData.collegeName)
|
|
|
- if (collegeOption) {
|
|
|
- this.loadMajorsByCollegeId(collegeOption.deptId).then(() => {
|
|
|
- if (this.majorOptions.length > 0) {
|
|
|
- this.majorPickerShow = true
|
|
|
+ // 住宿picker数据
|
|
|
+ if (this.boardingOptions && this.boardingOptions.length > 0) {
|
|
|
+ this.boardingPickerColumns = [this.boardingOptions.map((item) => item.label)];
|
|
|
+ console.log('住宿picker数据初始化:', {
|
|
|
+ boardingOptions: this.boardingOptions,
|
|
|
+ boardingPickerColumns: this.boardingPickerColumns,
|
|
|
+ });
|
|
|
} else {
|
|
|
- uni.showToast({
|
|
|
- title: '该学院暂无可选专业',
|
|
|
- icon: 'none'
|
|
|
- })
|
|
|
+ console.warn('住宿选项为空,无法初始化picker数据');
|
|
|
}
|
|
|
- })
|
|
|
- } else {
|
|
|
- uni.showToast({
|
|
|
- title: '学院信息异常,请重新选择学院',
|
|
|
- icon: 'none'
|
|
|
- })
|
|
|
- }
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- // 确保picker数据存在并重新初始化
|
|
|
- if (!this.majorPickerColumns || this.majorPickerColumns.length === 0) {
|
|
|
- this.majorPickerColumns = [this.majorOptions.map(item => item.label)]
|
|
|
- }
|
|
|
-
|
|
|
- this.majorPickerShow = true
|
|
|
-
|
|
|
- console.log('专业选择器状态:', {
|
|
|
- majorPickerShow: this.majorPickerShow,
|
|
|
- majorOptions: this.majorOptions.length,
|
|
|
- majorPickerColumns: this.majorPickerColumns,
|
|
|
- currentCollege: this.formData.collegeName
|
|
|
- })
|
|
|
- },
|
|
|
-
|
|
|
- // 专业选择确认
|
|
|
- onMajorConfirm(e) {
|
|
|
- console.log('🎓 专业选择确认:', e)
|
|
|
- const { indexs, value } = e
|
|
|
-
|
|
|
- if (indexs && indexs.length > 0) {
|
|
|
- const index = indexs[0]
|
|
|
-
|
|
|
- if (this.majorOptions && this.majorOptions[index]) {
|
|
|
- const selectedMajor = this.majorOptions[index]
|
|
|
-
|
|
|
- // 更新表单数据
|
|
|
- this.formData.appliedMajor = selectedMajor.label
|
|
|
- this.formData.majorCode = selectedMajor.majorCode
|
|
|
- this.majorText = selectedMajor.label
|
|
|
-
|
|
|
- console.log('✅ 专业选择成功:', {
|
|
|
- index: index,
|
|
|
- selectedMajor: selectedMajor,
|
|
|
- appliedMajor: this.formData.appliedMajor,
|
|
|
- majorCode: this.formData.majorCode,
|
|
|
- majorText: this.majorText
|
|
|
- })
|
|
|
-
|
|
|
- // 显示选择成功提示
|
|
|
- uni.showToast({
|
|
|
- title: `已选择: ${selectedMajor.label}`,
|
|
|
- icon: 'success',
|
|
|
- duration: 1500
|
|
|
- })
|
|
|
- } else {
|
|
|
- console.error('❌ 专业选择失败: 找不到对应的专业选项', {
|
|
|
- index: index,
|
|
|
- majorOptionsLength: this.majorOptions ? this.majorOptions.length : 0
|
|
|
- })
|
|
|
-
|
|
|
- uni.showToast({
|
|
|
- title: '专业选择失败,请重试',
|
|
|
- icon: 'none'
|
|
|
- })
|
|
|
- }
|
|
|
- } else {
|
|
|
- console.error('❌ 专业选择失败: 未获取到有效的索引', e)
|
|
|
- }
|
|
|
-
|
|
|
- this.majorPickerShow = false
|
|
|
- },
|
|
|
-
|
|
|
- // 显示校服尺码选择器
|
|
|
- showUniformSizePicker() {
|
|
|
- console.log('👕 showUniformSizePicker 被调用了!')
|
|
|
-
|
|
|
- // 检查校服尺码数据是否存在
|
|
|
- if (!this.uniformSizeOptions || this.uniformSizeOptions.length === 0) {
|
|
|
- console.log('⚠️ 校服尺码选项为空,尝试重新初始化...')
|
|
|
-
|
|
|
- // 使用与web端一致的标准尺码数据
|
|
|
- this.uniformSizeOptions = [
|
|
|
- { value: '150/84A', label: '150/84A(身高150cm)' },
|
|
|
- { value: '155/86A', label: '155/86A(身高155cm)' },
|
|
|
- { value: '160/88A', label: '160/88A(身高160cm)' },
|
|
|
- { value: '165/90A', label: '165/90A(身高165cm)' },
|
|
|
- { value: '170/92A', label: '170/92A(身高170cm)' },
|
|
|
- { value: '175/94A', label: '175/94A(身高175cm)' },
|
|
|
- { value: '180/96A', label: '180/96A(身高180cm)' },
|
|
|
- { value: '185/98A', label: '185/98A(身高185cm)' },
|
|
|
- { value: '190/100A', label: '190/100A(身高190cm)' }
|
|
|
- ]
|
|
|
-
|
|
|
- console.log('✅ 已使用默认校服尺码数据:', this.uniformSizeOptions)
|
|
|
- }
|
|
|
-
|
|
|
- // 确保picker数据存在并重新初始化
|
|
|
- if (!this.uniformSizePickerColumns || this.uniformSizePickerColumns.length === 0) {
|
|
|
- this.uniformSizePickerColumns = [this.uniformSizeOptions.map(item => item.label)]
|
|
|
- }
|
|
|
-
|
|
|
- this.uniformSizePickerShow = true
|
|
|
-
|
|
|
- console.log('校服尺码选择器状态:', {
|
|
|
- uniformSizePickerShow: this.uniformSizePickerShow,
|
|
|
- uniformSizeOptions: this.uniformSizeOptions.length,
|
|
|
- uniformSizePickerColumns: this.uniformSizePickerColumns
|
|
|
- })
|
|
|
- },
|
|
|
-
|
|
|
- // 校服尺码选择确认
|
|
|
- onUniformSizeConfirm(e) {
|
|
|
- console.log('👕 校服尺码选择确认:', e)
|
|
|
- const { indexs, value } = e
|
|
|
-
|
|
|
- if (indexs && indexs.length > 0) {
|
|
|
- const index = indexs[0]
|
|
|
-
|
|
|
- if (this.uniformSizeOptions && this.uniformSizeOptions[index]) {
|
|
|
- const selectedSize = this.uniformSizeOptions[index]
|
|
|
-
|
|
|
- // 更新表单数据
|
|
|
- this.formData.uniformSize = selectedSize.value
|
|
|
- this.uniformSizeText = selectedSize.label
|
|
|
-
|
|
|
- console.log('✅ 校服尺码选择成功:', {
|
|
|
- index: index,
|
|
|
- selectedSize: selectedSize,
|
|
|
- uniformSize: this.formData.uniformSize,
|
|
|
- uniformSizeText: this.uniformSizeText
|
|
|
- })
|
|
|
-
|
|
|
- // 显示选择成功提示
|
|
|
- uni.showToast({
|
|
|
- title: `已选择尺码: ${selectedSize.label}`,
|
|
|
- icon: 'success',
|
|
|
- duration: 1500
|
|
|
- })
|
|
|
- } else {
|
|
|
- console.error('❌ 校服尺码选择失败: 找不到对应的尺码选项', {
|
|
|
- index: index,
|
|
|
- uniformSizeOptionsLength: this.uniformSizeOptions ? this.uniformSizeOptions.length : 0
|
|
|
- })
|
|
|
-
|
|
|
- uni.showToast({
|
|
|
- title: '尺码选择失败,请重试',
|
|
|
- icon: 'none'
|
|
|
- })
|
|
|
- }
|
|
|
- } else {
|
|
|
- console.error('❌ 校服尺码选择失败: 未获取到有效的索引', e)
|
|
|
- }
|
|
|
-
|
|
|
- this.uniformSizePickerShow = false
|
|
|
- },
|
|
|
-
|
|
|
- // 提交报名申请
|
|
|
- async submitApplication() {
|
|
|
- try {
|
|
|
- // 表单验证
|
|
|
- const valid = await this.$refs.enrollmentForm.validate()
|
|
|
- if (!valid) {
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- this.submitLoading = true
|
|
|
-
|
|
|
- // 处理是否住宿字段,将"Y"/"N"转换为1/0
|
|
|
- const submitData = { ...this.formData }
|
|
|
- if (submitData.isBoarding === 'Y') {
|
|
|
- submitData.isBoarding = 1
|
|
|
- } else if (submitData.isBoarding === 'N') {
|
|
|
- submitData.isBoarding = 0
|
|
|
- }
|
|
|
-
|
|
|
- // 调用提交接口
|
|
|
- const response = await request({
|
|
|
- url: '/zsjy/enrollment/info/submit',
|
|
|
- method: 'POST',
|
|
|
- data: submitData,
|
|
|
- header: {
|
|
|
- isToken: false // 不需要登录token
|
|
|
- }
|
|
|
- })
|
|
|
-
|
|
|
- uni.showToast({
|
|
|
- title: '报名申请提交成功!',
|
|
|
- icon: 'success'
|
|
|
- })
|
|
|
-
|
|
|
+
|
|
|
+ // 学院picker数据
|
|
|
+ if (this.collegeOptions && this.collegeOptions.length > 0) {
|
|
|
+ this.collegePickerColumns = [this.collegeOptions.map((item) => item.deptName)];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 专业picker数据
|
|
|
+ if (this.majorOptions && this.majorOptions.length > 0) {
|
|
|
+ this.majorPickerColumns = [this.majorOptions.map((item) => item.label)];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 校服尺码picker数据
|
|
|
+ if (this.uniformSizeOptions && this.uniformSizeOptions.length > 0) {
|
|
|
+ this.uniformSizePickerColumns = [this.uniformSizeOptions.map((item) => item.label)];
|
|
|
+ }
|
|
|
+
|
|
|
+ console.log('✅ Picker columns初始化完成:', {
|
|
|
+ genderPickerColumns: this.genderPickerColumns,
|
|
|
+ boardingPickerColumns: this.boardingPickerColumns,
|
|
|
+ collegePickerColumns: this.collegePickerColumns,
|
|
|
+ majorPickerColumns: this.majorPickerColumns,
|
|
|
+ uniformSizePickerColumns: this.uniformSizePickerColumns,
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ // 初始化字典数据
|
|
|
+ async initDictData() {
|
|
|
+ try {
|
|
|
+ // 获取性别字典
|
|
|
+ const genderDict = await getDict('zsjy_gender');
|
|
|
+ if (genderDict && genderDict.length > 0) {
|
|
|
+ // 确保字典数据格式正确
|
|
|
+ this.genderOptions = genderDict.map((item) => ({
|
|
|
+ value: item.dictValue || item.value,
|
|
|
+ label: item.dictLabel || item.label,
|
|
|
+ }));
|
|
|
+ } else {
|
|
|
+ this.genderOptions = [
|
|
|
+ { value: 'M', label: '男' },
|
|
|
+ { value: 'F', label: '女' },
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取是否住宿字典
|
|
|
+ const boardingDict = await getDict('sys_yes_no');
|
|
|
+ if (boardingDict && boardingDict.length > 0) {
|
|
|
+ this.boardingOptions = boardingDict.map((item) => ({
|
|
|
+ value: item.dictValue || item.value,
|
|
|
+ label: item.dictLabel || item.label,
|
|
|
+ }));
|
|
|
+ } else {
|
|
|
+ this.boardingOptions = [
|
|
|
+ { value: 'Y', label: '是' },
|
|
|
+ { value: 'N', label: '否' },
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取校服尺码字典
|
|
|
+ const uniformSizeDict = await getDict('zsjy_uniform_size');
|
|
|
+ if (uniformSizeDict && uniformSizeDict.length > 0) {
|
|
|
+ this.uniformSizeOptions = uniformSizeDict.map((item) => ({
|
|
|
+ value: item.dictValue || item.value,
|
|
|
+ label: item.dictLabel || item.label,
|
|
|
+ }));
|
|
|
+ } else {
|
|
|
+ // 使用与web端一致的标准尺码格式(兜底数据)
|
|
|
+ this.uniformSizeOptions = [
|
|
|
+ { value: '150/84A', label: '150/84A(身高150cm)' },
|
|
|
+ { value: '155/86A', label: '155/86A(身高155cm)' },
|
|
|
+ { value: '160/88A', label: '160/88A(身高160cm)' },
|
|
|
+ { value: '165/90A', label: '165/90A(身高165cm)' },
|
|
|
+ { value: '170/92A', label: '170/92A(身高170cm)' },
|
|
|
+ { value: '175/94A', label: '175/94A(身高175cm)' },
|
|
|
+ { value: '180/96A', label: '180/96A(身高180cm)' },
|
|
|
+ { value: '185/98A', label: '185/98A(身高185cm)' },
|
|
|
+ { value: '190/100A', label: '190/100A(身高190cm)' },
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ console.log('字典数据加载完成:', {
|
|
|
+ gender: this.genderOptions,
|
|
|
+ boarding: this.boardingOptions,
|
|
|
+ uniformSize: this.uniformSizeOptions,
|
|
|
+ });
|
|
|
+
|
|
|
+ // 初始化picker columns数据
|
|
|
+ this.initPickerColumns();
|
|
|
+ } catch (error) {
|
|
|
+ console.error('字典数据加载失败:', error);
|
|
|
+ this.initDefaultDictData();
|
|
|
+ // 即使失败也要初始化picker columns
|
|
|
+ this.initPickerColumns();
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ // 初始化默认字典数据(兜底)
|
|
|
+ initDefaultDictData() {
|
|
|
+ this.genderOptions = [
|
|
|
+ { value: 'M', label: '男' },
|
|
|
+ { value: 'F', label: '女' },
|
|
|
+ ];
|
|
|
+
|
|
|
+ this.boardingOptions = [
|
|
|
+ { value: 'Y', label: '是' },
|
|
|
+ { value: 'N', label: '否' },
|
|
|
+ ];
|
|
|
+
|
|
|
+ this.uniformSizeOptions = [
|
|
|
+ { value: '150/84A', label: '150/84A(身高150cm)' },
|
|
|
+ { value: '155/86A', label: '155/86A(身高155cm)' },
|
|
|
+ { value: '160/88A', label: '160/88A(身高160cm)' },
|
|
|
+ { value: '165/90A', label: '165/90A(身高165cm)' },
|
|
|
+ { value: '170/92A', label: '170/92A(身高170cm)' },
|
|
|
+ { value: '175/94A', label: '175/94A(身高175cm)' },
|
|
|
+ { value: '180/96A', label: '180/96A(身高180cm)' },
|
|
|
+ { value: '185/98A', label: '185/98A(身高185cm)' },
|
|
|
+ { value: '190/100A', label: '190/100A(身高190cm)' },
|
|
|
+ ];
|
|
|
+
|
|
|
+ console.log('✅ 已使用默认字典数据(兜底方案)');
|
|
|
+
|
|
|
+ // 强制更新picker columns
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.initPickerColumns();
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ // 初始化默认学院数据(兜底)
|
|
|
+ initDefaultCollegeData() {
|
|
|
+ this.collegeOptions = [
|
|
|
+ { deptId: 1, deptName: '机械工程学院', deptCategory: 'JX' },
|
|
|
+ { deptId: 2, deptName: '电气工程学院', deptCategory: 'DQ' },
|
|
|
+ { deptId: 3, deptName: '信息工程学院', deptCategory: 'XX' },
|
|
|
+ { deptId: 4, deptName: '经济管理学院', deptCategory: 'JG' },
|
|
|
+ { deptId: 5, deptName: '建筑工程学院', deptCategory: 'JZ' },
|
|
|
+ ];
|
|
|
+
|
|
|
+ this.majorOptions = [
|
|
|
+ { value: 'GYJQR', label: '工业机器人应用与维护', majorCode: 'GYJQR' },
|
|
|
+ { value: 'DQZDHSB', label: '电气自动化设备安装与维修', majorCode: 'DQZDHSB' },
|
|
|
+ { value: 'WRJYY', label: '无人机应用技术', majorCode: 'WRJYY' },
|
|
|
+ { value: 'GYHLW', label: '工业互联网与大数据应用', majorCode: 'GYHLW' },
|
|
|
+ { value: 'SZHSJ', label: '数字化设计与制造', majorCode: 'SZHSJ' },
|
|
|
+ ];
|
|
|
+
|
|
|
+ console.log('✅ 已初始化默认学院和专业数据(兜底方案)');
|
|
|
+ },
|
|
|
+
|
|
|
+ // 加载学院数据
|
|
|
+ async loadCollegeOptions() {
|
|
|
+ try {
|
|
|
+ const response = await getCollegeList();
|
|
|
+ if (response && response.data) {
|
|
|
+ // 适配后端返回的XgSysDeptVo数据结构
|
|
|
+ this.collegeOptions = response.data.map((item) => ({
|
|
|
+ deptId: item.deptId,
|
|
|
+ deptName: item.deptName,
|
|
|
+ deptCategory: item.deptCategory || item.deptId.toString(),
|
|
|
+ }));
|
|
|
+ console.log('学院数据加载成功:', this.collegeOptions);
|
|
|
+ } else {
|
|
|
+ throw new Error('API返回数据为空');
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.error('学院数据加载失败:', error);
|
|
|
+ // 设置兜底学院数据
|
|
|
+ this.collegeOptions = [
|
|
|
+ { deptId: 1, deptName: '机械工程学院', deptCategory: 'JX' },
|
|
|
+ { deptId: 2, deptName: '电气工程学院', deptCategory: 'DQ' },
|
|
|
+ { deptId: 3, deptName: '信息工程学院', deptCategory: 'XX' },
|
|
|
+ { deptId: 4, deptName: '经济管理学院', deptCategory: 'JG' },
|
|
|
+ { deptId: 5, deptName: '建筑工程学院', deptCategory: 'JZ' },
|
|
|
+ ];
|
|
|
+ console.log('✅ 已使用默认学院数据(兜底方案)');
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新学院picker的columns数据
|
|
|
+ this.collegePickerColumns = [this.collegeOptions.map((item) => item.deptName)];
|
|
|
+ console.log('学院picker columns更新完成:', this.collegePickerColumns);
|
|
|
+ },
|
|
|
+
|
|
|
+ // 初始化专业选项
|
|
|
+ async initMajorOptions() {
|
|
|
+ try {
|
|
|
+ // 先尝试从字典获取专业数据
|
|
|
+ const majorDict = await getDict('zsjy_major');
|
|
|
+ if (majorDict && majorDict.length > 0) {
|
|
|
+ this.majorOptions = majorDict.map((item) => ({
|
|
|
+ value: item.value,
|
|
|
+ label: item.label,
|
|
|
+ majorCode: item.value,
|
|
|
+ }));
|
|
|
+ } else {
|
|
|
+ // 使用默认专业选项(兜底)
|
|
|
+ this.majorOptions = [
|
|
|
+ {
|
|
|
+ value: 'DQZDHSB',
|
|
|
+ label: '电气自动化设备安装与维修',
|
|
|
+ majorCode: 'DQZDHSB',
|
|
|
+ },
|
|
|
+ { value: 'GYJQR', label: '工业机器人应用与维护', majorCode: 'GYJQR' },
|
|
|
+ { value: 'WRJYY', label: '无人机应用技术', majorCode: 'WRJYY' },
|
|
|
+ { value: 'GYHLW', label: '工业互联网与大数据应用', majorCode: 'GYHLW' },
|
|
|
+ { value: 'SZHSJ', label: '数字化设计与制造', majorCode: 'SZHSJ' },
|
|
|
+ { value: 'ZNZZ', label: '智能制作技术应用', majorCode: 'ZNZZ' },
|
|
|
+ { value: 'QCWX', label: '汽车维修', majorCode: 'QCWX' },
|
|
|
+ { value: 'CPJC', label: '产品检测与质量控制', majorCode: 'CPJC' },
|
|
|
+ { value: 'ZY', label: '中药', majorCode: 'ZY' },
|
|
|
+ { value: 'YWZJ_YB', label: '药物制剂(预备技师)', majorCode: 'YWZJ_YB' },
|
|
|
+ { value: 'YWZJ_GJ', label: '药物制剂(高级工)', majorCode: 'YWZJ_GJ' },
|
|
|
+ { value: 'YPYX', label: '药品营销', majorCode: 'YPYX' },
|
|
|
+ { value: 'JKFW', label: '健康服务与管理', majorCode: 'JKFW' },
|
|
|
+ { value: 'YLJS_YB', label: '园林技术(预备技师)', majorCode: 'YLJS_YB' },
|
|
|
+ { value: 'YLJS_GJ', label: '园林技术(高级工)', majorCode: 'YLJS_GJ' },
|
|
|
+ {
|
|
|
+ value: 'YLJS_JG',
|
|
|
+ label: '园林技术(园林景观与工程施工)',
|
|
|
+ majorCode: 'YLJS_JG',
|
|
|
+ },
|
|
|
+ { value: 'HJYS', label: '环境艺术设计', majorCode: 'HJYS' },
|
|
|
+ { value: 'JDGL_YB', label: '酒店管理(预备技师)', majorCode: 'JDGL_YB' },
|
|
|
+ { value: 'JDGL_GJ', label: '酒店管理(高级工)', majorCode: 'JDGL_GJ' },
|
|
|
+ { value: 'PR_ZS', label: '烹饪(中式烹调)', majorCode: 'PR_ZS' },
|
|
|
+ { value: 'PR_MD', label: '烹饪(中西式面点)', majorCode: 'PR_MD' },
|
|
|
+ { value: 'DZSW', label: '电子商务', majorCode: 'DZSW' },
|
|
|
+ { value: 'SZMT', label: '数字媒体技术应用', majorCode: 'SZMT' },
|
|
|
+ { value: 'RGZN', label: '人工智能技术应用', majorCode: 'RGZN' },
|
|
|
+ { value: 'WLXX', label: '网络与信息安全', majorCode: 'WLXX' },
|
|
|
+ { value: 'MSSJ', label: '美术设计与制作', majorCode: 'MSSJ' },
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ console.log('专业选项加载完成:', this.majorOptions);
|
|
|
+ } catch (error) {
|
|
|
+ console.error('专业选项加载失败:', error);
|
|
|
+ // 确保有兜底的专业数据
|
|
|
+ if (!this.majorOptions || this.majorOptions.length === 0) {
|
|
|
+ this.majorOptions = [
|
|
|
+ {
|
|
|
+ value: 'DQZDHSB',
|
|
|
+ label: '电气自动化设备安装与维修',
|
|
|
+ majorCode: 'DQZDHSB',
|
|
|
+ collegeId: 2,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'GYJQR',
|
|
|
+ label: '工业机器人应用与维护',
|
|
|
+ majorCode: 'GYJQR',
|
|
|
+ collegeId: 1,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'WRJYY',
|
|
|
+ label: '无人机应用技术',
|
|
|
+ majorCode: 'WRJYY',
|
|
|
+ collegeId: 3,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'GYHLW',
|
|
|
+ label: '工业互联网与大数据应用',
|
|
|
+ majorCode: 'GYHLW',
|
|
|
+ collegeId: 3,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'SZHSJ',
|
|
|
+ label: '数字化设计与制造',
|
|
|
+ majorCode: 'SZHSJ',
|
|
|
+ collegeId: 1,
|
|
|
+ },
|
|
|
+ ];
|
|
|
+ console.log('✅ 已使用默认专业数据(兜底方案)');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ // 身份证号变化处理
|
|
|
+ onIdCardChange() {
|
|
|
+ const idCard = this.formData.idCard;
|
|
|
+ console.log('身份证号变化:', idCard);
|
|
|
+ if (idCard && idCard.length === 18) {
|
|
|
+ try {
|
|
|
+ // 提取出生日期
|
|
|
+ const year = idCard.substring(6, 10);
|
|
|
+ const month = idCard.substring(10, 12);
|
|
|
+ const day = idCard.substring(12, 14);
|
|
|
+ this.formData.birthDate = `${year}-${month}-${day}`;
|
|
|
+
|
|
|
+ // 更新出生日期显示值
|
|
|
+ this.birthDateValue = new Date(`${year}-${month}-${day}`).getTime();
|
|
|
+
|
|
|
+ // 提取性别(奇数为男,偶数为女)
|
|
|
+ const genderCode = parseInt(idCard.substring(16, 17));
|
|
|
+ const genderValue = genderCode % 2 === 1 ? 'M' : 'F';
|
|
|
+
|
|
|
+ // 更新性别选择
|
|
|
+ console.log('查找性别选项:', {
|
|
|
+ genderValue,
|
|
|
+ genderOptions: this.genderOptions,
|
|
|
+ genderOptionsLength: this.genderOptions.length,
|
|
|
+ });
|
|
|
+
|
|
|
+ // 确保性别选项已经初始化
|
|
|
+ if (this.genderOptions.length === 0) {
|
|
|
+ console.warn('性别选项未初始化,使用默认选项');
|
|
|
+ this.genderOptions = [
|
|
|
+ { value: 'M', label: '男' },
|
|
|
+ { value: 'F', label: '女' },
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ const genderIndex = this.genderOptions.findIndex(
|
|
|
+ (item) => item.value === genderValue,
|
|
|
+ );
|
|
|
+ console.log('找到性别索引:', genderIndex);
|
|
|
+ if (genderIndex !== -1) {
|
|
|
+ this.genderIndex = genderIndex;
|
|
|
+ this.formData.gender = genderValue;
|
|
|
+ this.genderText = this.genderOptions[genderIndex].label;
|
|
|
+ console.log('性别更新成功:', {
|
|
|
+ genderIndex,
|
|
|
+ gender: genderValue,
|
|
|
+ genderText: this.genderText,
|
|
|
+ });
|
|
|
+
|
|
|
+ // 强制更新视图
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$forceUpdate();
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ console.warn(
|
|
|
+ '未找到匹配的性别选项:',
|
|
|
+ genderValue,
|
|
|
+ '可用选项:',
|
|
|
+ this.genderOptions,
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ console.log('身份证信息解析成功:', {
|
|
|
+ birthDate: this.formData.birthDate,
|
|
|
+ gender: this.formData.gender,
|
|
|
+ genderText: this.genderText,
|
|
|
+ birthDateValue: this.birthDateValue,
|
|
|
+ genderIndex: this.genderIndex,
|
|
|
+ });
|
|
|
+
|
|
|
+ // 强制更新视图
|
|
|
+ this.$forceUpdate();
|
|
|
+ } catch (error) {
|
|
|
+ console.error('解析身份证信息时出错:', error);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ // 显示性别选择器
|
|
|
+ showGenderPicker() {
|
|
|
+ this.genderPickerShow = true;
|
|
|
+ console.log('显示性别选择器');
|
|
|
+ },
|
|
|
+
|
|
|
+ // 显示出生日期选择器
|
|
|
+ showBirthDatePicker() {
|
|
|
+ this.birthDatePickerShow = true;
|
|
|
+ console.log('显示出生日期选择器');
|
|
|
+ },
|
|
|
+
|
|
|
+ // 性别选择确认
|
|
|
+ onGenderConfirm(e) {
|
|
|
+ console.log('性别选择确认:', e);
|
|
|
+ const { indexs, value } = e;
|
|
|
+ if (indexs && indexs.length > 0) {
|
|
|
+ const index = indexs[0];
|
|
|
+ if (this.genderOptions[index]) {
|
|
|
+ this.formData.gender = this.genderOptions[index].value;
|
|
|
+ this.genderText = this.genderOptions[index].label;
|
|
|
+ console.log('性别选择成功:', {
|
|
|
+ gender: this.formData.gender,
|
|
|
+ genderText: this.genderText,
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.genderPickerShow = false;
|
|
|
+ },
|
|
|
+
|
|
|
+ // 出生日期变化
|
|
|
+ onBirthDateChange(e) {
|
|
|
+ this.birthDateValue = e.value;
|
|
|
+ this.formData.birthDate = this.formatDate(new Date(e.value));
|
|
|
+ },
|
|
|
+
|
|
|
+ // 出生日期确认
|
|
|
+ onBirthDateConfirm(e) {
|
|
|
+ console.log('出生日期选择确认:', e);
|
|
|
+ this.birthDateValue = e.value;
|
|
|
+ this.formData.birthDate = this.formatDate(new Date(e.value));
|
|
|
+ this.birthDatePickerShow = false;
|
|
|
+ console.log('出生日期选择成功:', {
|
|
|
+ birthDateValue: this.birthDateValue,
|
|
|
+ birthDate: this.formData.birthDate,
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ // 显示住宿选择器
|
|
|
+ showBoardingPicker() {
|
|
|
+ console.log('🔥 showBoardingPicker 被调用了!');
|
|
|
+ console.log('准备显示住宿选择器', {
|
|
|
+ boardingOptions: this.boardingOptions,
|
|
|
+ boardingPickerColumns: this.boardingPickerColumns,
|
|
|
+ boardingPickerShow: this.boardingPickerShow,
|
|
|
+ });
|
|
|
+
|
|
|
+ // 如果住宿选项为空,先使用默认数据
|
|
|
+ if (!this.boardingOptions || this.boardingOptions.length === 0) {
|
|
|
+ console.log('住宿选项为空,使用默认数据');
|
|
|
+ this.boardingOptions = [
|
|
|
+ { value: 'Y', label: '是' },
|
|
|
+ { value: 'N', label: '否' },
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 确保picker数据存在
|
|
|
+ if (!this.boardingPickerColumns || this.boardingPickerColumns.length === 0) {
|
|
|
+ console.log('住宿选择器数据未初始化,正在初始化...');
|
|
|
+ this.initPickerColumns();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 再次检查数据是否正确
|
|
|
+ console.log('最终的picker数据:', {
|
|
|
+ boardingPickerColumns: this.boardingPickerColumns,
|
|
|
+ columnsLength: this.boardingPickerColumns?.length,
|
|
|
+ firstColumn: this.boardingPickerColumns?.[0],
|
|
|
+ });
|
|
|
+
|
|
|
+ this.boardingPickerShow = true;
|
|
|
+ console.log('✅ 住宿选择器显示状态已设置为 true');
|
|
|
+
|
|
|
+ // 使用 $nextTick 确保视图更新
|
|
|
+ this.$nextTick(() => {
|
|
|
+ console.log('视图更新后的 boardingPickerShow:', this.boardingPickerShow);
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ // 住宿选择确认
|
|
|
+ onBoardingConfirm(e) {
|
|
|
+ console.log('住宿选择确认:', e);
|
|
|
+ const { indexs, value } = e;
|
|
|
+ if (indexs && indexs.length > 0) {
|
|
|
+ const index = indexs[0];
|
|
|
+ if (this.boardingOptions[index]) {
|
|
|
+ this.formData.isBoarding = this.boardingOptions[index].value;
|
|
|
+ this.boardingText = this.boardingOptions[index].label;
|
|
|
+ console.log('住宿选择成功:', {
|
|
|
+ isBoarding: this.formData.isBoarding,
|
|
|
+ boardingText: this.boardingText,
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.boardingPickerShow = false;
|
|
|
+ },
|
|
|
+
|
|
|
+ // 显示学院选择器
|
|
|
+ showCollegePicker() {
|
|
|
+ console.log('🎓 showCollegePicker 被调用了!');
|
|
|
+
|
|
|
+ // 如果学院选项为空,先确保数据存在
|
|
|
+ if (!this.collegeOptions || this.collegeOptions.length === 0) {
|
|
|
+ console.log('学院选项为空,尝试重新加载...');
|
|
|
+ this.loadCollegeOptions().then(() => {
|
|
|
+ this.collegePickerShow = true;
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ // 确保picker数据存在并重新初始化
|
|
|
+ if (!this.collegePickerColumns || this.collegePickerColumns.length === 0) {
|
|
|
+ this.initPickerColumns();
|
|
|
+ }
|
|
|
+
|
|
|
+ this.collegePickerShow = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ console.log('学院选择器状态:', {
|
|
|
+ collegePickerShow: this.collegePickerShow,
|
|
|
+ collegeOptions: this.collegeOptions.length,
|
|
|
+ collegePickerColumns: this.collegePickerColumns,
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ // 学院选择确认
|
|
|
+ onCollegeConfirm(e) {
|
|
|
+ console.log('学院选择确认:', e);
|
|
|
+ const { indexs, value } = e;
|
|
|
+ if (indexs && indexs.length > 0) {
|
|
|
+ const index = indexs[0];
|
|
|
+ if (this.collegeOptions[index]) {
|
|
|
+ const college = this.collegeOptions[index];
|
|
|
+ this.formData.collegeName = college.deptName;
|
|
|
+ this.formData.collegeId = college.deptCategory || college.deptId;
|
|
|
+ this.collegeText = college.deptName;
|
|
|
+
|
|
|
+ console.log('学院选择成功:', {
|
|
|
+ collegeName: this.formData.collegeName,
|
|
|
+ collegeId: this.formData.collegeId,
|
|
|
+ collegeText: this.collegeText,
|
|
|
+ });
|
|
|
+
|
|
|
+ // 根据学院加载对应的专业
|
|
|
+ this.loadMajorsByCollegeId(college.deptId);
|
|
|
+
|
|
|
+ // 清空专业选择
|
|
|
+ this.formData.appliedMajor = '';
|
|
|
+ this.formData.majorCode = '';
|
|
|
+ this.majorText = '';
|
|
|
+ this.majorIndex = null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.collegePickerShow = false;
|
|
|
+ },
|
|
|
+
|
|
|
+ // 根据学院ID加载专业
|
|
|
+ async loadMajorsByCollegeId(collegeId) {
|
|
|
+ try {
|
|
|
+ console.log('🔄 开始加载学院专业数据, collegeId:', collegeId);
|
|
|
+
|
|
|
+ const response = await getMajorsByCollegeId(collegeId);
|
|
|
+ if (response && response.data && response.data.length > 0) {
|
|
|
+ // 适配后端返回的XgSysDeptVo数据结构
|
|
|
+ this.majorOptions = response.data.map((major) => ({
|
|
|
+ value: major.deptId,
|
|
|
+ label: major.deptName,
|
|
|
+ majorCode: major.deptCategory || major.deptId.toString(),
|
|
|
+ deptId: major.deptId,
|
|
|
+ deptName: major.deptName,
|
|
|
+ deptCategory: major.deptCategory,
|
|
|
+ }));
|
|
|
+ console.log('✅ 专业数据加载成功:', this.majorOptions);
|
|
|
+ } else {
|
|
|
+ console.log('⚠️ 后端未返回专业数据,使用兜底数据');
|
|
|
+ this.majorOptions = [];
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.error('❌ 专业数据加载失败:', error);
|
|
|
+ this.majorOptions = [];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果API加载失败或无数据,使用兜底专业数据
|
|
|
+ if (!this.majorOptions || this.majorOptions.length === 0) {
|
|
|
+ const defaultMajors = this.getDefaultMajorsByCollegeId(collegeId);
|
|
|
+ this.majorOptions = defaultMajors;
|
|
|
+ console.log('✅ 已使用默认专业数据(兜底方案):', defaultMajors);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新专业picker的columns数据
|
|
|
+ this.majorPickerColumns = [this.majorOptions.map((item) => item.label)];
|
|
|
+ console.log('✅ 专业picker columns更新完成:', {
|
|
|
+ majorOptions: this.majorOptions.length,
|
|
|
+ majorPickerColumns: this.majorPickerColumns,
|
|
|
+ });
|
|
|
+
|
|
|
+ // 强制更新视图以确保数据显示
|
|
|
+ this.$forceUpdate();
|
|
|
+ },
|
|
|
+
|
|
|
+ // 根据学院ID获取默认专业数据
|
|
|
+ getDefaultMajorsByCollegeId(collegeId) {
|
|
|
+ const majorsByCollege = {
|
|
|
+ 1: [
|
|
|
+ // 机械工程学院
|
|
|
+ { value: 'GYJQR', label: '工业机器人应用与维护', majorCode: 'GYJQR' },
|
|
|
+ { value: 'SZHSJ', label: '数字化设计与制造', majorCode: 'SZHSJ' },
|
|
|
+ { value: 'QCWX', label: '汽车维修', majorCode: 'QCWX' },
|
|
|
+ ],
|
|
|
+ 2: [
|
|
|
+ // 电气工程学院
|
|
|
+ { value: 'DQZDHSB', label: '电气自动化设备安装与维修', majorCode: 'DQZDHSB' },
|
|
|
+ { value: 'ZNZZ', label: '智能制作技术应用', majorCode: 'ZNZZ' },
|
|
|
+ ],
|
|
|
+ 3: [
|
|
|
+ // 信息工程学院
|
|
|
+ { value: 'WRJYY', label: '无人机应用技术', majorCode: 'WRJYY' },
|
|
|
+ { value: 'GYHLW', label: '工业互联网与大数据应用', majorCode: 'GYHLW' },
|
|
|
+ { value: 'RGZN', label: '人工智能技术应用', majorCode: 'RGZN' },
|
|
|
+ ],
|
|
|
+ 4: [
|
|
|
+ // 经济管理学院
|
|
|
+ { value: 'DZSW', label: '电子商务', majorCode: 'DZSW' },
|
|
|
+ { value: 'JDGL_GJ', label: '酒店管理(高级工)', majorCode: 'JDGL_GJ' },
|
|
|
+ ],
|
|
|
+ 5: [
|
|
|
+ // 建筑工程学院
|
|
|
+ { value: 'YLJS_GJ', label: '园林技术(高级工)', majorCode: 'YLJS_GJ' },
|
|
|
+ { value: 'HJYS', label: '环境艺术设计', majorCode: 'HJYS' },
|
|
|
+ ],
|
|
|
+ };
|
|
|
+
|
|
|
+ return majorsByCollege[collegeId] || [];
|
|
|
+ },
|
|
|
+
|
|
|
+ // 显示专业选择器
|
|
|
+ showMajorPicker() {
|
|
|
+ console.log('🎓 showMajorPicker 被调用了!');
|
|
|
+
|
|
|
+ // 检查是否已选择学院
|
|
|
+ if (!this.formData.collegeId || !this.formData.collegeName) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请先选择所属学院',
|
|
|
+ icon: 'none',
|
|
|
+ duration: 2000,
|
|
|
+ });
|
|
|
+ console.log('❌ 未选择学院,无法选择专业');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 检查专业数据是否存在
|
|
|
+ if (!this.majorOptions || this.majorOptions.length === 0) {
|
|
|
+ console.log('专业选项为空,尝试重新加载...');
|
|
|
+ // 根据当前选择的学院重新加载专业数据
|
|
|
+ const collegeOption = this.collegeOptions.find(
|
|
|
+ (c) => c.deptName === this.formData.collegeName,
|
|
|
+ );
|
|
|
+ if (collegeOption) {
|
|
|
+ this.loadMajorsByCollegeId(collegeOption.deptId).then(() => {
|
|
|
+ if (this.majorOptions.length > 0) {
|
|
|
+ this.majorPickerShow = true;
|
|
|
+ } else {
|
|
|
+ uni.showToast({
|
|
|
+ title: '该学院暂无可选专业',
|
|
|
+ icon: 'none',
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ uni.showToast({
|
|
|
+ title: '学院信息异常,请重新选择学院',
|
|
|
+ icon: 'none',
|
|
|
+ });
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 确保picker数据存在并重新初始化
|
|
|
+ if (!this.majorPickerColumns || this.majorPickerColumns.length === 0) {
|
|
|
+ this.majorPickerColumns = [this.majorOptions.map((item) => item.label)];
|
|
|
+ }
|
|
|
+
|
|
|
+ this.majorPickerShow = true;
|
|
|
+
|
|
|
+ console.log('专业选择器状态:', {
|
|
|
+ majorPickerShow: this.majorPickerShow,
|
|
|
+ majorOptions: this.majorOptions.length,
|
|
|
+ majorPickerColumns: this.majorPickerColumns,
|
|
|
+ currentCollege: this.formData.collegeName,
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ // 专业选择确认
|
|
|
+ onMajorConfirm(e) {
|
|
|
+ console.log('🎓 专业选择确认:', e);
|
|
|
+ const { indexs, value } = e;
|
|
|
+
|
|
|
+ if (indexs && indexs.length > 0) {
|
|
|
+ const index = indexs[0];
|
|
|
+
|
|
|
+ if (this.majorOptions && this.majorOptions[index]) {
|
|
|
+ const selectedMajor = this.majorOptions[index];
|
|
|
+
|
|
|
+ // 更新表单数据
|
|
|
+ this.formData.appliedMajor = selectedMajor.label;
|
|
|
+ this.formData.majorCode = selectedMajor.majorCode;
|
|
|
+ this.majorText = selectedMajor.label;
|
|
|
+
|
|
|
+ console.log('✅ 专业选择成功:', {
|
|
|
+ index: index,
|
|
|
+ selectedMajor: selectedMajor,
|
|
|
+ appliedMajor: this.formData.appliedMajor,
|
|
|
+ majorCode: this.formData.majorCode,
|
|
|
+ majorText: this.majorText,
|
|
|
+ });
|
|
|
+
|
|
|
+ // 显示选择成功提示
|
|
|
+ uni.showToast({
|
|
|
+ title: `已选择: ${selectedMajor.label}`,
|
|
|
+ icon: 'success',
|
|
|
+ duration: 1500,
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ console.error('❌ 专业选择失败: 找不到对应的专业选项', {
|
|
|
+ index: index,
|
|
|
+ majorOptionsLength: this.majorOptions ? this.majorOptions.length : 0,
|
|
|
+ });
|
|
|
+
|
|
|
+ uni.showToast({
|
|
|
+ title: '专业选择失败,请重试',
|
|
|
+ icon: 'none',
|
|
|
+ });
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ console.error('❌ 专业选择失败: 未获取到有效的索引', e);
|
|
|
+ }
|
|
|
+
|
|
|
+ this.majorPickerShow = false;
|
|
|
+ },
|
|
|
+
|
|
|
+ // 显示校服尺码选择器
|
|
|
+ showUniformSizePicker() {
|
|
|
+ console.log('👕 showUniformSizePicker 被调用了!');
|
|
|
+
|
|
|
+ // 检查校服尺码数据是否存在
|
|
|
+ if (!this.uniformSizeOptions || this.uniformSizeOptions.length === 0) {
|
|
|
+ console.log('⚠️ 校服尺码选项为空,尝试重新初始化...');
|
|
|
+
|
|
|
+ // 使用与web端一致的标准尺码数据
|
|
|
+ this.uniformSizeOptions = [
|
|
|
+ { value: '150/84A', label: '150/84A(身高150cm)' },
|
|
|
+ { value: '155/86A', label: '155/86A(身高155cm)' },
|
|
|
+ { value: '160/88A', label: '160/88A(身高160cm)' },
|
|
|
+ { value: '165/90A', label: '165/90A(身高165cm)' },
|
|
|
+ { value: '170/92A', label: '170/92A(身高170cm)' },
|
|
|
+ { value: '175/94A', label: '175/94A(身高175cm)' },
|
|
|
+ { value: '180/96A', label: '180/96A(身高180cm)' },
|
|
|
+ { value: '185/98A', label: '185/98A(身高185cm)' },
|
|
|
+ { value: '190/100A', label: '190/100A(身高190cm)' },
|
|
|
+ ];
|
|
|
+
|
|
|
+ console.log('✅ 已使用默认校服尺码数据:', this.uniformSizeOptions);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 确保picker数据存在并重新初始化
|
|
|
+ if (!this.uniformSizePickerColumns || this.uniformSizePickerColumns.length === 0) {
|
|
|
+ this.uniformSizePickerColumns = [this.uniformSizeOptions.map((item) => item.label)];
|
|
|
+ }
|
|
|
+
|
|
|
+ this.uniformSizePickerShow = true;
|
|
|
+
|
|
|
+ console.log('校服尺码选择器状态:', {
|
|
|
+ uniformSizePickerShow: this.uniformSizePickerShow,
|
|
|
+ uniformSizeOptions: this.uniformSizeOptions.length,
|
|
|
+ uniformSizePickerColumns: this.uniformSizePickerColumns,
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ // 校服尺码选择确认
|
|
|
+ onUniformSizeConfirm(e) {
|
|
|
+ console.log('👕 校服尺码选择确认:', e);
|
|
|
+ const { indexs, value } = e;
|
|
|
+
|
|
|
+ if (indexs && indexs.length > 0) {
|
|
|
+ const index = indexs[0];
|
|
|
+
|
|
|
+ if (this.uniformSizeOptions && this.uniformSizeOptions[index]) {
|
|
|
+ const selectedSize = this.uniformSizeOptions[index];
|
|
|
+
|
|
|
+ // 更新表单数据
|
|
|
+ this.formData.uniformSize = selectedSize.value;
|
|
|
+ this.uniformSizeText = selectedSize.label;
|
|
|
+
|
|
|
+ console.log('✅ 校服尺码选择成功:', {
|
|
|
+ index: index,
|
|
|
+ selectedSize: selectedSize,
|
|
|
+ uniformSize: this.formData.uniformSize,
|
|
|
+ uniformSizeText: this.uniformSizeText,
|
|
|
+ });
|
|
|
+
|
|
|
+ // 显示选择成功提示
|
|
|
+ uni.showToast({
|
|
|
+ title: `已选择尺码: ${selectedSize.label}`,
|
|
|
+ icon: 'success',
|
|
|
+ duration: 1500,
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ console.error('❌ 校服尺码选择失败: 找不到对应的尺码选项', {
|
|
|
+ index: index,
|
|
|
+ uniformSizeOptionsLength: this.uniformSizeOptions
|
|
|
+ ? this.uniformSizeOptions.length
|
|
|
+ : 0,
|
|
|
+ });
|
|
|
+
|
|
|
+ uni.showToast({
|
|
|
+ title: '尺码选择失败,请重试',
|
|
|
+ icon: 'none',
|
|
|
+ });
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ console.error('❌ 校服尺码选择失败: 未获取到有效的索引', e);
|
|
|
+ }
|
|
|
+
|
|
|
+ this.uniformSizePickerShow = false;
|
|
|
+ },
|
|
|
+
|
|
|
+ // 提交报名申请
|
|
|
+ async submitApplication() {
|
|
|
+ try {
|
|
|
+ // 表单验证
|
|
|
+ const valid = await this.$refs.enrollmentForm.validate();
|
|
|
+ if (!valid) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ this.submitLoading = true;
|
|
|
+
|
|
|
+ // 处理是否住宿字段,将"Y"/"N"转换为1/0
|
|
|
+ const submitData = { ...this.formData };
|
|
|
+ if (submitData.isBoarding === 'Y') {
|
|
|
+ submitData.isBoarding = 1;
|
|
|
+ } else if (submitData.isBoarding === 'N') {
|
|
|
+ submitData.isBoarding = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 调用提交接口
|
|
|
+ const response = await request({
|
|
|
+ url: '/zsjy/enrollment/info/submit',
|
|
|
+ method: 'POST',
|
|
|
+ data: submitData,
|
|
|
+ header: {
|
|
|
+ isToken: false, // 不需要登录token
|
|
|
+ },
|
|
|
+ });
|
|
|
+
|
|
|
+ uni.showToast({
|
|
|
+ title: '报名申请提交成功!',
|
|
|
+ icon: 'success',
|
|
|
+ });
|
|
|
+
|
|
|
+ // 重置表单
|
|
|
+ this.resetForm();
|
|
|
+ } catch (error) {
|
|
|
+ console.error('提交失败:', error);
|
|
|
+ uni.showToast({
|
|
|
+ title: error.msg || '提交失败,请稍后重试',
|
|
|
+ icon: 'none',
|
|
|
+ });
|
|
|
+ } finally {
|
|
|
+ this.submitLoading = false;
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
// 重置表单
|
|
|
- this.resetForm()
|
|
|
-
|
|
|
- } catch (error) {
|
|
|
- console.error('提交失败:', error)
|
|
|
- uni.showToast({
|
|
|
- title: error.msg || '提交失败,请稍后重试',
|
|
|
- icon: 'none'
|
|
|
- })
|
|
|
- } finally {
|
|
|
- this.submitLoading = false
|
|
|
- }
|
|
|
- },
|
|
|
-
|
|
|
- // 重置表单
|
|
|
- resetForm() {
|
|
|
- // 重置表单数据
|
|
|
- this.formData = {
|
|
|
- name: '',
|
|
|
- idCard: '',
|
|
|
- gender: '',
|
|
|
- birthDate: '',
|
|
|
- phone1: '',
|
|
|
- phone2: '',
|
|
|
- nation: '',
|
|
|
- isBoarding: '',
|
|
|
- healthStatus: '',
|
|
|
- homeAddress: '',
|
|
|
- middleSchool: '',
|
|
|
- examNumber: '',
|
|
|
- examRegion: '',
|
|
|
- totalScoreFull: null,
|
|
|
- totalScore: null,
|
|
|
- chineseScore: null,
|
|
|
- mathScore: null,
|
|
|
- englishScore: null,
|
|
|
- scienceScore: null,
|
|
|
- socialScore: null,
|
|
|
- peScore: null,
|
|
|
- collegeName: '',
|
|
|
- collegeId: '',
|
|
|
- appliedMajor: '',
|
|
|
- majorCode: '',
|
|
|
- uniformSize: '',
|
|
|
- specialties: '',
|
|
|
- awards: ''
|
|
|
- }
|
|
|
-
|
|
|
- // 重置选择器
|
|
|
- this.genderIndex = null
|
|
|
- this.boardingIndex = null
|
|
|
- this.collegeIndex = null
|
|
|
- this.majorIndex = null
|
|
|
- this.uniformSizeIndex = null
|
|
|
-
|
|
|
- // 重置显示文本
|
|
|
- this.genderText = ''
|
|
|
- this.boardingText = ''
|
|
|
- this.collegeText = ''
|
|
|
- this.majorText = ''
|
|
|
- this.uniformSizeText = ''
|
|
|
-
|
|
|
- // 重置表单验证
|
|
|
- this.$refs.enrollmentForm.resetFields()
|
|
|
- },
|
|
|
-
|
|
|
- // 查询报名状态
|
|
|
- async queryStatus() {
|
|
|
- if (!this.queryData.idCard && !this.queryData.examNumber) {
|
|
|
- uni.showToast({
|
|
|
- title: '请输入身份证号或准考证号',
|
|
|
- icon: 'none'
|
|
|
- })
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- try {
|
|
|
- this.queryLoading = true
|
|
|
-
|
|
|
- const response = await request({
|
|
|
- url: '/zsjy/enrollment/info/myStatus',
|
|
|
- method: 'GET',
|
|
|
- params: {
|
|
|
- idCard: this.queryData.idCard,
|
|
|
- examNumber: this.queryData.examNumber
|
|
|
- },
|
|
|
- header: {
|
|
|
- isToken: false // 不需要登录token
|
|
|
- }
|
|
|
- })
|
|
|
-
|
|
|
- if (response.data) {
|
|
|
- this.statusInfo = response.data
|
|
|
- this.statusPopup.show = true
|
|
|
- } else {
|
|
|
- uni.showToast({
|
|
|
- title: '未找到相关报名信息',
|
|
|
- icon: 'none'
|
|
|
- })
|
|
|
- }
|
|
|
-
|
|
|
- } catch (error) {
|
|
|
- console.error('查询失败:', error)
|
|
|
- uni.showToast({
|
|
|
- title: error.msg || '查询失败,请稍后重试',
|
|
|
- icon: 'none'
|
|
|
- })
|
|
|
- } finally {
|
|
|
- this.queryLoading = false
|
|
|
- }
|
|
|
- },
|
|
|
-
|
|
|
- // 格式化日期
|
|
|
- formatDate(date) {
|
|
|
- if (!date) return ''
|
|
|
- const year = date.getFullYear()
|
|
|
- const month = String(date.getMonth() + 1).padStart(2, '0')
|
|
|
- const day = String(date.getDate()).padStart(2, '0')
|
|
|
- return `${year}-${month}-${day}`
|
|
|
+ resetForm() {
|
|
|
+ // 重置表单数据
|
|
|
+ this.formData = {
|
|
|
+ name: '',
|
|
|
+ idCard: '',
|
|
|
+ gender: '',
|
|
|
+ birthDate: '',
|
|
|
+ phone1: '',
|
|
|
+ phone2: '',
|
|
|
+ nation: '',
|
|
|
+ isBoarding: '',
|
|
|
+ healthStatus: '',
|
|
|
+ homeAddress: '',
|
|
|
+ middleSchool: '',
|
|
|
+ examNumber: '',
|
|
|
+ examRegion: '',
|
|
|
+ totalScoreFull: null,
|
|
|
+ totalScore: null,
|
|
|
+ chineseScore: null,
|
|
|
+ mathScore: null,
|
|
|
+ englishScore: null,
|
|
|
+ scienceScore: null,
|
|
|
+ socialScore: null,
|
|
|
+ peScore: null,
|
|
|
+ collegeName: '',
|
|
|
+ collegeId: '',
|
|
|
+ appliedMajor: '',
|
|
|
+ majorCode: '',
|
|
|
+ uniformSize: '',
|
|
|
+ specialties: '',
|
|
|
+ awards: '',
|
|
|
+ };
|
|
|
+
|
|
|
+ // 重置选择器
|
|
|
+ this.genderIndex = null;
|
|
|
+ this.boardingIndex = null;
|
|
|
+ this.collegeIndex = null;
|
|
|
+ this.majorIndex = null;
|
|
|
+ this.uniformSizeIndex = null;
|
|
|
+
|
|
|
+ // 重置显示文本
|
|
|
+ this.genderText = '';
|
|
|
+ this.boardingText = '';
|
|
|
+ this.collegeText = '';
|
|
|
+ this.majorText = '';
|
|
|
+ this.uniformSizeText = '';
|
|
|
+
|
|
|
+ // 重置表单验证
|
|
|
+ this.$refs.enrollmentForm.resetFields();
|
|
|
+ },
|
|
|
+
|
|
|
+ // 查询报名状态
|
|
|
+ async queryStatus() {
|
|
|
+ if (!this.queryData.idCard && !this.queryData.examNumber) {
|
|
|
+ uni.showToast({
|
|
|
+ title: '请输入身份证号或准考证号',
|
|
|
+ icon: 'none',
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ this.queryLoading = true;
|
|
|
+
|
|
|
+ const response = await request({
|
|
|
+ url: '/zsjy/enrollment/info/myStatus',
|
|
|
+ method: 'GET',
|
|
|
+ params: {
|
|
|
+ idCard: this.queryData.idCard,
|
|
|
+ examNumber: this.queryData.examNumber,
|
|
|
+ },
|
|
|
+ header: {
|
|
|
+ isToken: false, // 不需要登录token
|
|
|
+ },
|
|
|
+ });
|
|
|
+
|
|
|
+ if (response.data) {
|
|
|
+ this.statusInfo = response.data;
|
|
|
+ this.statusPopup.show = true;
|
|
|
+ } else {
|
|
|
+ uni.showToast({
|
|
|
+ title: '未找到相关报名信息',
|
|
|
+ icon: 'none',
|
|
|
+ });
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.error('查询失败:', error);
|
|
|
+ uni.showToast({
|
|
|
+ title: error.msg || '查询失败,请稍后重试',
|
|
|
+ icon: 'none',
|
|
|
+ });
|
|
|
+ } finally {
|
|
|
+ this.queryLoading = false;
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ // 格式化日期
|
|
|
+ formatDate(date) {
|
|
|
+ if (!date) return '';
|
|
|
+ const year = date.getFullYear();
|
|
|
+ const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
|
+ const day = String(date.getDate()).padStart(2, '0');
|
|
|
+ return `${year}-${month}-${day}`;
|
|
|
+ },
|
|
|
+
|
|
|
+ // 格式化时间
|
|
|
+ formatTime(time) {
|
|
|
+ if (!time) return '-';
|
|
|
+ const date = new Date(time);
|
|
|
+ return (
|
|
|
+ this.formatDate(date) +
|
|
|
+ ' ' +
|
|
|
+ String(date.getHours()).padStart(2, '0') +
|
|
|
+ ':' +
|
|
|
+ String(date.getMinutes()).padStart(2, '0') +
|
|
|
+ ':' +
|
|
|
+ String(date.getSeconds()).padStart(2, '0')
|
|
|
+ );
|
|
|
+ },
|
|
|
},
|
|
|
-
|
|
|
- // 格式化时间
|
|
|
- formatTime(time) {
|
|
|
- if (!time) return '-'
|
|
|
- const date = new Date(time)
|
|
|
- return this.formatDate(date) + ' ' +
|
|
|
- String(date.getHours()).padStart(2, '0') + ':' +
|
|
|
- String(date.getMinutes()).padStart(2, '0') + ':' +
|
|
|
- String(date.getSeconds()).padStart(2, '0')
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
+};
|
|
|
</script>
|
|
|
|
|
|
<style scoped>
|
|
|
.enrollment-container {
|
|
|
- background-color: #f8f9fa;
|
|
|
- min-height: 100vh;
|
|
|
+ background-color: #f8f9fa;
|
|
|
+ min-height: 100vh;
|
|
|
}
|
|
|
|
|
|
.page-header {
|
|
|
- background: linear-gradient(135deg, #3c9cff 0%, #5ac725 100%);
|
|
|
- padding: 40rpx 30rpx;
|
|
|
- text-align: center;
|
|
|
- color: white;
|
|
|
+ background: linear-gradient(135deg, #3c9cff 0%, #5ac725 100%);
|
|
|
+ padding: 40rpx 30rpx;
|
|
|
+ text-align: center;
|
|
|
+ color: white;
|
|
|
}
|
|
|
|
|
|
.header-title {
|
|
|
- font-size: 48rpx;
|
|
|
- font-weight: bold;
|
|
|
- margin-bottom: 20rpx;
|
|
|
+ font-size: 48rpx;
|
|
|
+ font-weight: bold;
|
|
|
+ margin-bottom: 20rpx;
|
|
|
}
|
|
|
|
|
|
.header-desc {
|
|
|
- font-size: 28rpx;
|
|
|
- opacity: 0.9;
|
|
|
+ font-size: 28rpx;
|
|
|
+ opacity: 0.9;
|
|
|
}
|
|
|
|
|
|
.required {
|
|
|
- color: #ff6b6b;
|
|
|
- font-weight: bold;
|
|
|
+ color: #ff6b6b;
|
|
|
+ font-weight: bold;
|
|
|
}
|
|
|
|
|
|
.form-container {
|
|
|
- padding: 30rpx;
|
|
|
+ padding: 30rpx;
|
|
|
}
|
|
|
|
|
|
.form-section {
|
|
|
- background: white;
|
|
|
- border-radius: 16rpx;
|
|
|
- padding: 30rpx;
|
|
|
- margin-bottom: 30rpx;
|
|
|
- box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.05);
|
|
|
+ background: white;
|
|
|
+ border-radius: 16rpx;
|
|
|
+ padding: 30rpx;
|
|
|
+ margin-bottom: 30rpx;
|
|
|
+ box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.05);
|
|
|
}
|
|
|
|
|
|
.section-title {
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- margin-bottom: 30rpx;
|
|
|
- padding-bottom: 20rpx;
|
|
|
- border-bottom: 2rpx solid #f0f0f0;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ margin-bottom: 30rpx;
|
|
|
+ padding-bottom: 20rpx;
|
|
|
+ border-bottom: 2rpx solid #f0f0f0;
|
|
|
}
|
|
|
|
|
|
.title-text {
|
|
|
- margin-left: 16rpx;
|
|
|
- font-size: 32rpx;
|
|
|
- font-weight: bold;
|
|
|
- color: #333;
|
|
|
+ margin-left: 16rpx;
|
|
|
+ font-size: 32rpx;
|
|
|
+ font-weight: bold;
|
|
|
+ color: #333;
|
|
|
}
|
|
|
|
|
|
.action-buttons {
|
|
|
- padding: 30rpx;
|
|
|
- background: white;
|
|
|
- margin-top: 30rpx;
|
|
|
+ padding: 30rpx;
|
|
|
+ background: white;
|
|
|
+ margin-top: 30rpx;
|
|
|
}
|
|
|
|
|
|
.query-card {
|
|
|
- background: white;
|
|
|
- border-radius: 16rpx;
|
|
|
- margin: 30rpx;
|
|
|
- padding: 30rpx;
|
|
|
- box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.05);
|
|
|
+ background: white;
|
|
|
+ border-radius: 16rpx;
|
|
|
+ margin: 30rpx;
|
|
|
+ padding: 30rpx;
|
|
|
+ box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.05);
|
|
|
}
|
|
|
|
|
|
.query-header {
|
|
|
- margin-bottom: 30rpx;
|
|
|
- padding-bottom: 20rpx;
|
|
|
- border-bottom: 2rpx solid #f0f0f0;
|
|
|
+ margin-bottom: 30rpx;
|
|
|
+ padding-bottom: 20rpx;
|
|
|
+ border-bottom: 2rpx solid #f0f0f0;
|
|
|
}
|
|
|
|
|
|
.query-title {
|
|
|
- font-size: 32rpx;
|
|
|
- font-weight: bold;
|
|
|
- color: #333;
|
|
|
+ font-size: 32rpx;
|
|
|
+ font-weight: bold;
|
|
|
+ color: #333;
|
|
|
}
|
|
|
|
|
|
.query-form {
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
}
|
|
|
|
|
|
.status-popup {
|
|
|
- padding: 40rpx;
|
|
|
+ padding: 40rpx;
|
|
|
}
|
|
|
|
|
|
.popup-header {
|
|
|
- display: flex;
|
|
|
- justify-content: space-between;
|
|
|
- align-items: center;
|
|
|
- margin-bottom: 30rpx;
|
|
|
- padding-bottom: 20rpx;
|
|
|
- border-bottom: 2rpx solid #f0f0f0;
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ margin-bottom: 30rpx;
|
|
|
+ padding-bottom: 20rpx;
|
|
|
+ border-bottom: 2rpx solid #f0f0f0;
|
|
|
}
|
|
|
|
|
|
.popup-title {
|
|
|
- font-size: 32rpx;
|
|
|
- font-weight: bold;
|
|
|
- color: #333;
|
|
|
+ font-size: 32rpx;
|
|
|
+ font-weight: bold;
|
|
|
+ color: #333;
|
|
|
}
|
|
|
|
|
|
.status-content {
|
|
|
- margin-bottom: 30rpx;
|
|
|
+ margin-bottom: 30rpx;
|
|
|
}
|
|
|
|
|
|
.status-item {
|
|
|
- display: flex;
|
|
|
- justify-content: space-between;
|
|
|
- align-items: center;
|
|
|
- padding: 20rpx 0;
|
|
|
- border-bottom: 1rpx solid #f0f0f0;
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ padding: 20rpx 0;
|
|
|
+ border-bottom: 1rpx solid #f0f0f0;
|
|
|
}
|
|
|
|
|
|
.status-label {
|
|
|
- font-size: 28rpx;
|
|
|
- color: #666;
|
|
|
- flex-shrink: 0;
|
|
|
- width: 160rpx;
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #666;
|
|
|
+ flex-shrink: 0;
|
|
|
+ width: 160rpx;
|
|
|
}
|
|
|
|
|
|
.status-value {
|
|
|
- font-size: 28rpx;
|
|
|
- color: #333;
|
|
|
- flex: 1;
|
|
|
- text-align: right;
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #333;
|
|
|
+ flex: 1;
|
|
|
+ text-align: right;
|
|
|
}
|
|
|
|
|
|
.status-tips {
|
|
|
- margin-top: 30rpx;
|
|
|
+ margin-top: 30rpx;
|
|
|
}
|
|
|
|
|
|
.popup-footer {
|
|
|
- text-align: center;
|
|
|
- padding-top: 20rpx;
|
|
|
- border-top: 2rpx solid #f0f0f0;
|
|
|
+ text-align: center;
|
|
|
+ padding-top: 20rpx;
|
|
|
+ border-top: 2rpx solid #f0f0f0;
|
|
|
}
|
|
|
|
|
|
/* 表单项样式优化 */
|
|
|
::v-deep .u-form-item {
|
|
|
- margin-bottom: 30rpx;
|
|
|
+ margin-bottom: 30rpx;
|
|
|
}
|
|
|
|
|
|
::v-deep .u-form-item__label {
|
|
|
- color: #333 !important;
|
|
|
- font-weight: 500;
|
|
|
+ color: #333 !important;
|
|
|
+ font-weight: 500;
|
|
|
}
|
|
|
|
|
|
::v-deep .u-input__content {
|
|
|
- background-color: #f8f9fa;
|
|
|
- border-radius: 12rpx;
|
|
|
+ background-color: #f8f9fa;
|
|
|
+ border-radius: 12rpx;
|
|
|
}
|
|
|
|
|
|
::v-deep .u-number-box {
|
|
|
- background-color: #f8f9fa;
|
|
|
- border-radius: 12rpx;
|
|
|
+ background-color: #f8f9fa;
|
|
|
+ border-radius: 12rpx;
|
|
|
}
|
|
|
|
|
|
/* 按钮样式优化 */
|
|
|
::v-deep .u-btn {
|
|
|
- border-radius: 12rpx;
|
|
|
- font-weight: 500;
|
|
|
+ border-radius: 12rpx;
|
|
|
+ font-weight: 500;
|
|
|
}
|
|
|
|
|
|
/* 选择器样式优化 */
|
|
|
::v-deep .u-picker {
|
|
|
- background-color: #f8f9fa;
|
|
|
- border-radius: 12rpx;
|
|
|
+ background-color: #f8f9fa;
|
|
|
+ border-radius: 12rpx;
|
|
|
}
|
|
|
</style>
|