From 9c3c9bf7dfaf0f1c162a6aa06fdb7ca81711f70d Mon Sep 17 00:00:00 2001
From: LSH
Date: 星期二, 10 十月 2023 11:49:07 +0800
Subject: [PATCH] #回退流程相关

---
 src/main/java/com/zy/crm/manager/controller/PriOnline2Controller.java |   70 ++++++++++-
 src/main/webapp/views/priOnline2/priOnline.html                       |    3 
 src/main/java/com/zy/crm/manager/controller/PlanController.java       |   20 +-
 src/main/webapp/static/js/priOnline2/priOnline.js                     |  232 ++++++++++++++++++++++++--------------
 src/main/java/com/zy/crm/manager/controller/OrderController.java      |   10 +
 5 files changed, 228 insertions(+), 107 deletions(-)

diff --git a/src/main/java/com/zy/crm/manager/controller/OrderController.java b/src/main/java/com/zy/crm/manager/controller/OrderController.java
index 00d130f..e7fe05e 100644
--- a/src/main/java/com/zy/crm/manager/controller/OrderController.java
+++ b/src/main/java/com/zy/crm/manager/controller/OrderController.java
@@ -158,7 +158,7 @@
                                 for (SettleDto dto : priQuoteDtos) {
                                     switch (dto.getStep()) {
                                         case 1:
-                                            dto.setMsg(dto.getMsg()+" 鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�� "+DateUtils.convert(now)+" 璺熻釜椤圭洰淇敼璐熻矗浜轰负锛�"+priQuote.getUserId$());
+                                            dto.setMsg(dto.getMsg()+" 鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�� "+DateUtils.convert(now)+" 璺熻釜椤圭洰淇敼璐熻矗浜轰负锛�"+priQuote.getUserId$());
                                             dto.setUserId(priQuote.getUserId());
                                             dto.setUsername(priQuote.getUserId$());
                                             break;
@@ -175,6 +175,8 @@
 
                                 priQuoteService.updateById(priQuote);
                             }
+                        }else {
+                            signPriOnline2=true;
                         }
                         if (!signPriOnline2){
                             continue;
@@ -191,9 +193,7 @@
                         for (SettleDto dto : priOnline2Dtos) {
                             switch (dto.getStep()) {
                                 case 0:
-                                    dto.setMsg(dto.getMsg()+" 鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�� "+DateUtils.convert(now)+" 璺熻釜椤圭洰淇敼璐熻矗浜轰负锛�"+priOnline2.getUser$());
-                                    dto.setUserId(priOnline2.getUserId());
-                                    dto.setUsername(priOnline2.getUser$());
+                                    dto.setMsg(dto.getMsg()+" 鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�� "+DateUtils.convert(now)+" 璺熻釜椤圭洰淇敼璐熻矗浜轰负锛�"+priOnline2.getUser$());
                                     break;
                                 case 3:
                                     dto.setUserId(priOnline2.getUserId());
@@ -209,6 +209,8 @@
                         priOnline2Service.updateById(priOnline2);
                     }
 
+                }else {
+                    signPlan=true;
                 }
 
                 if (!signPlan){
diff --git a/src/main/java/com/zy/crm/manager/controller/PlanController.java b/src/main/java/com/zy/crm/manager/controller/PlanController.java
index 30617da..61a96cd 100644
--- a/src/main/java/com/zy/crm/manager/controller/PlanController.java
+++ b/src/main/java/com/zy/crm/manager/controller/PlanController.java
@@ -56,6 +56,9 @@
     @Autowired
     private SmsCodeService smsCodeService;
 
+    String PZH=" 鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�� ";
+
+
     @GetMapping(value = "/plan/{id}/auth")
     @ManagerAuth
     public R get(@PathVariable("id") String id) {
@@ -434,7 +437,7 @@
                             if (Cools.isEmpty(dto.getMsg())){
                                 dto.setMsg("鍞墠缁勯暱" + planLeader.getNickname() + "瀹℃壒閫氳繃");
                             }else {
-                                dto.setMsg(dto.getMsg()+" 鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�� "+DateUtils.convert(new Date())+" "+"鍞墠缁勯暱" + planLeader.getNickname() + "瀹℃壒閫氳繃");
+                                dto.setMsg(dto.getMsg()+PZH+DateUtils.convert(new Date())+" "+"鍞墠缁勯暱" + planLeader.getNickname() + "瀹℃壒閫氳繃");
                             }
                             dto.setTime(DateUtils.convert(new Date()));
                             break;
@@ -494,7 +497,7 @@
                             if (Cools.isEmpty(dto.getMsg())){
                                 dto.setMsg("瑙勫垝鍛�" + plannerUser.getNickname() + "瀹℃壒閫氳繃");
                             }else {
-                                dto.setMsg(dto.getMsg()+" 鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�� "+DateUtils.convert(new Date())+" "+"瑙勫垝鍛�" + plannerUser.getNickname() + "瀹℃壒閫氳繃");
+                                dto.setMsg(dto.getMsg()+PZH+DateUtils.convert(new Date())+" "+"瑙勫垝鍛�" + plannerUser.getNickname() + "瀹℃壒閫氳繃");
                             }
                             dto.setTime(DateUtils.convert(new Date()));
                             break;
@@ -534,7 +537,7 @@
                             if (Cools.isEmpty(dto.getMsg())){
                                 dto.setMsg("涓氬姟鍛�" + salesman0.getNickname() + "瀹℃壒閫氳繃");
                             }else {
-                                dto.setMsg(dto.getMsg()+" 鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�� "+DateUtils.convert(new Date())+" "+"涓氬姟鍛�" + salesman0.getNickname() + "瀹℃壒閫氳繃");
+                                dto.setMsg(dto.getMsg()+PZH+DateUtils.convert(new Date())+" "+"涓氬姟鍛�" + salesman0.getNickname() + "瀹℃壒閫氳繃");
                             }
                             dto.setTime(DateUtils.convert(new Date()));
                             break;
@@ -574,16 +577,19 @@
         List<SettleDto> planDtoList = new ArrayList<>();
         boolean sign = true;
         for (SettleDto dto : planDtos) {
+            if (dto.getStep().equals(2)){
+                plan.setDirector(dto.getUserId());
+            }
             if (sign && dto.getUserId().equals(directorId) && plan.getSettle()+1==dto.getStep()){
                 if (Cools.isEmpty(dto.getMsg())){
                     dto.setMsg(DateUtils.convert(now)+" "+director.getNickname()+"鍥為��瀹℃壒");
                 }else {
-                    dto.setMsg(dto.getMsg()+" 鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�� "+DateUtils.convert(now)+" "+director.getNickname()+"鍥為��瀹℃壒");
+                    dto.setMsg(dto.getMsg()+PZH+DateUtils.convert(now)+" "+director.getNickname()+"鍥為��瀹℃壒");
                 }
                 sign = false;
             }
             if (sign){
-                dto.setMsg(dto.getMsg()+" 鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�� "+DateUtils.convert(now)+" "+director.getNickname()+"鍥為��瀹℃壒");
+                dto.setMsg(dto.getMsg()+PZH+DateUtils.convert(now)+" "+director.getNickname()+"鍥為��瀹℃壒");
             }
 
             planDtoList.add(dto);
@@ -591,10 +597,6 @@
         plan.setStatus(0);
         plan.setStep(1);
         plan.setSettle(1);
-
-        PlanType planType = planTypeService.selectById(plan.getPlanType());
-        User planLeader = planTypeService.findPlanLeader(planType);
-        plan.setDirector(planLeader.getId());
         plan.setSettleMsg(JSON.toJSONString(planDtoList));
         planService.updateById(plan);
         return R.ok("鍥為��鎴愬姛");
diff --git a/src/main/java/com/zy/crm/manager/controller/PriOnline2Controller.java b/src/main/java/com/zy/crm/manager/controller/PriOnline2Controller.java
index 0a9e933..b7a6737 100644
--- a/src/main/java/com/zy/crm/manager/controller/PriOnline2Controller.java
+++ b/src/main/java/com/zy/crm/manager/controller/PriOnline2Controller.java
@@ -56,6 +56,8 @@
     @Autowired
     private UserService userService;
 
+    String PZH=" 鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�� ";
+
     @RequestMapping(value = "/priOnline2/{id}/auth")
     @ManagerAuth
     public R get(@PathVariable("id") String id) {
@@ -183,8 +185,8 @@
         PlanType planType = planTypeService.selectById(plan.getPlanType());
         node = node+planType.getType();
 
-        ProcessPermissions processPermissions = processPermissionsService.selectOne(new EntityWrapper<ProcessPermissions>().eq("process_memo", 5).eq("process", node));//2锛氭姤浠锋祦绋�
-        User manager = userService.selectById(processPermissions.getUserId());       // 鑾峰彇鎶ヤ环娴佺▼鑺傜偣2纭浜�
+        ProcessPermissions processPermissions = processPermissionsService.selectOne(new EntityWrapper<ProcessPermissions>().eq("process_memo", 5).eq("process", node));//2锛氭牳浠锋祦绋�
+        User manager = userService.selectById(processPermissions.getUserId());       // 鑾峰彇鏍镐环娴佺▼鑺傜偣2纭浜�
 
                                 // 鑾峰彇涓氬姟鍛�
         List<String> initNames = new ArrayList<>();
@@ -433,6 +435,46 @@
         return R.ok().add(vos);
     }
 
+    @PostMapping(value = "/priOnline2/approvalEnd/auth")
+    @ManagerAuth(memo = "鎷掔粷鐢宠鍗�")
+    public R approvalEnd(@RequestParam Long priOnlineId,
+                         @RequestParam(required = false) Long plannerId) {
+        PriOnline2 priOnline2 = priOnline2Service.selectById(priOnlineId);
+        Date now = new Date();
+        Long memberId = priOnline2.getMemberId();
+        User member = userService.selectById(memberId);
+        if (!member.getId().equals(getUserId())){
+            return R.error("鎶辨瓑锛屾偍娌℃湁瀹℃牳鐨勬潈闄�");
+        }
+        List<SettleDto> planDtos = JSON.parseArray(priOnline2.getSettleMsg(), SettleDto.class);
+        List<SettleDto> planDtoList = new ArrayList<>();
+        boolean sign = true;
+        for (SettleDto dto : planDtos) {
+            if (dto.getStep().equals(1)){
+                priOnline2.setMemberId(dto.getUserId());
+            }
+            if (sign && dto.getUserId().equals(memberId) && priOnline2.getSettle()+1==dto.getStep()){
+                if (Cools.isEmpty(dto.getMsg())){
+                    dto.setMsg(DateUtils.convert(now)+" "+member.getNickname()+"鍥為��瀹℃壒");
+                }else {
+                    dto.setMsg(dto.getMsg()+PZH+DateUtils.convert(now)+" "+member.getNickname()+"鍥為��瀹℃壒");
+                }
+                sign = false;
+            }
+            if (sign){
+                dto.setMsg(dto.getMsg()+PZH+DateUtils.convert(now)+" "+member.getNickname()+"鍥為��瀹℃壒");
+            }
+
+            planDtoList.add(dto);
+        }
+        priOnline2.setStatus(0);
+        priOnline2.setSettle(0);
+
+        priOnline2.setSettleMsg(JSON.toJSONString(planDtoList));
+        priOnline2Service.updateById(priOnline2);
+        return R.ok("鍥為��鎴愬姛");
+    }
+
     @PostMapping(value = "/priOnline2/approval/auth")
     @ManagerAuth
     public R approvalBusinessTrip(@RequestParam Long priOnlineId,
@@ -443,16 +485,18 @@
         switch (priOnline2.getSettle()) {
             case 0:
                 // 鏈儴闂ㄧ粡鐞嗗鏍�  鑺傜偣璐熻矗浜�
+                User user = userService.selectById(priOnline2.getMemberId());
+
                 Plan plan1 = planService.selectById(priOnline2.getItemId());
                 PlanType planType1 = planTypeService.selectById(plan1.getPlanType());
 
-                ProcessPermissions processPermissions1 = processPermissionsService.selectOne(new EntityWrapper<ProcessPermissions>().eq("process_memo", 5).eq("process", "2-"+planType1.getType()));//2锛氭姤浠锋祦绋�
+                ProcessPermissions processPermissions1 = processPermissionsService.selectOne(new EntityWrapper<ProcessPermissions>().eq("process_memo", 5).eq("process", "2-"+planType1.getType()));//2锛氭牳浠锋祦绋�
                 User manager1 = userService.selectById(processPermissions1.getUserId());       // 鑾峰彇鎶ヤ环娴佺▼鑺傜偣2纭浜�
 
                 if (Cools.isEmpty(getUser())) {
                     return R.error("鎶辨瓑锛屾偍娌℃湁鎻愪氦鐨勬潈闄�");
                 }
-                if (!getUserId().equals(getUser().getId())) {
+                if (!getUserId().equals(user.getId())) {
                     return R.error("鎶辨瓑锛屾偍娌℃湁鎻愪氦鐨勬潈闄�");
                 }
                 // 淇敼 settle 姝ラ鏁版嵁
@@ -464,7 +508,11 @@
                             break;
                         case 1:
                             dto.setCurr(Boolean.TRUE);
-                            dto.setMsg(getUser().getNickname() + "鎻愪氦瀹屾垚");
+                            if (Cools.isEmpty(dto.getMsg())){
+                                dto.setMsg(user.getNickname() + "鎻愪氦瀹屾垚");
+                            }else {
+                                dto.setMsg(dto.getMsg()+PZH+DateUtils.convert(new Date())+" " + user.getNickname() + "鎻愪氦瀹屾垚");
+                            }
                             dto.setTime(DateUtils.convert(now));
                             break;
                         default:
@@ -507,7 +555,11 @@
                                 break;
                             case 2:
                                 dto.setCurr(Boolean.TRUE);
-                                dto.setMsg(manager.getNickname() + "瀹℃壒閫氳繃");
+                                if (Cools.isEmpty(dto.getMsg())){
+                                    dto.setMsg(manager.getNickname() + "瀹℃壒閫氳繃");
+                                }else {
+                                    dto.setMsg(dto.getMsg()+PZH+DateUtils.convert(new Date())+" " + manager.getNickname() + "瀹℃壒閫氳繃");
+                                }
                                 dto.setTime(DateUtils.convert(now));
                                 break;
                             default:
@@ -543,7 +595,11 @@
                             break;
                         case 3:
                             dto.setCurr(Boolean.TRUE);
-                            dto.setMsg("涓氬姟鍛�" + salesman0.getNickname() + "浠ョ‘璁�");
+                            if (Cools.isEmpty(dto.getMsg())){
+                                dto.setMsg("涓氬姟鍛�" + salesman0.getNickname() + "瀹℃壒閫氳繃");
+                            }else {
+                                dto.setMsg(dto.getMsg()+PZH+DateUtils.convert(new Date())+" "+"涓氬姟鍛�" + salesman0.getNickname() + "瀹℃壒閫氳繃");
+                            }
                             dto.setTime(DateUtils.convert(new Date()));
                             break;
                         default:
diff --git a/src/main/webapp/static/js/priOnline2/priOnline.js b/src/main/webapp/static/js/priOnline2/priOnline.js
index d8f706b..05e67a8 100644
--- a/src/main/webapp/static/js/priOnline2/priOnline.js
+++ b/src/main/webapp/static/js/priOnline2/priOnline.js
@@ -5,7 +5,7 @@
     base: baseUrl + "/static/layui/lay/modules/"
 }).extend({
     cascader: 'cascader/cascader',
-}).use(['table','laydate', 'form', 'admin', 'xmSelect', 'element', 'cascader', 'tree', 'dropdown'], function(){
+}).use(['table','laydate', 'form', 'admin', 'xmSelect', 'element', 'cascader', 'tree', 'dropdown'], function() {
     var table = layui.table;
     var $ = layui.jquery;
     var layer = layui.layer;
@@ -20,19 +20,19 @@
     // 閮ㄩ棬浜哄憳 绛涢��
     dropdown.render({
         elem: '#organization'
-        ,content: ['<div id="organizationTree" style="height: calc(100vh - 525px);border: none"></div>'].join('')
-        ,style: 'width: 370px; height: 350px; padding: 0 15px; box-shadow: 1px 1px 30px rgb(0 0 0 / 12%);'
-        ,ready: function(){
+        , content: ['<div id="organizationTree" style="height: calc(100vh - 525px);border: none"></div>'].join('')
+        , style: 'width: 370px; height: 350px; padding: 0 15px; box-shadow: 1px 1px 30px rgb(0 0 0 / 12%);'
+        , ready: function () {
             loadTree();
         }
     });
 
     // 鏍戝舰鍥�
     var organizationTree;
-    window.loadTree = function(condition){
+    window.loadTree = function (condition) {
         var loadIndex = layer.load(2);
         $.ajax({
-            url: baseUrl+"/dept/user/tree/auth",
+            url: baseUrl + "/dept/user/tree/auth",
             headers: {'token': localStorage.getItem('token')},
             data: {
                 'condition': condition
@@ -40,7 +40,7 @@
             method: 'POST',
             success: function (res) {
                 layer.close(loadIndex);
-                if (res.code === 200){
+                if (res.code === 200) {
                     organizationTree = tree.render({
                         elem: '#organizationTree',
                         id: 'organizationTree',
@@ -62,8 +62,8 @@
                         }
                     });
                     treeData = res.data;
-                } else if (res.code === 403){
-                    top.location.href = baseUrl+"/";
+                } else if (res.code === 403) {
+                    top.location.href = baseUrl + "/";
                 } else {
                     layer.msg(res.msg)
                 }
@@ -75,7 +75,7 @@
     tableIns = table.render({
         elem: '#priOnline',
         headers: {token: localStorage.getItem('token')},
-        url: baseUrl+'/priOnline2/list/auth',
+        url: baseUrl + '/priOnline2/list/auth',
         page: true,
         limit: 16,
         limits: [16, 30, 50, 100, 200, 500],
@@ -83,21 +83,43 @@
         cellMinWidth: 150,
         cols: [[
             {type: 'checkbox', fixed: 'left'}
-            ,{field: 'id', title: 'ID', sort: true,align: 'center', fixed: 'left', width: 80,hide: true}
-            ,{field: 'templateName', align: 'center',title: '瀹㈡埛鍚嶇О', style: 'color: #1890ff;cursor:pointer', event: 'moreCstmr', width: 350,hide: false}
-            ,{field: 'cstmrId$', align: 'center',title: '瀹㈡埛id',hide: true}
-            ,{field: 'orderNum', align: 'center',title: '鏍镐环鍗曞彿',hide: false}
-            ,{field: 'planId$', align: 'center',title: '瑙勫垝鍗曞彿', style: 'color: #1890ff;cursor:pointer', event: 'morePlan',hide: false}
-            ,{field: 'itemId', align: 'center',title: '瑙勫垝鍗曞彿', hide: true}
-            ,{field: 'createTime$', align: 'center',title: '鍒涘缓鏃堕棿'}
-            ,{field: 'updateTime$', align: 'center',title: '鏇存柊鏃堕棿'}
-            ,{field: 'status$', align: 'center',title: '鐘舵��'}
+            , {field: 'id', title: 'ID', sort: true, align: 'center', fixed: 'left', width: 80, hide: true}
+            , {
+                field: 'templateName',
+                align: 'center',
+                title: '瀹㈡埛鍚嶇О',
+                style: 'color: #1890ff;cursor:pointer',
+                event: 'moreCstmr',
+                width: 350,
+                hide: false
+            }
+            , {field: 'cstmrId$', align: 'center', title: '瀹㈡埛id', hide: true}
+            , {field: 'orderNum', align: 'center', title: '鏍镐环鍗曞彿', hide: false}
+            , {
+                field: 'planId$',
+                align: 'center',
+                title: '瑙勫垝鍗曞彿',
+                style: 'color: #1890ff;cursor:pointer',
+                event: 'morePlan',
+                hide: false
+            }
+            , {field: 'itemId', align: 'center', title: '瑙勫垝鍗曞彿', hide: true}
+            , {field: 'createTime$', align: 'center', title: '鍒涘缓鏃堕棿'}
+            , {field: 'updateTime$', align: 'center', title: '鏇存柊鏃堕棿'}
+            , {field: 'status$', align: 'center', title: '鐘舵��'}
             // ,{field: 'memberId$', align: 'center',title: ''}
-            ,{field: 'settle$', align: 'center',title: '杩涘害', style: 'color: #1890ff;cursor:pointer', event: 'more',hide: false}
-            ,{field: 'user$', align: 'center',title: '涓氬姟鍛�'}
-            ,{field: 'updateUserId$', align: 'center',title: '鏇存柊浜哄憳'}
-            ,{field: 'checkDataStatus$', align: 'center',title: '鎶ヤ环鏁版嵁'}
-            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:350}
+            , {
+                field: 'settle$',
+                align: 'center',
+                title: '杩涘害',
+                style: 'color: #1890ff;cursor:pointer',
+                event: 'more',
+                hide: false
+            }
+            , {field: 'user$', align: 'center', title: '涓氬姟鍛�'}
+            , {field: 'updateUserId$', align: 'center', title: '鏇存柊浜哄憳'}
+            , {field: 'checkDataStatus$', align: 'center', title: '鎶ヤ环鏁版嵁'}
+            , {fixed: 'right', title: '鎿嶄綔', align: 'center', toolbar: '#operate', width: 350}
         ]],
         request: {
             pageName: 'curr',
@@ -114,11 +136,11 @@
         response: {
             statusCode: 200
         },
-        done: function(res, curr, count) {
+        done: function (res, curr, count) {
             if (res.code === 403) {
-                top.location.href = baseUrl+"/";
+                top.location.href = baseUrl + "/";
             }
-            pageCurr=curr;
+            pageCurr = curr;
             limit();
         }
     });
@@ -126,7 +148,7 @@
     // 鐩戝惉鎺掑簭浜嬩欢
     table.on('sort(priOnline)', function (obj) {
         var searchData = {};
-        $.each($('#search-box [name]').serializeArray(), function() {
+        $.each($('#search-box [name]').serializeArray(), function () {
             searchData[this.name] = this.value;
         });
         searchData['orderByField'] = obj.field;
@@ -138,9 +160,9 @@
             },
             done: function (res, curr, count) {
                 if (res.code === 403) {
-                    top.location.href = baseUrl+"/";
+                    top.location.href = baseUrl + "/";
                 }
-                pageCurr=curr;
+                pageCurr = curr;
                 limit();
             }
         });
@@ -149,7 +171,7 @@
     // 鐩戝惉澶村伐鍏锋爮浜嬩欢
     table.on('toolbar(priOnline)', function (obj) {
         var checkStatus = table.checkStatus(obj.config.id);
-        switch(obj.event) {
+        switch (obj.event) {
             case 'addBlank':
                 showEditModel();
                 break;
@@ -163,26 +185,26 @@
                 break;
             case 'deleteData':
                 var data = checkStatus.data;
-                var ids=[];
+                var ids = [];
                 data.map(function (track) {
                     ids.push(track.id);
                 });
-                if (ids.length === 0){
+                if (ids.length === 0) {
                     layer.msg('璇烽�夋嫨鏁版嵁');
                 } else {
-                    layer.confirm('纭畾鍒犻櫎'+(ids.length===1?'姝�':ids.length)+'鏉℃暟鎹悧', function(){
+                    layer.confirm('纭畾鍒犻櫎' + (ids.length === 1 ? '姝�' : ids.length) + '鏉℃暟鎹悧', function () {
                         $.ajax({
-                            url: baseUrl+"/priOnline2/delete/auth",
+                            url: baseUrl + "/priOnline2/delete/auth",
                             headers: {'token': localStorage.getItem('token')},
                             data: {ids: ids},
                             method: 'POST',
-                            traditional:true,
+                            traditional: true,
                             success: function (res) {
-                                if (res.code === 200){
+                                if (res.code === 200) {
                                     layer.closeAll();
                                     tableReload(false);
-                                } else if (res.code === 403){
-                                    top.location.href = baseUrl+"/";
+                                } else if (res.code === 403) {
+                                    top.location.href = baseUrl + "/";
                                 } else {
                                     layer.msg(res.msg)
                                 }
@@ -192,9 +214,9 @@
                 }
                 break;
             case 'exportData':
-                layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
-                    var titles=[];
-                    var fields=[];
+                layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function () {
+                    var titles = [];
+                    var fields = [];
                     obj.config.cols[0].map(function (col) {
                         if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
                             titles.push(col.title);
@@ -202,7 +224,7 @@
                         }
                     });
                     var exportData = {};
-                    $.each($('#search-box [name]').serializeArray(), function() {
+                    $.each($('#search-box [name]').serializeArray(), function () {
                         exportData[this.name] = this.value;
                     });
                     var param = {
@@ -210,18 +232,18 @@
                         'fields': fields
                     };
                     $.ajax({
-                        url: baseUrl+"/priOnline2/export/auth",
+                        url: baseUrl + "/priOnline2/export/auth",
                         headers: {'token': localStorage.getItem('token')},
                         data: JSON.stringify(param),
-                        dataType:'json',
-                        contentType:'application/json;charset=UTF-8',
+                        dataType: 'json',
+                        contentType: 'application/json;charset=UTF-8',
                         method: 'POST',
                         success: function (res) {
                             layer.closeAll();
                             if (res.code === 200) {
-                                table.exportFile(titles,res.data,'xls');
+                                table.exportFile(titles, res.data, 'xls');
                             } else if (res.code === 403) {
-                                top.location.href = baseUrl+"/";
+                                top.location.href = baseUrl + "/";
                             } else {
                                 layer.msg(res.msg)
                             }
@@ -233,9 +255,20 @@
     });
 
     // 鐩戝惉琛屽伐鍏蜂簨浠�
-    table.on('tool(priOnline)', function(obj){
+    table.on('tool(priOnline)', function (obj) {
         var data = obj.data;
         switch (obj.event) {
+            case 'approvalEnd':
+                layer.confirm('瀹℃壒鎷掔粷锛�', {
+                    skin: 'layui-layer-admin',
+                    shade: .1,
+                    offset: '200px',
+                    title: data.name
+                }, function (i) {
+                    layer.close(i);
+                    approvalEnd(data.id);
+                });
+                break;
             case 'approval':
                 layer.confirm('瀹℃壒閫氳繃锛�', {
                     skin: 'layui-layer-admin',
@@ -262,7 +295,7 @@
                                     remoteMethod: function (val, cb, show) {
                                         let loadIndex = layer.load(2);
                                         $.ajax({
-                                            url: baseUrl+"/priOnline2/priQuoteAdd/list/auth",
+                                            url: baseUrl + "/priOnline2/priQuoteAdd/list/auth",
                                             headers: {'token': localStorage.getItem('token')},
                                             data: {
                                                 planId: data.id
@@ -344,25 +377,25 @@
                     area: [top.detailWidth, top.detailHeight],
                     shadeClose: false,
                     content: 'priOnline_detail.html?id=' + data.id,
-                    success: function(layero, index){
+                    success: function (layero, index) {
                         // layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
                     }
                 });
                 break;
             case 'del':
-                layer.confirm('纭畾鍒犻櫎杩欐潯鏁版嵁鍚�', function(){
+                layer.confirm('纭畾鍒犻櫎杩欐潯鏁版嵁鍚�', function () {
                     $.ajax({
-                        url: baseUrl+"/priOnline2/delete/auth",
+                        url: baseUrl + "/priOnline2/delete/auth",
                         headers: {'token': localStorage.getItem('token')},
                         data: {ids: data.id},
                         method: 'POST',
-                        traditional:true,
+                        traditional: true,
                         success: function (res) {
-                            if (res.code === 200){
+                            if (res.code === 200) {
                                 layer.closeAll();
                                 tableReload(false);
-                            } else if (res.code === 403){
-                                top.location.href = baseUrl+"/";
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl + "/";
                             } else {
                                 layer.msg(res.msg)
                             }
@@ -375,36 +408,36 @@
                 break;
             case "upload":
                 $.ajax({
-                    type:"get",
-                    url: baseUrl+"/priOnline2/viewCheck/" + data.id + "/auth",
-                    dataType:"json",
+                    type: "get",
+                    url: baseUrl + "/priOnline2/viewCheck/" + data.id + "/auth",
+                    dataType: "json",
                     headers: {'token': localStorage.getItem('token')},
-                    success:function(res) {
+                    success: function (res) {
                         if (res.code == 200) {
-                            layer.confirm('褰撳墠宸插瓨鍦ㄦ暟鎹紝缁х画涓婁紶灏嗕細瑕嗙洊鏃ф暟鎹紝鏄惁涓婁紶锛�', function(){
+                            layer.confirm('褰撳墠宸插瓨鍦ㄦ暟鎹紝缁х画涓婁紶灏嗕細瑕嗙洊鏃ф暟鎹紝鏄惁涓婁紶锛�', function () {
                                 $("#uploadQuote").click()
                             });
-                        }else{
+                        } else {
                             $("#uploadQuote").click()
                         }
                     }
                 });
 
-                $("#uploadQuote").on("change",(evt) => {
+                $("#uploadQuote").on("change", (evt) => {
                     var files = evt.target.files;
-                    if(files==null || files.length==0){
+                    if (files == null || files.length == 0) {
                         alert("No files wait for import");
                         return;
                     }
 
                     let name = files[0].name;
-                    let suffixArr = name.split("."), suffix = suffixArr[suffixArr.length-1];
-                    if(suffix!="xlsx"){
+                    let suffixArr = name.split("."), suffix = suffixArr[suffixArr.length - 1];
+                    if (suffix != "xlsx") {
                         alert("Currently only supports the import of xlsx files");
                         return;
                     }
-                    LuckyExcel.transformExcelToLucky(files[0], function(exportJson, luckysheetfile){
-                        if(exportJson.sheets==null || exportJson.sheets.length==0){
+                    LuckyExcel.transformExcelToLucky(files[0], function (exportJson, luckysheetfile) {
+                        if (exportJson.sheets == null || exportJson.sheets.length == 0) {
                             alert("Failed to read the content of the excel file, currently does not support xls files!");
                             return;
                         }
@@ -413,7 +446,7 @@
                         formData.append("id", data.id);
                         formData.append("checkData", zip(exportJson.sheets));
                         $.ajax({
-                            url: baseUrl+"/priOnline2/uploadCheck/auth",
+                            url: baseUrl + "/priOnline2/uploadCheck/auth",
                             headers: {'token': localStorage.getItem('token')},
                             data: formData,
                             // data: JSON.stringify({
@@ -428,11 +461,11 @@
                             // contentType:'application/json;charset=UTF-8',
                             success: function (res) {
                                 if (res.code == 200) {
-                                    layer.msg('涓婁紶鎴愬姛',{time:1000},() => {
+                                    layer.msg('涓婁紶鎴愬姛', {time: 1000}, () => {
                                         parent.location.reload()
                                     })
-                                }else{
-                                    layer.msg(res.msg,{time:1000},() => {
+                                } else {
+                                    layer.msg(res.msg, {time: 1000}, () => {
                                         parent.location.reload()
                                     })
                                 }
@@ -444,11 +477,11 @@
             case "viewCheck":
                 //鏌ョ湅璇环
                 $.ajax({
-                    type:"get",
-                    url: baseUrl+"/priOnline2/viewCheck/" + data.id + "/auth",
-                    dataType:"json",
+                    type: "get",
+                    url: baseUrl + "/priOnline2/viewCheck/" + data.id + "/auth",
+                    dataType: "json",
                     headers: {'token': localStorage.getItem('token')},
-                    success:function(res) {
+                    success: function (res) {
                         if (res.code == 200) {
                             layer.open({
                                 type: 2,
@@ -457,12 +490,12 @@
                                 area: [top.detailWidth, top.detailHeight],
                                 shadeClose: false,
                                 content: 'priOnline_check.html?id=' + data.id,
-                                success: function(layero, index){
+                                success: function (layero, index) {
                                     // layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
                                 }
                             });
-                        }else{
-                            layer.msg(res.msg,{time:1000})
+                        } else {
+                            layer.msg(res.msg, {time: 1000})
                         }
                     }
                 });
@@ -497,7 +530,7 @@
                         area: [top.detailWidth, top.detailHeight],
                         shadeClose: false,
                         content: 'priOnline_detail.html?item_id=' + data.field.planId + "&template=" + data.field.template + "&name=" + data.field.name,
-                        success: function(layero, index){
+                        success: function (layero, index) {
                             clearFormVal(layer.getChildFrame('#detail', index));
                             // layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
                         }
@@ -523,17 +556,17 @@
                 form.on('submit(editSubmit)', function (data) {
                     var loadIndex = layer.load(2);
                     $.ajax({
-                        url: baseUrl+"/priOnline2/updateForm/auth",
+                        url: baseUrl + "/priOnline2/updateForm/auth",
                         headers: {'token': localStorage.getItem('token')},
                         data: data.field,
                         method: 'POST',
-                        traditional:true,
+                        traditional: true,
                         success: function (res) {
-                            if (res.code === 200){
+                            if (res.code === 200) {
                                 layer.closeAll();
                                 tableReload(false);
-                            } else if (res.code === 403){
-                                top.location.href = baseUrl+"/";
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl + "/";
                             } else {
                                 layer.msg(res.msg)
                             }
@@ -548,7 +581,32 @@
             }
         });
     }
-
+    function approvalEnd(planId, plannerId, dIdx) {
+        let loadIndex = layer.load(2);
+        $.ajax({
+            url: baseUrl+"/priOnline2/approvalEnd/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: {
+                priOnlineId: priOnlineId,
+                plannerId: plannerId
+            },
+            method: 'POST',
+            success: function (res) {
+                if (dIdx) {
+                    layer.close(dIdx);
+                }
+                layer.close(loadIndex);
+                if (res.code === 200){
+                    layer.msg(res.msg, {icon: 1});
+                    tableReload();
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                } else {
+                    layer.msg(res.msg, {icon: 2});
+                }
+            }
+        })
+    }
 
     function approval(priOnlineId, plannerId, dIdx) {
         let loadIndex = layer.load(2);
diff --git a/src/main/webapp/views/priOnline2/priOnline.html b/src/main/webapp/views/priOnline2/priOnline.html
index d142faa..81e0f95 100644
--- a/src/main/webapp/views/priOnline2/priOnline.html
+++ b/src/main/webapp/views/priOnline2/priOnline.html
@@ -82,6 +82,9 @@
   {{# if (d.settle == 2) { }}
     <a class="layui-btn layui-btn-xs btn-edit" lay-event="approval">纭</a>
   {{# } }}
+  {{# if (d.settle == 1 || d.settle == 2) { }}
+    <a class="layui-btn layui-btn-xs btn-edit" lay-event="approvalEnd">鍥為��瀹℃壒</a>
+  {{# } }}
   {{# if (d.settle == 0 || d.settle == 1) { }}
     <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>
   {{# } }}

--
Gitblit v1.9.1