|
@@ -524,8 +524,6 @@
|
|
class="custom-checkbox">
|
|
class="custom-checkbox">
|
|
<div class="ability-label">
|
|
<div class="ability-label">
|
|
<span>{{ item.name }}</span>
|
|
<span>{{ item.name }}</span>
|
|
-
|
|
|
|
- <img src="../../../assets/sheng.png" alt="" class="sheng">
|
|
|
|
<!-- <el-tooltip content="考察候选人的XXXX能力" placement="top">
|
|
<!-- <el-tooltip content="考察候选人的XXXX能力" placement="top">
|
|
<el-icon><QuestionFilled /></el-icon>
|
|
<el-icon><QuestionFilled /></el-icon>
|
|
</el-tooltip> -->
|
|
</el-tooltip> -->
|
|
@@ -686,7 +684,7 @@
|
|
</div>
|
|
</div>
|
|
<div class="question-tags">
|
|
<div class="question-tags">
|
|
<el-tag
|
|
<el-tag
|
|
- v-for="(tag, index) in (element.competency_tags || []).slice(0, 2)"
|
|
|
|
|
|
+ v-for="(tag, index) in (element.competency_tag_info || element.competency_tags || []).slice(0, 2)"
|
|
:key="tag.id"
|
|
:key="tag.id"
|
|
effect="plain"
|
|
effect="plain"
|
|
class="competency-tag"
|
|
class="competency-tag"
|
|
@@ -695,10 +693,10 @@
|
|
{{ tag.name }}
|
|
{{ tag.name }}
|
|
</el-tag>
|
|
</el-tag>
|
|
<span
|
|
<span
|
|
- v-if="(element.competency_tags || []).length > 2"
|
|
|
|
|
|
+ v-if="(element.competency_tag_info ||element.competency_tags || []).length > 2"
|
|
class="more-tags-indicator"
|
|
class="more-tags-indicator"
|
|
>
|
|
>
|
|
- +{{ (element.competency_tags || []).length - 2 }}
|
|
|
|
|
|
+ +{{ (element.competency_tag_info || element.competency_tags || []).length - 2 }}
|
|
</span>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@@ -802,8 +800,11 @@
|
|
<div class="setting-section">
|
|
<div class="setting-section">
|
|
<div class="section-header">请选择面试官形象</div>
|
|
<div class="section-header">请选择面试官形象</div>
|
|
<div style=" display: flex;align-items: flex-start;">
|
|
<div style=" display: flex;align-items: flex-start;">
|
|
- <div style="width: 100px;height: 170px;background-color: #f2f2f2; margin-right: 30px;border-radius: 10px;">
|
|
|
|
- <img v-if="interviewerAvatar" :src="interviewerAvatar" alt="" style="width: 100%;height: 100%;">
|
|
|
|
|
|
+ <div style="width: 100px;height: 170px;background-color: #f2f2f2; margin-right: 30px;border-radius: 10px;overflow: hidden;">
|
|
|
|
+ <img v-if="interviewerAvatar"
|
|
|
|
+ :src="interviewerAvatar"
|
|
|
|
+ alt=""
|
|
|
|
+ style="width: 100%;height: 100%;object-fit: cover;transform: translateZ(0);backface-visibility: hidden;">
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div>
|
|
<div class="interviewer-avatars">
|
|
<div class="interviewer-avatars">
|
|
@@ -822,12 +823,17 @@
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
- <div>追问风格:
|
|
|
|
- <el-select v-model="settings.interruptionMode" placeholder="请选择">
|
|
|
|
- <el-option label="温和" value="1" />
|
|
|
|
- <el-option label="严厉" value="2" />
|
|
|
|
- <el-option label="严谨" value="3" />
|
|
|
|
- </el-select></div>
|
|
|
|
|
|
+ <div class="setting-item" style="border: none;">
|
|
|
|
+ <div class="setting-label">「追问风格」</div>
|
|
|
|
+ <div class="setting-options">
|
|
|
|
+ <el-select v-model="settings.followUpStyle" placeholder="请选择" @change="handleSettingChange('followUpStyle', settings.followUpStyle)">
|
|
|
|
+ <el-option label="温和" value="1" />
|
|
|
|
+ <el-option label="严厉" value="2" />
|
|
|
|
+ <el-option label="严谨" value="3" />
|
|
|
|
+ </el-select>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="setting-desc"></div>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
@@ -1205,6 +1211,11 @@
|
|
/>
|
|
/>
|
|
<div class="form-tip">建议回答题目的时长,单位为秒</div>
|
|
<div class="form-tip">建议回答题目的时长,单位为秒</div>
|
|
</div>
|
|
</div>
|
|
|
|
+ <div class="form-item">
|
|
|
|
+ <div class="form-label">评价标准</div>
|
|
|
|
+ <el-input v-model="questionForm.scoring_reference" placeholder="请输入评价标准" class="full-width" />
|
|
|
|
+ <div class="form-tip">评价标准,用于评价应聘者的表现</div>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<template #footer>
|
|
<template #footer>
|
|
@@ -2165,7 +2176,8 @@ const questionForm = reactive({
|
|
position: [], // 适用职位
|
|
position: [], // 适用职位
|
|
category: '', // 分类
|
|
category: '', // 分类
|
|
tags: [], // 标签
|
|
tags: [], // 标签
|
|
- suggestedDuration: 60 // 建议时长,默认60秒
|
|
|
|
|
|
+ suggestedDuration: 60, // 建议时长,默认60秒
|
|
|
|
+ scoring_reference: '' // 评分标准
|
|
});
|
|
});
|
|
|
|
|
|
// 胜任力标签选项
|
|
// 胜任力标签选项
|
|
@@ -3772,9 +3784,11 @@ const addDimension = () => {
|
|
};
|
|
};
|
|
|
|
|
|
const settings = reactive({
|
|
const settings = reactive({
|
|
|
|
+
|
|
keepVideo: false,
|
|
keepVideo: false,
|
|
interruptionMode: '',
|
|
interruptionMode: '',
|
|
- smartFollowUp: false
|
|
|
|
|
|
+ smartFollowUp: false,
|
|
|
|
+ followUpStyle: ''
|
|
});
|
|
});
|
|
|
|
|
|
interface InterviewerAvatar {
|
|
interface InterviewerAvatar {
|
|
@@ -3871,6 +3885,8 @@ const getInterviewSettings = () => {
|
|
keepVideo: settings.keepVideo,
|
|
keepVideo: settings.keepVideo,
|
|
// 中断后作答限制模式
|
|
// 中断后作答限制模式
|
|
interruptionMode: settings.interruptionMode,
|
|
interruptionMode: settings.interruptionMode,
|
|
|
|
+ // 追问风格设置
|
|
|
|
+ followUpStyle: settings.followUpStyle,
|
|
// 智慧追问设置
|
|
// 智慧追问设置
|
|
smartFollowUp: settings.smartFollowUp
|
|
smartFollowUp: settings.smartFollowUp
|
|
};
|
|
};
|
|
@@ -3891,6 +3907,9 @@ const handleSettingChange = (settingType: string, value: any) => {
|
|
case 'interruptionMode':
|
|
case 'interruptionMode':
|
|
console.log('中断后作答限制模式:', value === 'previous' ? '从上一问重新作答' : '从当前问题作答');
|
|
console.log('中断后作答限制模式:', value === 'previous' ? '从上一问重新作答' : '从当前问题作答');
|
|
break;
|
|
break;
|
|
|
|
+ case 'followUpStyle':
|
|
|
|
+ console.log('追问风格:', value);
|
|
|
|
+ break;
|
|
case 'smartFollowUp':
|
|
case 'smartFollowUp':
|
|
console.log('智慧追问设置:', value ? '开启' : '关闭');
|
|
console.log('智慧追问设置:', value ? '开启' : '关闭');
|
|
break;
|
|
break;
|
|
@@ -4027,7 +4046,7 @@ const delay = (ms: number): Promise<void> => {
|
|
let pollingController: { cancelled: boolean } | null = null;
|
|
let pollingController: { cancelled: boolean } | null = null;
|
|
|
|
|
|
// 轮询获取草稿列表的函数
|
|
// 轮询获取草稿列表的函数
|
|
-const pollForDraftList = async (params: { tenant_id: number; page: number; limit: number; position_id: string }, maxAttempts: number = 30, interval: number = 2000): Promise<any> => {
|
|
|
|
|
|
+const pollForDraftList = async (params: { tenant_id: number; page: number; limit: number; position_id: string }, maxAttempts: number = 50, interval: number = 2000): Promise<any> => {
|
|
let attempts = 0;
|
|
let attempts = 0;
|
|
|
|
|
|
// 创建轮询控制器
|
|
// 创建轮询控制器
|