From 582f03bff3c8f78ad2d1a517674c30ac539dceb9 Mon Sep 17 00:00:00 2001 From: chenhao Date: Thu, 13 Nov 2025 20:22:56 +0800 Subject: [PATCH] =?UTF-8?q?feat(order):=20=E6=96=B0=E5=A2=9E=E5=90=88?= =?UTF-8?q?=E5=90=8C=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0=E4=B8=8E=E5=AE=A1?= =?UTF-8?q?=E6=89=B9=E6=B5=81=E7=A8=8B=E5=8A=9F=E8=83=BD-=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E8=AE=A2=E5=8D=95=E7=8A=B6=E6=80=81=E9=80=89=E9=A1=B9?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=BA=90=E4=B8=BA=E5=AD=97=E5=85=B8=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=20-=20=E8=B0=83=E6=95=B4=E5=90=88=E4=BD=9C=E4=BC=99?= =?UTF-8?q?=E4=BC=B4=E8=A1=A8=E5=8D=95=E5=AD=97=E6=AE=B5=E5=B8=83=E5=B1=80?= =?UTF-8?q?=E4=B8=8E=E9=A1=BA=E5=BA=8F=20-=20=E6=96=B0=E5=A2=9E=E5=90=88?= =?UTF-8?q?=E5=90=8C=E6=96=87=E4=BB=B6=E5=88=A0=E9=99=A4=E4=B8=8E=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E6=8E=A5=E5=8F=A3-=20=E8=AE=A2=E5=8D=95=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E9=A1=B5=E5=A2=9E=E5=8A=A0=E6=96=87=E4=BB=B6=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E5=8C=BA=E5=9F=9F=E6=8E=A7=E5=88=B6=E9=80=BB=E8=BE=91?= =?UTF-8?q?-=20=E5=AE=9E=E7=8E=B0=E5=90=88=E5=90=8C=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E9=A2=84=E8=A7=88=E3=80=81=E4=B8=8B=E8=BD=BD=E5=8F=8A=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=8A=9F=E8=83=BD=20-=20=E6=B7=BB=E5=8A=A0=E5=AE=A1?= =?UTF-8?q?=E6=89=B9=E6=B5=81=E7=A8=8B=E6=97=B6=E9=97=B4=E7=BA=BF=E5=B1=95?= =?UTF-8?q?=E7=A4=BA=E4=B8=8D=E5=90=8C=E7=89=88=E6=9C=AC=E8=AE=B0=E5=BD=95?= =?UTF-8?q?-=20=E5=A2=9E=E5=8A=A0=E8=AE=A2=E5=8D=95=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E7=A6=81=E7=94=A8=E7=BC=96=E8=BE=91=E5=92=8C?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=93=8D=E4=BD=9C-=20=E5=BC=95=E5=85=A5?= =?UTF-8?q?=E5=90=88=E5=90=8C=E6=96=87=E4=BB=B6=E7=9B=B8=E5=85=B3API?= =?UTF-8?q?=E5=B9=B6=E6=89=A9=E5=B1=95=E8=AF=A6=E6=83=85=E9=A1=B5=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=20-=20=E4=BC=98=E5=8C=96=E8=AE=A2=E5=8D=95=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E9=A1=B5=E9=9D=A2=E7=BB=93=E6=9E=84=E4=B8=8E=E4=BA=A4?= =?UTF-8?q?=E4=BA=92=E9=80=BB=E8=BE=91-=20=E5=AE=8C=E5=96=84=E5=90=88?= =?UTF-8?q?=E5=90=8C=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E4=B8=8E=E6=93=8D=E4=BD=9C=E6=8C=89=E9=92=AE=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oms_web/oms_vue/src/api/project/order.js | 19 ++ .../src/views/project/order/OrderDetail.vue | 302 +++++++++++++++++- .../oms_vue/src/views/project/order/index.vue | 2 +- .../src/views/system/partner/index.vue | 28 +- .../vue/VueProjectOrderInfoController.java | 42 ++- 5 files changed, 363 insertions(+), 30 deletions(-) diff --git a/oms_web/oms_vue/src/api/project/order.js b/oms_web/oms_vue/src/api/project/order.js index 9381e2f0..9d1b831c 100644 --- a/oms_web/oms_vue/src/api/project/order.js +++ b/oms_web/oms_vue/src/api/project/order.js @@ -51,3 +51,22 @@ export function exportOrder(query) { data: query }) } + +// 删除合同文件 +export function delContractFile(ids) { + return request({ + url: '/project/order/file/remove', + method: 'post', + data: { ids: ids } + }) +} + +// 上传合同文件 +export function uploadContractFile(data) { + return request({ + url: '/project/order/importContractData', + method: 'post', + data: data, + headers: { 'Content-Type': 'multipart/form-data' } + }) +} diff --git a/oms_web/oms_vue/src/views/project/order/OrderDetail.vue b/oms_web/oms_vue/src/views/project/order/OrderDetail.vue index da7c8c68..cc4f830a 100644 --- a/oms_web/oms_vue/src/views/project/order/OrderDetail.vue +++ b/oms_web/oms_vue/src/views/project/order/OrderDetail.vue @@ -2,7 +2,7 @@
- +
@@ -218,26 +218,133 @@
- +
- - - - - - - +
+ + + + + +

{{ log.approveOpinion }}

+

操作人: {{ log.approveUserName }} ({{ log.roleName }})

+

接收人: {{ log.nextAllApproveUserName }}

+

审批状态: {{ formatApproveStatus(log.approveStatus) }}

+
+
+
+
+
+
暂无流转过程数据。
+
+ + + + + + - +
+
+
+
+
+ 下载模板 +
+ + + +
+

历史订单记录

+ + {{ form.projectName + 'Rev.' + version }} + +
+ +
+

附件信息

+ + + + + + + + + + + + + + +
+
+
+
暂无合同信息数据。
+
+
+ + + + +
+
@@ -256,7 +363,7 @@ diff --git a/oms_web/oms_vue/src/views/project/order/index.vue b/oms_web/oms_vue/src/views/project/order/index.vue index 8f60624f..12ef255d 100644 --- a/oms_web/oms_vue/src/views/project/order/index.vue +++ b/oms_web/oms_vue/src/views/project/order/index.vue @@ -16,7 +16,7 @@ - + diff --git a/oms_web/oms_vue/src/views/system/partner/index.vue b/oms_web/oms_vue/src/views/system/partner/index.vue index 9f8a2884..a0bf9b33 100644 --- a/oms_web/oms_vue/src/views/system/partner/index.vue +++ b/oms_web/oms_vue/src/views/system/partner/index.vue @@ -193,30 +193,32 @@ + - - - + + + + + + + + - - - - - + - - - - - + + + + + diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/vue/VueProjectOrderInfoController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/vue/VueProjectOrderInfoController.java index 437d4fa0..2217068d 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/vue/VueProjectOrderInfoController.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/vue/VueProjectOrderInfoController.java @@ -1,5 +1,6 @@ package com.ruoyi.sip.controller.vue; +import cn.hutool.core.collection.CollUtil; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; @@ -7,14 +8,20 @@ import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.ShiroUtils; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.sip.domain.ProjectOrderFileLog; import com.ruoyi.sip.domain.ProjectOrderInfo; +import com.ruoyi.sip.flowable.domain.Todo; +import com.ruoyi.sip.flowable.service.TodoService; +import com.ruoyi.sip.service.IProjectOrderFileLogService; import com.ruoyi.sip.service.IProjectOrderInfoService; import org.apache.shiro.authz.annotation.Logical; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * 订单管理 (Vue) @@ -28,7 +35,10 @@ public class VueProjectOrderInfoController extends BaseController { @Autowired private IProjectOrderInfoService projectOrderInfoService; - + @Autowired + private TodoService todoService; + @Autowired + private IProjectOrderFileLogService projectOrderFileLogService; /** * 查询订单管理列表 */ @@ -49,7 +59,35 @@ public class VueProjectOrderInfoController extends BaseController { @RequiresPermissions("project:order:query") @GetMapping(value = "/{id}") public AjaxResult getInfo(@PathVariable("id") Long id) { - return AjaxResult.success(projectOrderInfoService.selectProjectOrderInfoById(id)); + Map mmap=new HashMap<>(); + ProjectOrderInfo projectOrderInfo = projectOrderInfoService.selectProjectOrderInfoById(id); + mmap.put("projectOrderInfo", projectOrderInfo); + mmap.put("user", ShiroUtils.getSysUser()); + mmap.put("canUpdate", ProjectOrderInfo.OrderStatus.WAIT_COMMIT.getCode().equals(projectOrderInfo.getOrderStatus()) ||ProjectOrderInfo.OrderStatus.APPROVE_REJECT.getCode().equals(projectOrderInfo.getOrderStatus())); +// boolean showFileFlag=!ProjectOrderInfo.OrderStatus.WAIT_COMMIT.getCode().equals(projectOrderInfo.getOrderStatus()) +// && !ProjectOrderInfo.OrderStatus.APPROVE_REJECT.getCode().equals(projectOrderInfo.getOrderStatus()) +// && !"1".equals(projectOrderInfo.getProcessTemplate()); + mmap.put("showFileFlag", true); + + ProjectOrderFileLog fileLog = new ProjectOrderFileLog(); + fileLog.setOrderId(projectOrderInfo.getId()); + fileLog.setFileType(ProjectOrderFileLog.FileTypeEnum.CONTRACT_BAK.getCode()); + mmap.put("orderBakFile", projectOrderFileLogService.mapBakFile(fileLog)); + Todo todo = new Todo(); + todo.setBusinessKey(projectOrderInfo.getOrderCode()); + List todoCompletedList = todoService.selectTodoCompletedList(todo); + mmap.put("approveLog", todoCompletedList); + //判断商务角色 并且是产品或自己审批 + boolean updateFlag = CollUtil.isNotEmpty(todoCompletedList) && ProjectOrderInfo.OrderStatus.WAIT_APPROVE.getCode().equals(projectOrderInfo.getOrderStatus()) ? + ("产品经理".equals(todoCompletedList.get(0).getTaskName()) || "售前".equals(todoCompletedList.get(0).getTaskName())) + : (boolean) mmap.get("canUpdate"); + mmap.put("updateFile", (ShiroUtils.getSubject().hasRole("sale_assistant")||ShiroUtils.getSubject().hasRole("business") ||ShiroUtils.getSysUser().isAdmin()) && updateFlag); + mmap.put("uploadFinalFile", (ShiroUtils.getSubject().hasRole("business") || ShiroUtils.getSysUser().isAdmin()) && + ProjectOrderInfo.OrderStatus.APPROVE_COMPLETE.getCode().equals(projectOrderInfo.getOrderStatus())); + + + + return AjaxResult.success(mmap); } /**