From 0fe9bce02a8acd70ebc58edb3845c09efc748d35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A0=82=E7=B3=96?= <2178503051@qq.com> Date: Mon, 22 Jun 2026 13:06:57 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E5=94=AE=E5=90=8E?= =?UTF-8?q?=E5=BC=82=E8=AE=AE=E7=AE=A1=E7=90=86=E5=85=A8=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 本次提交完成售后异议管理模块的开发,主要包括以下内容: 1. 新增售后异议主页面、待办页面和意见填写页面 2. 新增5个通用业务组件用于页面渲染 3. 新增4个业务API接口文件 4. 优化流程图表单描述、文件列表样式和钢卷信息展示 5. 完善投诉受理单的日期格式化和实体类继承 --- .../flow/domain/bo/TsComplaintAcceptBo.java | 3 + .../flow/domain/vo/TsComplaintAcceptVo.java | 3 +- klp-ui/src/api/flow/acceptCoilRel.js | 39 + klp-ui/src/api/flow/complaintAccept.js | 54 ++ klp-ui/src/api/flow/complaintTask.js | 39 + klp-ui/src/api/flow/planExecuteRel.js | 39 + klp-ui/src/components/FileList/index.vue | 4 +- .../views/wms/coil/components/CoilInfo.vue | 1 + klp-ui/src/views/wms/post/flow.vue | 2 +- .../objection/components/BasicInfoSection.vue | 57 ++ .../objection/components/CoilInfoSection.vue | 81 ++ .../components/ContractInfoSection.vue | 75 ++ .../components/DepartmentOpinionSection.vue | 167 +++++ .../components/ExecutionFeedbackSection.vue | 167 +++++ .../components/HandlingSchemeSection.vue | 102 +++ .../components/HeaderControlSection.vue | 140 ++++ .../views/wms/post/objection/dashboard.vue | 0 klp-ui/src/views/wms/post/objection/index.vue | 704 ++++++++++++++++++ .../src/views/wms/post/objection/opinion.vue | 314 ++++++++ klp-ui/src/views/wms/post/objection/todo.vue | 270 +++++++ 20 files changed, 2257 insertions(+), 4 deletions(-) create mode 100644 klp-ui/src/api/flow/acceptCoilRel.js create mode 100644 klp-ui/src/api/flow/complaintAccept.js create mode 100644 klp-ui/src/api/flow/complaintTask.js create mode 100644 klp-ui/src/api/flow/planExecuteRel.js create mode 100644 klp-ui/src/views/wms/post/objection/components/BasicInfoSection.vue create mode 100644 klp-ui/src/views/wms/post/objection/components/CoilInfoSection.vue create mode 100644 klp-ui/src/views/wms/post/objection/components/ContractInfoSection.vue create mode 100644 klp-ui/src/views/wms/post/objection/components/DepartmentOpinionSection.vue create mode 100644 klp-ui/src/views/wms/post/objection/components/ExecutionFeedbackSection.vue create mode 100644 klp-ui/src/views/wms/post/objection/components/HandlingSchemeSection.vue create mode 100644 klp-ui/src/views/wms/post/objection/components/HeaderControlSection.vue create mode 100644 klp-ui/src/views/wms/post/objection/dashboard.vue create mode 100644 klp-ui/src/views/wms/post/objection/index.vue create mode 100644 klp-ui/src/views/wms/post/objection/opinion.vue create mode 100644 klp-ui/src/views/wms/post/objection/todo.vue diff --git a/klp-flow/src/main/java/com/klp/flow/domain/bo/TsComplaintAcceptBo.java b/klp-flow/src/main/java/com/klp/flow/domain/bo/TsComplaintAcceptBo.java index c3217532..65f1772b 100644 --- a/klp-flow/src/main/java/com/klp/flow/domain/bo/TsComplaintAcceptBo.java +++ b/klp-flow/src/main/java/com/klp/flow/domain/bo/TsComplaintAcceptBo.java @@ -8,6 +8,7 @@ import javax.validation.constraints.*; import java.util.Date; import java.util.List; import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; /** * 投诉受理单主业务对象 ts_complaint_accept @@ -33,6 +34,8 @@ public class TsComplaintAcceptBo extends BaseEntity { /** * 投诉日期 */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd") private Date complaintDate; /** diff --git a/klp-flow/src/main/java/com/klp/flow/domain/vo/TsComplaintAcceptVo.java b/klp-flow/src/main/java/com/klp/flow/domain/vo/TsComplaintAcceptVo.java index b87c9322..4519b525 100644 --- a/klp-flow/src/main/java/com/klp/flow/domain/vo/TsComplaintAcceptVo.java +++ b/klp-flow/src/main/java/com/klp/flow/domain/vo/TsComplaintAcceptVo.java @@ -6,6 +6,7 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import com.klp.common.annotation.ExcelDictFormat; import com.klp.common.convert.ExcelDictConvert; +import com.klp.common.core.domain.BaseEntity; import lombok.Data; @@ -17,7 +18,7 @@ import lombok.Data; */ @Data @ExcelIgnoreUnannotated -public class TsComplaintAcceptVo { +public class TsComplaintAcceptVo extends BaseEntity { private static final long serialVersionUID = 1L; diff --git a/klp-ui/src/api/flow/acceptCoilRel.js b/klp-ui/src/api/flow/acceptCoilRel.js new file mode 100644 index 00000000..3ebe59e3 --- /dev/null +++ b/klp-ui/src/api/flow/acceptCoilRel.js @@ -0,0 +1,39 @@ +import request from '@/utils/request' + +export function listAcceptCoilRel(query) { + return request({ + url: '/flow/acceptCoilRel/list', + method: 'get', + params: query + }) +} + +export function getAcceptCoilRel(relId) { + return request({ + url: '/flow/acceptCoilRel/' + relId, + method: 'get' + }) +} + +export function addAcceptCoilRel(data) { + return request({ + url: '/flow/acceptCoilRel', + method: 'post', + data: data + }) +} + +export function updateAcceptCoilRel(data) { + return request({ + url: '/flow/acceptCoilRel', + method: 'put', + data: data + }) +} + +export function delAcceptCoilRel(relIds) { + return request({ + url: '/flow/acceptCoilRel/' + relIds, + method: 'delete' + }) +} diff --git a/klp-ui/src/api/flow/complaintAccept.js b/klp-ui/src/api/flow/complaintAccept.js new file mode 100644 index 00000000..97ea1ad5 --- /dev/null +++ b/klp-ui/src/api/flow/complaintAccept.js @@ -0,0 +1,54 @@ +import request from '@/utils/request' + +export function listComplaintAccept(query) { + return request({ + url: '/flow/complaintAccept/list', + method: 'get', + params: query + }) +} + +export function getComplaintAccept(acceptId) { + return request({ + url: '/flow/complaintAccept/' + acceptId, + method: 'get' + }) +} + +export function addComplaintAccept(data) { + return request({ + url: '/flow/complaintAccept', + method: 'post', + data: data + }) +} + +export function updateComplaintAccept(data) { + return request({ + url: '/flow/complaintAccept', + method: 'put', + data: data + }) +} + +export function delComplaintAccept(acceptIds) { + return request({ + url: '/flow/complaintAccept/' + acceptIds, + method: 'delete' + }) +} + +export function opinionDispatch(acceptId) { + return request({ + url: '/flow/complaintAccept/opinionDispatch/' + acceptId, + method: 'post' + }) +} + +export function feedbackDispatch(acceptId, deptIds) { + return request({ + url: '/flow/complaintAccept/feedbackDispatch', + method: 'post', + params: { acceptId, deptIds } + }) +} diff --git a/klp-ui/src/api/flow/complaintTask.js b/klp-ui/src/api/flow/complaintTask.js new file mode 100644 index 00000000..8d583f1f --- /dev/null +++ b/klp-ui/src/api/flow/complaintTask.js @@ -0,0 +1,39 @@ +import request from '@/utils/request' + +export function listComplaintTask(query) { + return request({ + url: '/flow/complaintTask/list', + method: 'get', + params: query + }) +} + +export function getComplaintTask(taskId) { + return request({ + url: '/flow/complaintTask/' + taskId, + method: 'get' + }) +} + +export function addComplaintTask(data) { + return request({ + url: '/flow/complaintTask', + method: 'post', + data: data + }) +} + +export function updateComplaintTask(data) { + return request({ + url: '/flow/complaintTask', + method: 'put', + data: data + }) +} + +export function delComplaintTask(taskIds) { + return request({ + url: '/flow/complaintTask/' + taskIds, + method: 'delete' + }) +} diff --git a/klp-ui/src/api/flow/planExecuteRel.js b/klp-ui/src/api/flow/planExecuteRel.js new file mode 100644 index 00000000..9a058f82 --- /dev/null +++ b/klp-ui/src/api/flow/planExecuteRel.js @@ -0,0 +1,39 @@ +import request from '@/utils/request' + +export function listPlanExecuteRel(query) { + return request({ + url: '/flow/planExecuteRel/list', + method: 'get', + params: query + }) +} + +export function getPlanExecuteRel(relId) { + return request({ + url: '/flow/planExecuteRel/' + relId, + method: 'get' + }) +} + +export function addPlanExecuteRel(data) { + return request({ + url: '/flow/planExecuteRel', + method: 'post', + data: data + }) +} + +export function updatePlanExecuteRel(data) { + return request({ + url: '/flow/planExecuteRel', + method: 'put', + data: data + }) +} + +export function delPlanExecuteRel(relIds) { + return request({ + url: '/flow/planExecuteRel/' + relIds, + method: 'delete' + }) +} diff --git a/klp-ui/src/components/FileList/index.vue b/klp-ui/src/components/FileList/index.vue index 54da9c12..f3cd674d 100644 --- a/klp-ui/src/components/FileList/index.vue +++ b/klp-ui/src/components/FileList/index.vue @@ -121,7 +121,7 @@ export default { diff --git a/klp-ui/src/views/wms/post/objection/components/CoilInfoSection.vue b/klp-ui/src/views/wms/post/objection/components/CoilInfoSection.vue new file mode 100644 index 00000000..3bbfac5b --- /dev/null +++ b/klp-ui/src/views/wms/post/objection/components/CoilInfoSection.vue @@ -0,0 +1,81 @@ + + + + 关联钢卷 + + + + + + + + + + + + + + + + + + + + + + + + + 暂无关联钢卷 + + + + + + diff --git a/klp-ui/src/views/wms/post/objection/components/ContractInfoSection.vue b/klp-ui/src/views/wms/post/objection/components/ContractInfoSection.vue new file mode 100644 index 00000000..96531d12 --- /dev/null +++ b/klp-ui/src/views/wms/post/objection/components/ContractInfoSection.vue @@ -0,0 +1,75 @@ + + + 合同信息 + + + + + + + + + {{ parseTime(scope.row.signTime, '{y}-{m}-{d}') }} + + + {{ parseTime(scope.row.deliveryDate, '{y}-{m}-{d}') }} + + + 暂无合同信息 + + + + + + diff --git a/klp-ui/src/views/wms/post/objection/components/DepartmentOpinionSection.vue b/klp-ui/src/views/wms/post/objection/components/DepartmentOpinionSection.vue new file mode 100644 index 00000000..a169ef7c --- /dev/null +++ b/klp-ui/src/views/wms/post/objection/components/DepartmentOpinionSection.vue @@ -0,0 +1,167 @@ + + + + 部门处理意见 + + + + + + {{ getDeptName(item.deptId) }} + 待填写 + 已完成 + + + + + 暂无意见 + + + + + + + {{ item.fillNo }} + {{ parseTime(item.fillTime, '{y}-{m}-{d} {h}:{i}:{s}') }} + + + + 暂无部门处理意见 + + + + + + diff --git a/klp-ui/src/views/wms/post/objection/components/ExecutionFeedbackSection.vue b/klp-ui/src/views/wms/post/objection/components/ExecutionFeedbackSection.vue new file mode 100644 index 00000000..e7b20500 --- /dev/null +++ b/klp-ui/src/views/wms/post/objection/components/ExecutionFeedbackSection.vue @@ -0,0 +1,167 @@ + + + + 执行反馈 + + + + + + {{ getDeptName(item.deptId) }} + 待执行 + 已反馈 + + + + + 暂无反馈 + + + + + + + {{ item.feedbackNo }} + {{ parseTime(item.feedbackTime, '{y}-{m}-{d} {h}:{i}:{s}') }} + + + + 暂无执行反馈 + + + + + + diff --git a/klp-ui/src/views/wms/post/objection/components/HandlingSchemeSection.vue b/klp-ui/src/views/wms/post/objection/components/HandlingSchemeSection.vue new file mode 100644 index 00000000..2b0beed6 --- /dev/null +++ b/klp-ui/src/views/wms/post/objection/components/HandlingSchemeSection.vue @@ -0,0 +1,102 @@ + + + + 处理方案 + 编辑 + + 保存 + 取消 + + + + + + + + 暂无处理方案 + + + + + + + diff --git a/klp-ui/src/views/wms/post/objection/components/HeaderControlSection.vue b/klp-ui/src/views/wms/post/objection/components/HeaderControlSection.vue new file mode 100644 index 00000000..4032fbfe --- /dev/null +++ b/klp-ui/src/views/wms/post/objection/components/HeaderControlSection.vue @@ -0,0 +1,140 @@ + + + + + {{ complaintNo }} + {{ flowStatusText }} + + + + + + + + 创建人:{{ meta.createBy }} + 创建时间:{{ parseTime(meta.createTime, '{y}-{m}-{d} {h}:{i}:{s}') }} + 修改人:{{ meta.updateBy }} + 修改时间:{{ parseTime(meta.updateTime, '{y}-{m}-{d} {h}:{i}:{s}') }} + 投诉日期:{{ parseTime(meta.complaintDate, '{y}-{m}-{d}') }} + + + + + + + + + + diff --git a/klp-ui/src/views/wms/post/objection/dashboard.vue b/klp-ui/src/views/wms/post/objection/dashboard.vue new file mode 100644 index 00000000..e69de29b diff --git a/klp-ui/src/views/wms/post/objection/index.vue b/klp-ui/src/views/wms/post/objection/index.vue new file mode 100644 index 00000000..5f4038f9 --- /dev/null +++ b/klp-ui/src/views/wms/post/objection/index.vue @@ -0,0 +1,704 @@ + + + + + + + + + 售后单列表 + + + + + + + + + + + + + + + + + + + + + + + {{ item.complaintNo }} + {{ parseTime(item.complaintDate, '{y}-{m}-{d}') }} + + + 待审核 + 意见填写中 + 待汇总方案 + 执行反馈中 + 执行完成 + 全部办结 + + + + + + + + + 暂无售后单数据 + + + + + + + + + + + + 请在左侧列表中选择一条售后单查看详情 + + + + + 意见下发 + 执行下发 + 刷新 + 编辑 + 删除 + + + + + + + + + + + + + 添加 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 选择钢卷 + + + + + + + + + + + + + + + + + + + + + {{ item.deptName }} + + + + + + + + + diff --git a/klp-ui/src/views/wms/post/objection/opinion.vue b/klp-ui/src/views/wms/post/objection/opinion.vue new file mode 100644 index 00000000..b091faf1 --- /dev/null +++ b/klp-ui/src/views/wms/post/objection/opinion.vue @@ -0,0 +1,314 @@ + + + + + + {{ tab.label }} + + + + + + + + + + + + + + 搜索 + 重置 + + + + + + + + {{ (scope.row.acceptInfo || {}).complaintNo || '' }} + + + + + {{ parseTime((scope.row.acceptInfo || {}).complaintDate, '{y}-{m}-{d}') }} + + + + + 待填写 + 已完成 + + + + + + + + + + {{ parseTime(scope.row.fillTime, '{y}-{m}-{d} {h}:{i}:{s}') }} + + + + + 填写 + 查看 + + + + + + + + + + + 刷新 + + + + + + + + + + + + + + + + + + + 填写处理意见 + + + + + + + + + + + + + + + + + + diff --git a/klp-ui/src/views/wms/post/objection/todo.vue b/klp-ui/src/views/wms/post/objection/todo.vue new file mode 100644 index 00000000..3bba6013 --- /dev/null +++ b/klp-ui/src/views/wms/post/objection/todo.vue @@ -0,0 +1,270 @@ + + + + + + + + + + + + + + 搜索 + 重置 + + + + + + + + + + + {{ (scope.row.acceptInfo || {}).complaintNo || '' }} + + + + + {{ parseTime((scope.row.acceptInfo || {}).complaintDate, '{y}-{m}-{d}') }} + + + + + {{ getDeptName(scope.row.deptId) }} + + + + + 待执行 + 已反馈 + + + + + + + + + + {{ parseTime(scope.row.feedbackTime, '{y}-{m}-{d} {h}:{i}:{s}') }} + + + + + 执行反馈 + 查看 + + + + + + + + + + + + + + + + + + + + + + 处理方案 + + + + + 填写执行反馈 + + + + + + + + + + + + + + + + + +