yangg 11 hours ago
parent
commit
35f2cec191

+ 2 - 2
.env.development

@@ -6,8 +6,8 @@ ENV = 'development'
 # 本地环境接口地址 121.36.251.245
 
 
-VITE_API_URL = 'https://backend.qicai321.com'
-#VITE_API_URL = 'http://192.168.100.109:8083'
+#VITE_API_URL = 'https://backend.qicai321.com'
+VITE_API_URL = 'http://192.168.100.109:8083'
 VITE_API_WX_URL='https://api.weixin.qq.com/'
 VITE_API_URL_MINLONG='http://117.185.80.170:7861'
 # 是否启用按钮权限

+ 77 - 2
src/views/position/create/index.vue

@@ -104,6 +104,7 @@
               controls-position="right"
               min="0"
               @input="updateSalaryRange"
+              @blur="validateSalaryInput"
             />
             <span class="salary-separator">-</span>
             <el-input-number
@@ -114,6 +115,7 @@
               type="number"
               min="0"
               @input="updateSalaryRange"
+              @blur="validateSalaryInput"
             />
           </div>
         </el-form-item>
@@ -308,12 +310,41 @@ const validateRichText = (rule: any, value: string, callback: any) => {
   callback();
 };
 
+// 薪资范围验证函数
+const validateSalaryRange = (rule: any, value: any, callback: any) => {
+  if (!formData.start_salary || !formData.end_salary) {
+    callback(new Error('请完整填写起始薪资和最高薪资'));
+    return;
+  }
+  
+  const startSalary = Number(formData.start_salary);
+  const endSalary = Number(formData.end_salary);
+  
+  if (isNaN(startSalary) || isNaN(endSalary)) {
+    callback(new Error('薪资必须为有效数字'));
+    return;
+  }
+  
+  if (startSalary < 0 || endSalary < 0) {
+    callback(new Error('薪资不能为负数'));
+    return;
+  }
+  
+  if (startSalary > endSalary) {
+    callback(new Error('起始薪资不能高于最高薪资'));
+    return;
+  }
+  
+  callback();
+};
+
 // 表单验证规则
 const rules = {
   title: [{ required: true, message: '职位名称必填', trigger: 'blur' }],
   job_category: [{ required: true, message: '职位类别必填', trigger: 'change' }],
   job_type: [{ required: true, message: '职位性质必填', trigger: 'change' }],
   location: [{ required: true, message: '工作地点必填', trigger: 'change' }],
+  detailed_address: [{ required: true, message: '详细地址必填', trigger: 'blur' }],
   department: [{ required: true, message: '所属部门必填', trigger: 'blur' }],
   status: [{ required: true, message: '职位状态必填', trigger: 'change' }],
   end_date: [{ required: true, message: '截止日期必填', trigger: 'change' }],
@@ -329,7 +360,7 @@ const rules = {
     validator: validateRichText,
     trigger: 'blur' 
   }],
-  salary_range: [{ required: true, message: '请完整填写薪资类型、起始薪资和最高薪资', trigger: 'blur' }],
+  salary_range: [{ required: true, validator: validateSalaryRange, trigger: 'blur' }],
   /* competency_tags: [
     { required: true, message: '请选择胜任力标签', trigger: 'change' }
   ], */
@@ -381,7 +412,23 @@ const handleLocationChange = (value: any) => {
 };
 
 // 实时更新薪资范围
-const updateSalaryRange = () => {
+const updateSalaryRange = (isBlur = false) => {
+  // 验证薪资范围
+  if (formData.start_salary && formData.end_salary) {
+    const startSalary = Number(formData.start_salary);
+    const endSalary = Number(formData.end_salary);
+    
+    // 如果起始薪资大于最高薪资,自动调整
+    if (startSalary > endSalary) {
+      formData.end_salary = formData.start_salary;
+      if (isBlur) {
+        ElMessage.warning('起始薪资不能高于最高薪资,已自动调整为相同值');
+      } else {
+        ElMessage.warning('起始薪资不能高于最高薪资,已自动调整');
+      }
+    }
+  }
+  
   if (formData.salary_type && formData.start_salary && formData.end_salary) {
     formData.salary_range = `${formData.salary_type} ${formData.start_salary}-${formData.end_salary}`;
   } else {
@@ -389,6 +436,34 @@ const updateSalaryRange = () => {
   }
 };
 
+// 失焦时的薪资调整处理
+const handleSalaryBlur = () => {
+  // 检查是否需要调整薪资范围
+  if (formData.start_salary && formData.end_salary) {
+    const startSalary = Number(formData.start_salary);
+    const endSalary = Number(formData.end_salary);
+    
+    // 如果起始薪资大于最高薪资,自动调整
+    if (startSalary > endSalary) {
+      formData.end_salary = formData.start_salary;
+      ElMessage.warning('起始薪资不能高于最高薪资,已自动调整为相同值');
+    }
+  }
+  
+  // 更新薪资范围显示
+  updateSalaryRange();
+  
+  // 触发表单验证
+  if (formRef.value) {
+    formRef.value.validateField('salary_range');
+  }
+};
+
+// 验证薪资输入(保持向后兼容)
+const validateSalaryInput = () => {
+  handleSalaryBlur();
+};
+
 // 添加生成职位描述的方法
 const generatePositionDescription = async () => {
   // 检查必要字段是否已填写

+ 1 - 0
src/views/position/detail/index.css

@@ -1817,6 +1817,7 @@
 }
 
 .salary-input {
+  margin-left: 20px;
   width: 150px;
 }
 

+ 37 - 7
src/views/position/detail/index.vue

@@ -121,10 +121,10 @@
                 <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" />
+                controls-position="right" min="0" @input="updateSalaryRange" @blur="handleSalaryBlur" />
               <span class="salary-separator">-</span>
-              <el-input-number v-model="editingEndSalary" placeholder="最高薪资" class="salary-input"
-                controls-position="right" type="number" min="0" @input="updateSalaryRange" />
+              <el-input-number v-model="editingEndSalary" style="margin-left: 20px;" placeholder="最高薪资" class="salary-input"
+                controls-position="right" type="number" min="0" @input="updateSalaryRange" @blur="handleSalaryBlur" />
             </div>
             <div class="title-edit-actions">
               <el-button size="small" @click="cancelEditSalary">取消</el-button>
@@ -1648,7 +1648,7 @@
           <div class="setting-item">
             <div class="setting-info">
               <span class="setting-name">「情绪/眼动检测」</span>
-              <p class="setting-desc">该现已,将对候选人整场面试的情绪与压力表现进行分析,建议开启</p>
+              <p class="setting-desc">选取后,将对候选人整场面试的情绪与压力表现进行分析,建议开启</p>
             </div>
             <el-switch v-model="interviewSettings.positionDetection" />
           </div>
@@ -4452,10 +4452,40 @@ const cancelEditSalary = () => {
 };
 
 // 更新薪资范围
-const updateSalaryRange = () => {
-  if (editingStartSalary.value > editingEndSalary.value && editingEndSalary.value !== 0) {
-    editingStartSalary.value = editingEndSalary.value;
+const updateSalaryRange = (isBlur = false) => {
+  // 验证薪资范围
+  if (editingStartSalary.value && editingEndSalary.value) {
+    const startSalary = Number(editingStartSalary.value);
+    const endSalary = Number(editingEndSalary.value);
+    
+    // 如果起始薪资大于最高薪资,自动调整
+    if (startSalary > endSalary) {
+      editingEndSalary.value = editingStartSalary.value;
+      if (isBlur) {
+        ElMessage.warning('起始薪资不能高于最高薪资,已自动调整为相同值');
+      } else {
+        ElMessage.warning('起始薪资不能高于最高薪资,已自动调整');
+      }
+    }
+  }
+};
+
+// 失焦时的薪资调整处理
+const handleSalaryBlur = () => {
+  // 检查是否需要调整薪资范围
+  if (editingStartSalary.value && editingEndSalary.value) {
+    const startSalary = Number(editingStartSalary.value);
+    const endSalary = Number(editingEndSalary.value);
+    
+    // 如果起始薪资大于最高薪资,自动调整
+    if (startSalary > endSalary) {
+      editingEndSalary.value = editingStartSalary.value;
+      ElMessage.warning('起始薪资不能高于最高薪资,已自动调整为相同值');
+    }
   }
+  
+  // 更新薪资范围显示
+  updateSalaryRange(true);
 };
 
 // 保存职位薪资

+ 2 - 2
src/views/questionBank/list/crud.tsx

@@ -386,13 +386,13 @@ export const createCrudOptions = function ({ crudExpose, context }: CreateCrudOp
 						type: 'text',
 					},
 					edit: {
-						show: auth('role:Update'),
+						show:true,// auth('role:Update'),
 						size: 'small',
 						icon:"Edit",
 						type: 'text',
 					},
 					remove: {
-						show: auth('role:Delete'),
+						show: true,//auth('role:Delete'),
 						size: 'small',
 						type: 'text',
 						icon:"Delete",