Ver Fonte

新增测评的时候选择岗位->审核岗位的时候选择测评

jialuyu há 1 mês atrás
pai
commit
9e45a63f16

+ 5 - 2
src/api/system/audit/index.ts

@@ -37,12 +37,15 @@ export function updateAudit(data: AuditForm) {
 /**
  * 审核通过
  */
-export function auditPass(id: string | number, remark?: string) {
+export function auditPass(id: string | number, remark?: string, evaluationId?: string | number, deposit?: number, finalPayment?: number) {
   return request({
     url: '/main/audit/pass/' + id,
     method: 'put',
     params: {
-      remark: remark || ''
+      remark: remark || '',
+      evaluationId: evaluationId || '',
+      deposit: deposit ?? '',
+      finalPayment: finalPayment ?? ''
     }
   });
 }

+ 1 - 0
src/api/system/audit/types.ts

@@ -60,6 +60,7 @@ export interface AuditVO extends BaseEntity {
   gradeB?: string | number;
   gradeC?: string | number;
   auditByName?: string;
+  evaluationId?: string | number;
 }
 
 export interface AuditQuery extends PageQuery {

+ 38 - 29
src/views/system/assessment/detail.vue

@@ -25,7 +25,7 @@
                   </el-select>
                 </el-form-item>
 
-                <el-form-item label="岗位" prop="positionId">
+                <!-- <el-form-item label="岗位" prop="positionId">
                   <el-select
                     v-model="formData.positionId"
                     placeholder="请选择"
@@ -42,7 +42,7 @@
                 </el-form-item>
 
                 <el-form-item label="岗位类型" prop="positionType">
-          <!--  -->        <el-select v-model="formData.positionType" placeholder="请选择" style="width: 100%">
+                <el-select v-model="formData.positionType" placeholder="请选择" style="width: 100%">
                     <el-option
                       v-for="dict in main_position_type"
                       :key="dict.value"
@@ -50,7 +50,7 @@
                       :value="dict.value"
                     />
                   </el-select>
-                </el-form-item>
+                </el-form-item> -->
 
                 <el-form-item label="详情描述" prop="detail">
                   <editor v-model="formData.detail" :min-height="120" :height="150" placeholder="请输入详细描述,支持图文混排..." />
@@ -92,6 +92,9 @@
             <div class="section-title">能力配置</div>
             <div class="ability-list">
               <div v-for="(item, index) in formData.abilityConfigs" :key="index" class="ability-item-card">
+                <div v-if="!isView" class="ability-delete-btn" @click="removeAbility(index)" title="删除此能力">
+                  <el-icon><Close /></el-icon>
+                </div>
                 <el-row :gutter="20">
                   <el-col :span="6">
                     <el-form-item :label="'能力名称'" :prop="'abilityConfigs.' + index + '.abilityName'" :rules="{ required: true, message: '请输入能力名称', trigger: 'blur' }">
@@ -100,10 +103,10 @@
                   </el-col>
                   <el-col :span="7">
                     <el-form-item :label="'关联试卷'" :prop="'abilityConfigs.' + index + '.thirdExamInfoId'" :rules="{ required: true, message: '请选择试卷', trigger: 'change' }">
-                      <el-input 
-                        v-model="item.thirdExamName" 
-                        placeholder="点击选择试卷" 
-                        readonly 
+                      <el-input
+                        v-model="item.thirdExamName"
+                        placeholder="点击选择试卷"
+                        readonly
                         @click="!isView && showExamDialog(index)"
                       >
                         <template #append v-if="!isView">
@@ -129,6 +132,11 @@
                   </el-col>
                 </el-row>
               </div>
+              <!-- 新增能力按钮 -->
+              <div v-if="!isView" class="add-ability-btn" @click="addAbility">
+                <el-icon><Plus /></el-icon>
+                <span>新增能力</span>
+              </div>
             </div>
           </div>
 
@@ -242,7 +250,7 @@
 
 <script setup lang="ts" name="AssessmentDetail">
 import { ref, reactive, onMounted, onActivated, nextTick, getCurrentInstance, toRefs, watch } from 'vue';
-import { SuccessFilled } from '@element-plus/icons-vue';
+import { SuccessFilled, Close, Plus } from '@element-plus/icons-vue';
 import { getEvaluation, addEvaluation, updateEvaluation, getThirdPartyExamList } from '@/api/main/evaluation';
 import { listTag } from '@/api/system/tag';
 import { listPosition } from '@/api/main/position';
@@ -291,11 +299,7 @@ const createDefaultFormData = (): any => ({
   switchStatus: '0',
   onlineStatus: '1',
   onlineTimeRange: [],
-  abilityConfigs: [
-    { abilityName: '能力A', thirdExamInfoId: '', thirdExamName: '', thirdExamTime: 60, thirdExamPassMark: 60, thirdExamTotalScore: 100, thirdExamLink: '' },
-    { abilityName: '能力B', thirdExamInfoId: '', thirdExamName: '', thirdExamTime: 60, thirdExamPassMark: 60, thirdExamTotalScore: 100, thirdExamLink: '' },
-    { abilityName: '能力C', thirdExamInfoId: '', thirdExamName: '', thirdExamTime: 60, thirdExamPassMark: 60, thirdExamTotalScore: 100, thirdExamLink: '' }
-  ]
+  abilityConfigs: [] as any[]
 });
 
 const formData = ref<EvaluationVO>(createDefaultFormData());
@@ -485,22 +489,6 @@ const getDetail = async (id: string | number) => {
       }))
     };
     
-    // 如果能力配置不足3个,补足到3个
-    const currentLength = formData.value.abilityConfigs.length;
-    if (currentLength < 3) {
-      const names = ['能力A', '能力B', '能力C'];
-      for (let i = currentLength; i < 3; i++) {
-        formData.value.abilityConfigs.push({
-          abilityName: names[i],
-          thirdExamInfoId: '',
-          thirdExamName: '',
-          thirdExamTime: 60,
-          thirdExamPassMark: 60,
-          thirdExamTotalScore: 100,
-          thirdExamLink: ''
-        });
-      }
-    }
   } catch (error) {
     console.error('获取详情失败:', error);
     proxy?.$modal.msgError('获取详情失败');
@@ -751,6 +739,27 @@ watch(() => route.query, (newQuery) => {
     border-radius: 8px;
     padding: 20px;
     position: relative;
+
+    .ability-delete-btn {
+      position: absolute;
+      top: 12px;
+      right: 12px;
+      width: 24px;
+      height: 24px;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      border-radius: 50%;
+      color: #909399;
+      cursor: pointer;
+      transition: all 0.2s;
+      z-index: 1;
+
+      &:hover {
+        background-color: #f56c6c;
+        color: #fff;
+      }
+    }
     
     .ability-ops {
       display: flex;

+ 194 - 6
src/views/system/audit/index.vue

@@ -142,7 +142,7 @@
     </el-container>
 
     <!-- 审核说明弹窗 -->
-    <el-dialog v-model="auditDialogVisible" width="500px" :show-close="true" custom-class="audit-dialog">
+    <el-dialog v-model="auditDialogVisible" width="700px" :show-close="true" custom-class="audit-dialog">
       <template #header>
         <div class="dialog-header-line">
           <span class="font-bold text-gray-800 text-base">审核说明</span>
@@ -160,6 +160,71 @@
         <el-form-item label="结果:">
           <span class="text-gray-700 font-medium">{{ auditForm.result === 'pass' ? '通过' : '驳回' }}</span>
         </el-form-item>
+
+        <!-- 岗位审核 - 通过时显示定金尾款和选择测评 -->
+        <template v-if="activeMenu === '2' && auditForm.result === 'pass'">
+          <el-form-item label="定金">
+            <el-input-number v-model="auditForm.deposit" :precision="2" :step="100" :min="0" class="!w-64" />
+          </el-form-item>
+          <el-form-item label="尾款">
+            <el-input-number v-model="auditForm.finalPayment" :precision="2" :step="100" :min="0" class="!w-64" />
+          </el-form-item>
+          <el-form-item label="选择测评">
+            <el-select
+              v-model="auditForm.evaluationId"
+              placeholder="请选择测评"
+              :loading="evalLoading"
+              class="!w-64"
+              @change="handleEvalChange"
+            >
+              <el-option
+                v-for="item in evalOptions"
+                :key="item.id"
+                :label="item.evaluationName"
+                :value="item.id"
+              />
+            </el-select>
+          </el-form-item>
+          <!-- 能力配置回显 -->
+          <el-form-item v-if="selectedAbilityConfigs.length > 0" label="能力配置">
+            <div class="ability-config-list">
+              <div v-for="(ability, index) in selectedAbilityConfigs" :key="index" class="ability-config-card">
+                <el-row :gutter="16" align="middle">
+                  <el-col :span="5">
+                    <div class="config-field">
+                      <label>能力名称</label>
+                      <el-input v-model="ability.abilityName" disabled size="small" />
+                    </div>
+                  </el-col>
+                  <el-col :span="6">
+                    <div class="config-field">
+                      <label>关联试卷</label>
+                      <el-input v-model="ability.thirdExamName" disabled size="small" />
+                    </div>
+                  </el-col>
+                  <el-col :span="4">
+                    <div class="config-field">
+                      <label>时长(分)</label>
+                      <el-input-number v-model="ability.thirdExamTime" :min="1" controls-position="right" style="width: 100%" size="small" />
+                    </div>
+                  </el-col>
+                  <el-col :span="4">
+                    <div class="config-field">
+                      <label>总分</label>
+                      <el-input-number v-model="ability.thirdExamTotalScore" :min="0" controls-position="right" style="width: 100%" size="small" />
+                    </div>
+                  </el-col>
+                  <el-col :span="5">
+                    <div class="config-field">
+                      <label>及格分</label>
+                      <el-input-number v-model="ability.thirdExamPassMark" :min="0" :max="ability.thirdExamTotalScore || 100" controls-position="right" style="width: 100%" size="small" />
+                    </div>
+                  </el-col>
+                </el-row>
+              </div>
+            </div>
+          </el-form-item>
+        </template>
         
         <el-form-item>
           <template #label>
@@ -188,9 +253,9 @@
 <script setup lang="ts">
 import { ref, reactive, onMounted } from 'vue';
 import { useRouter } from 'vue-router';
-import { Search } from '@element-plus/icons-vue';
 import { ElMessage, ElMessageBox } from 'element-plus';
 import { listAudit, auditPass, auditReject, delAudit } from '@/api/system/audit';
+import { listEvaluation, getEvaluation } from '@/api/main/evaluation';
 import { AuditVO, AuditQuery } from '@/api/system/audit/types';
 
 const router = useRouter();
@@ -274,14 +339,33 @@ const auditDialogVisible = ref(false);
 const currentId = ref<string | number>('');
 const auditForm = reactive({
   result: 'pass',
-  remark: ''
+  remark: '',
+  deposit: 0,
+  finalPayment: 0,
+  evaluationId: undefined as number | undefined
 });
 
+// 测评下拉选项
+const evalLoading = ref(false);
+const evalOptions = ref<any[]>([]);
+
+// 测评选择相关
+const selectedEvaluation = ref<any>({});
+const selectedAbilityConfigs = ref<any[]>([]);
+
+
 const handleOpenAudit = (row: AuditVO) => {
   currentId.value = row.id;
   auditForm.result = 'pass';
   auditForm.remark = '';
+  auditForm.deposit = 0;
+  auditForm.finalPayment = 0;
+  auditForm.evaluationId = undefined;
+  selectedEvaluation.value = {};
+  selectedAbilityConfigs.value = [];
   auditDialogVisible.value = true;
+  // 获取测评选项列表
+  getEvalList();
 };
 
 const handleAuditCommand = (cmd: string, row: AuditVO) => {
@@ -297,10 +381,20 @@ const confirmAudit = async () => {
     ElMessage.error('驳回时备注为必填项!');
     return;
   }
+
+  // 岗位审核通过时,校验必须选择测评
+  if (activeMenu.value === '2' && auditForm.result === 'pass' && !auditForm.evaluationId) {
+    ElMessage.warning('请先选择测评');
+    return;
+  }
   
   try {
     if (auditForm.result === 'pass') {
-      await auditPass(currentId.value, auditForm.remark);
+      if (activeMenu.value === '2') {
+        await auditPass(currentId.value, auditForm.remark, auditForm.evaluationId, auditForm.deposit, auditForm.finalPayment);
+      } else {
+        await auditPass(currentId.value, auditForm.remark);
+      }
     } else {
       await auditReject(currentId.value, auditForm.remark);
     }
@@ -312,6 +406,72 @@ const confirmAudit = async () => {
   }
 };
 
+/** 获取测评列表(直接加载所有或前200条) */
+const getEvalList = async () => {
+  evalLoading.value = true;
+  try {
+    const res: any = await listEvaluation({
+      pageNum: 1,
+      pageSize: 200
+    });
+    evalOptions.value = res.rows || [];
+  } catch (error) {
+    console.error('获取测评列表失败', error);
+  } finally {
+    evalLoading.value = false;
+  }
+};
+
+/** 选择测评变更处理 */
+const handleEvalChange = async (val: number) => {
+  if (!val) {
+    selectedEvaluation.value = {};
+    selectedAbilityConfigs.value = [];
+    return;
+  }
+  try {
+    const res: any = await getEvaluation(val);
+    const data = res.data;
+    selectedEvaluation.value = data;
+    selectedAbilityConfigs.value = (data.abilityConfigs || []).map((item: any) => ({
+      id: item.id,
+      abilityName: item.abilityName || '',
+      thirdExamInfoId: item.thirdExamInfoId || '',
+      thirdExamName: item.thirdExamName || '',
+      thirdExamTime: item.thirdExamTime || 60,
+      thirdExamTotalScore: item.thirdExamTotalScore || 100,
+      thirdExamPassMark: item.thirdExamPassMark || 60,
+      thirdExamLink: item.thirdExamLink || ''
+    }));
+  } catch (error) {
+    ElMessage.error('获取测评详情失败');
+  }
+};
+
+
+/** 选择测评 */
+const selectEvaluation = async (evalRow: any) => {
+  try {
+    const res: any = await getEvaluation(evalRow.id);
+    const data = res.data;
+    selectedEvaluation.value = data;
+    selectedAbilityConfigs.value = (data.abilityConfigs || []).map((item: any) => ({
+      id: item.id,
+      abilityName: item.abilityName || '',
+      thirdExamInfoId: item.thirdExamInfoId || '',
+      thirdExamName: item.thirdExamName || '',
+      thirdExamTime: item.thirdExamTime || 60,
+      thirdExamTotalScore: item.thirdExamTotalScore || 100,
+      thirdExamPassMark: item.thirdExamPassMark || 60,
+      thirdExamLink: item.thirdExamLink || ''
+    }));
+    evalDialog.value.visible = false;
+    ElMessage.success('已选择测评:' + data.evaluationName);
+  } catch (error) {
+    ElMessage.error('获取测评详情失败');
+  }
+};
+
 /** 批量通过 */
 const handleBatchPass = async () => {
   if (ids.value.length === 0) {
@@ -436,7 +596,7 @@ onMounted(() => {
   flex: 1;
 }
 
-:deep(.custom-header th) {
+::deep(.custom-header th) {
   background-color: #f7f8fa !important;
   color: #4e5969;
   font-weight: 500;
@@ -546,7 +706,35 @@ onMounted(() => {
 }
 
 /* 取消输入框的圆角以符合UI */
-:deep(.el-textarea__inner) {
+::deep(.el-textarea__inner) {
   border-radius: 4px;
 }
+
+/* 能力配置卡片 */
+.ability-config-list {
+  display: flex;
+  flex-direction: column;
+  gap: 10px;
+  width: 100%;
+}
+
+.ability-config-card {
+  background-color: #f7f8fa;
+  border-radius: 4px;
+  padding: 12px 16px;
+  width: 100%;
+
+  .config-field {
+    label {
+      display: block;
+      font-size: 12px;
+      color: #4e5969;
+      margin-bottom: 4px;
+    }
+
+    :deep(.el-input-number) {
+      width: 100%;
+    }
+  }
+}
 </style>

+ 227 - 8
src/views/system/audit/jobDetail.vue

@@ -139,15 +139,15 @@
           <div class="value font-medium">{{ detail.postLevelName || detail.postLevel || '-' }}</div>
         </div>
 
-        <div class="form-row">
+        <!-- <div class="form-row">
           <div class="label"><span class="required">*</span>测评时长</div>
           <div class="value flex items-center gap-4">
             <div class="gray-box !w-32 text-center font-medium">{{ detail.assessmentTime || '0' }}</div>
             <span class="text-[#4e5969]">分钟</span>
           </div>
-        </div>
+        </div> -->
 
-        <div class="form-row items-start">
+        <!-- <div class="form-row items-start">
           <div class="label pt-1"><span class="required">*</span>及格线</div>
           <div class="value flex flex-col gap-5">
             <div class="flex items-center" v-if="detail.gradeA !== undefined && detail.gradeA !== null">
@@ -166,7 +166,7 @@
               <span class="text-[#4e5969]">分</span>
             </div>
           </div>
-        </div>
+        </div> -->
       </div>
     </div>
 
@@ -175,6 +175,68 @@
       <div class="section-title">审核信息</div>
       
       <div class="form-content">
+        <!-- 选择测评区域(放在定金上方) -->
+        <div class="evaluation-section">
+          <div class="form-row">
+            <div class="label"><span class="required">*</span>选择测评</div>
+            <div class="value flex items-center gap-4">
+              <el-select
+                v-model="auditForm.evaluationId"
+                placeholder="请选择测评"
+                :loading="evalLoading"
+                style="width: 320px"
+                :disabled="detail.auditResult !== 0"
+                @change="handleEvalChange"
+              >
+                <el-option
+                  v-for="item in evalOptions"
+                  :key="item.id"
+                  :label="item.evaluationName"
+                  :value="item.id"
+                />
+              </el-select>
+            </div>
+          </div>
+
+          <!-- 能力配置回显区域 -->
+          <div v-if="selectedAbilityConfigs.length > 0" class="ability-config-list">
+            <div v-for="(ability, index) in selectedAbilityConfigs" :key="index" class="ability-config-card">
+              <el-row :gutter="20" align="middle">
+                <el-col :span="6">
+                  <div class="config-field">
+                    <label>*能力名称</label>
+                    <el-input v-model="ability.abilityName" disabled />
+                  </div>
+                </el-col>
+                <el-col :span="7">
+                  <div class="config-field">
+                    <label>*关联试卷</label>
+                    <el-input v-model="ability.thirdExamName" disabled />
+                  </div>
+                </el-col>
+                <el-col :span="3">
+                  <div class="config-field">
+                    <label>时长(分)</label>
+                    <el-input-number v-model="ability.thirdExamTime" :min="1" controls-position="right" style="width: 100%" :disabled="detail.auditResult !== 0" />
+                  </div>
+                </el-col>
+                <el-col :span="4">
+                  <div class="config-field">
+                    <label>总分</label>
+                    <el-input-number v-model="ability.thirdExamTotalScore" :min="0" controls-position="right" style="width: 100%" :disabled="detail.auditResult !== 0" />
+                  </div>
+                </el-col>
+                <el-col :span="4">
+                  <div class="config-field">
+                    <label>及格分</label>
+                    <el-input-number v-model="ability.thirdExamPassMark" :min="0" :max="ability.thirdExamTotalScore || 100" controls-position="right" style="width: 100%" :disabled="detail.auditResult !== 0" />
+                  </div>
+                </el-col>
+              </el-row>
+            </div>
+          </div>
+        </div>
+
         <!-- 已审核状态 -->
         <div v-if="detail.auditResult !== 0" class="flex flex-col gap-6 text-[14px]">
           <div class="flex items-center">
@@ -221,7 +283,7 @@
                 v-model="auditForm.remark"
                 type="textarea"
                 :rows="4"
-                placeholder="说明说明说明说明说明说明..."
+                placeholder="请输入审核备注说明..."
               />
             </el-form-item>
           </el-form>
@@ -238,14 +300,17 @@
     <div class="mt-12 pl-[120px] pb-10">
       <el-button @click="handleBack" class="px-8 !bg-[#f2f3f5] !border-none !text-[#4e5969] hover:!bg-[#e5e6eb]">返回</el-button>
     </div>
+
   </div>
 </template>
 
 <script setup lang="ts">
-import { ref, onMounted } from 'vue';
+import { ref, reactive, onMounted } from 'vue';
 import { useRouter, useRoute } from 'vue-router';
+import { Refresh } from '@element-plus/icons-vue';
 import { ElMessage, ElMessageBox } from 'element-plus';
 import { getAudit, auditPass, auditReject } from '@/api/system/audit';
+import { listEvaluation, getEvaluation } from '@/api/main/evaluation';
 import { AuditVO } from '@/api/system/audit/types';
 
 const router = useRouter();
@@ -256,9 +321,87 @@ const detail = ref<AuditVO>({} as AuditVO);
 const auditForm = ref({
   deposit: 0,
   finalPayment: 0,
-  remark: ''
+  remark: '',
+  evaluationId: undefined as number | undefined
 });
 
+// 测评下拉选项
+const evalLoading = ref(false);
+const evalOptions = ref<any[]>([]);
+
+// 测评选择相关
+const selectedEvaluation = ref<any>({});
+const selectedAbilityConfigs = ref<any[]>([]);
+
+
+/** 获取测评列表(直接加载所有或前200条) */
+const getEvalList = async () => {
+  evalLoading.value = true;
+  try {
+    const res: any = await listEvaluation({
+      pageNum: 1,
+      pageSize: 200
+    });
+    evalOptions.value = res.rows || [];
+  } catch (error) {
+    console.error('获取测评列表失败', error);
+  } finally {
+    evalLoading.value = false;
+  }
+};
+
+/** 选择测评变更处理 */
+const handleEvalChange = async (val: number) => {
+  if (!val) {
+    selectedEvaluation.value = {};
+    selectedAbilityConfigs.value = [];
+    return;
+  }
+  try {
+    const res: any = await getEvaluation(val);
+    const data = res.data;
+    selectedEvaluation.value = data;
+    selectedAbilityConfigs.value = (data.abilityConfigs || []).map((item: any) => ({
+      id: item.id,
+      abilityName: item.abilityName || '',
+      thirdExamInfoId: item.thirdExamInfoId || '',
+      thirdExamName: item.thirdExamName || '',
+      thirdExamTime: item.thirdExamTime || 60,
+      thirdExamTotalScore: item.thirdExamTotalScore || 100,
+      thirdExamPassMark: item.thirdExamPassMark || 60,
+      thirdExamLink: item.thirdExamLink || ''
+    }));
+  } catch (error) {
+    ElMessage.error('获取测评详情失败');
+  }
+};
+
+/** 选择测评 */
+const selectEvaluation = async (evalRow: any) => {
+  try {
+    // 获取测评详情以拿到完整的能力配置
+    const res: any = await getEvaluation(evalRow.id);
+    const data = res.data;
+
+    selectedEvaluation.value = data;
+    selectedAbilityConfigs.value = (data.abilityConfigs || []).map((item: any) => ({
+      id: item.id,
+      abilityName: item.abilityName || '',
+      thirdExamInfoId: item.thirdExamInfoId || '',
+      thirdExamName: item.thirdExamName || '',
+      thirdExamTime: item.thirdExamTime || 60,
+      thirdExamTotalScore: item.thirdExamTotalScore || 100,
+      thirdExamPassMark: item.thirdExamPassMark || 60,
+      thirdExamLink: item.thirdExamLink || ''
+    }));
+
+    evalDialog.value.visible = false;
+    ElMessage.success('已选择测试:' + data.evaluationName);
+  } catch (error) {
+    ElMessage.error('获取测评详情失败');
+  }
+};
+
 const getDetail = async () => {
   loading.value = true;
   try {
@@ -267,6 +410,33 @@ const getDetail = async () => {
     detail.value = res.data;
     if (detail.value.deposit) auditForm.value.deposit = Number(detail.value.deposit);
     if (detail.value.finalPayment) auditForm.value.finalPayment = Number(detail.value.finalPayment);
+
+    if (detail.value.evaluationId) {
+      auditForm.value.evaluationId = detail.value.evaluationId;
+      // 预加载当前选中的项到选项里,防止下拉框显示ID
+      evalOptions.value = [{ id: detail.value.evaluationId, evaluationName: detail.value.evaluationName }];
+      
+      try {
+        const evalRes: any = await getEvaluation(detail.value.evaluationId);
+        const evalData = evalRes.data;
+        selectedEvaluation.value = evalData;
+        selectedAbilityConfigs.value = (evalData.abilityConfigs || []).map((item: any) => ({
+          id: item.id,
+          abilityName: item.abilityName || '',
+          thirdExamInfoId: item.thirdExamInfoId || '',
+          thirdExamName: item.thirdExamName || '',
+          thirdExamTime: item.thirdExamTime || 60,
+          thirdExamTotalScore: item.thirdExamTotalScore || 100,
+          thirdExamPassMark: item.thirdExamPassMark || 60,
+          thirdExamLink: item.thirdExamLink || ''
+        }));
+      } catch (error) {
+        console.error('加载测评详情失败:', error);
+      }
+    } else {
+      // 未审核状态加载初始选项
+      getEvalList();
+    }
   } catch (error) {
     ElMessage.error('获取详情失败');
   } finally {
@@ -275,10 +445,20 @@ const getDetail = async () => {
 };
 
 const handleAuditPass = async () => {
+  if (!auditForm.value.evaluationId) {
+    ElMessage.warning('请先选择测试');
+    return;
+  }
   try {
     await ElMessageBox.confirm('确定要审核通过吗?', '提示', { type: 'warning' });
     submitLoading.value = true;
-    await auditPass(route.query.id as string, auditForm.value.remark);
+    await auditPass(
+      route.query.id as string,
+      auditForm.value.remark,
+      auditForm.value.evaluationId,
+      auditForm.value.deposit,
+      auditForm.value.finalPayment
+    );
     ElMessage.success('审核通过成功');
     await getDetail();
   } catch (error: any) {
@@ -394,4 +574,43 @@ onMounted(() => {
 :deep(.custom-radio-group .el-radio.is-disabled + span.el-radio__label) {
   color: #1d2129;
 }
+
+/* 测评选择区域 */
+.evaluation-section {
+  padding-bottom: 20px;
+  border-bottom: 1px solid #f0f0f0;
+  margin-bottom: 20px;
+}
+
+.ability-config-list {
+  display: flex;
+  flex-direction: column;
+  gap: 12px;
+}
+
+.ability-config-card {
+  background-color: #f7f8fa;
+  border-radius: 4px;
+  padding: 16px 20px;
+
+  .config-field {
+    label {
+      display: block;
+      font-size: 12px;
+      color: #4e5969;
+      margin-bottom: 4px;
+    }
+
+    :deep(.el-input-number) {
+      width: 100%;
+    }
+
+    :deep(.el-input__wrapper) {
+      background-color: #fff;
+      border-radius: 2px;
+      box-shadow: none;
+      border: 1px solid #e5e6eb;
+    }
+  }
+}
 </style>