From ef0614f987d96bc69de7ef9221172d2179bd0112 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A0=82=E7=B3=96?= Date: Fri, 10 Jul 2026 10:43:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E7=BB=A9=E6=95=88?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E6=A0=B8=E5=BF=83=E6=A8=A1=E5=9D=97=E5=B9=B6?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=8F=9C=E5=8D=95=E8=B7=AF=E5=BE=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 本次提交完成多项核心功能开发与优化: 1. 修复菜单路径计算逻辑,目录节点路径拼接祖先路径 2. 为绩效相关实体类添加日期格式化注解,统一参数绑定格式 3. 新增10+个绩效系统API接口,覆盖部门、薪资、考核等模块 4. 新增绩效系统首页、部门管理、薪资明细等多个页面组件 --- .../com/klp/perf/domain/PerfDeptConfig.java | 4 + .../klp/perf/domain/PerfDeptItemConfig.java | 3 + .../klp/perf/domain/bo/PerfDeptConfigBo.java | 5 + .../perf/domain/bo/PerfDeptItemConfigBo.java | 3 + klp-ui/src/api/perf/appraisal.js | 44 ++ klp-ui/src/api/perf/appraisalDetail.js | 44 ++ klp-ui/src/api/perf/dept.js | 44 ++ klp-ui/src/api/perf/deptConfig.js | 44 ++ klp-ui/src/api/perf/deptItemConfig.js | 44 ++ klp-ui/src/api/perf/deptSummary.js | 44 ++ klp-ui/src/api/perf/employeeInfo.js | 44 ++ klp-ui/src/api/perf/positionTemplate.js | 44 ++ klp-ui/src/api/perf/salary.js | 44 ++ klp-ui/src/api/perf/templateDimension.js | 44 ++ klp-ui/src/views/perf/dept/index.vue | 580 +++++++++++++++ .../src/views/perf/index/DeptConfigPanel.vue | 226 ++++++ klp-ui/src/views/perf/index/PageHeader.vue | 142 ++++ .../src/views/perf/index/PerfConfigPanel.vue | 669 ++++++++++++++++++ klp-ui/src/views/perf/index/SalaryPanel.vue | 509 +++++++++++++ klp-ui/src/views/perf/index/SummaryPanel.vue | 240 +++++++ klp-ui/src/views/perf/index/YearMonthTabs.vue | 207 ++++++ klp-ui/src/views/perf/index/index.vue | 206 ++++++ klp-ui/src/views/system/menu/index.vue | 4 +- 23 files changed, 3236 insertions(+), 2 deletions(-) create mode 100644 klp-ui/src/api/perf/appraisal.js create mode 100644 klp-ui/src/api/perf/appraisalDetail.js create mode 100644 klp-ui/src/api/perf/dept.js create mode 100644 klp-ui/src/api/perf/deptConfig.js create mode 100644 klp-ui/src/api/perf/deptItemConfig.js create mode 100644 klp-ui/src/api/perf/deptSummary.js create mode 100644 klp-ui/src/api/perf/employeeInfo.js create mode 100644 klp-ui/src/api/perf/positionTemplate.js create mode 100644 klp-ui/src/api/perf/salary.js create mode 100644 klp-ui/src/api/perf/templateDimension.js create mode 100644 klp-ui/src/views/perf/dept/index.vue create mode 100644 klp-ui/src/views/perf/index/DeptConfigPanel.vue create mode 100644 klp-ui/src/views/perf/index/PageHeader.vue create mode 100644 klp-ui/src/views/perf/index/PerfConfigPanel.vue create mode 100644 klp-ui/src/views/perf/index/SalaryPanel.vue create mode 100644 klp-ui/src/views/perf/index/SummaryPanel.vue create mode 100644 klp-ui/src/views/perf/index/YearMonthTabs.vue create mode 100644 klp-ui/src/views/perf/index/index.vue diff --git a/klp-perf/src/main/java/com/klp/perf/domain/PerfDeptConfig.java b/klp-perf/src/main/java/com/klp/perf/domain/PerfDeptConfig.java index cc772b46b..b94dea84d 100644 --- a/klp-perf/src/main/java/com/klp/perf/domain/PerfDeptConfig.java +++ b/klp-perf/src/main/java/com/klp/perf/domain/PerfDeptConfig.java @@ -7,6 +7,8 @@ import lombok.EqualsAndHashCode; import java.math.BigDecimal; import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; /** * 车间考核参数配置对象 perf_dept_config @@ -65,6 +67,8 @@ public class PerfDeptConfig extends BaseEntity { /** * 月份 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") private Date month; /** * 备注 diff --git a/klp-perf/src/main/java/com/klp/perf/domain/PerfDeptItemConfig.java b/klp-perf/src/main/java/com/klp/perf/domain/PerfDeptItemConfig.java index aa42a22f1..667730502 100644 --- a/klp-perf/src/main/java/com/klp/perf/domain/PerfDeptItemConfig.java +++ b/klp-perf/src/main/java/com/klp/perf/domain/PerfDeptItemConfig.java @@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; /** * 车间扣款/奖励项目配置对象 perf_dept_item_config @@ -45,6 +46,8 @@ public class PerfDeptItemConfig extends BaseEntity { /** * 月份 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") private Date month; /** * diff --git a/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfDeptConfigBo.java b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfDeptConfigBo.java index 1b08d65f4..78914fb48 100644 --- a/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfDeptConfigBo.java +++ b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfDeptConfigBo.java @@ -1,8 +1,11 @@ package com.klp.perf.domain.bo; +import com.fasterxml.jackson.annotation.JsonFormat; import com.klp.common.core.domain.BaseEntity; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + import javax.validation.constraints.*; import java.math.BigDecimal; @@ -72,6 +75,8 @@ public class PerfDeptConfigBo extends BaseEntity { /** * 月份 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") private Date month; /** diff --git a/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfDeptItemConfigBo.java b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfDeptItemConfigBo.java index 5371efa47..a18d27eaf 100644 --- a/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfDeptItemConfigBo.java +++ b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfDeptItemConfigBo.java @@ -7,6 +7,7 @@ import javax.validation.constraints.*; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; /** * 车间扣款/奖励项目配置业务对象 perf_dept_item_config @@ -47,6 +48,8 @@ public class PerfDeptItemConfigBo extends BaseEntity { /** * 月份 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") private Date month; /** diff --git a/klp-ui/src/api/perf/appraisal.js b/klp-ui/src/api/perf/appraisal.js new file mode 100644 index 000000000..6957e6573 --- /dev/null +++ b/klp-ui/src/api/perf/appraisal.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询月度绩效考核记录列表 +export function listPerfAppraisal(query) { + return request({ + url: '/perf/appraisal/list', + method: 'get', + params: query + }) +} + +// 查询月度绩效考核记录详细 +export function getPerfAppraisal(id) { + return request({ + url: '/perf/appraisal/' + id, + method: 'get' + }) +} + +// 新增月度绩效考核记录 +export function addPerfAppraisal(data) { + return request({ + url: '/perf/appraisal', + method: 'post', + data: data + }) +} + +// 修改月度绩效考核记录 +export function updatePerfAppraisal(data) { + return request({ + url: '/perf/appraisal', + method: 'put', + data: data + }) +} + +// 删除月度绩效考核记录 +export function delPerfAppraisal(ids) { + return request({ + url: '/perf/appraisal/' + ids, + method: 'delete' + }) +} diff --git a/klp-ui/src/api/perf/appraisalDetail.js b/klp-ui/src/api/perf/appraisalDetail.js new file mode 100644 index 000000000..21e23fc07 --- /dev/null +++ b/klp-ui/src/api/perf/appraisalDetail.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询考核维度评分明细列表 +export function listPerfAppraisalDetail(query) { + return request({ + url: '/perf/appraisalDetail/list', + method: 'get', + params: query + }) +} + +// 查询考核维度评分明细详细 +export function getPerfAppraisalDetail(id) { + return request({ + url: '/perf/appraisalDetail/' + id, + method: 'get' + }) +} + +// 新增考核维度评分明细 +export function addPerfAppraisalDetail(data) { + return request({ + url: '/perf/appraisalDetail', + method: 'post', + data: data + }) +} + +// 修改考核维度评分明细 +export function updatePerfAppraisalDetail(data) { + return request({ + url: '/perf/appraisalDetail', + method: 'put', + data: data + }) +} + +// 删除考核维度评分明细 +export function delPerfAppraisalDetail(ids) { + return request({ + url: '/perf/appraisalDetail/' + ids, + method: 'delete' + }) +} diff --git a/klp-ui/src/api/perf/dept.js b/klp-ui/src/api/perf/dept.js new file mode 100644 index 000000000..b1c11c434 --- /dev/null +++ b/klp-ui/src/api/perf/dept.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询绩效系统部门列表 +export function listPerfDept(query) { + return request({ + url: '/perf/dept/list', + method: 'get', + params: query + }) +} + +// 查询绩效系统部门详细 +export function getPerfDept(id) { + return request({ + url: '/perf/dept/' + id, + method: 'get' + }) +} + +// 新增绩效系统部门 +export function addPerfDept(data) { + return request({ + url: '/perf/dept', + method: 'post', + data: data + }) +} + +// 修改绩效系统部门 +export function updatePerfDept(data) { + return request({ + url: '/perf/dept', + method: 'put', + data: data + }) +} + +// 删除绩效系统部门 +export function delPerfDept(ids) { + return request({ + url: '/perf/dept/' + ids, + method: 'delete' + }) +} diff --git a/klp-ui/src/api/perf/deptConfig.js b/klp-ui/src/api/perf/deptConfig.js new file mode 100644 index 000000000..98f165de1 --- /dev/null +++ b/klp-ui/src/api/perf/deptConfig.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询车间考核参数配置列表 +export function listPerfDeptConfig(query) { + return request({ + url: '/perf/deptConfig/list', + method: 'get', + params: query + }) +} + +// 查询车间考核参数配置详细 +export function getPerfDeptConfig(id) { + return request({ + url: '/perf/deptConfig/' + id, + method: 'get' + }) +} + +// 新增车间考核参数配置 +export function addPerfDeptConfig(data) { + return request({ + url: '/perf/deptConfig', + method: 'post', + data: data + }) +} + +// 修改车间考核参数配置 +export function updatePerfDeptConfig(data) { + return request({ + url: '/perf/deptConfig', + method: 'put', + data: data + }) +} + +// 删除车间考核参数配置 +export function delPerfDeptConfig(ids) { + return request({ + url: '/perf/deptConfig/' + ids, + method: 'delete' + }) +} diff --git a/klp-ui/src/api/perf/deptItemConfig.js b/klp-ui/src/api/perf/deptItemConfig.js new file mode 100644 index 000000000..c4ac4ce80 --- /dev/null +++ b/klp-ui/src/api/perf/deptItemConfig.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询车间扣款/奖励项目配置列表 +export function listPerfDeptItemConfig(query) { + return request({ + url: '/perf/deptItemConfig/list', + method: 'get', + params: query + }) +} + +// 查询车间扣款/奖励项目配置详细 +export function getPerfDeptItemConfig(id) { + return request({ + url: '/perf/deptItemConfig/' + id, + method: 'get' + }) +} + +// 新增车间扣款/奖励项目配置 +export function addPerfDeptItemConfig(data) { + return request({ + url: '/perf/deptItemConfig', + method: 'post', + data: data + }) +} + +// 修改车间扣款/奖励项目配置 +export function updatePerfDeptItemConfig(data) { + return request({ + url: '/perf/deptItemConfig', + method: 'put', + data: data + }) +} + +// 删除车间扣款/奖励项目配置 +export function delPerfDeptItemConfig(ids) { + return request({ + url: '/perf/deptItemConfig/' + ids, + method: 'delete' + }) +} diff --git a/klp-ui/src/api/perf/deptSummary.js b/klp-ui/src/api/perf/deptSummary.js new file mode 100644 index 000000000..8501ac1c0 --- /dev/null +++ b/klp-ui/src/api/perf/deptSummary.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询车间月度汇总列表 +export function listPerfDeptSummary(query) { + return request({ + url: '/perf/deptSummary/list', + method: 'get', + params: query + }) +} + +// 查询车间月度汇总详细 +export function getPerfDeptSummary(id) { + return request({ + url: '/perf/deptSummary/' + id, + method: 'get' + }) +} + +// 新增车间月度汇总 +export function addPerfDeptSummary(data) { + return request({ + url: '/perf/deptSummary', + method: 'post', + data: data + }) +} + +// 修改车间月度汇总 +export function updatePerfDeptSummary(data) { + return request({ + url: '/perf/deptSummary', + method: 'put', + data: data + }) +} + +// 删除车间月度汇总 +export function delPerfDeptSummary(ids) { + return request({ + url: '/perf/deptSummary/' + ids, + method: 'delete' + }) +} diff --git a/klp-ui/src/api/perf/employeeInfo.js b/klp-ui/src/api/perf/employeeInfo.js new file mode 100644 index 000000000..646c9a691 --- /dev/null +++ b/klp-ui/src/api/perf/employeeInfo.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询员工绩效薪资基本信息列表 +export function listPerfEmployeeInfo(query) { + return request({ + url: '/perf/employeeInfo/list', + method: 'get', + params: query + }) +} + +// 查询员工绩效薪资基本信息详细 +export function getPerfEmployeeInfo(id) { + return request({ + url: '/perf/employeeInfo/' + id, + method: 'get' + }) +} + +// 新增员工绩效薪资基本信息 +export function addPerfEmployeeInfo(data) { + return request({ + url: '/perf/employeeInfo', + method: 'post', + data: data + }) +} + +// 修改员工绩效薪资基本信息 +export function updatePerfEmployeeInfo(data) { + return request({ + url: '/perf/employeeInfo', + method: 'put', + data: data + }) +} + +// 删除员工绩效薪资基本信息 +export function delPerfEmployeeInfo(ids) { + return request({ + url: '/perf/employeeInfo/' + ids, + method: 'delete' + }) +} diff --git a/klp-ui/src/api/perf/positionTemplate.js b/klp-ui/src/api/perf/positionTemplate.js new file mode 100644 index 000000000..c65197dc3 --- /dev/null +++ b/klp-ui/src/api/perf/positionTemplate.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询岗位绩效考核模板列表 +export function listPerfPositionTemplate(query) { + return request({ + url: '/perf/positionTemplate/list', + method: 'get', + params: query + }) +} + +// 查询岗位绩效考核模板详细 +export function getPerfPositionTemplate(id) { + return request({ + url: '/perf/positionTemplate/' + id, + method: 'get' + }) +} + +// 新增岗位绩效考核模板 +export function addPerfPositionTemplate(data) { + return request({ + url: '/perf/positionTemplate', + method: 'post', + data: data + }) +} + +// 修改岗位绩效考核模板 +export function updatePerfPositionTemplate(data) { + return request({ + url: '/perf/positionTemplate', + method: 'put', + data: data + }) +} + +// 删除岗位绩效考核模板 +export function delPerfPositionTemplate(ids) { + return request({ + url: '/perf/positionTemplate/' + ids, + method: 'delete' + }) +} diff --git a/klp-ui/src/api/perf/salary.js b/klp-ui/src/api/perf/salary.js new file mode 100644 index 000000000..e4136c846 --- /dev/null +++ b/klp-ui/src/api/perf/salary.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询月度薪资计算记录列表 +export function listPerfSalary(query) { + return request({ + url: '/perf/salary/list', + method: 'get', + params: query + }) +} + +// 查询月度薪资计算记录详细 +export function getPerfSalary(id) { + return request({ + url: '/perf/salary/' + id, + method: 'get' + }) +} + +// 新增月度薪资计算记录 +export function addPerfSalary(data) { + return request({ + url: '/perf/salary', + method: 'post', + data: data + }) +} + +// 修改月度薪资计算记录 +export function updatePerfSalary(data) { + return request({ + url: '/perf/salary', + method: 'put', + data: data + }) +} + +// 删除月度薪资计算记录 +export function delPerfSalary(ids) { + return request({ + url: '/perf/salary/' + ids, + method: 'delete' + }) +} diff --git a/klp-ui/src/api/perf/templateDimension.js b/klp-ui/src/api/perf/templateDimension.js new file mode 100644 index 000000000..c5a18b223 --- /dev/null +++ b/klp-ui/src/api/perf/templateDimension.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询考核维度明细列表 +export function listPerfTemplateDimension(query) { + return request({ + url: '/perf/templateDimension/list', + method: 'get', + params: query + }) +} + +// 查询考核维度明细详细 +export function getPerfTemplateDimension(id) { + return request({ + url: '/perf/templateDimension/' + id, + method: 'get' + }) +} + +// 新增考核维度明细 +export function addPerfTemplateDimension(data) { + return request({ + url: '/perf/templateDimension', + method: 'post', + data: data + }) +} + +// 修改考核维度明细 +export function updatePerfTemplateDimension(data) { + return request({ + url: '/perf/templateDimension', + method: 'put', + data: data + }) +} + +// 删除考核维度明细 +export function delPerfTemplateDimension(ids) { + return request({ + url: '/perf/templateDimension/' + ids, + method: 'delete' + }) +} diff --git a/klp-ui/src/views/perf/dept/index.vue b/klp-ui/src/views/perf/dept/index.vue new file mode 100644 index 000000000..d2d0550e7 --- /dev/null +++ b/klp-ui/src/views/perf/dept/index.vue @@ -0,0 +1,580 @@ + + + + + diff --git a/klp-ui/src/views/perf/index/DeptConfigPanel.vue b/klp-ui/src/views/perf/index/DeptConfigPanel.vue new file mode 100644 index 000000000..223a30a2d --- /dev/null +++ b/klp-ui/src/views/perf/index/DeptConfigPanel.vue @@ -0,0 +1,226 @@ + + + + + diff --git a/klp-ui/src/views/perf/index/PageHeader.vue b/klp-ui/src/views/perf/index/PageHeader.vue new file mode 100644 index 000000000..c32da4f1e --- /dev/null +++ b/klp-ui/src/views/perf/index/PageHeader.vue @@ -0,0 +1,142 @@ + + + + + diff --git a/klp-ui/src/views/perf/index/PerfConfigPanel.vue b/klp-ui/src/views/perf/index/PerfConfigPanel.vue new file mode 100644 index 000000000..e9382fe17 --- /dev/null +++ b/klp-ui/src/views/perf/index/PerfConfigPanel.vue @@ -0,0 +1,669 @@ + + + + + diff --git a/klp-ui/src/views/perf/index/SalaryPanel.vue b/klp-ui/src/views/perf/index/SalaryPanel.vue new file mode 100644 index 000000000..06fd2bd8a --- /dev/null +++ b/klp-ui/src/views/perf/index/SalaryPanel.vue @@ -0,0 +1,509 @@ + + + + + diff --git a/klp-ui/src/views/perf/index/SummaryPanel.vue b/klp-ui/src/views/perf/index/SummaryPanel.vue new file mode 100644 index 000000000..7042eb919 --- /dev/null +++ b/klp-ui/src/views/perf/index/SummaryPanel.vue @@ -0,0 +1,240 @@ + + + + + diff --git a/klp-ui/src/views/perf/index/YearMonthTabs.vue b/klp-ui/src/views/perf/index/YearMonthTabs.vue new file mode 100644 index 000000000..d506eea89 --- /dev/null +++ b/klp-ui/src/views/perf/index/YearMonthTabs.vue @@ -0,0 +1,207 @@ + + + + + diff --git a/klp-ui/src/views/perf/index/index.vue b/klp-ui/src/views/perf/index/index.vue new file mode 100644 index 000000000..b84f9bddc --- /dev/null +++ b/klp-ui/src/views/perf/index/index.vue @@ -0,0 +1,206 @@ + + + + + diff --git a/klp-ui/src/views/system/menu/index.vue b/klp-ui/src/views/system/menu/index.vue index 61eac578b..7698c668a 100644 --- a/klp-ui/src/views/system/menu/index.vue +++ b/klp-ui/src/views/system/menu/index.vue @@ -633,8 +633,8 @@ export default { fullPath = '/' + parent + ownPath; } } - // 目录(M)的路径作为子节点的父路径 - const currentParentPath = node.menuType === 'M' ? ownPath : parentPath; + // 目录(M)的路径拼接祖先路径后作为子节点的父路径 + const currentParentPath = node.menuType === 'M' ? (parentPath ? parentPath + '/' + ownPath : ownPath) : parentPath; result.push({ menuName: prefix + node.menuName,