From c7043ff58f55df9c75ae161b3c134039dc895616 Mon Sep 17 00:00:00 2001
From: yubo <autumnal_wind@yeah.net>
Date: 星期六, 11 四月 2026 19:52:20 +0800
Subject: [PATCH] fix(user): 在职员工界面优化
---
src/views/user/components/CloseArchivesDialog.vue | 253 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 253 insertions(+), 0 deletions(-)
diff --git a/src/views/user/components/CloseArchivesDialog.vue b/src/views/user/components/CloseArchivesDialog.vue
new file mode 100644
index 0000000..9046819
--- /dev/null
+++ b/src/views/user/components/CloseArchivesDialog.vue
@@ -0,0 +1,253 @@
+<template>
+ <el-dialog
+ title="关闭档案"
+ :visible.sync="dialogVisible"
+ width="70%"
+ @close="handleClose"
+ >
+ <el-form
+ ref="gbdaForm"
+ :model="formData"
+ :rules="rules"
+ label-position="right"
+ label-width="120px"
+ >
+ <el-row>
+ <el-col span="24">
+ <el-form-item label="离职类型" prop="dimissionType">
+ <el-radio-group v-model="formData.dimissionType" @change="handleDimissionTypeChange">
+ <el-radio
+ v-for="dict in dimissionTypeOptions"
+ :key="dict.dicItemCode"
+ :label="Number(dict.dicItemCode)"
+ >
+ {{ dict.dicItemName }}
+ </el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ <el-col v-if="selectDimissionType === 4" span="12">
+ <el-form-item label="自离天数" prop="selfLeaveDay">
+ <el-input v-model="formData.selfLeaveDay" onkeyup="value=value.replace(/[^0-9.]/g,'')" />
+ </el-form-item>
+ </el-col>
+ <el-col v-if="selectDimissionType === 4" span="12">
+ <el-form-item label="报告人" prop="reporter">
+ <el-input v-model="formData.reporter" />
+ </el-form-item>
+ </el-col>
+ <el-col span="24">
+ <el-form-item label="离职操作" prop="afterOperation">
+ <el-checkbox-group v-model="formData.afterOperation">
+ <el-checkbox label="1">解除劳动合同</el-checkbox>
+ <el-checkbox label="2">禁用登录账号</el-checkbox>
+ </el-checkbox-group>
+ </el-form-item>
+ </el-col>
+ <el-col span="24">
+ <el-form-item label="关闭日期" prop="dimissionDate">
+ <el-date-picker
+ v-model="formData.dimissionDate"
+ type="date"
+ value-format="yyyy-MM-dd"
+ placeholder="选择日期"
+ style="width: 100%"
+ />
+ </el-form-item>
+ <el-form-item label="备注说明" prop="remark">
+ <el-input v-model="formData.remark" type="textarea" :rows="4" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <div slot="footer" class="dialog-footer">
+ <el-button @click="handleCancel">取 消</el-button>
+ <el-button type="primary" @click="handleConfirm">确 定</el-button>
+ </div>
+ </el-dialog>
+</template>
+
+<script>
+export default {
+ name: 'CloseArchivesDialog',
+ props: {
+ visible: {
+ type: Boolean,
+ default: false
+ },
+ employees: {
+ type: Array,
+ default: () => []
+ },
+ dimissionTypeOptions: {
+ type: Array,
+ default: () => []
+ }
+ },
+ data() {
+ return {
+ formData: {
+ empIds: '',
+ dgryNames: '',
+ entryDates: '',
+ dimissionType: 1,
+ dimissionDate: '',
+ remark: '',
+ afterOperation: ['1'],
+ certificateNumb: '',
+ deptNames: '',
+ selfLeaveDay: '',
+ reporter: ''
+ },
+ rules: {
+ dimissionType: [
+ { required: true, message: '请选择离职类型', trigger: 'change' }
+ ],
+ dimissionDate: [
+ { required: true, message: '请选择关闭日期', trigger: 'change' }
+ ],
+ selfLeaveDay: [
+ { required: true, validator: this.validSelfLeaveDay }
+ ],
+ reporter: [
+ { required: true, validator: this.validReporter }
+ ],
+ remark: [
+ { max: 500, message: '长度不超过500个字符', trigger: 'blur' }
+ ]
+ },
+ selectDimissionType: 1
+ }
+ },
+ computed: {
+ dialogVisible: {
+ get() {
+ return this.visible
+ },
+ set(val) {
+ this.$emit('update:visible', val)
+ }
+ }
+ },
+ watch: {
+ employees: {
+ handler(val) {
+ if (val && val.length > 0) {
+ this.initFormData(val)
+ }
+ },
+ immediate: false
+ }
+ },
+ methods: {
+ // 初始化表单数据
+ initFormData(employees) {
+ const ids = []
+ const names = []
+ const dates = []
+ const numbers = []
+ const deptNames = []
+
+ employees.forEach(emp => {
+ ids.push(emp.empId)
+ names.push(emp.empName)
+ dates.push(emp.entryDate)
+ numbers.push(emp.certificateNumb)
+ deptNames.push(emp.allDeptName)
+ })
+
+ // 默认关闭日期为当天
+ const now = new Date()
+ const year = now.getFullYear()
+ const month = String(now.getMonth() + 1).padStart(2, '0')
+ const day = String(now.getDate()).padStart(2, '0')
+
+ this.formData = {
+ empIds: ids.join(','),
+ dgryNames: names.join(','),
+ entryDates: dates.join(','),
+ dimissionType: 1,
+ dimissionDate: year + '-' + month + '-' + day,
+ remark: '',
+ afterOperation: ['1'],
+ certificateNumb: numbers.join(','),
+ deptNames: deptNames.join(','),
+ selfLeaveDay: '',
+ reporter: ''
+ }
+ this.selectDimissionType = 1
+ },
+
+ // 切换离职类型
+ handleDimissionTypeChange(value) {
+ this.selectDimissionType = value
+ },
+
+ // 自离天数验证
+ validSelfLeaveDay(rule, value, callback) {
+ const type = this.formData.dimissionType
+ if (type === 4) {
+ if (!value) {
+ callback(new Error('自动离职时自离天数不能为空!'))
+ } else {
+ callback()
+ }
+ } else {
+ callback()
+ }
+ },
+
+ // 报告人验证
+ validReporter(rule, value, callback) {
+ const type = this.formData.dimissionType
+ if (type === 4) {
+ if (!value) {
+ callback(new Error('自动离职时报告人不能为空!'))
+ } else {
+ if (value.length > 32) {
+ callback(new Error('自动离职时报告人最多32个字符!'))
+ } else {
+ callback()
+ }
+ }
+ } else {
+ callback()
+ }
+ },
+
+ // 确认提交
+ handleConfirm() {
+ this.$refs.gbdaForm.validate((valid) => {
+ if (valid) {
+ this.$post('hr/empBaseInfo/dimission', { ...this.formData }).then(() => {
+ this.$message({
+ message: '员工档案关闭成功',
+ type: 'success'
+ })
+ this.dialogVisible = false
+ this.$emit('success')
+ })
+ }
+ })
+ },
+
+ // 取消
+ handleCancel() {
+ this.dialogVisible = false
+ this.$emit('close')
+ },
+
+ // 关闭对话框
+ handleClose() {
+ if (this.$refs.gbdaForm) {
+ this.$refs.gbdaForm.resetFields()
+ }
+ this.selectDimissionType = 1
+ this.$emit('close')
+ }
+ }
+}
+</script>
+
+<style scoped>
+</style>
--
Gitblit v1.8.0