|
@@ -100,12 +100,38 @@
|
|
</el-button>
|
|
</el-button>
|
|
</div>
|
|
</div>
|
|
<div class="title-edit-container" v-else>
|
|
<div class="title-edit-container" v-else>
|
|
- <el-input
|
|
|
|
- v-model="editingSalary"
|
|
|
|
- placeholder="请输入职位薪资"
|
|
|
|
- maxlength="30"
|
|
|
|
- show-word-limit
|
|
|
|
- />
|
|
|
|
|
|
+ <div class="salary-range-container">
|
|
|
|
+ <el-select
|
|
|
|
+ v-model="editingSalaryType"
|
|
|
|
+ placeholder="薪资类型"
|
|
|
|
+ class="salary-type-select"
|
|
|
|
+ @change="updateSalaryRange"
|
|
|
|
+ >
|
|
|
|
+ <el-option label="月薪" value="月薪" />
|
|
|
|
+ <el-option label="年薪" value="年薪" />
|
|
|
|
+ <el-option label="日薪" value="日薪" />
|
|
|
|
+ <el-option label="时薪" value="时薪" />
|
|
|
|
+ </el-select>
|
|
|
|
+ <el-input-number
|
|
|
|
+ v-model="editingStartSalary"
|
|
|
|
+ placeholder="起始薪资"
|
|
|
|
+ class="salary-input"
|
|
|
|
+ type="number"
|
|
|
|
+ controls-position="right"
|
|
|
|
+ min="0"
|
|
|
|
+ @input="updateSalaryRange"
|
|
|
|
+ />
|
|
|
|
+ <span class="salary-separator">-</span>
|
|
|
|
+ <el-input-number
|
|
|
|
+ v-model="editingEndSalary"
|
|
|
|
+ placeholder="最高薪资"
|
|
|
|
+ class="salary-input"
|
|
|
|
+ controls-position="right"
|
|
|
|
+ type="number"
|
|
|
|
+ min="0"
|
|
|
|
+ @input="updateSalaryRange"
|
|
|
|
+ />
|
|
|
|
+ </div>
|
|
<div class="title-edit-actions">
|
|
<div class="title-edit-actions">
|
|
<el-button size="small" @click="cancelEditSalary">取消</el-button>
|
|
<el-button size="small" @click="cancelEditSalary">取消</el-button>
|
|
<el-button size="small" type="primary" @click="saveSalary">保存</el-button>
|
|
<el-button size="small" type="primary" @click="saveSalary">保存</el-button>
|
|
@@ -207,9 +233,9 @@
|
|
<div class="title-edit-container" v-else>
|
|
<div class="title-edit-container" v-else>
|
|
<el-date-picker
|
|
<el-date-picker
|
|
v-model="editingEndDate"
|
|
v-model="editingEndDate"
|
|
- type="date"
|
|
|
|
- placeholder="请选择截止日期"
|
|
|
|
- value-format="YYYY-MM-DD HH:mm:ss"
|
|
|
|
|
|
+ type="datetime"
|
|
|
|
+ placeholder="请选择截止日期"
|
|
|
|
+ value-format="YYYY-MM-DD HH:mm:ss"
|
|
style="width: 100%"
|
|
style="width: 100%"
|
|
/>
|
|
/>
|
|
<div class="title-edit-actions">
|
|
<div class="title-edit-actions">
|
|
@@ -360,7 +386,8 @@
|
|
:class="{ 'disabled': !step.active }"
|
|
:class="{ 'disabled': !step.active }"
|
|
v-show="step.visible"
|
|
v-show="step.visible"
|
|
>
|
|
>
|
|
- <div class="step-number">{{ getVisibleStepNumber(index) }}</div>
|
|
|
|
|
|
+ <div class="step-number" v-if="step.name!='已通过' && step.name!='已淘汰'"
|
|
|
|
+ >{{ getVisibleStepNumber(index) }}</div>
|
|
<div class="step-content">
|
|
<div class="step-content">
|
|
<div class="step-title">{{ step.name }}</div>
|
|
<div class="step-title">{{ step.name }}</div>
|
|
<!-- <div class="step-desc">{{ step.description }}</div> -->
|
|
<!-- <div class="step-desc">{{ step.description }}</div> -->
|
|
@@ -398,17 +425,17 @@
|
|
class="process-edit-item"
|
|
class="process-edit-item"
|
|
:class="{ 'highlight': step.active }"
|
|
:class="{ 'highlight': step.active }"
|
|
>
|
|
>
|
|
- <div class="process-number">{{ getVisibleStepNumber(index) }}</div>
|
|
|
|
|
|
+ <div class="process-number" v-if="step.name!='已通过' && step.name!='已淘汰'">{{ getVisibleStepNumber(index) }}</div>
|
|
<div class="process-edit-content">
|
|
<div class="process-edit-content">
|
|
<div>{{ step.name }}</div>
|
|
<div>{{ step.name }}</div>
|
|
- <div class="process-edit-desc">{{ step.description }}</div>
|
|
|
|
|
|
+ <!-- <div class="process-edit-desc">{{ step.description }}</div> -->
|
|
</div><!-- v-if="step.name=='AI考察'" -->
|
|
</div><!-- v-if="step.name=='AI考察'" -->
|
|
<div class="process-edit-btn" v-if="step.name!='已通过' && step.name!='已淘汰'">
|
|
<div class="process-edit-btn" v-if="step.name!='已通过' && step.name!='已淘汰'">
|
|
<el-button
|
|
<el-button
|
|
type="info"
|
|
type="info"
|
|
size="small"
|
|
size="small"
|
|
plain
|
|
plain
|
|
-
|
|
|
|
|
|
+ v-if="step.name!='简历收集'"
|
|
@click="editProcessStep(step, index)"
|
|
@click="editProcessStep(step, index)"
|
|
>
|
|
>
|
|
修改
|
|
修改
|
|
@@ -1245,15 +1272,14 @@
|
|
</el-select>
|
|
</el-select>
|
|
<div class="form-tip">选择题目的形式:开放问题、单选题、多选题、填空题、自言语</div>
|
|
<div class="form-tip">选择题目的形式:开放问题、单选题、多选题、填空题、自言语</div>
|
|
</div>
|
|
</div>
|
|
-
|
|
|
|
|
|
+<!-- :disabled="true" -->
|
|
<div class="form-item">
|
|
<div class="form-item">
|
|
<div class="form-label">适用职位</div>
|
|
<div class="form-label">适用职位</div>
|
|
<el-select
|
|
<el-select
|
|
- v-model="questionForm.position"
|
|
|
|
|
|
+ v-model="positionId"
|
|
placeholder="请选择适用职位类型"
|
|
placeholder="请选择适用职位类型"
|
|
class="full-width"
|
|
class="full-width"
|
|
- :disabled="true"
|
|
|
|
- multiple
|
|
|
|
|
|
+ :disabled="true"
|
|
>
|
|
>
|
|
<el-option
|
|
<el-option
|
|
v-for="pos in positionOptions"
|
|
v-for="pos in positionOptions"
|
|
@@ -1719,6 +1745,7 @@
|
|
placeholder="请输入步骤名称"
|
|
placeholder="请输入步骤名称"
|
|
maxlength="30"
|
|
maxlength="30"
|
|
show-word-limit
|
|
show-word-limit
|
|
|
|
+ :disabled="true"
|
|
/>
|
|
/>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
@@ -2009,7 +2036,7 @@
|
|
<el-input
|
|
<el-input
|
|
v-model="editingBeforeStartText"
|
|
v-model="editingBeforeStartText"
|
|
type="textarea"
|
|
type="textarea"
|
|
- rows="2"
|
|
|
|
|
|
+ rows="5"
|
|
maxlength="150"
|
|
maxlength="150"
|
|
placeholder="请输入开始前提示内容"
|
|
placeholder="请输入开始前提示内容"
|
|
|
|
|
|
@@ -2796,13 +2823,7 @@ const getcompetency_tags = (value:any)=>{
|
|
const competencyTagOptions = ref<CompetencyTag[]>([]);
|
|
const competencyTagOptions = ref<CompetencyTag[]>([]);
|
|
|
|
|
|
// 职位类型选项
|
|
// 职位类型选项
|
|
-const positionOptions = ref([
|
|
|
|
- { label: '后端开发', value: 'backend' },
|
|
|
|
- { label: '前端开发', value: 'frontend' },
|
|
|
|
- { label: '产品经理', value: 'product_manager' },
|
|
|
|
- { label: '项目经理', value: 'project_manager' },
|
|
|
|
- { label: '测试工程师', value: 'test_engineer' }
|
|
|
|
-]);
|
|
|
|
|
|
+const positionOptions = ref([]);
|
|
|
|
|
|
// 题目分类选项
|
|
// 题目分类选项
|
|
const categoryOptions = ref([
|
|
const categoryOptions = ref([
|
|
@@ -2841,6 +2862,21 @@ const resetQuestionForm = () => {
|
|
});
|
|
});
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+/* 获取职位列表 */
|
|
|
|
+const getPosList = async () => {
|
|
|
|
+ const response = await api.GetList({
|
|
|
|
+ page: 1,
|
|
|
|
+ page_size: 50
|
|
|
|
+ });
|
|
|
|
+ console.log(response);
|
|
|
|
+ positionOptions.value = response.data.map((item:any)=>{
|
|
|
|
+ return {
|
|
|
|
+ label: item.title,
|
|
|
|
+ value: String(item.id)
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+
|
|
// 取消添加问题
|
|
// 取消添加问题
|
|
const cancelAddQuestion = () => {
|
|
const cancelAddQuestion = () => {
|
|
showQuestionDialog.value = false;
|
|
showQuestionDialog.value = false;
|
|
@@ -3362,7 +3398,8 @@ const addSelectedStepType = async (type: string, label: string) => {
|
|
|
|
|
|
// 添加视频宣讲类型的处理
|
|
// 添加视频宣讲类型的处理
|
|
if (type === 'video_presentation') {
|
|
if (type === 'video_presentation') {
|
|
- showVideoLectureConfig();
|
|
|
|
|
|
+ confirmResumeCollection();
|
|
|
|
+
|
|
showOptionsMenu.value = false;
|
|
showOptionsMenu.value = false;
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
@@ -4049,6 +4086,7 @@ onMounted(() => {
|
|
getPositionDetail();
|
|
getPositionDetail();
|
|
getCompetencyList();
|
|
getCompetencyList();
|
|
getDigitalList();
|
|
getDigitalList();
|
|
|
|
+ getPosList()
|
|
// 初始化配置状态
|
|
// 初始化配置状态
|
|
initializeConfigState();
|
|
initializeConfigState();
|
|
});
|
|
});
|
|
@@ -4369,11 +4407,27 @@ const saveLocation = async () => {
|
|
|
|
|
|
// 职位薪资编辑
|
|
// 职位薪资编辑
|
|
const isEditingSalary = ref(false);
|
|
const isEditingSalary = ref(false);
|
|
-const editingSalary = ref('');
|
|
|
|
|
|
+const editingSalaryType = ref('月薪');
|
|
|
|
+const editingStartSalary = ref(0);
|
|
|
|
+const editingEndSalary = ref(0);
|
|
|
|
|
|
// 开始编辑职位薪资
|
|
// 开始编辑职位薪资
|
|
const startEditSalary = () => {
|
|
const startEditSalary = () => {
|
|
- editingSalary.value = positionData.salary_range || '';
|
|
|
|
|
|
+ if (positionData.salary_range) {
|
|
|
|
+ const parts = positionData.salary_range.split(' ');
|
|
|
|
+ if (parts.length >= 2) {
|
|
|
|
+ editingSalaryType.value = parts[0];
|
|
|
|
+ const range = parts[1].split('-');
|
|
|
|
+ if (range.length === 2) {
|
|
|
|
+ editingStartSalary.value = parseInt(range[0]) || 0;
|
|
|
|
+ editingEndSalary.value = parseInt(range[1]) || 0;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ editingSalaryType.value = '月薪';
|
|
|
|
+ editingStartSalary.value = 0;
|
|
|
|
+ editingEndSalary.value = 0;
|
|
|
|
+ }
|
|
isEditingSalary.value = true;
|
|
isEditingSalary.value = true;
|
|
};
|
|
};
|
|
|
|
|
|
@@ -4382,17 +4436,25 @@ const cancelEditSalary = () => {
|
|
isEditingSalary.value = false;
|
|
isEditingSalary.value = false;
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+// 更新薪资范围
|
|
|
|
+const updateSalaryRange = () => {
|
|
|
|
+ if (editingStartSalary.value > editingEndSalary.value && editingEndSalary.value !== 0) {
|
|
|
|
+ editingStartSalary.value = editingEndSalary.value;
|
|
|
|
+ }
|
|
|
|
+};
|
|
|
|
+
|
|
// 保存职位薪资
|
|
// 保存职位薪资
|
|
const saveSalary = async () => {
|
|
const saveSalary = async () => {
|
|
try {
|
|
try {
|
|
const id = route.query.id;
|
|
const id = route.query.id;
|
|
|
|
+ const salaryRange = `${editingSalaryType.value} ${editingStartSalary.value}-${editingEndSalary.value}`;
|
|
await api.UpdateObj({
|
|
await api.UpdateObj({
|
|
id: id,
|
|
id: id,
|
|
- salary_range: editingSalary.value.trim()
|
|
|
|
|
|
+ salary_range: salaryRange
|
|
});
|
|
});
|
|
|
|
|
|
// 更新本地数据
|
|
// 更新本地数据
|
|
- positionData.salary_range = editingSalary.value.trim();
|
|
|
|
|
|
+ positionData.salary_range = salaryRange;
|
|
isEditingSalary.value = false;
|
|
isEditingSalary.value = false;
|
|
ElMessage.success('职位薪资已更新');
|
|
ElMessage.success('职位薪资已更新');
|
|
} catch (error) {
|
|
} catch (error) {
|