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