From ee0dd1393e5e1417b1c81cc6228a59ad108b108a Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 24 十一月 2025 11:24:01 +0800
Subject: [PATCH] 1.金鹰黄金-新增入职添加导入功能

---
 src/views/personnelManagement/onboarding/components/formDia.vue |  110 +++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 78 insertions(+), 32 deletions(-)

diff --git a/src/views/personnelManagement/onboarding/components/formDia.vue b/src/views/personnelManagement/onboarding/components/formDia.vue
index ba9dd6f..ce89cea 100644
--- a/src/views/personnelManagement/onboarding/components/formDia.vue
+++ b/src/views/personnelManagement/onboarding/components/formDia.vue
@@ -29,19 +29,21 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="绫嶈疮锛�" prop="nativePlace">
+            <el-form-item label="鎴风睄浣忓潃锛�" prop="nativePlace">
               <el-input v-model="form.nativePlace" placeholder="璇疯緭鍏�" clearable/>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="30">
           <el-col :span="12">
-            <el-form-item label="宀椾綅锛�" prop="postJob">
-              <el-input v-model="form.postJob" placeholder="璇疯緭鍏�" clearable/>
+            <el-form-item label="宀椾綅锛�" prop="deptPositionId">
+              <el-select v-model="form.deptPositionId" filterable placeholder="璇烽�夋嫨宀椾綅" :loading="positionLoading" clearable>
+                <el-option v-for="p in positionOptions" :key="p.id" :label="p.name || p.label" :value="p.id" />
+              </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="瀹跺涵浣忓潃锛�" prop="adress">
+            <el-form-item label="鐜颁綇鍧�锛�" prop="adress">
               <el-input v-model="form.adress" placeholder="璇疯緭鍏�" clearable/>
             </el-form-item>
           </el-col>
@@ -59,11 +61,6 @@
           </el-col>
         </el-row>
         <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="韬唤璇佸彿锛�" prop="identityCard">
-              <el-input v-model="form.identityCard" placeholder="璇疯緭鍏�" clearable/>
-            </el-form-item>
-          </el-col>
           <el-col :span="12">
             <el-form-item label="骞撮緞锛�" prop="age">
               <el-input-number v-model="form.age" :precision="0" :step="1" style="width: 100%"/>
@@ -90,7 +87,7 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="鍚堝悓骞撮檺锛�" prop="contractTerm">
-              <el-input-number v-model="form.contractTerm" :precision="0" :step="1" style="width: 100%"/>
+              <el-input-number v-model="form.contractTerm" :precision="0" :step="1" style="width: 100%" :disabled="true"/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -105,6 +102,7 @@
                   format="YYYY-MM-DD"
                   clearable
                   style="width: 100%"
+									@change="calculateContractTerm"
               />
             </el-form-item>
           </el-col>
@@ -118,6 +116,7 @@
                   format="YYYY-MM-DD"
                   clearable
                   style="width: 100%"
+									@change="calculateContractTerm"
               />
             </el-form-item>
           </el-col>
@@ -134,24 +133,28 @@
 </template>
 
 <script setup>
-import {ref} from "vue";
+import {ref, reactive, toRefs, getCurrentInstance, onMounted} from "vue";
 import {getStaffJoinInfo, staffJoinAdd, staffJoinUpdate} from "@/api/personnelManagement/onboarding.js";
-const { proxy } = getCurrentInstance()
-const emit = defineEmits(['confirm'])
+import {deptPositionListPage} from "@/api/lavorissce/issue";
+
+const {proxy} = getCurrentInstance()
+const emit = defineEmits(['close'])
 
 const dialogFormVisible = ref(false);
 const operationType = ref('')
+const positionOptions = ref([])
+const positionLoading = ref(false)
+
 const data = reactive({
   form: {
     staffNo: "",
     staffName: "",
     sex: "",
     nativePlace: "",
-    postJob: "",
+    deptPositionId: "",
     adress: "",
     firstStudy: "",
     profession: "",
-    identityCard: "",
     age: 0,
     phone: "",
     emergencyContact: "",
@@ -162,36 +165,51 @@
     staffState: "",
   },
   rules: {
-    staffNo: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" },],
-    staffName: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    sex: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    nativePlace: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    postJob: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    adress: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    firstStudy: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    profession: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    identityCard: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    age: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    phone: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    emergencyContact: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    emergencyContactPhone: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    contractTerm: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    contractStartTime: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    contractEndTime: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
+    staffNo: [{required: true, message: "璇疯緭鍏�", trigger: "blur"},],
+    staffName: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
+    sex: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
+    nativePlace: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
+    deptPositionId: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
+    adress: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
+    firstStudy: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
+    profession: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
+    age: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
+    phone: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
+    emergencyContact: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
+    emergencyContactPhone: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
+    contractTerm: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
+    contractStartTime: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
+    contractEndTime: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
   },
 });
-const { form, rules } = toRefs(data);
+const {form, rules} = toRefs(data);
+
+async function loadPositions() {
+  try {
+    positionLoading.value = true
+    const res = await deptPositionListPage({pageNum: -1, pageSize:-1})
+    positionOptions.value = res?.data?.records || res?.data || []
+  } finally {
+    positionLoading.value = false
+  }
+}
 
 // 鎵撳紑寮规
 const openDialog = (type, row) => {
   operationType.value = type;
   dialogFormVisible.value = true;
+  loadPositions()
   if (operationType.value === 'edit') {
     getStaffJoinInfo(row.id).then(res => {
       form.value = {...res.data}
+      // 缂栬緫鏃朵篃璁$畻涓�娆″悎鍚屽勾闄�
+      calculateContractTerm();
     })
+  } else {
+    form.value.id = ''
   }
 }
+
 // 鎻愪氦浜у搧琛ㄥ崟
 const submitForm = () => {
   proxy.$refs.formRef.validate(valid => {
@@ -211,6 +229,34 @@
     }
   })
 }
+// 璁$畻鍚堝悓骞撮檺
+const calculateContractTerm = () => {
+  if (form.value.contractStartTime && form.value.contractEndTime) {
+    const startDate = new Date(form.value.contractStartTime);
+    const endDate = new Date(form.value.contractEndTime);
+    
+    if (endDate > startDate) {
+      // 璁$畻骞翠唤宸�
+      const yearDiff = endDate.getFullYear() - startDate.getFullYear();
+      const monthDiff = endDate.getMonth() - startDate.getMonth();
+      const dayDiff = endDate.getDate() - startDate.getDate();
+      
+      let years = yearDiff;
+      
+      // 濡傛灉缁撴潫鏃ユ湡鐨勬湀鏃ュ皬浜庡紑濮嬫棩鏈熺殑鏈堟棩锛屽垯鍑忓幓1骞�
+      if (monthDiff < 0 || (monthDiff === 0 && dayDiff < 0)) {
+        years = yearDiff - 1;
+      }
+      
+      form.value.contractTerm = Math.max(0, years);
+    } else {
+      form.value.contractTerm = 0;
+    }
+  } else {
+    form.value.contractTerm = 0;
+  }
+};
+
 // 鍏抽棴寮规
 const closeDia = () => {
   proxy.resetForm("formRef");

--
Gitblit v1.9.3