Explorar o código

wuzhen update

wuzhen hai 1 ano
pai
achega
852e873b14
Modificáronse 2 ficheiros con 1819 adicións e 0 borrados
  1. 125 0
      mobile/src/api/enrollment.js
  2. 1694 0
      mobile/src/pages/enrollment/index.vue

+ 125 - 0
mobile/src/api/enrollment.js

@@ -0,0 +1,125 @@
+// 移动端新生报名相关API接口
+import { request } from '@/common/request.js'
+
+/**
+ * 新生报名相关API
+ */
+export const enrollmentApi = {
+  /**
+   * 提交报名信息(供学生端使用)
+   * @param {Object} data 报名表单数据
+   */
+  submitApplication: (data) => {
+    return request({
+      url: '/zsjy/enrollment/info/submit',
+      method: 'POST',
+      data: data,
+      header: {
+        isToken: false // 不需要登录token,支持对外公开访问
+      }
+    })
+  },
+
+  /**
+   * 查询我的报名状态(供学生端使用)
+   * @param {Object} params 查询参数 { idCard?, examNumber? }
+   */
+  queryMyStatus: (params) => {
+    return request({
+      url: '/zsjy/enrollment/info/myStatus',
+      method: 'GET',
+      params: params,
+      header: {
+        isToken: false // 不需要登录token,支持对外公开访问
+      }
+    })
+  },
+
+  /**
+   * 根据身份证号和准考证号查询报名信息
+   * @param {string} idCard 身份证号
+   * @param {string} examNumber 准考证号
+   */
+  queryByInfo: (idCard, examNumber) => {
+    return request({
+      url: '/zsjy/enrollment/info/query',
+      method: 'GET',
+      params: {
+        idCard,
+        examNumber
+      },
+      header: {
+        isToken: false // 不需要登录token
+      }
+    })
+  },
+
+  /**
+   * 获取学院列表
+   */
+  getCollegeList: () => {
+    return request({
+      url: '/zsjy/enrollment/info/colleges',
+      method: 'GET',
+      header: {
+        isToken: false // 不需要登录token,支持对外公开访问
+      }
+    })
+  },
+
+  /**
+   * 根据学院ID获取专业列表
+   * @param {string|number} collegeId 学院ID
+   */
+  getMajorsByCollegeId: (collegeId) => {
+    return request({
+      url: `/zsjy/enrollment/info/majors/${collegeId}`,
+      method: 'GET',
+      header: {
+        isToken: false // 不需要登录token,支持对外公开访问
+      }
+    })
+  }
+}
+
+/**
+ * 便捷方法 - 提交报名申请
+ * @param {Object} formData 报名表单数据
+ */
+export const submitEnrollmentApplication = (formData) => {
+  return enrollmentApi.submitApplication(formData)
+}
+
+/**
+ * 便捷方法 - 查询报名状态
+ * @param {Object} params 查询参数
+ */
+export const queryMyEnrollmentStatus = (params) => {
+  return enrollmentApi.queryMyStatus(params)
+}
+
+/**
+ * 便捷方法 - 根据证件信息查询
+ * @param {string} idCard 身份证号
+ * @param {string} examNumber 准考证号
+ */
+export const queryEnrollmentByInfo = (idCard, examNumber) => {
+  return enrollmentApi.queryByInfo(idCard, examNumber)
+}
+
+/**
+ * 便捷方法 - 获取学院列表
+ */
+export const getCollegeList = () => {
+  return enrollmentApi.getCollegeList()
+}
+
+/**
+ * 便捷方法 - 根据学院ID获取专业列表
+ * @param {string|number} collegeId 学院ID
+ */
+export const getMajorsByCollegeId = (collegeId) => {
+  return enrollmentApi.getMajorsByCollegeId(collegeId)
+}
+
+export default enrollmentApi

+ 1694 - 0
mobile/src/pages/enrollment/index.vue

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