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