From 916e11ab2a264298a9328478b3636586145b496e Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期一, 19 一月 2026 14:05:48 +0800
Subject: [PATCH] 重构新增离职
---
src/views/personnelManagement/dimission/components/formDia.vue | 181 +++++++++++-------------------------
src/api/personnelManagement/staffLeave.js | 33 ++++++
src/views/personnelManagement/employeeRecord/index.vue | 2
src/views/personnelManagement/dimission/index.vue | 39 +------
4 files changed, 94 insertions(+), 161 deletions(-)
diff --git a/src/api/personnelManagement/staffLeave.js b/src/api/personnelManagement/staffLeave.js
new file mode 100644
index 0000000..d675996
--- /dev/null
+++ b/src/api/personnelManagement/staffLeave.js
@@ -0,0 +1,33 @@
+import request from "@/utils/request.js";
+
+export function findStaffLeaveListPage(query) {
+ return request({
+ url: "/staff/staffLeave/listPage",
+ method: "get",
+ params: query,
+ });
+}
+
+export function createStaffLeave(data) {
+ return request({
+ url: "/staff/staffLeave",
+ method: "post",
+ data: data,
+ });
+}
+
+export function updateStaffLeave(id, data) {
+ return request({
+ url: "/staff/staffLeave/" + id,
+ method: "put",
+ data: data,
+ });
+}
+
+export function batchDeleteStaffLeaves(data) {
+ return request({
+ url: "/staff/staffLeave/del",
+ method: "delete",
+ data: data,
+ });
+}
diff --git a/src/views/personnelManagement/dimission/components/formDia.vue b/src/views/personnelManagement/dimission/components/formDia.vue
index 84808f8..2b8a7fd 100644
--- a/src/views/personnelManagement/dimission/components/formDia.vue
+++ b/src/views/personnelManagement/dimission/components/formDia.vue
@@ -12,101 +12,93 @@
<el-form :model="form" label-width="200px" label-position="left" :rules="rules" ref="formRef" style="margin-top: 20px">
<el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="濮撳悕锛�" prop="staffName">
- <el-select v-model="form.staffName" placeholder="璇烽�夋嫨浜哄憳" style="width: 100%" @change="handleSelect">
+ <el-form-item label="濮撳悕锛�" prop="staffOnJobId">
+ <el-select v-model="form.staffOnJobId"
+ placeholder="璇烽�夋嫨浜哄憳"
+ style="width: 100%"
+ :disabled="operationType === 'edit'"
+ @change="handleSelect">
<el-option
v-for="item in personList"
:key="item.id"
:label="item.staffName"
- :value="item.staffName"
+ :value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="鍛樺伐缂栧彿锛�">
- {{ form.staffNo || '-' }}
+ {{ currentStaffRecord.staffNo || '-' }}
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="30">
<el-col :span="12">
<el-form-item label="鎬у埆锛�">
- {{ form.sex || '-' }}
+ {{ currentStaffRecord.sex || '-' }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="鎴风睄浣忓潃锛�">
- {{ form.nativePlace || '-' }}
+ {{ currentStaffRecord.nativePlace || '-' }}
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="30">
<el-col :span="12">
<el-form-item label="宀椾綅锛�">
- {{ form.postName || '-' }}
+ {{ currentStaffRecord.postName || '-' }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="鐜颁綇鍧�锛�">
- {{ form.adress || '-' }}
+ {{ currentStaffRecord.adress || '-' }}
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="30">
<el-col :span="12">
<el-form-item label="绗竴瀛﹀巻锛�">
- {{ form.firstStudy || '-' }}
+ {{ currentStaffRecord.firstStudy || '-' }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="涓撲笟锛�">
- {{ form.profession || '-' }}
+ {{ currentStaffRecord.profession || '-' }}
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="30">
<el-col :span="12">
<el-form-item label="骞撮緞锛�">
- {{ form.age || '-' }}
+ {{ currentStaffRecord.age || '-' }}
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="30">
<el-col :span="12">
<el-form-item label="鑱旂郴鐢佃瘽锛�">
- {{ form.phone || '-' }}
+ {{ currentStaffRecord.phone || '-' }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="绱ф�ヨ仈绯讳汉锛�">
- {{ form.emergencyContact || '-' }}
+ {{ currentStaffRecord.emergencyContact || '-' }}
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="30">
<el-col :span="12">
<el-form-item label="绱ф�ヨ仈绯讳汉鑱旂郴鐢佃瘽锛�">
- {{ form.emergencyContactPhone || '-' }}
+ {{ currentStaffRecord.emergencyContactPhone || '-' }}
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="鍚堝悓寮�濮嬫棩鏈燂細">
- {{ form.contractStartTime || '-' }}
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="鍚堝悓缁撴潫鏃ユ湡锛�">
- {{ form.contractEndTime || '-' }}
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="绂昏亴鍘熷洜锛�" prop="dimissionReason">
- <el-select v-model="form.dimissionReason" placeholder="璇烽�夋嫨绂昏亴鍘熷洜" style="width: 100%" @change="handleSelectDimissionReason">
+ <el-form-item label="绂昏亴鍘熷洜锛�" prop="reason">
+ <el-select v-model="form.reason" placeholder="璇烽�夋嫨绂昏亴鍘熷洜" style="width: 100%" @change="handleSelectDimissionReason">
<el-option
v-for="(item, index) in dimissionReasonOptions"
:key="index"
@@ -117,11 +109,10 @@
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="澶囨敞锛�" prop="dimissionRemark" v-show="form.dimissionReason === 'other'">
+ <el-form-item label="澶囨敞锛�" prop="remark" v-if="form.reason === 'other'">
<el-input
- v-model="form.dimissionRemark"
+ v-model="form.remark"
type="textarea"
- v-show="form.dimissionReason === 'other'"
:rows="3"
placeholder="澶囨敞"
maxlength="500"
@@ -136,7 +127,7 @@
<!-- <el-col :span="12">-->
<!-- <div class="info-item">-->
<!-- <span class="info-label">绂昏亴鍘熷洜锛�</span>-->
-<!-- <el-select v-model="form.dimissionReason" placeholder="璇烽�夋嫨浜哄憳" style="width: 100%" @change="handleSelect">-->
+<!-- <el-select v-model="form.reason" placeholder="璇烽�夋嫨浜哄憳" style="width: 100%" @change="handleSelect">-->
<!-- <el-option-->
<!-- v-for="(item, index) in dimissionReasonOptions"-->
<!-- :key="index"-->
@@ -167,8 +158,8 @@
<script setup>
import {ref, reactive, toRefs, getCurrentInstance} from "vue";
-import {getStaffJoinInfo, staffJoinAdd, staffJoinUpdate} from "@/api/personnelManagement/onboarding.js";
-import { staffOnJobListPage } from "@/api/personnelManagement/staffOnJob.js";
+import {staffOnJobListPage} from "@/api/personnelManagement/staffOnJob.js";
+import {createStaffLeave, updateStaffLeave} from "@/api/personnelManagement/staffLeave.js";
const { proxy } = getCurrentInstance()
const emit = defineEmits(['close'])
@@ -176,30 +167,13 @@
const operationType = ref('')
const data = reactive({
form: {
- staffNo: "",
- staffName: "",
- sex: "",
- nativePlace: "",
- postName: "",
- sysPostId: 0,
- adress: "",
- firstStudy: "",
- profession: "",
- age: 0,
- phone: "",
- emergencyContact: "",
- emergencyContactPhone: "",
- contractTerm: 0,
- contractStartTime: "",
- contractEndTime: "",
- dimissionDate: "",
- dimissionReason: "",
- dimissionRemark: "",
- staffState: "",
+ staffOnJobId: undefined,
+ reason: "",
+ remark: "",
},
rules: {
staffName: [{ required: true, message: "璇烽�夋嫨浜哄憳" }],
- dimissionReason: [{ required: true, message: "璇烽�夋嫨绂昏亴鍘熷洜"}],
+ reason: [{ required: true, message: "璇烽�夋嫨绂昏亴鍘熷洜"}],
},
dimissionReasonOptions: [
{label: '钖祫寰呴亣', value: 'salary'},
@@ -207,45 +181,51 @@
{label: '宸ヤ綔鐜', value: 'work_environment'},
{label: '涓汉鍘熷洜', value: 'personal_reason'},
{label: '鍏朵粬', value: 'other'},
- ]
+ ],
+ currentStaffRecord: {},
});
-const { form, rules, dimissionReasonOptions } = toRefs(data);
+const { form, rules, dimissionReasonOptions, currentStaffRecord } = toRefs(data);
// 鎵撳紑寮规
const openDialog = (type, row) => {
- getList()
operationType.value = type;
dialogFormVisible.value = true;
if (operationType.value === 'edit') {
- getStaffJoinInfo(row.id).then(res => {
- form.value = {...res.data}
- })
+ currentStaffRecord.value = row
+ form.value.staffOnJobId = row.staffOnJobId
+ form.value.reason = row.reason
+ form.value.remark = row.remark
+ personList.value = [
+ {
+ staffName: row.staffName,
+ id: row.staffOnJobId,
+ }
+ ]
+ } else {
+ getList()
}
}
const handleSelectDimissionReason = (val) => {
if (val === 'other') {
- form.value.dimissionRemark = ''
+ form.value.remark = ''
}
}
// 鎻愪氦浜у搧琛ㄥ崟
const submitForm = () => {
form.value.staffState = 0
- if (form.value.dimissionReason !== 'other') {
- form.value.dimissionRemark = ''
- }
- if (!form.value.sysPostId) {
- form.value.sysPostId = 0;
+ if (form.value.reason !== 'other') {
+ form.value.remark = ''
}
proxy.$refs["formRef"].validate(valid => {
if (valid) {
if (operationType.value === "add") {
- staffJoinAdd(form.value).then(res => {
+ createStaffLeave(form.value).then(res => {
proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
closeDia();
})
} else {
- staffJoinUpdate(form.value).then(res => {
+ updateStaffLeave(currentStaffRecord.value.id, form.value).then(res => {
proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
closeDia();
})
@@ -258,25 +238,9 @@
const closeDia = () => {
// 琛ㄥ崟宸叉敞閲婏紝鎵嬪姩閲嶇疆琛ㄥ崟鏁版嵁
form.value = {
- staffNo: "",
- staffName: "",
- sex: "",
- nativePlace: "",
- postName: "",
- sysPostId: 0,
- adress: "",
- firstStudy: "",
- profession: "",
- age: 0,
- phone: "",
- emergencyContact: "",
- emergencyContactPhone: "",
- contractTerm: 0,
- contractStartTime: "",
- contractEndTime: "",
- dimissionDate: "",
- dimissionReason: "",
- staffState: "",
+ staffOnJobId: undefined,
+ reason: "",
+ remark: "",
};
dialogFormVisible.value = false;
emit('close')
@@ -298,46 +262,11 @@
};
const handleSelect = (val) => {
- let obj = personList.value.find(item => item.staffName === val)
+ let obj = personList.value.find(item => item.id === val)
+ currentStaffRecord.value = {}
if (obj) {
- let {
- sex,
- phone,
- staffNo,
- nativePlace,
- postName,
- sysPostId,
- adress,
- firstStudy,
- profession,
- age,
- emergencyContact,
- emergencyContactPhone,
- contractTerm,
- contractStartTime,
- contractEndTime,
- staffName
- } = obj
// 淇濈暀绂昏亴鏃ユ湡鍜岀鑱屽師鍥狅紝鍙洿鏂板憳宸ヤ俊鎭�
- form.value = {
- ...form.value,
- sex,
- phone,
- staffNo,
- nativePlace,
- postName,
- sysPostId,
- adress,
- firstStudy,
- profession,
- age,
- emergencyContact,
- emergencyContactPhone,
- contractTerm,
- contractStartTime,
- contractEndTime,
- staffName
- }
+ currentStaffRecord.value = obj
}
}
defineExpose({
diff --git a/src/views/personnelManagement/dimission/index.vue b/src/views/personnelManagement/dimission/index.vue
index 27e6766..6f69690 100644
--- a/src/views/personnelManagement/dimission/index.vue
+++ b/src/views/personnelManagement/dimission/index.vue
@@ -11,22 +11,6 @@
clearable
:prefix-icon="Search"
/>
- <span style="margin-left: 10px;" class="search_title">鍚堝悓寮�濮嬫棩鏈燂細</span>
- <el-date-picker
- v-model="searchForm.entryDateStart"
- type="date"
- placeholder="璇烽�夋嫨鍚堝悓寮�濮嬫棩鏈�"
- size="default"
- @change="(date) => handleDateChange(date,1)"
- />
- <span style="margin-left: 10px;" class="search_title">鍚堝悓缁撴潫鏃ユ湡锛�</span>
- <el-date-picker
- v-model="searchForm.entryDateEnd"
- type="date"
- placeholder="璇烽�夋嫨鍚堝悓缁撴潫鏃ユ湡"
- size="default"
- @change="(date) => handleDateChange(date,2)"
- />
<el-button type="primary" @click="handleQuery" style="margin-left: 10px"
>鎼滅储</el-button
>
@@ -58,7 +42,7 @@
import { Search } from "@element-plus/icons-vue";
import {onMounted, ref} from "vue";
import FormDia from "@/views/personnelManagement/dimission/components/formDia.vue";
-import {staffJoinDel, staffJoinListPage} from "@/api/personnelManagement/onboarding.js";
+import {findStaffLeaveListPage, batchDeleteStaffLeaves} from "@/api/personnelManagement/staffLeave.js";
import {ElMessageBox} from "element-plus";
import dayjs from "dayjs";
@@ -145,24 +129,11 @@
prop: "emergencyContactPhone",
width:150
},
- // {
- // label: "鍚堝悓骞撮檺",
- // prop: "contractTerm",
- // },
- {
- label: "鍚堝悓寮�濮嬫棩鏈�",
- prop: "contractStartTime",
- width: 120
- },
- {
- label: "鍚堝悓缁撴潫鏃ユ湡",
- prop: "contractEndTime",
- width: 120
- },
{
dataType: "action",
label: "鎿嶄綔",
align: "center",
+ fixed: 'right',
operation: [
{
name: "缂栬緫",
@@ -213,7 +184,7 @@
};
const getList = () => {
tableLoading.value = true;
- staffJoinListPage({...page, ...searchForm.value, staffState: 0}).then(res => {
+ findStaffLeaveListPage({...page, ...searchForm.value}).then(res => {
tableLoading.value = false;
tableData.value = res.data.records
page.total = res.data.total;
@@ -248,7 +219,7 @@
type: "warning",
})
.then(() => {
- staffJoinDel(ids).then((res) => {
+ batchDeleteStaffLeaves(ids).then((res) => {
proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
getList();
});
@@ -265,7 +236,7 @@
type: "warning",
})
.then(() => {
- proxy.download("/staff/staffJoinLeaveRecord/export", {staffState: 0}, "浜哄憳绂昏亴.xlsx");
+ proxy.download("/staff/staffLeave/export", {}, "浜哄憳绂昏亴.xlsx");
})
.catch(() => {
proxy.$modal.msg("宸插彇娑�");
diff --git a/src/views/personnelManagement/employeeRecord/index.vue b/src/views/personnelManagement/employeeRecord/index.vue
index b8e48eb..2982a00 100644
--- a/src/views/personnelManagement/employeeRecord/index.vue
+++ b/src/views/personnelManagement/employeeRecord/index.vue
@@ -212,7 +212,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;
--
Gitblit v1.9.3