|
|
@@ -0,0 +1,1694 @@
|
|
|
+<template>
|
|
|
+ <view class="enrollment-container">
|
|
|
+ <!-- 自定义导航栏 -->
|
|
|
+ <u-navbar
|
|
|
+ title="新生报名登记"
|
|
|
+ :border-bottom="false"
|
|
|
+ bg-color="#3c9cff"
|
|
|
+ title-color="#fff"
|
|
|
+ :is-back="false"
|
|
|
+ ></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>
|
|
|
+ <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="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>
|
|
|
+
|
|
|
+ <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>
|
|
|
+
|
|
|
+ <!-- 状态查询结果弹窗 -->
|
|
|
+ <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>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+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()
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
+ // 初始化默认学院数据(兜底)
|
|
|
+ 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
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ // 重置表单
|
|
|
+ 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')
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+.enrollment-container {
|
|
|
+ background-color: #f8f9fa;
|
|
|
+ min-height: 100vh;
|
|
|
+}
|
|
|
+
|
|
|
+.page-header {
|
|
|
+ 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;
|
|
|
+}
|
|
|
+
|
|
|
+.header-desc {
|
|
|
+ font-size: 28rpx;
|
|
|
+ opacity: 0.9;
|
|
|
+}
|
|
|
+
|
|
|
+.required {
|
|
|
+ color: #ff6b6b;
|
|
|
+ font-weight: bold;
|
|
|
+}
|
|
|
+
|
|
|
+.form-container {
|
|
|
+ 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);
|
|
|
+}
|
|
|
+
|
|
|
+.section-title {
|
|
|
+ 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;
|
|
|
+}
|
|
|
+
|
|
|
+.action-buttons {
|
|
|
+ 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);
|
|
|
+}
|
|
|
+
|
|
|
+.query-header {
|
|
|
+ margin-bottom: 30rpx;
|
|
|
+ padding-bottom: 20rpx;
|
|
|
+ border-bottom: 2rpx solid #f0f0f0;
|
|
|
+}
|
|
|
+
|
|
|
+.query-title {
|
|
|
+ font-size: 32rpx;
|
|
|
+ font-weight: bold;
|
|
|
+ color: #333;
|
|
|
+}
|
|
|
+
|
|
|
+.query-form {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+}
|
|
|
+
|
|
|
+.status-popup {
|
|
|
+ padding: 40rpx;
|
|
|
+}
|
|
|
+
|
|
|
+.popup-header {
|
|
|
+ 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;
|
|
|
+}
|
|
|
+
|
|
|
+.status-content {
|
|
|
+ margin-bottom: 30rpx;
|
|
|
+}
|
|
|
+
|
|
|
+.status-item {
|
|
|
+ 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;
|
|
|
+}
|
|
|
+
|
|
|
+.status-value {
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #333;
|
|
|
+ flex: 1;
|
|
|
+ text-align: right;
|
|
|
+}
|
|
|
+
|
|
|
+.status-tips {
|
|
|
+ margin-top: 30rpx;
|
|
|
+}
|
|
|
+
|
|
|
+.popup-footer {
|
|
|
+ text-align: center;
|
|
|
+ padding-top: 20rpx;
|
|
|
+ border-top: 2rpx solid #f0f0f0;
|
|
|
+}
|
|
|
+
|
|
|
+/* 表单项样式优化 */
|
|
|
+::v-deep .u-form-item {
|
|
|
+ margin-bottom: 30rpx;
|
|
|
+}
|
|
|
+
|
|
|
+::v-deep .u-form-item__label {
|
|
|
+ color: #333 !important;
|
|
|
+ font-weight: 500;
|
|
|
+}
|
|
|
+
|
|
|
+::v-deep .u-input__content {
|
|
|
+ background-color: #f8f9fa;
|
|
|
+ border-radius: 12rpx;
|
|
|
+}
|
|
|
+
|
|
|
+::v-deep .u-number-box {
|
|
|
+ background-color: #f8f9fa;
|
|
|
+ border-radius: 12rpx;
|
|
|
+}
|
|
|
+
|
|
|
+/* 按钮样式优化 */
|
|
|
+::v-deep .u-btn {
|
|
|
+ border-radius: 12rpx;
|
|
|
+ font-weight: 500;
|
|
|
+}
|
|
|
+
|
|
|
+/* 选择器样式优化 */
|
|
|
+::v-deep .u-picker {
|
|
|
+ background-color: #f8f9fa;
|
|
|
+ border-radius: 12rpx;
|
|
|
+}
|
|
|
+</style>
|