From a4f4241f24d171c49b52f81eae364bf79a7d7005 Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期三, 29 四月 2026 11:06:23 +0800
Subject: [PATCH] fix: 甘肃祁连牧场企业合同中缺失转正和调岗这两个功能

---
 src/views/personnelManagement/onboarding/components/formDia.vue           |    7 +
 src/api/personnelManagement/employeeRecord.js                             |   18 +++
 src/views/personnelManagement/employeeRecord/index.vue                    |   42 ++++++
 src/views/personnelManagement/employeeRecord/components/regularizeDia.vue |  128 +++++++++++++++++++++
 src/views/inventoryManagement/issueManagement/index.vue                   |    8 
 src/views/personnelManagement/employeeRecord/components/transferDia.vue   |  105 +++++++++++++++++
 src/views/personnelManagement/onboarding/index.vue                        |    4 
 7 files changed, 306 insertions(+), 6 deletions(-)

diff --git a/src/api/personnelManagement/employeeRecord.js b/src/api/personnelManagement/employeeRecord.js
index 378756a..1ef8ece 100644
--- a/src/api/personnelManagement/employeeRecord.js
+++ b/src/api/personnelManagement/employeeRecord.js
@@ -15,4 +15,22 @@
         method: 'get',
         params: query,
     })
+}
+
+// 鍛樺伐杞
+export function staffRegularize(data) {
+    return request({
+        url: '/staff/staffOnJob/regularize',
+        method: 'post',
+        data,
+    })
+}
+
+// 鍛樺伐璋冨矖
+export function staffTransferPost(data) {
+    return request({
+        url: '/staff/staffOnJob/transferPost',
+        method: 'post',
+        data,
+    })
 }
\ No newline at end of file
diff --git a/src/views/inventoryManagement/issueManagement/index.vue b/src/views/inventoryManagement/issueManagement/index.vue
index d8ce8f8..0450a93 100644
--- a/src/views/inventoryManagement/issueManagement/index.vue
+++ b/src/views/inventoryManagement/issueManagement/index.vue
@@ -53,14 +53,14 @@
     </div>
     <el-dialog v-model="dialogFormVisible" :title="'鏂板鍑哄簱'" width="40%" @close="closeDia">
       <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef">
-        <el-form-item label="鍑哄簱鏁伴噺锛�" prop="salesContractNo">
+        <el-form-item label="鍑哄簱鏁伴噺锛�" prop="inboundQuantity">
           <el-input-number :step="0.01" :min="0" style="width: 100%" v-model="form.inboundQuantity" placeholder="璇疯緭鍏�" clearable />
         </el-form-item>
-        <el-form-item label="鍑哄簱鏃ユ湡锛�" prop="projectName">
+        <el-form-item label="鍑哄簱鏃ユ湡锛�" prop="inboundTime">
           <el-date-picker style="width: 100%" v-model="form.inboundTime" value-format="YYYY-MM-DD" format="YYYY-MM-DD"
             type="date" placeholder="璇烽�夋嫨" clearable />
         </el-form-item>
-        <el-form-item label="鍑哄簱浜猴細" prop="entryPerson">
+        <el-form-item label="鍑哄簱浜猴細" prop="nickName">
           <el-select v-model="form.nickName" placeholder="璇烽�夋嫨" clearable>
             <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId" />
           </el-select>
@@ -121,7 +121,7 @@
   rules: {
     inboundTime: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
     inboundQuantity: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    nickname: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }]
+    nickName: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }]
   }
 })
 const { searchForm, form, rules } = toRefs(data)
diff --git a/src/views/personnelManagement/employeeRecord/components/regularizeDia.vue b/src/views/personnelManagement/employeeRecord/components/regularizeDia.vue
new file mode 100644
index 0000000..13346b8
--- /dev/null
+++ b/src/views/personnelManagement/employeeRecord/components/regularizeDia.vue
@@ -0,0 +1,128 @@
+<template>
+  <el-dialog v-model="visible" title="鍛樺伐杞" width="600px" destroy-on-close>
+    <el-form ref="formRef" :model="form" :rules="rules" label-width="110px">
+      <el-form-item label="鍛樺伐缂栧彿" prop="staffNo">
+        <el-input v-model="form.staffNo" disabled />
+      </el-form-item>
+      <el-form-item label="鍛樺伐濮撳悕" prop="staffName">
+        <el-input v-model="form.staffName" disabled />
+      </el-form-item>
+      <el-form-item label="褰撳墠宀椾綅" prop="currentPost">
+        <el-input v-model="form.currentPost" disabled />
+      </el-form-item>
+      <el-form-item label="杞鏃ユ湡" prop="regularDate">
+        <el-date-picker
+            v-model="form.regularDate"
+            value-format="YYYY-MM-DD"
+            type="date"
+            placeholder="璇烽�夋嫨杞鏃ユ湡"
+            style="width: 100%"
+        />
+      </el-form-item>
+      <el-form-item label="璇曠敤璇勪及" prop="assessmentResult">
+        <el-select v-model="form.assessmentResult" placeholder="璇烽�夋嫨璇勪及缁撴灉" style="width: 100%">
+          <el-option label="閫氳繃" value="閫氳繃" />
+          <el-option label="寤舵湡" value="寤舵湡" />
+          <el-option label="涓嶉�氳繃" value="涓嶉�氳繃" />
+        </el-select>
+      </el-form-item>
+      <el-form-item v-if="form.assessmentResult === '寤舵湡'" label="寤舵湡鏈堜唤鏁�" prop="delayMonths">
+        <el-input-number v-model="form.delayMonths" :min="1" :max="24" :step="1" style="width: 100%" />
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="remark">
+        <el-input v-model="form.remark" type="textarea" :rows="3" maxlength="200" show-word-limit />
+      </el-form-item>
+    </el-form>
+    <template #footer>
+      <el-button @click="visible = false">鍙栨秷</el-button>
+      <el-button type="primary" :loading="loading" @click="submit">纭</el-button>
+    </template>
+  </el-dialog>
+</template>
+
+<script setup>
+import {reactive, ref} from "vue";
+import dayjs from "dayjs";
+import {ElMessage} from "element-plus";
+import {staffRegularize} from "@/api/personnelManagement/employeeRecord.js";
+
+const emit = defineEmits(["success"]);
+const visible = ref(false);
+const loading = ref(false);
+const formRef = ref();
+const form = reactive({
+  id: undefined,
+  staffNo: "",
+  staffName: "",
+  currentPost: "",
+  regularDate: "",
+  assessmentResult: "閫氳繃",
+  delayMonths: undefined,
+  remark: "",
+});
+const validateDelayMonths = (rule, value, callback) => {
+  if (form.assessmentResult !== "寤舵湡") {
+    callback();
+    return;
+  }
+  if (!value) {
+    callback(new Error("璇烽�夋嫨寤舵湡鏈堜唤鏁�"));
+    return;
+  }
+  callback();
+};
+const validateRegularDate = (rule, value, callback) => {
+  if (form.assessmentResult === "寤舵湡") {
+    callback();
+    return;
+  }
+  if (!value) {
+    callback(new Error("璇烽�夋嫨杞鏃ユ湡"));
+    return;
+  }
+  callback();
+};
+const rules = {
+  regularDate: [{validator: validateRegularDate, trigger: "change"}],
+  assessmentResult: [{required: true, message: "璇烽�夋嫨璇曠敤璇勪及", trigger: "change"}],
+  delayMonths: [{validator: validateDelayMonths, trigger: "change"}],
+};
+
+const openDialog = (row) => {
+  form.id = row.id;
+  form.staffNo = row.staffNo || "";
+  form.staffName = row.staffName || "";
+  form.currentPost = row.postJob || "";
+  form.regularDate = dayjs().format("YYYY-MM-DD");
+  form.assessmentResult = "閫氳繃";
+  form.delayMonths = undefined;
+  form.remark = "";
+  visible.value = true;
+};
+
+const submit = () => {
+  formRef.value?.validate(async (valid) => {
+    if (!valid) return;
+    loading.value = true;
+    try {
+      await staffRegularize({
+        ...form,
+        regularDate: form.assessmentResult === "寤舵湡" ? undefined : form.regularDate,
+        delayMonths: form.assessmentResult === "寤舵湡" ? form.delayMonths : undefined,
+        staffState: 1,
+      });
+      ElMessage.success("杞鎴愬姛");
+      visible.value = false;
+      emit("success");
+    } finally {
+      loading.value = false;
+    }
+  });
+};
+
+defineExpose({
+  openDialog,
+});
+</script>
+
+<style scoped></style>
diff --git a/src/views/personnelManagement/employeeRecord/components/transferDia.vue b/src/views/personnelManagement/employeeRecord/components/transferDia.vue
new file mode 100644
index 0000000..de7daf6
--- /dev/null
+++ b/src/views/personnelManagement/employeeRecord/components/transferDia.vue
@@ -0,0 +1,105 @@
+<template>
+  <el-dialog v-model="visible" title="鍛樺伐璋冨矖" width="600px" destroy-on-close>
+    <el-form ref="formRef" :model="form" :rules="rules" label-width="110px">
+      <el-form-item label="鍛樺伐缂栧彿" prop="staffNo">
+        <el-input v-model="form.staffNo" disabled />
+      </el-form-item>
+      <el-form-item label="鍛樺伐濮撳悕" prop="staffName">
+        <el-input v-model="form.staffName" disabled />
+      </el-form-item>
+      <el-form-item label="鍘熷矖浣�" prop="originPost">
+        <el-input v-model="form.originPost" disabled />
+      </el-form-item>
+      <el-form-item label="鏂板矖浣�" prop="targetPost">
+        <el-input v-model="form.targetPost" placeholder="璇疯緭鍏ユ柊宀椾綅" />
+      </el-form-item>
+      <el-form-item label="璋冨矖鏃ユ湡" prop="transferDate">
+        <el-date-picker
+            v-model="form.transferDate"
+            value-format="YYYY-MM-DD"
+            type="date"
+            placeholder="璇烽�夋嫨璋冨矖鏃ユ湡"
+            style="width: 100%"
+        />
+      </el-form-item>
+      <el-form-item label="璋冨矖绫诲瀷" prop="transferType">
+        <el-select v-model="form.transferType" placeholder="璇烽�夋嫨璋冨矖绫诲瀷" style="width: 100%">
+          <el-option label="骞宠皟" value="骞宠皟" />
+          <el-option label="鏅嬪崌" value="鏅嬪崌" />
+          <el-option label="闄嶇骇" value="闄嶇骇" />
+          <el-option label="涓存椂璋冨矖" value="涓存椂璋冨矖" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="璋冨矖鍘熷洜" prop="transferReason">
+        <el-input v-model="form.transferReason" type="textarea" :rows="3" maxlength="200" show-word-limit />
+      </el-form-item>
+    </el-form>
+    <template #footer>
+      <el-button @click="visible = false">鍙栨秷</el-button>
+      <el-button type="primary" :loading="loading" @click="submit">纭</el-button>
+    </template>
+  </el-dialog>
+</template>
+
+<script setup>
+import {reactive, ref} from "vue";
+import dayjs from "dayjs";
+import {ElMessage} from "element-plus";
+import {staffTransferPost} from "@/api/personnelManagement/employeeRecord.js";
+
+const emit = defineEmits(["success"]);
+const visible = ref(false);
+const loading = ref(false);
+const formRef = ref();
+const form = reactive({
+  id: undefined,
+  staffNo: "",
+  staffName: "",
+  originPost: "",
+  targetPost: "",
+  transferDate: "",
+  transferType: "",
+  transferReason: "",
+});
+const rules = {
+  targetPost: [{required: true, message: "璇疯緭鍏ユ柊宀椾綅", trigger: "blur"}],
+  transferDate: [{required: true, message: "璇烽�夋嫨璋冨矖鏃ユ湡", trigger: "change"}],
+  transferType: [{required: true, message: "璇烽�夋嫨璋冨矖绫诲瀷", trigger: "change"}],
+  transferReason: [{required: true, message: "璇疯緭鍏ヨ皟宀楀師鍥�", trigger: "blur"}],
+};
+
+const openDialog = (row) => {
+  form.id = row.id;
+  form.staffNo = row.staffNo || "";
+  form.staffName = row.staffName || "";
+  form.originPost = row.postJob || "";
+  form.targetPost = "";
+  form.transferDate = dayjs().format("YYYY-MM-DD");
+  form.transferType = "";
+  form.transferReason = "";
+  visible.value = true;
+};
+
+const submit = () => {
+  formRef.value?.validate(async (valid) => {
+    if (!valid) return;
+    loading.value = true;
+    try {
+      await staffTransferPost({
+        ...form,
+      });
+      ElMessage.success("璋冨矖鎴愬姛");
+      visible.value = false;
+      emit("success");
+    } finally {
+      loading.value = false;
+    }
+  });
+};
+
+defineExpose({
+  openDialog,
+});
+</script>
+
+<style scoped></style>
diff --git a/src/views/personnelManagement/employeeRecord/index.vue b/src/views/personnelManagement/employeeRecord/index.vue
index 5a0d07c..3717f04 100644
--- a/src/views/personnelManagement/employeeRecord/index.vue
+++ b/src/views/personnelManagement/employeeRecord/index.vue
@@ -14,6 +14,12 @@
         <span  style="margin-left: 10px" class="search_title">鍚堝悓缁撴潫鏃ユ湡锛�</span>
         <el-date-picker  v-model="searchForm.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="daterange"
                          placeholder="璇烽�夋嫨" clearable @change="changeDaterange" />
+        <!-- <span style="margin-left: 10px" class="search_title">鐘舵�侊細</span>
+        <el-select v-model="searchForm.staffState" clearable placeholder="璇烽�夋嫨鐘舵��" style="width: 140px">
+          <el-option label="绂昏亴" :value="0" />
+          <el-option label="鍦ㄨ亴" :value="1" />
+          <el-option label="璇曠敤" :value="2" />
+        </el-select> -->
         <el-button type="primary" @click="handleQuery" style="margin-left: 10px"
         >鎼滅储</el-button
         >
@@ -38,6 +44,8 @@
       ></PIMTable>
     </div>
     <form-dia ref="formDia" @close="handleQuery"></form-dia>
+    <regularize-dia ref="regularizeDiaRef" @success="getList" />
+    <transfer-dia ref="transferDiaRef" @success="getList" />
   </div>
 </template>
 
@@ -45,6 +53,8 @@
 import { Search } from "@element-plus/icons-vue";
 import {onMounted, ref} from "vue";
 import FormDia from "@/views/personnelManagement/employeeRecord/components/formDia.vue";
+import RegularizeDia from "@/views/personnelManagement/employeeRecord/components/regularizeDia.vue";
+import TransferDia from "@/views/personnelManagement/employeeRecord/components/transferDia.vue";
 import {ElMessageBox} from "element-plus";
 import {staffOnJobListPage} from "@/api/personnelManagement/employeeRecord.js";
 import dayjs from "dayjs";
@@ -52,6 +62,7 @@
 const data = reactive({
   searchForm: {
     staffName: "",
+    staffState: 1,
     entryDate: undefined, // 褰曞叆鏃ユ湡
     entryDateStart: undefined,
     entryDateEnd: undefined,
@@ -68,6 +79,8 @@
         return "绂昏亴";
       } else if (params == 1) {
         return "鍦ㄨ亴";
+      } else if (params == 2) {
+        return "璇曠敤";
       } else {
         return null;
       }
@@ -77,6 +90,8 @@
         return "danger";
       } else if (params == 1) {
         return "primary";
+      } else if (params == 2) {
+        return "warning";
       } else {
         return null;
       }
@@ -154,12 +169,27 @@
     label: "鎿嶄綔",
     align: "center",
     fixed: 'right',
+    width: 150,
     operation: [
       {
         name: "璇︽儏",
         type: "text",
         clickFun: (row) => {
           openForm("edit", row);
+        },
+      },
+      {
+        name: "杞",
+        type: "text",
+        clickFun: (row) => {
+          openRegularizeDialog(row);
+        },
+      },
+      {
+        name: "璋冨矖",
+        type: "text",
+        clickFun: (row) => {
+          openTransferDialog(row);
         },
       },
     ],
@@ -174,6 +204,8 @@
   total: 0
 });
 const formDia = ref()
+const regularizeDiaRef = ref()
+const transferDiaRef = ref()
 const { proxy } = getCurrentInstance()
 
 const changeDaterange = (value) => {
@@ -200,7 +232,7 @@
   tableLoading.value = true;
   const params = { ...searchForm.value, ...page };
   params.entryDate = undefined
-  staffOnJobListPage({...params, staffState: 1}).then(res => {
+  staffOnJobListPage({...params}).then(res => {
     tableLoading.value = false;
     tableData.value = res.data.records
     page.total = res.data.total;
@@ -219,6 +251,12 @@
     formDia.value?.openDialog(type, row)
   })
 };
+const openRegularizeDialog = (row) => {
+  regularizeDiaRef.value?.openDialog(row)
+}
+const openTransferDialog = (row) => {
+  transferDiaRef.value?.openDialog(row)
+}
 // 瀵煎嚭
 const handleOut = () => {
   ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
@@ -227,7 +265,7 @@
     type: "warning",
   })
       .then(() => {
-        proxy.download("/staff/staffOnJob/export", {staffState: 1}, "鍦ㄨ亴鍛樺伐鍙拌处.xlsx");
+        proxy.download("/staff/staffOnJob/export", { ...searchForm.value }, "鍛樺伐鍙拌处.xlsx");
       })
       .catch(() => {
         proxy.$modal.msg("宸插彇娑�");
diff --git a/src/views/personnelManagement/onboarding/components/formDia.vue b/src/views/personnelManagement/onboarding/components/formDia.vue
index a13d6ba..c67b53a 100644
--- a/src/views/personnelManagement/onboarding/components/formDia.vue
+++ b/src/views/personnelManagement/onboarding/components/formDia.vue
@@ -64,6 +64,11 @@
               <el-input-number v-model="form.age" :precision="0" :step="1" style="width: 100%"/>
             </el-form-item>
           </el-col>
+          <el-col :span="12">
+            <el-form-item label="璇曠敤鏈堜唤锛�" prop="probationPeriod">
+              <el-input-number v-model="form.probationPeriod" :precision="0" :step="1" :min="0" style="width: 100%"/>
+            </el-form-item>
+          </el-col>
         </el-row>
         <el-row :gutter="30">
           <el-col :span="12">
@@ -153,6 +158,7 @@
     emergencyContact: "",
     emergencyContactPhone: "",
     contractTerm: 0,
+    probationPeriod: 0,
     contractStartTime: "",
     contractEndTime: "",
     staffState: "",
@@ -171,6 +177,7 @@
     emergencyContact: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
     emergencyContactPhone: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
     contractTerm: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
+    probationPeriod: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
     contractStartTime: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
     contractEndTime: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
   },
diff --git a/src/views/personnelManagement/onboarding/index.vue b/src/views/personnelManagement/onboarding/index.vue
index 9151a6c..e9846f4 100644
--- a/src/views/personnelManagement/onboarding/index.vue
+++ b/src/views/personnelManagement/onboarding/index.vue
@@ -132,6 +132,10 @@
     prop: "age",
   },
   {
+    label: "璇曠敤鏈堜唤",
+    prop: "probationPeriod",
+  },
+  {
     label: "鑱旂郴鐢佃瘽",
     prop: "phone",
     width:150

--
Gitblit v1.9.3