|
@@ -452,46 +452,16 @@
|
|
<!-- 推荐的考核维度 -->
|
|
<!-- 推荐的考核维度 -->
|
|
<div class="recommended-dimensions">
|
|
<div class="recommended-dimensions">
|
|
<h3>推荐考核维度</h3>
|
|
<h3>推荐考核维度</h3>
|
|
- <div class="dimension-grid">
|
|
|
|
- <el-checkbox v-model="aiVideoOptions.positionMatch" label="岗位匹配度">
|
|
|
|
- <div class="ability-label">
|
|
|
|
- <span>岗位匹配度</span>
|
|
|
|
- <img src="../../../assets/sheng.png" alt="" class="sheng">
|
|
|
|
- </div>
|
|
|
|
- </el-checkbox>
|
|
|
|
-
|
|
|
|
- <el-checkbox v-model="aiVideoOptions.proactiveness" label="主动热情">
|
|
|
|
- <div class="ability-label">
|
|
|
|
- <span>主动热情</span>
|
|
|
|
- <img src="../../../assets/sheng.png" alt=""class="sheng">
|
|
|
|
- </div>
|
|
|
|
- </el-checkbox>
|
|
|
|
-
|
|
|
|
- <el-checkbox v-model="aiVideoOptions.basicAbility" label="基础综合能力">
|
|
|
|
- <div class="ability-label">
|
|
|
|
- <span>基础综合能力</span>
|
|
|
|
- <img src="../../../assets/sheng.png" alt=""class="sheng">
|
|
|
|
- </div>
|
|
|
|
- </el-checkbox>
|
|
|
|
-
|
|
|
|
- <el-checkbox v-model="aiVideoOptions.teamwork" label="团队协作">
|
|
|
|
- <div class="ability-label">
|
|
|
|
- <span>团队协作</span>
|
|
|
|
- <img src="../../../assets/sheng.png" alt=""class="sheng">
|
|
|
|
- </div>
|
|
|
|
- </el-checkbox>
|
|
|
|
-
|
|
|
|
- <el-checkbox v-model="aiVideoOptions.communication" label="沟通表达">
|
|
|
|
- <div class="ability-label">
|
|
|
|
- <span>沟通表达</span>
|
|
|
|
- <img src="../../../assets/sheng.png" alt=""class="sheng">
|
|
|
|
- </div>
|
|
|
|
- </el-checkbox>
|
|
|
|
-
|
|
|
|
- <el-checkbox v-model="aiVideoOptions.serviceAwareness" label="服务意识">
|
|
|
|
|
|
+ <div class="dimension-grid" >
|
|
|
|
+ <el-checkbox
|
|
|
|
+ v-for="item in competencyTags"
|
|
|
|
+ :key="item.id"
|
|
|
|
+ v-model="item.selected"
|
|
|
|
+ @change="(val) => handleCompetencyChange(item, val)"
|
|
|
|
+ >
|
|
<div class="ability-label">
|
|
<div class="ability-label">
|
|
- <span>服务意识</span>
|
|
|
|
- <img src="../../../assets/sheng.png" alt=""class="sheng">
|
|
|
|
|
|
+ <span>{{ item.name }}</span>
|
|
|
|
+ <img src="../../../assets/sheng.png" alt="" class="sheng">
|
|
</div>
|
|
</div>
|
|
</el-checkbox>
|
|
</el-checkbox>
|
|
</div>
|
|
</div>
|
|
@@ -541,11 +511,11 @@
|
|
<div class="interview-settings">
|
|
<div class="interview-settings">
|
|
<div class="interview-header">
|
|
<div class="interview-header">
|
|
<div class="interview-actions">
|
|
<div class="interview-actions">
|
|
- <el-button type="primary" plain class="import-btn">
|
|
|
|
|
|
+ <el-button type="primary" plain class="import-btn" >
|
|
<el-icon><Document /></el-icon>
|
|
<el-icon><Document /></el-icon>
|
|
导入题目
|
|
导入题目
|
|
</el-button>
|
|
</el-button>
|
|
- <el-button type="success" plain class="custom-btn">
|
|
|
|
|
|
+ <el-button type="success" plain class="custom-btn" @click="handleImportQuestion"><!-- @click="handleAddQuestion" -->
|
|
<el-icon><Plus /></el-icon>
|
|
<el-icon><Plus /></el-icon>
|
|
自定义题目
|
|
自定义题目
|
|
</el-button>
|
|
</el-button>
|
|
@@ -564,66 +534,84 @@
|
|
</div> -->
|
|
</div> -->
|
|
<div class="interview-content">
|
|
<div class="interview-content">
|
|
<div class="interview-questions-container">
|
|
<div class="interview-questions-container">
|
|
- <div class="no-questions">
|
|
|
|
|
|
+ <div class="no-questions" v-if="chatQuestions.length === 0">
|
|
<p>暂无题目</p>
|
|
<p>暂无题目</p>
|
|
<p class="ai-tip">点击"AI自动组题"按钮</p>
|
|
<p class="ai-tip">点击"AI自动组题"按钮</p>
|
|
<p class="ai-tip">可根据您选择的能力类型一键组题</p>
|
|
<p class="ai-tip">可根据您选择的能力类型一键组题</p>
|
|
- <el-button type="success" class="auto-generate-btn">AI自动组题</el-button>
|
|
|
|
|
|
+ <el-button type="success" class="auto-generate-btn" @click="handleAutoGenerate">AI自动组题</el-button>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
- <div class="question-list">
|
|
|
|
- <div v-for="(question, index) in chatQuestions" :key="index" class="question-card">
|
|
|
|
- <div class="question-header">
|
|
|
|
- <div class="question-title">
|
|
|
|
- <span class="question-number">题目{{ index + 1 }}</span>
|
|
|
|
- <span>{{ question.title }}</span>
|
|
|
|
- </div>
|
|
|
|
- <div class="question-actions">
|
|
|
|
- <div class="weight-control">
|
|
|
|
- <span class="weight-label">权重占比:</span>
|
|
|
|
- <el-input-number
|
|
|
|
- v-model="question.weight"
|
|
|
|
- :min="0"
|
|
|
|
- :max="100"
|
|
|
|
- :step="1"
|
|
|
|
- size="small"
|
|
|
|
- controls-position="right"
|
|
|
|
- >
|
|
|
|
- <template #suffix>%</template>
|
|
|
|
- </el-input-number>
|
|
|
|
|
|
+ <div class="question-list" v-else>
|
|
|
|
+ <draggable
|
|
|
|
+ v-model="chatQuestions"
|
|
|
|
+ :component-data="{
|
|
|
|
+ tag: 'transition-group',
|
|
|
|
+ name: !drag ? 'flip-list' : null
|
|
|
|
+ }"
|
|
|
|
+ item-key="id"
|
|
|
|
+ handle=".drag-handle"
|
|
|
|
+
|
|
|
|
+ @start="drag = true"
|
|
|
|
+ @end="drag = false"
|
|
|
|
+ >
|
|
|
|
+ <template #item="{ element }">
|
|
|
|
+ <div class="question-card">
|
|
|
|
+ <div class="question-header">
|
|
|
|
+ <div class="question-title">
|
|
|
|
+ <span class="question-number">题目{{ chatQuestions.indexOf(element) + 1 }}</span>
|
|
|
|
+ <span><span style="color: #0017ab;">{{ '「'+element.question_form_name +'」'}}</span>{{ element.title }}</span>
|
|
|
|
+ </div>
|
|
|
|
+ <div>
|
|
|
|
+ <el-button type="text" @click="editQuestion(chatQuestions.indexOf(element))">
|
|
|
|
+ <el-icon><Edit /></el-icon>
|
|
|
|
+ </el-button>
|
|
|
|
+ <el-button type="text" @click="deleteQuestion(chatQuestions.indexOf(element))">
|
|
|
|
+ <el-icon><Delete /></el-icon>
|
|
|
|
+ </el-button>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
- <div class="answer-limit">
|
|
|
|
- <span class="answer-label">最多回答次数</span>
|
|
|
|
- <el-select v-model="question.maxAnswers" size="small" placeholder="请选择">
|
|
|
|
- <el-option label="1次" :value="1" />
|
|
|
|
- <el-option label="2次" :value="2" />
|
|
|
|
- <el-option label="3次" :value="3" />
|
|
|
|
- </el-select>
|
|
|
|
|
|
+
|
|
|
|
+ <div class="question-info">
|
|
|
|
+ <div class="info-item">
|
|
|
|
+ <!-- <span class="info-label">考察能力:</span> -->
|
|
|
|
+ <span>{{ element.scoring_reference }}</span>
|
|
|
|
+ </div>
|
|
|
|
+ <!-- <div class="info-item">
|
|
|
|
+ <span class="info-label">面试内容:</span>
|
|
|
|
+ <span>{{ element.content }}</span>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="info-item">
|
|
|
|
+ <span class="info-label">对话目标:</span>
|
|
|
|
+ <span>{{ element.target }}</span>
|
|
|
|
+ </div> -->
|
|
</div>
|
|
</div>
|
|
- <el-button type="text" @click="editQuestion(index)">
|
|
|
|
- <el-icon><Edit /></el-icon>
|
|
|
|
- </el-button>
|
|
|
|
- <el-button type="text" @click="deleteQuestion(index)">
|
|
|
|
- <el-icon><Delete /></el-icon>
|
|
|
|
- </el-button>
|
|
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
-
|
|
|
|
- <div class="question-info">
|
|
|
|
- <div class="info-item">
|
|
|
|
- <span class="info-label">考察能力:</span>
|
|
|
|
- <span>{{ question.ability }}</span>
|
|
|
|
- </div>
|
|
|
|
- <div class="info-item">
|
|
|
|
- <span class="info-label">面试内容:</span>
|
|
|
|
- <span>{{ question.content }}</span>
|
|
|
|
- </div>
|
|
|
|
- <div class="info-item">
|
|
|
|
- <span class="info-label">对话目标:</span>
|
|
|
|
- <span>{{ question.target }}</span>
|
|
|
|
|
|
+ <div class="question-actions" v-if="element.question_form==0">
|
|
|
|
+ <!-- <div class="weight-control">
|
|
|
|
+ <span class="weight-label">权重占比:</span>
|
|
|
|
+ <el-input-number
|
|
|
|
+ v-model="element.weight"
|
|
|
|
+ :min="0"
|
|
|
|
+ :max="100"
|
|
|
|
+ :step="1"
|
|
|
|
+ size="small"
|
|
|
|
+ controls-position="right"
|
|
|
|
+ >
|
|
|
|
+ <template #suffix>%</template>
|
|
|
|
+ </el-input-number>
|
|
|
|
+ </div> -->
|
|
|
|
+ <div class="answer-limit">
|
|
|
|
+ <span class="answer-label">最多回答次数</span>
|
|
|
|
+ <el-select v-model="element.maxAnswers" size="small" placeholder="请选择">
|
|
|
|
+ <el-option label="1次" :value="1" />
|
|
|
|
+ <el-option label="2次" :value="2" />
|
|
|
|
+ <el-option label="3次" :value="3" />
|
|
|
|
+ </el-select>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
|
|
+ </template>
|
|
|
|
+ </draggable>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
@@ -653,26 +641,35 @@
|
|
<!-- 面试官形象设置 -->
|
|
<!-- 面试官形象设置 -->
|
|
<div class="setting-section">
|
|
<div class="setting-section">
|
|
<div class="section-header">请选择面试官形象</div>
|
|
<div class="section-header">请选择面试官形象</div>
|
|
- <div class="interviewer-avatars">
|
|
|
|
- <div
|
|
|
|
- v-for="avatar in interviewerAvatars"
|
|
|
|
- :key="avatar.id"
|
|
|
|
- class="avatar-item"
|
|
|
|
- :class="{ active: selectedInterviewer.id === avatar.id }"
|
|
|
|
- @click="selectedInterviewer = avatar"
|
|
|
|
- >
|
|
|
|
- <div class="avatar-wrapper">
|
|
|
|
- <div class="avatar-circle" :class="{ selected: selectedInterviewer.id === avatar.id }">
|
|
|
|
- <img :src="avatar.image" :alt="avatar.name" />
|
|
|
|
|
|
+ <div style=" display: flex;align-items: flex-start;">
|
|
|
|
+ <div style="width: 100px;height: 170px;background-color: #f2f2f2; margin-right: 30px;border-radius: 10px;">
|
|
|
|
+
|
|
|
|
+ </div>
|
|
|
|
+ <div>
|
|
|
|
+ <div class="interviewer-avatars">
|
|
|
|
+ <div
|
|
|
|
+ v-for="avatar in interviewerAvatars"
|
|
|
|
+ :key="avatar.id"
|
|
|
|
+ class="avatar-item"
|
|
|
|
+ :class="{ active: selectedInterviewer.id === avatar.id }"
|
|
|
|
+ @click="selectedInterviewer = avatar"
|
|
|
|
+ >
|
|
|
|
+ <div class="avatar-wrapper">
|
|
|
|
+ <div class="avatar-circle" :class="{ selected: selectedInterviewer.id === avatar.id }">
|
|
|
|
+ <img :src="avatar.avatar_url" :alt="avatar.name" />
|
|
|
|
+ </div>
|
|
|
|
+ <div class="avatar-name">{{ avatar.name }}</div>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
- <div class="avatar-name">{{ avatar.name }}</div>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
+ <div>追问风格: <el-select v-model="settings.interruptionMode" placeholder="请选择">
|
|
|
|
+ <el-option label="从上一问重新作答" value="previous" />
|
|
|
|
+ <el-option label="从当前问题作答" value="current" />
|
|
|
|
+ </el-select></div>
|
|
</div>
|
|
</div>
|
|
- </div>
|
|
|
|
- <div>追问风格: <el-select v-model="settings.interruptionMode" placeholder="请选择">
|
|
|
|
- <el-option label="从上一问重新作答" value="previous" />
|
|
|
|
- <el-option label="从当前问题作答" value="current" />
|
|
|
|
- </el-select></div>
|
|
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+
|
|
|
|
|
|
<!-- 面试设置选项 -->
|
|
<!-- 面试设置选项 -->
|
|
<div class="interview-settings">
|
|
<div class="interview-settings">
|
|
@@ -812,58 +809,63 @@
|
|
<p class="tip-text">点击"添加问题"或"导入问题"添加面试问题</p>
|
|
<p class="tip-text">点击"添加问题"或"导入问题"添加面试问题</p>
|
|
</div>
|
|
</div>
|
|
<div v-else class="question-list">
|
|
<div v-else class="question-list">
|
|
- <div v-for="(question, index) in chatQuestions" :key="index" class="question-card">
|
|
|
|
- <div class="question-header">
|
|
|
|
- <div class="question-title">
|
|
|
|
- <span class="question-number">题目{{ index + 1 }}</span>
|
|
|
|
- <span>{{ question.title }}</span>
|
|
|
|
- </div>
|
|
|
|
- <div class="question-actions">
|
|
|
|
- <div class="weight-control">
|
|
|
|
- <span class="weight-label">权重占比:</span>
|
|
|
|
- <el-input-number
|
|
|
|
- v-model="question.weight"
|
|
|
|
- :min="0"
|
|
|
|
- :max="100"
|
|
|
|
- :step="1"
|
|
|
|
- size="small"
|
|
|
|
- controls-position="right"
|
|
|
|
- >
|
|
|
|
- <template #suffix>%</template>
|
|
|
|
- </el-input-number>
|
|
|
|
|
|
+ <draggable v-model="chatQuestions" item-key="id" handle=".drag-handle">
|
|
|
|
+ <template #item="{ element, index }">
|
|
|
|
+ {{ element }}
|
|
|
|
+ <div class="question-card">
|
|
|
|
+ <div class="question-header">
|
|
|
|
+ <div class="question-title">
|
|
|
|
+ <span class="question-number">题目{{ index + 1 }}</span>
|
|
|
|
+ <span>{{ element.question }}</span>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="question-actions">
|
|
|
|
+ <div class="weight-control">
|
|
|
|
+ <span class="weight-label">权重占比:</span>
|
|
|
|
+ <el-input-number
|
|
|
|
+ v-model="element.weight"
|
|
|
|
+ :min="0"
|
|
|
|
+ :max="100"
|
|
|
|
+ :step="1"
|
|
|
|
+ size="small"
|
|
|
|
+ controls-position="right"
|
|
|
|
+ >
|
|
|
|
+ <template #suffix>%</template>
|
|
|
|
+ </el-input-number>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="answer-limit">
|
|
|
|
+ <span class="answer-label">最多回答次数</span>
|
|
|
|
+ <el-select v-model="element.maxAnswers" size="small" placeholder="请选择">
|
|
|
|
+ <el-option label="1次" :value="1" />
|
|
|
|
+ <el-option label="2次" :value="2" />
|
|
|
|
+ <el-option label="3次" :value="3" />
|
|
|
|
+ </el-select>
|
|
|
|
+ </div>
|
|
|
|
+ <el-button type="text" @click="editQuestion(index)">
|
|
|
|
+ <el-icon><Edit /></el-icon>
|
|
|
|
+ </el-button>
|
|
|
|
+ <el-button type="text" @click="deleteQuestion(index)">
|
|
|
|
+ <el-icon><Delete /></el-icon>
|
|
|
|
+ </el-button>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
- <div class="answer-limit">
|
|
|
|
- <span class="answer-label">最多回答次数</span>
|
|
|
|
- <el-select v-model="question.maxAnswers" size="small" placeholder="请选择">
|
|
|
|
- <el-option label="1次" :value="1" />
|
|
|
|
- <el-option label="2次" :value="2" />
|
|
|
|
- <el-option label="3次" :value="3" />
|
|
|
|
- </el-select>
|
|
|
|
|
|
+
|
|
|
|
+ <div class="question-info">
|
|
|
|
+ <div class="info-item">
|
|
|
|
+ <span class="info-label">考察能力:</span>
|
|
|
|
+ <span>{{ element.ability }}</span>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="info-item">
|
|
|
|
+ <span class="info-label">面试内容:</span>
|
|
|
|
+ <span>{{ element.content }}</span>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="info-item">
|
|
|
|
+ <span class="info-label">对话目标:</span>
|
|
|
|
+ <span>{{ element.target }}</span>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
- <el-button type="text" @click="editQuestion(index)">
|
|
|
|
- <el-icon><Edit /></el-icon>
|
|
|
|
- </el-button>
|
|
|
|
- <el-button type="text" @click="deleteQuestion(index)">
|
|
|
|
- <el-icon><Delete /></el-icon>
|
|
|
|
- </el-button>
|
|
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
-
|
|
|
|
- <div class="question-info">
|
|
|
|
- <div class="info-item">
|
|
|
|
- <span class="info-label">考察能力:</span>
|
|
|
|
- <span>{{ question.ability }}</span>
|
|
|
|
- </div>
|
|
|
|
- <div class="info-item">
|
|
|
|
- <span class="info-label">面试内容:</span>
|
|
|
|
- <span>{{ question.content }}</span>
|
|
|
|
- </div>
|
|
|
|
- <div class="info-item">
|
|
|
|
- <span class="info-label">对话目标:</span>
|
|
|
|
- <span>{{ question.target }}</span>
|
|
|
|
</div>
|
|
</div>
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
|
|
+ </template>
|
|
|
|
+ </draggable>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@@ -949,6 +951,82 @@
|
|
</template>
|
|
</template>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
|
|
|
|
|
|
+ <!-- 添加题目选择对话框 -->
|
|
|
|
+ <el-dialog
|
|
|
|
+ title="选择题目"
|
|
|
|
+ v-model="showQuestionSelectDialog"
|
|
|
|
+ width="70%"
|
|
|
|
+ :close-on-click-modal="false"
|
|
|
|
+ class="question-select-dialog"
|
|
|
|
+ >
|
|
|
|
+ <div class="question-select-content">
|
|
|
|
+ <!-- 搜索栏 -->
|
|
|
|
+ <div class="search-bar">
|
|
|
|
+ <div class="search-inputs">
|
|
|
|
+ <el-input
|
|
|
|
+ v-model="questionSearchKeyword"
|
|
|
|
+ placeholder="请输入关键词搜索题目"
|
|
|
|
+ clearable
|
|
|
|
+ @clear="handleQuestionSearch"
|
|
|
|
+ @keyup.enter="handleQuestionSearch"
|
|
|
|
+ style="width: 300px; margin-right: 10px;"
|
|
|
|
+ >
|
|
|
|
+ <template #append>
|
|
|
|
+ <el-button @click="handleQuestionSearch">
|
|
|
|
+ <el-icon><Search /></el-icon>
|
|
|
|
+ </el-button>
|
|
|
|
+ </template>
|
|
|
|
+ </el-input>
|
|
|
|
+ <el-select
|
|
|
|
+ v-model="questionListQuery.question_form"
|
|
|
|
+ placeholder="题目类型"
|
|
|
|
+ clearable
|
|
|
|
+ @change="handleQuestionSearch"
|
|
|
|
+ style="width: 120px;"
|
|
|
|
+ >
|
|
|
|
+ <el-option label="开放问题" :value="0" />
|
|
|
|
+ <el-option label="单选题" :value="1" />
|
|
|
|
+ </el-select>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <!-- 题目列表 -->
|
|
|
|
+ <div class="question-lists">
|
|
|
|
+ <el-table
|
|
|
|
+ :data="questionList"
|
|
|
|
+ style="width: 100%"
|
|
|
|
+ @selection-change="handleQuestionSelectionChange"
|
|
|
|
+ >
|
|
|
|
+ <el-table-column type="selection" width="55" />
|
|
|
|
+ <el-table-column prop="question" label="题目标题" />
|
|
|
|
+ <el-table-column prop="question_form_name" label="题目类型" width="100"/>
|
|
|
|
+ <!-- <el-table-column prop="content" label="面试内容" show-overflow-tooltip />
|
|
|
|
+ <el-table-column prop="target" label="对话目标" show-overflow-tooltip /> -->
|
|
|
|
+ </el-table>
|
|
|
|
+
|
|
|
|
+ <!-- 分页 -->
|
|
|
|
+ <div class="pagination-container">
|
|
|
|
+ <el-pagination
|
|
|
|
+ v-model:current-page="questionListQuery.page"
|
|
|
|
+ v-model:page-size="questionListQuery.pageSize"
|
|
|
|
+ :total="totalQuestions"
|
|
|
|
+ :page-sizes="[10, 20, 50, 100]"
|
|
|
|
+ layout="total, sizes, prev, pager, next"
|
|
|
|
+ @size-change="handleQuestionSizeChange"
|
|
|
|
+ @current-change="handleQuestionPageChange"
|
|
|
|
+ />
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <template #footer>
|
|
|
|
+ <span class="dialog-footer">
|
|
|
|
+ <el-button @click="cancelQuestionSelect">取消</el-button>
|
|
|
|
+ <el-button type="primary" @click="confirmQuestionSelect">确定</el-button>
|
|
|
|
+ </span>
|
|
|
|
+ </template>
|
|
|
|
+ </el-dialog>
|
|
|
|
+
|
|
<!-- 修改资料收集对话框模板 -->
|
|
<!-- 修改资料收集对话框模板 -->
|
|
<el-dialog
|
|
<el-dialog
|
|
title="资料收集"
|
|
title="资料收集"
|
|
@@ -1244,9 +1322,10 @@ import { ref, reactive, onMounted, computed } from 'vue';
|
|
import { useRouter, useRoute } from 'vue-router';
|
|
import { useRouter, useRoute } from 'vue-router';
|
|
import { ElMessage, ElMessageBox, ElDrawer } from 'element-plus';
|
|
import { ElMessage, ElMessageBox, ElDrawer } from 'element-plus';
|
|
import * as api from '../list/api';
|
|
import * as api from '../list/api';
|
|
-import { Plus, Document, ArrowDown, Edit, Delete, InfoFilled, QuestionFilled } from '@element-plus/icons-vue';
|
|
|
|
|
|
+import { Plus, Document, ArrowDown, Edit, Delete, InfoFilled, QuestionFilled, Search, Rank } from '@element-plus/icons-vue';
|
|
import { GetList } from '../../questionBank/classList/api';
|
|
import { GetList } from '../../questionBank/classList/api';
|
|
-import { GetCompetencyList } from '../list/api';
|
|
|
|
|
|
+import { GetCompetencyList,GetQuestionList,GenerateQuestions,GetDraftList,SaveDraft,GetDigitalList } from './api';
|
|
|
|
+import draggable from 'vuedraggable';
|
|
|
|
|
|
// 添加 ChatQuestion 接口定义
|
|
// 添加 ChatQuestion 接口定义
|
|
interface ChatQuestion {
|
|
interface ChatQuestion {
|
|
@@ -1279,6 +1358,7 @@ const router = useRouter();
|
|
const route = useRoute();
|
|
const route = useRoute();
|
|
const positionId = ref(route.params.id as string);
|
|
const positionId = ref(route.params.id as string);
|
|
const positionStatus = ref(false);
|
|
const positionStatus = ref(false);
|
|
|
|
+const drag = ref(false); // 添加拖拽状态变量
|
|
|
|
|
|
// 职位数据
|
|
// 职位数据
|
|
const positionData = reactive({
|
|
const positionData = reactive({
|
|
@@ -1370,7 +1450,7 @@ const selectedAbilities = ref([
|
|
}
|
|
}
|
|
]);
|
|
]);
|
|
|
|
|
|
-const toggleAbilityExpand = (ability) => {
|
|
|
|
|
|
+const toggleAbilityExpand = (ability:any) => {
|
|
ability.expanded = !ability.expanded;
|
|
ability.expanded = !ability.expanded;
|
|
};
|
|
};
|
|
|
|
|
|
@@ -1418,6 +1498,7 @@ const rankSettings = reactive({
|
|
maxScore: 0.00
|
|
maxScore: 0.00
|
|
});
|
|
});
|
|
|
|
|
|
|
|
+
|
|
// AI模型版本
|
|
// AI模型版本
|
|
const aiModelVersion = ref('standard');
|
|
const aiModelVersion = ref('standard');
|
|
|
|
|
|
@@ -1771,12 +1852,40 @@ const addSelectedStepType = (type: string, label: string) => {
|
|
};
|
|
};
|
|
|
|
|
|
// 下一步
|
|
// 下一步
|
|
-const nextStep = () => {
|
|
|
|
|
|
+const nextStep = async () => {
|
|
if (currentStep.value < 3) {
|
|
if (currentStep.value < 3) {
|
|
- currentStep.value++;
|
|
|
|
|
|
+ // 如果从第一步进入第二步,更新已选维度到 selectedAbilities
|
|
|
|
+ if (currentStep.value === 1) {
|
|
|
|
+ selectedAbilities.value = selectedDimensions.value.map(dimension => ({
|
|
|
|
+ label: dimension.name,
|
|
|
|
+ value: dimension.name.toLowerCase().replace(/\s+/g, '_'),
|
|
|
|
+ description: dimension.description,
|
|
|
|
+ level: 'CC', // 默认等级
|
|
|
|
+ expanded: false,
|
|
|
|
+ isNew: true
|
|
|
|
+ }));
|
|
|
|
+ }
|
|
|
|
+ // 如果从第二步进入第三步,调用SaveDraft接口保存暂存题目
|
|
|
|
+ if (currentStep.value === 2) {
|
|
|
|
+ try{
|
|
|
|
+ // 调用SaveDraft接口保存暂存题目
|
|
|
|
+ await SaveDraft({
|
|
|
|
+ draft_ids: chatQuestions.value.map((draft: any) => draft.id)
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ } catch (error) {
|
|
|
|
+ console.error('保存暂存题目失败:', error);
|
|
|
|
+ ElMessage.error('保存暂存题目失败');
|
|
|
|
+ return; // 如果保存失败,不进入下一步
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ currentStep.value++;
|
|
} else {
|
|
} else {
|
|
finishConfig();
|
|
finishConfig();
|
|
}
|
|
}
|
|
|
|
+
|
|
};
|
|
};
|
|
|
|
|
|
// 上一步
|
|
// 上一步
|
|
@@ -1943,7 +2052,8 @@ const confirmAddQuestion = () => {
|
|
|
|
|
|
// 导入问题处理方法
|
|
// 导入问题处理方法
|
|
const handleImportQuestion = () => {
|
|
const handleImportQuestion = () => {
|
|
- ElMessage.info('导入问题功能开发中');
|
|
|
|
|
|
+ showQuestionSelectDialog.value = true;
|
|
|
|
+ fetchQuestionList(); // 打开对话框时获取题目列表
|
|
};
|
|
};
|
|
|
|
|
|
// 在 script setup 中添加
|
|
// 在 script setup 中添加
|
|
@@ -2020,6 +2130,7 @@ const confirmDataCollection = () => {
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
getPositionDetail();
|
|
getPositionDetail();
|
|
getCompetencyList();
|
|
getCompetencyList();
|
|
|
|
+ getDigitalList()
|
|
});
|
|
});
|
|
|
|
|
|
// 添加代码测试相关的状态和方法
|
|
// 添加代码测试相关的状态和方法
|
|
@@ -2490,9 +2601,13 @@ const selectedCompetencies = ref([]);
|
|
// 获取能力标签列表
|
|
// 获取能力标签列表
|
|
const getCompetencyList = async () => {
|
|
const getCompetencyList = async () => {
|
|
try {
|
|
try {
|
|
- const response = await api.GetCompetencyList({page:1,pageSize:1000});
|
|
|
|
|
|
+ const response = await GetCompetencyList({page:1,pageSize:1000});
|
|
if (response && response.data) {
|
|
if (response && response.data) {
|
|
- competencyTags.value = response.data.items;
|
|
|
|
|
|
+ // 为每个标签添加选中状态属性
|
|
|
|
+ competencyTags.value = response.data.items.map((item:any) => ({
|
|
|
|
+ ...item,
|
|
|
|
+ selected: false
|
|
|
|
+ }));
|
|
}
|
|
}
|
|
} catch (error) {
|
|
} catch (error) {
|
|
console.error('获取能力标签列表失败:', error);
|
|
console.error('获取能力标签列表失败:', error);
|
|
@@ -2502,7 +2617,7 @@ const getCompetencyList = async () => {
|
|
|
|
|
|
// 开始编辑能力标签
|
|
// 开始编辑能力标签
|
|
const startEditCompetency = () => {
|
|
const startEditCompetency = () => {
|
|
- selectedCompetencies.value = positionData.competency_tags?.map(tag => tag.id) || [];
|
|
|
|
|
|
+ selectedCompetencies.value = positionData.competency_tags?.map((tag:any) => tag.id) || [];
|
|
isEditingCompetency.value = true;
|
|
isEditingCompetency.value = true;
|
|
};
|
|
};
|
|
|
|
|
|
@@ -2618,1620 +2733,304 @@ const interviewerAvatars = ref([
|
|
|
|
|
|
const selectedInterviewer = ref(interviewerAvatars.value[0]);
|
|
const selectedInterviewer = ref(interviewerAvatars.value[0]);
|
|
|
|
|
|
-</script>
|
|
|
|
|
|
+/* 获取数字人列表 */
|
|
|
|
+const getDigitalList = async () => {
|
|
|
|
+ const response = await GetDigitalList({page:1,pageSize:1000});
|
|
|
|
+ if (response && response.data) {
|
|
|
|
+ interviewerAvatars.value = response.data;
|
|
|
|
+ }
|
|
|
|
+};
|
|
|
|
|
|
-<style scoped>
|
|
|
|
-.position-detail-container {
|
|
|
|
- padding: 20px;
|
|
|
|
- width: 88% !important;
|
|
|
|
- margin: 0 0 0 170px;
|
|
|
|
-}
|
|
|
|
|
|
+const handleCompetencyChange = (item: any, val: boolean) => {
|
|
|
|
+ if (val) {
|
|
|
|
+ // 当选中时,添加到已选维度列表
|
|
|
|
+ selectedDimensions.value.push({
|
|
|
|
+ name: item.name,
|
|
|
|
+ description: item.description || '暂无描述' // 如果没有描述则显示默认值
|
|
|
|
+ });
|
|
|
|
+ } else {
|
|
|
|
+ // 当取消选中时,从已选维度列表中移除
|
|
|
|
+ selectedDimensions.value = selectedDimensions.value.filter(
|
|
|
|
+ dimension => dimension.name !== item.name
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+};
|
|
|
|
|
|
-.header-container {
|
|
|
|
- display: flex;
|
|
|
|
- justify-content: space-between;
|
|
|
|
- align-items: center;
|
|
|
|
- margin-bottom: 20px;
|
|
|
|
-}
|
|
|
|
|
|
+// 在 script setup 部分添加以下代码
|
|
|
|
+const selectedDimensions = ref<Array<{name: string, description: string}>>([]);
|
|
|
|
|
|
-.header-actions {
|
|
|
|
- display: flex;
|
|
|
|
- gap: 10px;
|
|
|
|
-}
|
|
|
|
|
|
+// 在 script setup 中添加以下内容
|
|
|
|
+// 题目选择相关的响应式变量
|
|
|
|
+const showQuestionSelectDialog = ref(false);
|
|
|
|
+const questionSearchKeyword = ref('');
|
|
|
|
+const questionList = ref([]);
|
|
|
|
+const selectedQuestions = ref([]);
|
|
|
|
+const totalQuestions = ref(0);
|
|
|
|
+const questionListQuery = reactive({
|
|
|
|
+ page: 1,
|
|
|
|
+ pageSize: 10,
|
|
|
|
+ keyword: '',
|
|
|
|
+ question_form: null as number | null
|
|
|
|
+});
|
|
|
|
|
|
-.detail-content {
|
|
|
|
- display: flex;
|
|
|
|
- gap: 20px;
|
|
|
|
-}
|
|
|
|
|
|
+// 获取题目列表
|
|
|
|
+const fetchQuestionList = async () => {
|
|
|
|
+ try {
|
|
|
|
+ const params = {
|
|
|
|
+ ...questionListQuery,
|
|
|
|
+ keyword: questionSearchKeyword.value,
|
|
|
|
+ // 只有当选择了题目类型时才传递该参数
|
|
|
|
+ ...(questionListQuery.question_form !== null && { question_form: questionListQuery.question_form })
|
|
|
|
+ };
|
|
|
|
+ const response = await GetQuestionList(params);
|
|
|
|
+ if (response && response.data) {
|
|
|
|
+ questionList.value = response.data.items;
|
|
|
|
+ totalQuestions.value = response.data.total;
|
|
|
|
+ }
|
|
|
|
+ } catch (error) {
|
|
|
|
+ console.error('获取题目列表失败:', error);
|
|
|
|
+ ElMessage.error('获取题目列表失败');
|
|
|
|
+ }
|
|
|
|
+};
|
|
|
|
|
|
-.detail-card {
|
|
|
|
- flex: 2;
|
|
|
|
-}
|
|
|
|
|
|
+// 处理题目搜索
|
|
|
|
+const handleQuestionSearch = () => {
|
|
|
|
+ questionListQuery.page = 1;
|
|
|
|
+ fetchQuestionList();
|
|
|
|
+};
|
|
|
|
|
|
-.status-cards {
|
|
|
|
- flex: 1;
|
|
|
|
- display: flex;
|
|
|
|
- flex-direction: column;
|
|
|
|
- gap: 20px;
|
|
|
|
-}
|
|
|
|
|
|
+// 处理分页大小变化
|
|
|
|
+const handleQuestionSizeChange = (val: number) => {
|
|
|
|
+ questionListQuery.pageSize = val;
|
|
|
|
+ fetchQuestionList();
|
|
|
|
+};
|
|
|
|
|
|
-.section-title {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- margin-bottom: 20px;
|
|
|
|
- font-weight: bold;
|
|
|
|
- color: #333;
|
|
|
|
- position: relative;
|
|
|
|
-}
|
|
|
|
|
|
+// 处理页码变化
|
|
|
|
+const handleQuestionPageChange = (val: number) => {
|
|
|
|
+ questionListQuery.page = val;
|
|
|
|
+ fetchQuestionList();
|
|
|
|
+};
|
|
|
|
|
|
-.section-line {
|
|
|
|
- width: 4px;
|
|
|
|
- height: 16px;
|
|
|
|
- background-color: #67C23A;
|
|
|
|
- margin-right: 8px;
|
|
|
|
-}
|
|
|
|
|
|
+// 处理题目选择变化
|
|
|
|
+const handleQuestionSelectionChange = (selection: any[]) => {
|
|
|
|
+ selectedQuestions.value = selection;
|
|
|
|
+};
|
|
|
|
|
|
-.edit-btn {
|
|
|
|
- position: absolute;
|
|
|
|
- right: 0;
|
|
|
|
- color: #67C23A;
|
|
|
|
-}
|
|
|
|
|
|
+// 取消选择题目
|
|
|
|
+const cancelQuestionSelect = () => {
|
|
|
|
+ showQuestionSelectDialog.value = false;
|
|
|
|
+ selectedQuestions.value = [];
|
|
|
|
+ questionSearchKeyword.value = '';
|
|
|
|
+};
|
|
|
|
|
|
-.detail-item {
|
|
|
|
- display: flex;
|
|
|
|
- margin-bottom: 20px;
|
|
|
|
- line-height: 1.5;
|
|
|
|
-}
|
|
|
|
|
|
+// 确认选择题目
|
|
|
|
+const confirmQuestionSelect = () => {
|
|
|
|
+ if (selectedQuestions.value.length === 0) {
|
|
|
|
+ ElMessage.warning('请至少选择一个题目');
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+console.log(selectedQuestions.value);
|
|
|
|
+ // 将选中的题目转换为正确的数据结构后添加到chatQuestions列表中
|
|
|
|
+ const formattedQuestions = selectedQuestions.value.map((question:any) => ({
|
|
|
|
+ id: question.id || Date.now(), // 确保有唯一ID
|
|
|
|
+ title: question.question || question.title,
|
|
|
|
+ ability: question.ability || '未设置',
|
|
|
|
+ content: question.content || question.question,
|
|
|
|
+ target: question.target || '未设置',
|
|
|
|
+ competency_tags: question.competency_tags || [],
|
|
|
|
+ question_form_name: question.question_form_name,
|
|
|
|
+ scoring_reference: question.scoring_reference,
|
|
|
|
+ question_form: question.question_form,
|
|
|
|
+ weight: 100, // 默认权重
|
|
|
|
+ maxAnswers: 1 // 默认最多回答次数
|
|
|
|
+ }));
|
|
|
|
+
|
|
|
|
+ chatQuestions.value.push(...formattedQuestions);
|
|
|
|
+
|
|
|
|
+ // 关闭对话框并重置状态
|
|
|
|
+ showQuestionSelectDialog.value = false;
|
|
|
|
+ selectedQuestions.value = [];
|
|
|
|
+ questionSearchKeyword.value = '';
|
|
|
|
+
|
|
|
|
+ ElMessage.success(`已添加${selectedQuestions.value.length}个题目`);
|
|
|
|
+};
|
|
|
|
|
|
-.detail-label {
|
|
|
|
- width: 120px;
|
|
|
|
- color: #606266;
|
|
|
|
- font-weight: 500;
|
|
|
|
-}
|
|
|
|
|
|
+/* AI自动组题 */
|
|
|
|
+const handleAutoGenerate = async () => {
|
|
|
|
+ console.log('AI自动组题');
|
|
|
|
+ try {
|
|
|
|
+ // 从已选择的能力标签中获取ID列表
|
|
|
|
+ const competencyTagIds = selectedDimensions.value.map(dimension => {
|
|
|
|
+ const tag = competencyTags.value.find(tag => tag.name === dimension.name);
|
|
|
|
+ return tag ? tag.id : null;
|
|
|
|
+ }).filter(id => id !== null);
|
|
|
|
+
|
|
|
|
+ if (competencyTagIds.length === 0) {
|
|
|
|
+ ElMessage.warning('请至少选择一个能力标签');
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
|
|
-.detail-value {
|
|
|
|
- flex: 1;
|
|
|
|
- color: #303133;
|
|
|
|
-}
|
|
|
|
|
|
+ const params = {
|
|
|
|
+ position_id: route.query.id,
|
|
|
|
+ competency_tag_ids: competencyTagIds,
|
|
|
|
+ open_questions_count: 2, // 开放题数量,默认2个
|
|
|
|
+ choice_questions_count: 2, // 选择题数量,默认2个
|
|
|
|
+ auto_save: true, // 自动保存到数据库
|
|
|
|
+ tenant_id: 1 // 租户ID,这里写死为1,实际应该从系统配置或用户信息中获取
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ // 调用生成题目的接口
|
|
|
|
+ const response = await GenerateQuestions(params);
|
|
|
|
+
|
|
|
|
+ if (response && response.data) {
|
|
|
|
+ // 生成成功后,调用 GetDraftList 获取最新生成的题目
|
|
|
|
+ const draftResponse = await GetDraftList({
|
|
|
|
+ tenant_id: 1,
|
|
|
|
+ position_id: route.query.id as string
|
|
|
|
+ });
|
|
|
|
+console.log(draftResponse);
|
|
|
|
+ if (draftResponse && draftResponse.data) {
|
|
|
|
+ // 将获取到的题目格式化并添加到 chatQuestions 列表中
|
|
|
|
+ const formattedQuestions = draftResponse.data.dataList.map((question: any) => ({
|
|
|
|
+ id: question.id || Date.now(),
|
|
|
|
+ title: question.question || question.title,
|
|
|
|
+ ability: question.ability || '未设置',
|
|
|
|
+ content: question.content || question.question,
|
|
|
|
+ target: question.target || '未设置',
|
|
|
|
+ competency_tags: question.competency_tags || [],
|
|
|
|
+ question_form_name: question.question_form_name,
|
|
|
|
+ scoring_reference: question.scoring_reference,
|
|
|
|
+ question_form: question.question_form,
|
|
|
|
+ weight: 100,
|
|
|
|
+ maxAnswers: 1
|
|
|
|
+ }));
|
|
|
|
+
|
|
|
|
+ // 清空现有题目并添加新生成的题目
|
|
|
|
+ chatQuestions.value = formattedQuestions;
|
|
|
|
+ ElMessage.success(`已成功生成${formattedQuestions.length}个面试题目`);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } catch (error) {
|
|
|
|
+ console.error('AI自动组题失败:', error);
|
|
|
|
+ ElMessage.error('AI自动组题失败,请重试');
|
|
|
|
+ }
|
|
|
|
+};
|
|
|
|
|
|
-.html-content {
|
|
|
|
- max-height: 300px;
|
|
|
|
- overflow-y: auto;
|
|
|
|
- padding: 10px;
|
|
|
|
- /* background-color: #f9f9f9; */
|
|
|
|
- border-radius: 4px;
|
|
|
|
-}
|
|
|
|
|
|
+</script>
|
|
|
|
|
|
-.benefit-tag {
|
|
|
|
- margin-right: 8px;
|
|
|
|
- margin-bottom: 8px;
|
|
|
|
-}
|
|
|
|
|
|
+<style scoped>
|
|
|
|
+@import './index.css';
|
|
|
|
|
|
-.status-switch {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- gap: 10px;
|
|
|
|
|
|
+/* 添加题目选择对话框样式 */
|
|
|
|
+.question-select-dialog {
|
|
|
|
+ :deep(.el-dialog__body) {
|
|
|
|
+ padding: 20px;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
-.status-text {
|
|
|
|
- font-size: 14px;
|
|
|
|
- color: #303133;
|
|
|
|
-}
|
|
|
|
|
|
+.question-select-content {
|
|
|
|
+ .search-bar {
|
|
|
|
+ margin-bottom: 20px;
|
|
|
|
+
|
|
|
|
+ .search-inputs {
|
|
|
|
+ display: flex;
|
|
|
|
+ align-items: center;
|
|
|
|
+ gap: 10px;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
-.usage-content {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- margin-top: 10px;
|
|
|
|
-}
|
|
|
|
|
|
+ .question-list {
|
|
|
|
+ margin-top: 20px;
|
|
|
|
+ }
|
|
|
|
|
|
-.usage-label {
|
|
|
|
- width: 80px;
|
|
|
|
- color: #606266;
|
|
|
|
|
|
+ .pagination-container {
|
|
|
|
+ margin-top: 20px;
|
|
|
|
+ display: flex;
|
|
|
|
+ justify-content: flex-end;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
-.usage-value {
|
|
|
|
- color: #303133;
|
|
|
|
- font-weight: 500;
|
|
|
|
-}
|
|
|
|
|
|
+/* 添加拖拽相关样式 */
|
|
|
|
+.question-card {
|
|
|
|
+ position: relative;
|
|
|
|
+ border: 1px solid #e4e7ed;
|
|
|
|
+ border-radius: 4px;
|
|
|
|
+ padding: 16px;
|
|
|
|
+ margin-bottom: 12px;
|
|
|
|
+ background: #fff;
|
|
|
|
+ transition: all 0.3s;
|
|
|
|
|
|
-.process-steps {
|
|
|
|
- margin-top: 20px;
|
|
|
|
-}
|
|
|
|
|
|
+ &:hover {
|
|
|
|
+ box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
|
|
|
|
+ }
|
|
|
|
|
|
-.process-step {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: flex-start;
|
|
|
|
- margin-bottom: 15px;
|
|
|
|
|
|
+ .drag-handle {
|
|
|
|
+ position: absolute;
|
|
|
|
+ left: -20px;
|
|
|
|
+ top: 50%;
|
|
|
|
+ transform: translateY(-50%);
|
|
|
|
+ cursor: move;
|
|
|
|
+ color: #909399;
|
|
|
|
+ padding: 4px;
|
|
|
|
+
|
|
|
|
+ &:hover {
|
|
|
|
+ color: #409EFF;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
-.step-number {
|
|
|
|
- width: 24px;
|
|
|
|
- height: 24px;
|
|
|
|
- border-radius: 50%;
|
|
|
|
- background-color: #67C23A;
|
|
|
|
- color: white;
|
|
|
|
|
|
+.question-header {
|
|
display: flex;
|
|
display: flex;
|
|
|
|
+ justify-content: space-between;
|
|
align-items: center;
|
|
align-items: center;
|
|
- justify-content: center;
|
|
|
|
- margin-right: 10px;
|
|
|
|
- font-size: 14px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.step-content {
|
|
|
|
- flex: 1;
|
|
|
|
|
|
+ margin-bottom: 12px;
|
|
}
|
|
}
|
|
|
|
|
|
-.step-title {
|
|
|
|
|
|
+.question-title {
|
|
font-weight: 500;
|
|
font-weight: 500;
|
|
- color: #303133;
|
|
|
|
- margin-bottom: 4px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.step-desc {
|
|
|
|
- font-size: 12px;
|
|
|
|
- color: #909399;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.process-step.disabled .step-number {
|
|
|
|
- background-color: #909399;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.process-step.disabled .step-title,
|
|
|
|
-.process-step.disabled .step-desc {
|
|
|
|
- color: #C0C4CC;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 招聘流程编辑对话框样式 */
|
|
|
|
-.process-dialog-content {
|
|
|
|
- max-height: 400px;
|
|
|
|
- overflow-y: auto;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.process-edit-item {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- padding: 15px;
|
|
|
|
- border-radius: 4px;
|
|
|
|
- margin-bottom: 10px;
|
|
|
|
- background-color: #f5f7fa;
|
|
|
|
- position: relative;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.process-edit-item.highlight {
|
|
|
|
- background-color: #f0f9eb;
|
|
|
|
- border: 1px solid #e1f3d8;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.process-number {
|
|
|
|
- width: 24px;
|
|
|
|
- height: 24px;
|
|
|
|
- border-radius: 50%;
|
|
|
|
- background-color: #67C23A;
|
|
|
|
- color: white;
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- justify-content: center;
|
|
|
|
- margin-right: 15px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.process-edit-content {
|
|
|
|
- flex: 1;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.process-edit-desc {
|
|
|
|
- font-size: 12px;
|
|
|
|
- color: #909399;
|
|
|
|
- margin-top: 4px;
|
|
|
|
-}
|
|
|
|
-.process-edit-btn{
|
|
|
|
-
|
|
|
|
display: flex;
|
|
display: flex;
|
|
|
|
+ align-items: flex-start;
|
|
|
|
+ gap: 10px;
|
|
flex-direction: column;
|
|
flex-direction: column;
|
|
- align-items: center;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.delete-btn {
|
|
|
|
- position: absolute;
|
|
|
|
- right: 10px;
|
|
|
|
- top: 50%;
|
|
|
|
- transform: translateY(-50%);
|
|
|
|
|
|
+ .question-number {
|
|
|
|
+ color: #909399;
|
|
|
|
+ margin-right: 8px;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
-/* 添加在每个步骤上方的加号按钮样式 */
|
|
|
|
-.add-process-btn-top {
|
|
|
|
|
|
+.question-actions {
|
|
display: flex;
|
|
display: flex;
|
|
- justify-content: center;
|
|
|
|
- margin-bottom: 5px;
|
|
|
|
-}
|
|
|
|
|
|
+ align-items: center;
|
|
|
|
+ gap: 16px;
|
|
|
|
+ justify-content: flex-end;
|
|
|
|
+ margin-top: 10px;
|
|
|
|
|
|
-.add-process-btn-top .el-button {
|
|
|
|
- color: #67C23A;
|
|
|
|
- padding: 5px;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
-/* 确保原有的底部加号按钮样式保持不变 */
|
|
|
|
-.add-process-btn {
|
|
|
|
- display: flex;
|
|
|
|
- justify-content: center;
|
|
|
|
- margin-top: 15px;
|
|
|
|
|
|
+.question-info {
|
|
|
|
+ .info-item {
|
|
|
|
+ margin-bottom: 8px;
|
|
|
|
+
|
|
|
|
+ &:last-child {
|
|
|
|
+ margin-bottom: 0;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .info-label {
|
|
|
|
+ color: #909399;
|
|
|
|
+ margin-right: 8px;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
-.add-process-btn .el-button {
|
|
|
|
- color: #67C23A;
|
|
|
|
|
|
+/* 拖拽时的样式 */
|
|
|
|
+.sortable-ghost {
|
|
|
|
+ opacity: 0.5;
|
|
|
|
+ background: #f4f4f5;
|
|
}
|
|
}
|
|
|
|
|
|
-/* 流程步骤选项菜单 */
|
|
|
|
-.process-options-menu {
|
|
|
|
- position: absolute;
|
|
|
|
- background-color: white;
|
|
|
|
- border-radius: 4px;
|
|
|
|
|
|
+.sortable-drag {
|
|
|
|
+ opacity: 0.8;
|
|
|
|
+ background: #fff;
|
|
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
|
|
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
|
|
- padding: 8px 0;
|
|
|
|
- z-index: 2000;
|
|
|
|
- max-height: 300px;
|
|
|
|
- overflow-y: auto;
|
|
|
|
- width: 150px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.process-option-item {
|
|
|
|
- padding: 8px 16px;
|
|
|
|
- cursor: pointer;
|
|
|
|
- font-size: 14px;
|
|
|
|
- color: #606266;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.process-option-item:hover {
|
|
|
|
- background-color: #f5f7fa;
|
|
|
|
- color: #67C23A;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* AI视频抽屉样式 */
|
|
|
|
-.ai-video-drawer {
|
|
|
|
- --el-drawer-padding-primary: 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.ai-video-steps {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- justify-content: center;
|
|
|
|
- padding: 20px 0;
|
|
|
|
- border-bottom: 1px solid #e4e7ed;
|
|
|
|
- background-color: #fff;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.step-item {
|
|
|
|
- display: flex;
|
|
|
|
- flex-direction: column;
|
|
|
|
- align-items: center;
|
|
|
|
- color: #909399;
|
|
|
|
- position: relative;
|
|
|
|
- z-index: 1;
|
|
|
|
- cursor: pointer;
|
|
|
|
- transition: all 0.3s;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.step-item:hover {
|
|
|
|
- color: #67C23A;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.step-item:hover .step-number {
|
|
|
|
- border-color: #67C23A;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.step-number {
|
|
|
|
- width: 30px;
|
|
|
|
- height: 30px;
|
|
|
|
- border-radius: 50%;
|
|
|
|
- background-color: #f5f7fa;
|
|
|
|
- color: #909399;
|
|
|
|
- border: 1px solid #dcdfe6;
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- justify-content: center;
|
|
|
|
- margin-bottom: 8px;
|
|
|
|
- font-weight: bold;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.step-item.active .step-number {
|
|
|
|
- background-color: #67C23A;
|
|
|
|
- color: white;
|
|
|
|
- border-color: #67C23A;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.step-line {
|
|
|
|
- width: 100px;
|
|
|
|
- height: 1px;
|
|
|
|
- background-color: #e4e7ed;
|
|
|
|
- margin: 0 15px;
|
|
|
|
- position: relative;
|
|
|
|
- top: -15px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.step-line.active-line {
|
|
|
|
- background-color: #67C23A;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.step-title {
|
|
|
|
- font-size: 14px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.ai-video-content {
|
|
|
|
- padding: 20px;
|
|
|
|
- height: calc(100% - 120px); /* 减去header和footer高度 */
|
|
|
|
- overflow-y: auto;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.drawer-footer {
|
|
|
|
- padding: 10px 20px;
|
|
|
|
- text-align: right;
|
|
|
|
- border-top: 1px solid #e4e7ed;
|
|
|
|
- position: absolute;
|
|
|
|
- bottom: 0;
|
|
|
|
- left: 0;
|
|
|
|
- right: 0;
|
|
|
|
- background-color: white;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 步骤1:考察能力样式 */
|
|
|
|
-.option-tip {
|
|
|
|
- margin-bottom: 15px;
|
|
|
|
- color: #606266;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.new-feature-tip {
|
|
|
|
- background-color: #f0f9eb;
|
|
|
|
- padding: 10px;
|
|
|
|
- border-radius: 4px;
|
|
|
|
- margin-bottom: 20px;
|
|
|
|
- font-size: 14px;
|
|
|
|
- color: #606266;
|
|
|
|
- line-height: 1.5;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.new-tag {
|
|
|
|
- display: inline-block;
|
|
|
|
- background-color: #f56c6c;
|
|
|
|
- color: white;
|
|
|
|
- padding: 2px 6px;
|
|
|
|
- border-radius: 4px;
|
|
|
|
- font-size: 12px;
|
|
|
|
- margin-right: 5px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.ability-options {
|
|
|
|
- display: grid;
|
|
|
|
- grid-template-columns: repeat(3, 1fr);
|
|
|
|
- gap: 15px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.ability-label {
|
|
|
|
- font-size: 14px;
|
|
|
|
- color: #606266;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 步骤2:面试题目样式 */
|
|
|
|
-.interview-settings {
|
|
|
|
- width: 100%;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.interview-header {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: flex-start;
|
|
|
|
- margin-bottom: 20px;
|
|
|
|
- flex-direction: column;
|
|
|
|
-}
|
|
|
|
-.interview-content{
|
|
|
|
- display: flex;
|
|
|
|
- justify-content: space-around;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.interview-duration {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.duration-value {
|
|
|
|
- font-weight: bold;
|
|
|
|
- margin: 0 10px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.duration-tip {
|
|
|
|
- color: #909399;
|
|
|
|
- font-size: 12px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.interview-mode {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- margin-bottom: 20px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.mode-value {
|
|
|
|
- font-weight: bold;
|
|
|
|
- margin: 0 10px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.interview-questions-container {
|
|
|
|
- width: 85%;
|
|
|
|
- min-height: 200px;
|
|
|
|
- /* border: 1px dashed #dcdfe6; */
|
|
|
|
- border-radius: 4px;
|
|
|
|
- margin-bottom: 20px;
|
|
|
|
- display: flex;
|
|
|
|
- justify-content: center;
|
|
|
|
- align-items: center;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.no-questions {
|
|
|
|
- text-align: center;
|
|
|
|
- color: #909399;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.ai-tip {
|
|
|
|
- font-size: 12px;
|
|
|
|
- color: #c0c4cc;
|
|
|
|
- margin: 5px 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.auto-generate-btn {
|
|
|
|
- margin-top: 15px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.multi-dimension-questions {
|
|
|
|
- width: 30%;
|
|
|
|
- margin-top: 30px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.dimension-title {
|
|
|
|
- font-weight: bold;
|
|
|
|
- margin-bottom: 15px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.dimension-list {
|
|
|
|
- display: flex;
|
|
|
|
- flex-direction: column;
|
|
|
|
- gap: 10px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.dimension-item {
|
|
|
|
- border: 1px solid #dcdfe6;
|
|
|
|
- border-radius: 4px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.dimension-header {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- justify-content: space-between;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.expand-icon {
|
|
|
|
- cursor: pointer;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 步骤3:系统设置样式 */
|
|
|
|
-.system-settings {
|
|
|
|
- width: 100%;
|
|
|
|
- .setting-item{
|
|
|
|
- border: 1px solid #ebeef5;
|
|
|
|
- border-radius: 30px;
|
|
|
|
- display: flex;
|
|
|
|
- justify-content: space-around;
|
|
|
|
- align-items: center;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.setting-section {
|
|
|
|
- padding: 20px;
|
|
|
|
-
|
|
|
|
- .section-header {
|
|
|
|
- font-size: 16px;
|
|
|
|
- font-weight: 500;
|
|
|
|
- margin-bottom: 20px;
|
|
|
|
- color: #333;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .interviewer-avatars {
|
|
|
|
- display: flex;
|
|
|
|
- gap: 20px;
|
|
|
|
- margin-bottom: 30px;
|
|
|
|
-
|
|
|
|
- .avatar-item {
|
|
|
|
- cursor: pointer;
|
|
|
|
- text-align: center;
|
|
|
|
-
|
|
|
|
- .avatar-wrapper {
|
|
|
|
- display: flex;
|
|
|
|
- flex-direction: column;
|
|
|
|
- align-items: center;
|
|
|
|
- gap: 8px;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .avatar-circle {
|
|
|
|
- width: 60px;
|
|
|
|
- height: 60px;
|
|
|
|
- border-radius: 50%;
|
|
|
|
- border: 2px solid transparent;
|
|
|
|
- overflow: hidden;
|
|
|
|
- transition: all 0.3s ease;
|
|
|
|
-
|
|
|
|
- &.selected {
|
|
|
|
- border-color: #0052D9;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- img {
|
|
|
|
- width: 100%;
|
|
|
|
- height: 100%;
|
|
|
|
- object-fit: cover;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .avatar-name {
|
|
|
|
- font-size: 14px;
|
|
|
|
- color: #666;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- &:hover {
|
|
|
|
- .avatar-circle {
|
|
|
|
- border-color: #0052D9;
|
|
|
|
- opacity: 0.8;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.rank-settings {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- margin-bottom: 15px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.rank-range {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- margin-right: 30px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.range-inputs {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- margin-left: 10px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.percent-input {
|
|
|
|
- width: 80px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.score-display {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.score-range {
|
|
|
|
- margin-left: 10px;
|
|
|
|
- color: #67C23A;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.add-rank-btn {
|
|
|
|
- margin-top: 10px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.validity-setting {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- margin-bottom: 10px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.validity-label {
|
|
|
|
- margin-left: 10px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.validity-tip {
|
|
|
|
- font-size: 12px;
|
|
|
|
- color: #909399;
|
|
|
|
- margin-top: 5px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.model-select {
|
|
|
|
- width: 200px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-@media (max-width: 768px) {
|
|
|
|
- .ability-options {
|
|
|
|
- grid-template-columns: repeat(2, 1fr);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .step-line {
|
|
|
|
- width: 50px;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-@media (max-width: 480px) {
|
|
|
|
- .ability-options {
|
|
|
|
- grid-template-columns: 1fr;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .interview-header {
|
|
|
|
- flex-direction: column;
|
|
|
|
- align-items: flex-start;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .interview-actions {
|
|
|
|
- margin-top: 10px;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .rank-settings {
|
|
|
|
- flex-direction: column;
|
|
|
|
- align-items: flex-start;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .rank-range {
|
|
|
|
- margin-bottom: 10px;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 视频宣讲弹窗样式 */
|
|
|
|
-.video-lecture-form {
|
|
|
|
- padding: 20px 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.form-item {
|
|
|
|
- margin-bottom: 20px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.form-label {
|
|
|
|
- font-weight: 500;
|
|
|
|
- margin-bottom: 8px;
|
|
|
|
- color: #606266;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.video-uploader {
|
|
|
|
- width: 100%;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.upload-area {
|
|
|
|
- width: 100%;
|
|
|
|
- height: 120px;
|
|
|
|
- border: 1px dashed #d9d9d9;
|
|
|
|
- border-radius: 6px;
|
|
|
|
- display: flex;
|
|
|
|
- flex-direction: column;
|
|
|
|
- align-items: center;
|
|
|
|
- justify-content: center;
|
|
|
|
- cursor: pointer;
|
|
|
|
- transition: border-color 0.3s;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.upload-area:hover {
|
|
|
|
- border-color: #67C23A;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.upload-text {
|
|
|
|
- color: #909399;
|
|
|
|
- font-size: 12px;
|
|
|
|
- margin-top: 8px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.el-icon {
|
|
|
|
- font-size: 24px;
|
|
|
|
- color: #909399;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* AI实时对话抽屉样式 */
|
|
|
|
-.ai-chat-drawer {
|
|
|
|
- --el-drawer-padding-primary: 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.ai-chat-content {
|
|
|
|
- padding: 20px;
|
|
|
|
- height: calc(100% - 120px);
|
|
|
|
- overflow-y: auto;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.chat-settings {
|
|
|
|
- margin-bottom: 30px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.chat-actions {
|
|
|
|
- display: flex;
|
|
|
|
- gap: 10px;
|
|
|
|
- margin: 20px 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.chat-questions {
|
|
|
|
- margin-top: 20px;
|
|
|
|
- min-height: 200px;
|
|
|
|
- border: 1px dashed #dcdfe6;
|
|
|
|
- border-radius: 4px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.empty-questions {
|
|
|
|
- height: 200px;
|
|
|
|
- display: flex;
|
|
|
|
- flex-direction: column;
|
|
|
|
- align-items: center;
|
|
|
|
- justify-content: center;
|
|
|
|
- color: #909399;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.tip-text {
|
|
|
|
- font-size: 12px;
|
|
|
|
- color: #c0c4cc;
|
|
|
|
- margin-top: 8px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.question-list {
|
|
|
|
- padding: 16px;
|
|
|
|
- /* background: #f5f7fa; */
|
|
|
|
- border-radius: 8px;
|
|
|
|
- min-height: 200px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.question-card {
|
|
|
|
- background: #fff;
|
|
|
|
- border-radius: 8px;
|
|
|
|
- padding: 20px;
|
|
|
|
- margin-bottom: 16px;
|
|
|
|
- box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.05);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.question-header {
|
|
|
|
- display: flex;
|
|
|
|
- justify-content: space-between;
|
|
|
|
- align-items: center;
|
|
|
|
- margin-bottom: 20px;
|
|
|
|
- flex-wrap: wrap;
|
|
|
|
- gap: 10px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.question-title {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- gap: 10px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.question-number {
|
|
|
|
- color: #333;
|
|
|
|
- font-weight: 500;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.question-actions {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- gap: 20px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.weight-control, .answer-limit {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- gap: 8px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.weight-label, .answer-label {
|
|
|
|
- color: #606266;
|
|
|
|
- font-size: 14px;
|
|
|
|
- white-space: nowrap;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-:deep(.el-input-number) {
|
|
|
|
- width: 100px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-:deep(.el-select) {
|
|
|
|
- width: 120px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.question-info {
|
|
|
|
- background: #f8f9fa;
|
|
|
|
- padding: 15px;
|
|
|
|
- border-radius: 4px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.info-item {
|
|
|
|
- margin-bottom: 12px;
|
|
|
|
- line-height: 1.6;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.info-item:last-child {
|
|
|
|
- margin-bottom: 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.info-label {
|
|
|
|
- color: #909399;
|
|
|
|
- margin-right: 8px;
|
|
|
|
- font-weight: 500;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 问题编辑弹框样式 */
|
|
|
|
-.question-form {
|
|
|
|
- padding: 20px 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.form-item {
|
|
|
|
- margin-bottom: 20px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.form-label {
|
|
|
|
- font-weight: 500;
|
|
|
|
- margin-bottom: 8px;
|
|
|
|
- color: #606266;
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.required {
|
|
|
|
- color: #f56c6c;
|
|
|
|
- margin-left: 4px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.full-width {
|
|
|
|
- width: 100%;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-:deep(.el-input__count) {
|
|
|
|
- background: transparent;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-:deep(.el-textarea__count) {
|
|
|
|
- background: transparent;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 资料收集对话框样式 */
|
|
|
|
-.data-collection-form {
|
|
|
|
- padding: 20px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 表单项样式 */
|
|
|
|
-.form-item {
|
|
|
|
- margin-bottom: 24px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 表单标签样式 */
|
|
|
|
-.form-label {
|
|
|
|
- font-size: 14px;
|
|
|
|
- color: #333;
|
|
|
|
- font-weight: 500;
|
|
|
|
- margin-bottom: 12px;
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 必填星号样式 */
|
|
|
|
-.required {
|
|
|
|
- color: #ff4d4f;
|
|
|
|
- margin-left: 4px;
|
|
|
|
- font-size: 14px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 开关样式 */
|
|
|
|
-:deep(.el-switch) {
|
|
|
|
- margin-top: 8px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 问题列表容器样式 */
|
|
|
|
-.question-list {
|
|
|
|
- margin-top: 12px;
|
|
|
|
- /* border: 1px solid #e4e7ed; */
|
|
|
|
- border-radius: 4px;
|
|
|
|
- padding: 16px;
|
|
|
|
-/* background-color: #f8f9fa; */
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 问题项样式 */
|
|
|
|
-.question-item {
|
|
|
|
- margin-bottom: 16px;
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- flex-direction: column;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 复选框组样式 */
|
|
|
|
-:deep(.el-checkbox-group) {
|
|
|
|
- display: flex;
|
|
|
|
- flex-direction: column;
|
|
|
|
- gap: 16px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 复选框样式 */
|
|
|
|
-:deep(.el-checkbox) {
|
|
|
|
- margin-right: 0;
|
|
|
|
- height: auto;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 复选框标签样式 */
|
|
|
|
-:deep(.el-checkbox__label) {
|
|
|
|
- font-size: 14px;
|
|
|
|
- color: #606266;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.data-collection-dialog {
|
|
|
|
- .data-collection-form {
|
|
|
|
- padding: 0;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .question-list {
|
|
|
|
- padding: 0;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .question-item {
|
|
|
|
- border: 1px solid #DCDFE6;
|
|
|
|
- border-radius: 4px;
|
|
|
|
- margin-bottom: 16px;
|
|
|
|
- overflow: hidden;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .question-header {
|
|
|
|
- background: #F5F7FA;
|
|
|
|
- padding: 12px 16px;
|
|
|
|
- border-bottom: 1px solid #DCDFE6;
|
|
|
|
- display: flex;
|
|
|
|
- justify-content: space-between;
|
|
|
|
- align-items: center;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .question-title {
|
|
|
|
- font-size: 14px;
|
|
|
|
- color: #303133;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .question-type {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- gap: 4px;
|
|
|
|
- color: #909399;
|
|
|
|
- font-size: 14px;
|
|
|
|
- cursor: pointer;
|
|
|
|
-
|
|
|
|
- .el-icon {
|
|
|
|
- font-size: 12px;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .question-content {
|
|
|
|
- padding: 16px;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .user-answer {
|
|
|
|
- color: #909399;
|
|
|
|
- font-size: 14px;
|
|
|
|
- margin-bottom: 16px;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .question-actions {
|
|
|
|
- display: flex;
|
|
|
|
- justify-content: space-between;
|
|
|
|
- align-items: center;
|
|
|
|
- margin-bottom: 16px;
|
|
|
|
- padding-bottom: 16px;
|
|
|
|
- border-bottom: 1px solid #EBEEF5;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .action-left {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- gap: 8px;
|
|
|
|
-
|
|
|
|
- .action-text {
|
|
|
|
- font-size: 14px;
|
|
|
|
- color: #606266;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .action-right {
|
|
|
|
- display: flex;
|
|
|
|
- gap: 16px;
|
|
|
|
-
|
|
|
|
- .action-icon {
|
|
|
|
- font-size: 16px;
|
|
|
|
- color: #909399;
|
|
|
|
- cursor: pointer;
|
|
|
|
-
|
|
|
|
- &:hover {
|
|
|
|
- color: #409EFF;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .question-settings {
|
|
|
|
- display: flex;
|
|
|
|
- gap: 24px;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .setting-item {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- gap: 8px;
|
|
|
|
-
|
|
|
|
- span {
|
|
|
|
- font-size: 14px;
|
|
|
|
- color: #606266;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .add-question {
|
|
|
|
- margin-top: 24px;
|
|
|
|
- text-align: center;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 简历收集对话框样式 */
|
|
|
|
-.resume-collection-dialog {
|
|
|
|
- .resume-collection-form {
|
|
|
|
- padding: 20px 0;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .switch-label {
|
|
|
|
- margin-left: 10px;
|
|
|
|
- font-size: 14px;
|
|
|
|
- color: #606266;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .resume-preview {
|
|
|
|
- margin-top: 20px;
|
|
|
|
- border: 1px solid #e4e7ed;
|
|
|
|
- border-radius: 4px;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .preview-title {
|
|
|
|
- padding: 10px 15px;
|
|
|
|
- background-color: #f5f7fa;
|
|
|
|
- border-bottom: 1px solid #e4e7ed;
|
|
|
|
- font-weight: 500;
|
|
|
|
- color: #606266;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .preview-content {
|
|
|
|
- padding: 15px;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .preview-item {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- margin-bottom: 15px;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .item-label {
|
|
|
|
- width: 80px;
|
|
|
|
- color: #606266;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .item-input {
|
|
|
|
- flex: 1;
|
|
|
|
- height: 32px;
|
|
|
|
- background-color: #f5f7fa;
|
|
|
|
- border: 1px solid #dcdfe6;
|
|
|
|
- border-radius: 4px;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .item-upload {
|
|
|
|
- flex: 1;
|
|
|
|
- height: 60px;
|
|
|
|
- background-color: #f5f7fa;
|
|
|
|
- border: 1px dashed #dcdfe6;
|
|
|
|
- border-radius: 4px;
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- justify-content: center;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .item-required {
|
|
|
|
- color: #f56c6c;
|
|
|
|
- margin-left: 5px;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 添加代码测试对话框样式 */
|
|
|
|
-.code-test-dialog {
|
|
|
|
- .code-test-form {
|
|
|
|
- padding: 20px 0;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .switch-label {
|
|
|
|
- margin-left: 10px;
|
|
|
|
- font-size: 14px;
|
|
|
|
- color: #606266;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .test-paper-selector {
|
|
|
|
- margin-top: 10px;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .empty-paper {
|
|
|
|
- display: flex;
|
|
|
|
- flex-direction: column;
|
|
|
|
- align-items: center;
|
|
|
|
- justify-content: center;
|
|
|
|
- padding: 30px;
|
|
|
|
- border: 1px dashed #dcdfe6;
|
|
|
|
- border-radius: 4px;
|
|
|
|
- background-color: #f8f9fa;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .tip-text {
|
|
|
|
- margin-top: 10px;
|
|
|
|
- font-size: 12px;
|
|
|
|
- color: #909399;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .selected-paper {
|
|
|
|
- display: flex;
|
|
|
|
- justify-content: space-between;
|
|
|
|
- align-items: center;
|
|
|
|
- padding: 15px;
|
|
|
|
- border: 1px solid #dcdfe6;
|
|
|
|
- border-radius: 4px;
|
|
|
|
- background-color: #f8f9fa;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .paper-info {
|
|
|
|
- flex: 1;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .paper-title {
|
|
|
|
- font-weight: 500;
|
|
|
|
- color: #303133;
|
|
|
|
- margin-bottom: 5px;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .paper-meta {
|
|
|
|
- display: flex;
|
|
|
|
- gap: 15px;
|
|
|
|
- font-size: 12px;
|
|
|
|
- color: #909399;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .paper-actions {
|
|
|
|
- display: flex;
|
|
|
|
- gap: 10px;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 添加打字测试对话框样式 */
|
|
|
|
-.typing-test-dialog {
|
|
|
|
- .typing-test-form {
|
|
|
|
- padding: 20px;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .form-item {
|
|
|
|
- margin-bottom: 24px;
|
|
|
|
- position: relative;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .form-label {
|
|
|
|
- font-weight: 500;
|
|
|
|
- margin-bottom: 12px;
|
|
|
|
- color: #606266;
|
|
|
|
- font-size: 14px;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .article-selection {
|
|
|
|
- margin-top: 10px;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .add-article-btn {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- gap: 5px;
|
|
|
|
- font-size: 13px;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .time-input-container {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .time-input {
|
|
|
|
- width: 120px;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .time-unit {
|
|
|
|
- margin-left: 10px;
|
|
|
|
- color: #606266;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .preview-uploader {
|
|
|
|
- width: 100px;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .upload-area {
|
|
|
|
- width: 100px;
|
|
|
|
- height: 100px;
|
|
|
|
- border: 1px dashed #d9d9d9;
|
|
|
|
- border-radius: 6px;
|
|
|
|
- display: flex;
|
|
|
|
- flex-direction: column;
|
|
|
|
- align-items: center;
|
|
|
|
- justify-content: center;
|
|
|
|
- cursor: pointer;
|
|
|
|
- transition: border-color 0.3s;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .upload-area:hover {
|
|
|
|
- border-color: #67C23A;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .upload-text {
|
|
|
|
- color: #909399;
|
|
|
|
- font-size: 12px;
|
|
|
|
- margin-top: 8px;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .notes-counter {
|
|
|
|
- position: absolute;
|
|
|
|
- right: 10px;
|
|
|
|
- bottom: -20px;
|
|
|
|
- font-size: 12px;
|
|
|
|
- color: #909399;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .criteria-options {
|
|
|
|
- display: flex;
|
|
|
|
- gap: 20px;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /* 添加以下新样式 */
|
|
|
|
- :deep(.el-radio) {
|
|
|
|
- margin-right: 30px;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- :deep(.el-radio__label) {
|
|
|
|
- font-size: 14px;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- :deep(.el-textarea) {
|
|
|
|
- margin-bottom: 5px;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- :deep(.el-checkbox__label) {
|
|
|
|
- font-size: 14px;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- :deep(.el-input) {
|
|
|
|
- width: auto;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.title-edit-container {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: flex-start;
|
|
|
|
- gap: 10px;
|
|
|
|
- flex-direction: column;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.edit-title-btn {
|
|
|
|
- color: #67C23A;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 职位名称编辑相关样式 */
|
|
|
|
-.edit-title-btn {
|
|
|
|
- margin-left: 10px;
|
|
|
|
- font-size: 14px;
|
|
|
|
- color: #409EFF;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.title-edit-container {
|
|
|
|
- flex: 1;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.title-edit-actions {
|
|
|
|
- display: flex;
|
|
|
|
- justify-content: flex-end;
|
|
|
|
- margin-top: 10px;
|
|
|
|
- gap: 10px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 确保在编辑模式下输入框有足够的宽度 */
|
|
|
|
-.title-edit-container :deep(.el-input) {
|
|
|
|
- width: 100%;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.competency-tag {
|
|
|
|
- margin-right: 8px;
|
|
|
|
- margin-bottom: 8px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.info-icon {
|
|
|
|
- margin-left: 4px;
|
|
|
|
- font-size: 14px;
|
|
|
|
- color: #909399;
|
|
|
|
- float: right;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-:deep(.el-checkbox-group) {
|
|
|
|
- display: flex;
|
|
|
|
- flex-wrap: wrap;
|
|
|
|
- gap: 12px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-:deep(.el-checkbox) {
|
|
|
|
- margin-right: 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.recommended-dimensions,
|
|
|
|
-.optional-dimensions,
|
|
|
|
-.custom-dimensions {
|
|
|
|
- background: #fff;
|
|
|
|
- border-radius: 8px;
|
|
|
|
- padding: 20px;
|
|
|
|
- margin-bottom: 24px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.recommended-dimensions h3,
|
|
|
|
-.optional-dimensions h3,
|
|
|
|
-.custom-dimensions h3 {
|
|
|
|
- font-size: 16px;
|
|
|
|
- color: #333;
|
|
|
|
- margin-bottom: 16px;
|
|
|
|
- font-weight: 500;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.dimension-grid {
|
|
|
|
- display: grid;
|
|
|
|
- grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
|
|
|
|
- gap: 16px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.ability-label {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- gap: 8px;
|
|
|
|
-}
|
|
|
|
-.ability-label .sheng{
|
|
|
|
- position: absolute;
|
|
|
|
- right: 0;
|
|
|
|
- bottom:0;
|
|
|
|
- width: 30px;
|
|
|
|
- height: 30px;
|
|
|
|
-}
|
|
|
|
-.ability-label span {
|
|
|
|
- font-size: 14px;
|
|
|
|
- color: #333;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.ability-label .el-icon {
|
|
|
|
- color: #909399;
|
|
|
|
- font-size: 16px;
|
|
|
|
- cursor: help;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.custom-dimension-input {
|
|
|
|
- display: flex;
|
|
|
|
- flex-direction: column;
|
|
|
|
- gap: 16px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.custom-dimension-input .el-input {
|
|
|
|
- width: 100%;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.custom-dimension-input .el-textarea {
|
|
|
|
- margin-top: 8px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.el-checkbox {
|
|
|
|
- margin-right: 0;
|
|
|
|
- margin-bottom: 0;
|
|
|
|
- padding: 12px;
|
|
|
|
- border: 1px solid #EBEEF5;
|
|
|
|
- border-radius: 4px;
|
|
|
|
- transition: all 0.3s;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.el-checkbox:hover {
|
|
|
|
- background: #F5F7FA;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.el-checkbox.is-checked {
|
|
|
|
- background: #F0F9FF;
|
|
|
|
- border-color: #409EFF;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.new-feature-tip {
|
|
|
|
- background: #FFF7E6;
|
|
|
|
- border-radius: 4px;
|
|
|
|
- padding: 12px;
|
|
|
|
- margin-bottom: 20px;
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.new-tag {
|
|
|
|
- background: #FF9800;
|
|
|
|
- color: white;
|
|
|
|
- padding: 2px 6px;
|
|
|
|
- border-radius: 4px;
|
|
|
|
- font-size: 12px;
|
|
|
|
- margin-right: 8px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.dimension-form {
|
|
|
|
- display: flex;
|
|
|
|
- flex-direction: column;
|
|
|
|
- gap: 16px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.dimension-row {
|
|
|
|
- display: flex;
|
|
|
|
- gap: 16px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.dimension-input {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- /* flex: 1; */
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.dimension-actions {
|
|
|
|
- display: flex;
|
|
|
|
- justify-content: space-between;
|
|
|
|
- align-items: center;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.input-label {
|
|
|
|
- width: 80px;
|
|
|
|
- font-weight: 500;
|
|
|
|
- color: #606266;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.multi-dimension-questions {
|
|
|
|
- padding: 10px;
|
|
|
|
- background-color: #f2f2f2;
|
|
|
|
- border-radius: 10px;
|
|
|
|
- .dimension-title {
|
|
|
|
- font-size: 16px;
|
|
|
|
- font-weight: 500;
|
|
|
|
- margin-bottom: 16px;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .dimension-list {
|
|
|
|
- .dimension-item {
|
|
|
|
- display: flex;
|
|
|
|
- justify-content: space-between;
|
|
|
|
- align-items: center;
|
|
|
|
- background: #fff;
|
|
|
|
- border-radius: 4px;
|
|
|
|
- margin-bottom: 12px;
|
|
|
|
- position: relative;
|
|
|
|
- .sheng{
|
|
|
|
- position: absolute;
|
|
|
|
- right: 0;
|
|
|
|
- bottom:0;
|
|
|
|
- width: 30px;
|
|
|
|
- height: 30px;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .dimension-header {
|
|
|
|
- padding: 12px 16px;
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- justify-content: space-between;
|
|
|
|
- cursor: pointer;
|
|
|
|
-
|
|
|
|
- .dimension-info {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- gap: 8px;
|
|
|
|
-
|
|
|
|
- .ability-name {
|
|
|
|
- font-weight: 500;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .new-tag {
|
|
|
|
- background: #e6f7ff;
|
|
|
|
- color: #1890ff;
|
|
|
|
- padding: 2px 6px;
|
|
|
|
- border-radius: 2px;
|
|
|
|
- font-size: 12px;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .dimension-level {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- gap: 4px;
|
|
|
|
-
|
|
|
|
- .level-label {
|
|
|
|
- color: #606266;
|
|
|
|
- font-size: 14px;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .level-value {
|
|
|
|
- color: #303133;
|
|
|
|
- font-weight: 500;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .expand-icon {
|
|
|
|
- font-size: 16px;
|
|
|
|
- color: #909399;
|
|
|
|
- transition: transform 0.3s;
|
|
|
|
-
|
|
|
|
- &.expanded {
|
|
|
|
- transform: rotate(180deg);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .dimension-content {
|
|
|
|
- padding: 0 16px 16px;
|
|
|
|
- width: 30px;
|
|
|
|
- .ability-description {
|
|
|
|
- color: #606266;
|
|
|
|
- font-size: 14px;
|
|
|
|
- line-height: 1.5;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.interviewer-avatars {
|
|
|
|
- display: flex;
|
|
|
|
- gap: 20px;
|
|
|
|
- margin: 20px 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.avatar-item {
|
|
|
|
- text-align: center;
|
|
|
|
- cursor: pointer;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.avatar-item.selected {
|
|
|
|
- position: relative;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.avatar-item.selected::after {
|
|
|
|
- content: '';
|
|
|
|
- position: absolute;
|
|
|
|
- bottom: -5px;
|
|
|
|
- left: 50%;
|
|
|
|
- transform: translateX(-50%);
|
|
|
|
- width: 6px;
|
|
|
|
- height: 6px;
|
|
|
|
- background-color: #0066FF;
|
|
|
|
- border-radius: 50%;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.avatar-image {
|
|
|
|
- width: 80px;
|
|
|
|
- height: 80px;
|
|
|
|
- border-radius: 50%;
|
|
|
|
- overflow: hidden;
|
|
|
|
- margin-bottom: 8px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.avatar-image img {
|
|
|
|
- width: 100%;
|
|
|
|
- height: 100%;
|
|
|
|
- object-fit: cover;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.avatar-name {
|
|
|
|
- font-size: 14px;
|
|
|
|
- color: #333;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.interview-settings {
|
|
|
|
- margin-top: 30px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.setting-item {
|
|
|
|
- margin-bottom: 20px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.setting-label {
|
|
|
|
- font-weight: 500;
|
|
|
|
- margin-bottom: 10px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.setting-desc {
|
|
|
|
- font-size: 12px;
|
|
|
|
- color: #666;
|
|
|
|
- margin-top: 5px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.setting-options {
|
|
|
|
- display: flex;
|
|
|
|
- gap: 20px;
|
|
|
|
}
|
|
}
|
|
-</style>
|
|
|
|
|
|
+</style>
|