From 56c15ac621d7741ade02afee5cbd03defc457973 Mon Sep 17 00:00:00 2001
From: 86156 <823267011@qq.com>
Date: Tue, 23 Dec 2025 10:37:00 +0800
Subject: [PATCH 1/2] =?UTF-8?q?hrm=E5=89=8D=E7=AB=AF3=E7=89=88?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
klp-ui/src/api/hrm/index.js | 68 +++++++
klp-ui/src/views/hrm/flow/node.vue | 179 +++++++++++++++++
klp-ui/src/views/hrm/flow/template.vue | 161 +++++++++++++++
klp-ui/src/views/hrm/requests/index.vue | 245 +++--------------------
klp-ui/src/views/hrm/requests/leave.vue | 137 +++++++++++++
klp-ui/src/views/hrm/requests/seal.vue | 133 ++++++++++++
klp-ui/src/views/hrm/requests/travel.vue | 167 +++++++++++++++
7 files changed, 875 insertions(+), 215 deletions(-)
create mode 100644 klp-ui/src/views/hrm/flow/node.vue
create mode 100644 klp-ui/src/views/hrm/flow/template.vue
create mode 100644 klp-ui/src/views/hrm/requests/leave.vue
create mode 100644 klp-ui/src/views/hrm/requests/seal.vue
create mode 100644 klp-ui/src/views/hrm/requests/travel.vue
diff --git a/klp-ui/src/api/hrm/index.js b/klp-ui/src/api/hrm/index.js
index b66bafe9..abd013ec 100644
--- a/klp-ui/src/api/hrm/index.js
+++ b/klp-ui/src/api/hrm/index.js
@@ -514,6 +514,74 @@ export function getFlowForm(formId) {
method: 'get'
})
}
+// 流程模板
+export function listFlowTemplate(query) {
+ return request({
+ url: '/hrm/flow/template/list',
+ method: 'get',
+ params: query
+ })
+}
+export function getFlowTemplate(tplId) {
+ return request({
+ url: `/hrm/flow/template/${tplId}`,
+ method: 'get'
+ })
+}
+export function addFlowTemplate(data) {
+ return request({
+ url: '/hrm/flow/template',
+ method: 'post',
+ data
+ })
+}
+export function updateFlowTemplate(data) {
+ return request({
+ url: '/hrm/flow/template',
+ method: 'put',
+ data
+ })
+}
+export function delFlowTemplate(tplIds) {
+ return request({
+ url: `/hrm/flow/template/${tplIds}`,
+ method: 'delete'
+ })
+}
+// 流程节点
+export function listFlowNode(query) {
+ return request({
+ url: '/hrm/flow/node/list',
+ method: 'get',
+ params: query
+ })
+}
+export function getFlowNode(nodeId) {
+ return request({
+ url: `/hrm/flow/node/${nodeId}`,
+ method: 'get'
+ })
+}
+export function addFlowNode(data) {
+ return request({
+ url: '/hrm/flow/node',
+ method: 'post',
+ data
+ })
+}
+export function updateFlowNode(data) {
+ return request({
+ url: '/hrm/flow/node',
+ method: 'put',
+ data
+ })
+}
+export function delFlowNode(nodeIds) {
+ return request({
+ url: `/hrm/flow/node/${nodeIds}`,
+ method: 'delete'
+ })
+}
// 薪酬
export function listPayPlan(query) {
diff --git a/klp-ui/src/views/hrm/flow/node.vue b/klp-ui/src/views/hrm/flow/node.vue
new file mode 100644
index 00000000..4475fa25
--- /dev/null
+++ b/klp-ui/src/views/hrm/flow/node.vue
@@ -0,0 +1,179 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ fixed_user: 用户ID逗号分隔;role: 角色编码;position: 岗位ID;leader/initiator 无需填;form_field: 表单字段名
+
+
+
+
+
+
+ 取消
+ 保存
+
+
+
+
+
+
+
+
diff --git a/klp-ui/src/views/hrm/flow/template.vue b/klp-ui/src/views/hrm/flow/template.vue
new file mode 100644
index 00000000..ae4a0a09
--- /dev/null
+++ b/klp-ui/src/views/hrm/flow/template.vue
@@ -0,0 +1,161 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.enabled ? '启用' : '停用' }}
+
+
+
+
+
+ 编辑
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+ 保存
+
+
+
+
+
+
+
+
diff --git a/klp-ui/src/views/hrm/requests/index.vue b/klp-ui/src/views/hrm/requests/index.vue
index b44dd8d3..fe40a7f9 100644
--- a/klp-ui/src/views/hrm/requests/index.vue
+++ b/klp-ui/src/views/hrm/requests/index.vue
@@ -5,7 +5,7 @@
+
+
diff --git a/klp-ui/src/views/hrm/requests/seal.vue b/klp-ui/src/views/hrm/requests/seal.vue
new file mode 100644
index 00000000..445a23f5
--- /dev/null
+++ b/klp-ui/src/views/hrm/requests/seal.vue
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 仅支持 PDF,最多 5 个,单个不超过 50MB
+
+
+
+
+
+
+
+
+ 取消
+ 提交申请
+
+
+
+
+
+
+
+
+
diff --git a/klp-ui/src/views/hrm/requests/travel.vue b/klp-ui/src/views/hrm/requests/travel.vue
new file mode 100644
index 00000000..564c95b0
--- /dev/null
+++ b/klp-ui/src/views/hrm/requests/travel.vue
@@ -0,0 +1,167 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 上传机票、酒店、行程单等(pdf/jpg/png/doc/docx)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+ 提交申请
+
+
+
+
+
+
+
+
+
From 04eace18c40cb3588f71cac9532d1dc603eed160 Mon Sep 17 00:00:00 2001
From: 86156 <823267011@qq.com>
Date: Tue, 23 Dec 2025 15:56:15 +0800
Subject: [PATCH 2/2] =?UTF-8?q?=E5=8D=8F=E8=B0=83L3=E9=A1=B5=E9=9D=A2?=
=?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9E=E5=90=88=E5=90=8C=E8=AF=81=E4=B9=A6?=
=?UTF-8?q?=E7=9A=84=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0=E9=80=BB=E8=BE=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../com/klp/hrm/domain/HrmCertificate.java | 4 +
.../java/com/klp/hrm/domain/HrmContract.java | 4 +
.../klp/hrm/domain/bo/HrmCertificateBo.java | 10 +
.../com/klp/hrm/domain/bo/HrmContractBo.java | 10 +
.../klp/hrm/domain/vo/HrmCertificateVo.java | 7 +
.../com/klp/hrm/domain/vo/HrmContractVo.java | 7 +
klp-ui/src/api/hrm/index.js | 2 +-
klp-ui/src/components/FileUpload/index.vue | 25 +
klp-ui/src/views/hrm/attendance/index.vue | 83 +--
klp-ui/src/views/hrm/org/index.vue | 485 ++++++++++++++++--
klp-ui/src/views/hrm/payroll/index.vue | 7 +
11 files changed, 577 insertions(+), 67 deletions(-)
diff --git a/klp-hrm/src/main/java/com/klp/hrm/domain/HrmCertificate.java b/klp-hrm/src/main/java/com/klp/hrm/domain/HrmCertificate.java
index a1c3ee1b..a20caed1 100644
--- a/klp-hrm/src/main/java/com/klp/hrm/domain/HrmCertificate.java
+++ b/klp-hrm/src/main/java/com/klp/hrm/domain/HrmCertificate.java
@@ -25,6 +25,10 @@ public class HrmCertificate extends BaseEntity implements Serializable {
private Date validFrom;
private Date validTo;
private String remark;
+ /**
+ * 证书附件 fileIds(逗号分隔的 OSS ID)
+ */
+ private String fileIds;
@TableLogic
private Integer delFlag;
}
diff --git a/klp-hrm/src/main/java/com/klp/hrm/domain/HrmContract.java b/klp-hrm/src/main/java/com/klp/hrm/domain/HrmContract.java
index 6cd604a8..8d3e8b8d 100644
--- a/klp-hrm/src/main/java/com/klp/hrm/domain/HrmContract.java
+++ b/klp-hrm/src/main/java/com/klp/hrm/domain/HrmContract.java
@@ -25,6 +25,10 @@ public class HrmContract extends BaseEntity implements Serializable {
private Date endDate;
private String status;
private String remark;
+ /**
+ * 合同附件 fileIds(逗号分隔的 OSS ID)
+ */
+ private String fileIds;
@TableLogic
private Integer delFlag;
}
diff --git a/klp-hrm/src/main/java/com/klp/hrm/domain/bo/HrmCertificateBo.java b/klp-hrm/src/main/java/com/klp/hrm/domain/bo/HrmCertificateBo.java
index b5861acf..53850477 100644
--- a/klp-hrm/src/main/java/com/klp/hrm/domain/bo/HrmCertificateBo.java
+++ b/klp-hrm/src/main/java/com/klp/hrm/domain/bo/HrmCertificateBo.java
@@ -1,8 +1,10 @@
package com.klp.hrm.domain.bo;
import com.klp.common.core.domain.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@@ -22,7 +24,15 @@ public class HrmCertificateBo extends BaseEntity {
private String certNo;
private String issuedBy;
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date validFrom;
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date validTo;
private String remark;
+ /**
+ * 证书附件 fileIds(逗号分隔的 OSS ID)
+ */
+ private String fileIds;
}
diff --git a/klp-hrm/src/main/java/com/klp/hrm/domain/bo/HrmContractBo.java b/klp-hrm/src/main/java/com/klp/hrm/domain/bo/HrmContractBo.java
index 07fbd23a..cbea96da 100644
--- a/klp-hrm/src/main/java/com/klp/hrm/domain/bo/HrmContractBo.java
+++ b/klp-hrm/src/main/java/com/klp/hrm/domain/bo/HrmContractBo.java
@@ -7,6 +7,8 @@ import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
@Data
@EqualsAndHashCode(callSuper = true)
@@ -21,8 +23,16 @@ public class HrmContractBo extends BaseEntity {
private String contractNo;
private String contractType;
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date startDate;
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date endDate;
private String status;
private String remark;
+ /**
+ * 合同附件 fileIds(逗号分隔的 OSS ID)
+ */
+ private String fileIds;
}
diff --git a/klp-hrm/src/main/java/com/klp/hrm/domain/vo/HrmCertificateVo.java b/klp-hrm/src/main/java/com/klp/hrm/domain/vo/HrmCertificateVo.java
index 8c79a89d..b65cc0d9 100644
--- a/klp-hrm/src/main/java/com/klp/hrm/domain/vo/HrmCertificateVo.java
+++ b/klp-hrm/src/main/java/com/klp/hrm/domain/vo/HrmCertificateVo.java
@@ -5,6 +5,7 @@ import lombok.Data;
import java.io.Serializable;
import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
@Data
public class HrmCertificateVo implements Serializable {
@@ -21,11 +22,17 @@ public class HrmCertificateVo implements Serializable {
@Excel(name = "颁发机构")
private String issuedBy;
@Excel(name = "有效期开始", width = 20, dateFormat = "yyyy-MM-dd")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date validFrom;
@Excel(name = "有效期结束", width = 20, dateFormat = "yyyy-MM-dd")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date validTo;
@Excel(name = "备注")
private String remark;
+ /**
+ * 证书附件 fileIds(逗号分隔的 OSS ID)
+ */
+ private String fileIds;
private String createBy;
private Date createTime;
private String updateBy;
diff --git a/klp-hrm/src/main/java/com/klp/hrm/domain/vo/HrmContractVo.java b/klp-hrm/src/main/java/com/klp/hrm/domain/vo/HrmContractVo.java
index 7b486e30..53ca6820 100644
--- a/klp-hrm/src/main/java/com/klp/hrm/domain/vo/HrmContractVo.java
+++ b/klp-hrm/src/main/java/com/klp/hrm/domain/vo/HrmContractVo.java
@@ -5,6 +5,7 @@ import lombok.Data;
import java.io.Serializable;
import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
@Data
public class HrmContractVo implements Serializable {
@@ -19,13 +20,19 @@ public class HrmContractVo implements Serializable {
@Excel(name = "合同类型")
private String contractType;
@Excel(name = "开始日期", width = 20, dateFormat = "yyyy-MM-dd")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date startDate;
@Excel(name = "结束日期", width = 20, dateFormat = "yyyy-MM-dd")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date endDate;
@Excel(name = "状态")
private String status;
@Excel(name = "备注")
private String remark;
+ /**
+ * 合同附件 fileIds(逗号分隔的 OSS ID)
+ */
+ private String fileIds;
private String createBy;
private Date createTime;
private String updateBy;
diff --git a/klp-ui/src/api/hrm/index.js b/klp-ui/src/api/hrm/index.js
index abd013ec..0568c011 100644
--- a/klp-ui/src/api/hrm/index.js
+++ b/klp-ui/src/api/hrm/index.js
@@ -687,7 +687,7 @@ export function delPayslip(slipIds) {
// 指标快照
export function listStatSnapshot(query) {
return request({
- url: '/hrm/stat/snapshot/list',
+ url: '/hrm/pay/stat/list',
method: 'get',
params: query
})
diff --git a/klp-ui/src/components/FileUpload/index.vue b/klp-ui/src/components/FileUpload/index.vue
index 63d2375a..0e834686 100644
--- a/klp-ui/src/components/FileUpload/index.vue
+++ b/klp-ui/src/components/FileUpload/index.vue
@@ -48,6 +48,11 @@ export default {
props: {
// 值
value: [String, Object, Array],
+ // 额外的自定义校验函数,返回 false 阻止上传
+ beforeValidate: {
+ type: Function,
+ default: null,
+ },
// 数量限制
limit: {
type: Number,
@@ -127,6 +132,15 @@ export default {
methods: {
// 上传前校检格式和大小
handleBeforeUpload(file) {
+ // 额外自定义校验
+ if (this.beforeValidate) {
+ const pass = this.beforeValidate(file);
+ if (pass === false) {
+ // 防止残留文件
+ this.resetUpload();
+ return false;
+ }
+ }
// 校检文件类型
if (this.fileType) {
const fileName = file.name.split('.');
@@ -189,6 +203,17 @@ export default {
this.$modal.closeLoading();
}
},
+ // 重置上传状态(外部可调用)
+ resetUpload() {
+ this.number = 0;
+ this.uploadList = [];
+ this.fileList = [];
+ this.$emit("input", "");
+ if (this.$refs.fileUpload) {
+ this.$refs.fileUpload.clearFiles();
+ }
+ this.$modal.closeLoading();
+ },
// 获取文件名称
getFileName(name) {
// 如果是url那么取最后的名字 如果不是直接返回
diff --git a/klp-ui/src/views/hrm/attendance/index.vue b/klp-ui/src/views/hrm/attendance/index.vue
index 1126d112..93b48b1d 100644
--- a/klp-ui/src/views/hrm/attendance/index.vue
+++ b/klp-ui/src/views/hrm/attendance/index.vue
@@ -1,12 +1,11 @@
-
-