Bladeren bron

新增项目流转退回按钮,修改项目预算未保存直接提交数据错误的bug

余思翰 4 maanden geleden
bovenliggende
commit
6b97fa2826

+ 1
- 1
oa-back/ruoyi-admin/src/main/resources/application.yml Bestand weergeven

@@ -97,7 +97,7 @@ token:
97 97
   # 令牌密钥
98 98
   secret: abcdefghijklmnopqrstuvwxyz
99 99
   # 令牌有效期(默认30分钟)
100
-  expireTime: 30
100
+  expireTime: 240
101 101
 
102 102
 # MyBatis配置
103 103
 mybatis:

+ 1
- 1
oa-back/ruoyi-flowable/src/main/java/com/ruoyi/flowable/controller/FlowInstanceController.java Bestand weergeven

@@ -48,7 +48,7 @@ public class FlowInstanceController {
48 48
     }
49 49
 
50 50
     @ApiOperation(value = "根据流程实例id获取子流程id列表")
51
-    @PostMapping(value = "/listSubProcInstId")
51
+    @GetMapping(value = "/listSubProcInstId")
52 52
     public AjaxResult listSubProcInstId(@ApiParam(value = "流程实例ID", required = true) @RequestParam String instanceId) {
53 53
         List<HistoricProcessInstance> subProcInstIdList = flowInstanceService.listSubProcInstId(instanceId);
54 54
         return AjaxResult.success(subProcInstIdList);

+ 5
- 7
oa-back/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowInstanceServiceImpl.java Bestand weergeven

@@ -13,10 +13,7 @@ import org.flowable.task.api.Task;
13 13
 import org.springframework.stereotype.Service;
14 14
 import org.springframework.transaction.annotation.Transactional;
15 15
 
16
-import java.util.HashMap;
17
-import java.util.List;
18
-import java.util.Map;
19
-import java.util.Objects;
16
+import java.util.*;
20 17
 
21 18
 /**
22 19
  * <p>工作流流程实例管理<p>
@@ -67,12 +64,13 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow
67 64
     public List<HistoricProcessInstance> listSubProcInstId(String instanceId) {
68 65
         List<HistoricProcessInstance> historicProcessInstance =
69 66
                 historyService.createHistoricProcessInstanceQuery().superProcessInstanceId(instanceId).list();
67
+        List<HistoricProcessInstance> historicProcessInstanceList = new ArrayList<>(historicProcessInstance);
70 68
         for (HistoricProcessInstance processInstance : historicProcessInstance) {
71
-            if (processInstance.getProcessDefinitionId().contains("tech_plan")) {
72
-                historicProcessInstance.addAll(historyService.createHistoricProcessInstanceQuery().superProcessInstanceId(processInstance.getId()).list());
69
+            if (processInstance.getProcessDefinitionId() != null && processInstance.getProcessDefinitionId().contains("tech_plan")) {
70
+                historicProcessInstanceList.addAll(historyService.createHistoricProcessInstanceQuery().superProcessInstanceId(processInstance.getId()).list());
73 71
             }
74 72
         }
75
-        return historicProcessInstance;
73
+        return historicProcessInstanceList;
76 74
     }
77 75
 
78 76
     /**

+ 11
- 3
oa-ui/src/api/flowable/finished.js Bestand weergeven

@@ -1,11 +1,10 @@
1 1
 /*
2 2
  * @Author: wrh
3 3
  * @Date: 2024-01-03 08:55:37
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-06-12 15:41:26
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2025-01-22 16:03:17
6 6
  */
7 7
 import request from '@/utils/request'
8
-import da from "element-ui/src/locale/lang/da";
9 8
 
10 9
 // 查询已办任务列表
11 10
 export function finishedList(query) {
@@ -93,3 +92,12 @@ export function exportDeployment(query) {
93 92
     params: query
94 93
   })
95 94
 }
95
+
96
+// 通过流程实例id查询子流程id
97
+export function listSubProcInstId(query) {
98
+  return request({
99
+    url: '/flowable/instance/listSubProcInstId',
100
+    method: 'get',
101
+    params: query
102
+  })
103
+}

+ 0
- 1
oa-ui/src/api/flowable/process.js Bestand weergeven

@@ -1,5 +1,4 @@
1 1
 import request from '@/utils/request'
2
-import da from "element-ui/src/locale/lang/da";
3 2
 
4 3
 // 我的发起的流程
5 4
 export function myProcessList(query) {

+ 1
- 2
oa-ui/src/api/flowable/todo.js Bestand weergeven

@@ -1,5 +1,4 @@
1 1
 import request from '@/utils/request'
2
-import da from "element-ui/src/locale/lang/da";
3 2
 
4 3
 // 查询待办任务列表
5 4
 export function todoList(query) {
@@ -157,4 +156,4 @@ export function findReCommitTask(data){
157 156
     method: 'post',
158 157
     data: data
159 158
   })
160
-}
159
+}

+ 49
- 0
oa-ui/src/utils/cancelSubProcess.js Bestand weergeven

@@ -0,0 +1,49 @@
1
+/*
2
+ * @Author: ysh
3
+ * @Date: 2025-01-22 16:58:56
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2025-01-23 11:32:05
6
+ */
7
+import { listBudget, addBudget, updateBudget, delBudget } from "@/api/oa/budget/budget.js";
8
+import { listTechnical, getTechnical, delTechnical, addTechnical, updateTechnical } from "@/api/oa/technical/technical";
9
+import { listTechnicalPlan, getTechnicalPlan, delTechnicalPlan, addTechnicalPlan, updateTechnicalPlan } from "@/api/oa/technical/technicalPlan";
10
+import { listSafe, getSafe, delSafe, addSafe, updateSafe } from "@/api/oa/safe/safe";
11
+import { listSubProcInstId, delDeployment } from "@/api/flowable/finished"
12
+import { deleteResources } from "@/utils/deleteResource";
13
+
14
+// 取消项目预算、技术方案、技术交底、安全交底流程,并且删除数据
15
+export async function cancelSubProcess(ids, projectId) {
16
+  try {
17
+    const [resSafe, resBudget, resTechnical, resTechnicalPlan] = await Promise.all([
18
+      listSafe({ pageSize: 100, projectId }),
19
+      listBudget({ pageSize: 100, projectId }),
20
+      listTechnical({ pageSize: 100, projectId }),
21
+      listTechnicalPlan({ pageSize: 100, projectId })
22
+    ]);
23
+ 
24
+    const safeIds = extractIds(resSafe.rows,'safeId');
25
+    const budgetIds = extractIds(resBudget.rows,'budgetId');
26
+    const technicalIds = extractIds(resTechnical.rows,'technicalId');
27
+    const technicalPlanIds = extractIds(resTechnicalPlan.rows,'technicalPlanId');
28
+ 
29
+    await deleteResourcesByIds('项目预算', budgetIds);
30
+    await deleteResourcesByIds('安全交底', safeIds);
31
+    await deleteResourcesByIds('技术方案', technicalIds);
32
+    await deleteResourcesByIds('技术交底', technicalPlanIds);
33
+
34
+    await delDeployment(ids);
35
+ 
36
+    return { code: 200 };
37
+  } catch (error) {
38
+    console.error('Error canceling subprocess:', error);
39
+    throw { code: 500, message: error.message || 'An unknown error occurred' };
40
+  }
41
+}
42
+ 
43
+function extractIds(rows,name) {
44
+  return rows ? rows.map(item => item[name] /* 假设每个对象都有一个名为'id'的属性 */) : [];
45
+}
46
+ 
47
+async function deleteResourcesByIds(type, ids) {
48
+  await Promise.all(ids.map(id => deleteResources(type, id)));
49
+}

+ 29
- 1
oa-ui/src/utils/deleteResource.js Bestand weergeven

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-06-13 17:07:59
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-10-09 13:52:58
5
+ * @LastEditTime: 2025-01-22 16:45:18
6 6
  */
7 7
 import request from '@/utils/request'
8 8
 
@@ -120,6 +120,34 @@ const apiEndpoints = [
120 120
       '/oa/wage/batch/:id'
121 121
     ]
122 122
   },
123
+  {
124
+    procDefName: '项目预算',
125
+    apiUrl: [
126
+      '/oa/budget/:id',
127
+      '/oa/budgetSettle/:id',
128
+      '/oa/budgetCar/:id',
129
+      '/oa/budgetDevice/:id',
130
+      '/oa/budgetStaff/:id',
131
+    ]
132
+  },
133
+  {
134
+    procDefName: '技术方案',
135
+    apiUrl: [
136
+      '/oa/technical/:id',
137
+    ]
138
+  },
139
+  {
140
+    procDefName: '技术交底',
141
+    apiUrl: [
142
+      '/oa/technicalPlan/:id',
143
+    ]
144
+  },
145
+  {
146
+    procDefName: '安全交底',
147
+    apiUrl: [
148
+      '/oa/safe/:id',
149
+    ]
150
+  },
123 151
 ]
124 152
 
125 153
 // 编写一个方法来处理删除请求,并同时发送所有API请求  

+ 2
- 2
oa-ui/src/views/flowable/form/archiveForm.vue Bestand weergeven

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-06-21 18:51:51
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2025-01-22 13:42:37
5
+ * @LastEditTime: 2025-01-23 09:10:56
6 6
 -->
7 7
 <template>
8 8
   <div class="app-container">
@@ -25,7 +25,7 @@
25 25
               <el-descriptions-item label="承担部门" label-class-name="my-label">{{
26 26
                 chooseProject.undertakingDeptName
27 27
               }}</el-descriptions-item>
28
-              <el-descriptions-item label="发起人" label-class-name="my-label">{{ chooseProject.projectLeaderUser
28
+              <el-descriptions-item label="项目负责人" label-class-name="my-label">{{ chooseProject.projectLeaderUser
29 29
                 ? chooseProject.projectLeaderUser.nickName : ''
30 30
                 }}</el-descriptions-item>
31 31
               <el-descriptions-item label="技术负责人" label-class-name="my-label">{{

+ 20
- 16
oa-ui/src/views/flowable/form/budget/addBudget.vue Bestand weergeven

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-06-21 18:51:51
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2025-01-16 10:16:27
5
+ * @LastEditTime: 2025-01-23 14:02:18
6 6
 -->
7 7
 <template>
8 8
   <div class="app-container">
@@ -39,7 +39,7 @@
39 39
     <!-- 其他成本 -->
40 40
     <other-table ref="otherRef" @otherCost="getOtherCost" :budgetForm="budgetForm"></other-table>
41 41
     <!-- 预算备注 -->
42
-    <el-form :model="budgetForm"  style="padding: 20px 100px 0">
42
+    <el-form :model="budgetForm" style="padding: 20px 100px 0">
43 43
       <el-form-item label="预算表单备注" label-width="100px">
44 44
         <el-input type="textarea" v-model="budgetForm.remark" placeholder="请输入预算备注" :rows="4"></el-input>
45 45
       </el-form-item>
@@ -172,7 +172,7 @@ export default {
172 172
     },
173 173
     // 提交下一个流程
174 174
     async submitNextFlow() {
175
-      if(this.taskName == '预算编制'){
175
+      if (this.taskName == '预算编制') {
176 176
         this.preserve();
177 177
       }
178 178
       const params = { taskId: this.taskForm.taskId };
@@ -277,22 +277,26 @@ export default {
277 277
       this.$set(this.budgetForm, 'businessExpense', val.businessExpense);
278 278
     },
279 279
     getFixCost() {
280
-      let total =
281
-        Number(this.budgetForm.staffCost) +
282
-        Number(this.budgetForm.carCost) +
283
-        Number(this.budgetForm.deviceCost);
284
-      this.budgetForm.fixCost = isNaN(total.toFixed(2)) ? null : total.toFixed(2);
280
+      const staffCost = this.safeNumber(this.budgetForm.staffCost);
281
+      const carCost = this.safeNumber(this.budgetForm.carCost);
282
+      const deviceCost = this.safeNumber(this.budgetForm.deviceCost);
283
+      const total = staffCost + carCost + deviceCost;
284
+      this.budgetForm.fixCost = total.toFixed(2);
285
+    },
286
+    safeNumber(value) {
287
+      const num = Number(value);
288
+      return isNaN(num) ? 0 : num;
285 289
     },
286 290
     // 获取直接成本
287 291
     getDirectExpense() {
288
-      let sum =
289
-        Number(this.budgetForm.settleExpense) +
290
-        Number(this.budgetForm.outExpense) +
291
-        Number(this.budgetForm.rentExpense) +
292
-        Number(this.budgetForm.taxExpense) +
293
-        Number(this.budgetForm.businessExpense) +
294
-        Number(this.budgetForm.otherExpense);
295
-      this.budgetForm.directExpense = isNaN(sum.toFixed(2)) ? null : sum.toFixed(2);
292
+      const settleExpense = this.safeNumber(this.budgetForm.settleExpense);
293
+      const outExpense = this.safeNumber(this.budgetForm.outExpense);
294
+      const rentExpense = this.safeNumber(this.budgetForm.rentExpense);
295
+      const taxExpense = this.safeNumber(this.budgetForm.taxExpense);
296
+      const businessExpense = this.safeNumber(this.budgetForm.businessExpense);
297
+      const otherExpense = this.safeNumber(this.budgetForm.otherExpense);
298
+      const sum = settleExpense + outExpense + rentExpense + taxExpense + businessExpense + otherExpense;
299
+      this.budgetForm.directExpense = sum.toFixed(2);
296 300
     },
297 301
     getTotalBudget() {
298 302
       this.budgetForm.totalBudget = (Number(this.budgetForm.fixCost) + Number(this.budgetForm.directExpense)).toFixed(2);

+ 11
- 2
oa-ui/src/views/flowable/form/budget/otherTable.vue Bestand weergeven

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-12-11 17:21:00
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-12-12 13:52:17
5
+ * @LastEditTime: 2025-01-23 14:05:03
6 6
 -->
7 7
 <template>
8 8
   <div>
@@ -102,11 +102,20 @@ export default {
102 102
     }
103 103
   },
104 104
   created() {
105
-    
105
+
106 106
   },
107 107
   methods: {
108 108
     initTable(val) {
109 109
       this.form = val;
110
+      this.form.outExpense == undefined ? this.form.outExpense = 0 : this.form.outExpense
111
+      this.form.rentExpense == undefined ? this.form.rentExpense = 0 : this.form.rentExpense
112
+      this.form.otherExpense == undefined ? this.form.otherExpense = 0 : this.form.otherExpense
113
+      this.form.taxExpense == undefined ? this.form.taxExpense = 0 : this.form.taxExpense
114
+      this.form.businessExpense == undefined ? this.form.businessExpense = 0 : this.form.businessExpense
115
+    },
116
+    safeNumber(value) {
117
+      const num = Number(value);
118
+      return isNaN(num) ? 0 : num;
110 119
     },
111 120
     computedDirectExpense() {
112 121
       this.$emit('otherCost', this.form)

+ 0
- 2
oa-ui/src/views/flowable/form/budget/staffTable.vue Bestand weergeven

@@ -114,8 +114,6 @@ export default {
114 114
       this.form.staffCost = staffCost
115 115
     },
116 116
     getChooseUser(val) {
117
-      console.log(val);
118
-
119 117
       for (let v of val) {
120 118
         if (v.deptId === 115) {
121 119
           v.salary = { salary: 7898.75 }

+ 17
- 9
oa-ui/src/views/flowable/form/business/contractForm.vue Bestand weergeven

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-05-10 15:31:57
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2025-01-15 11:29:57
5
+ * @LastEditTime: 2025-01-23 09:22:36
6 6
 -->
7 7
 <template>
8 8
   <div class="app-container">
@@ -1051,19 +1051,27 @@ export default {
1051 1051
         Promise.all([
1052 1052
           delContractWork(this.form.contractId),
1053 1053
           delContractPayment(this.form.contractId)
1054
-        ]).then(([workRes, paymentRes]) => {
1054
+        ]).then(async ([workRes, paymentRes]) => {
1055 1055
           // 添加工作信息
1056
-          const workPromises = this.workList.map(async work => {
1056
+          // const workPromises = this.workList.map(async work => {
1057
+          //   work.contractId = this.form.contractId;
1058
+          //   return await addContractWork(work);
1059
+          // });
1060
+          for (const work of this.workList) {
1057 1061
             work.contractId = this.form.contractId;
1058
-            return await addContractWork(work);
1059
-          });
1062
+            await addContractWork(work);
1063
+          }
1060 1064
           // 添加支付信息
1061
-          const paymentPromises = this.paymentList.map(async payment => {
1065
+          // const paymentPromises = this.paymentList.map(async payment => {
1066
+          //   payment.contractId = this.form.contractId;
1067
+          //   return await addContractPayment(payment);
1068
+          // });
1069
+          for (const payment of this.paymentList) {
1062 1070
             payment.contractId = this.form.contractId;
1063
-            return await addContractPayment(payment);
1064
-          });
1071
+            await addContractPayment(payment);
1072
+          }
1065 1073
           // 等待所有添加操作完成
1066
-          return Promise.all([...workPromises, ...paymentPromises]);
1074
+          return Promise.all();
1067 1075
         }).then(() => {
1068 1076
           // this.$modal.msgSuccess("计划工作量和回款计划添加成功");
1069 1077
         }).catch(error => {

+ 22
- 52
oa-ui/src/views/flowable/form/projectProcess/arrangeProject.vue Bestand weergeven

@@ -1,43 +1,23 @@
1 1
 <!--
2 2
  * @Author: ysh
3
- * @Date: 2024-03-19 09:24:06
3
+ * @Date: 2024-06-21 18:51:54
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2025-01-08 10:12:31
5
+ * @LastEditTime: 2025-01-23 14:05:22
6 6
 -->
7 7
 <template>
8 8
   <div class="app-container">
9 9
     <h2 style="text-align: center;">项目安排</h2>
10 10
     <el-form ref="arrangeForm" :model="form" :rules="rules" label-width="120px" :disabled="disabled">
11
-      <!-- <el-row :gutter="20">
12
-        <el-col :span="12" :xs="24">
13
-          <el-form-item label="承担部门:" prop="deptId">
14
-            <el-select v-model="form.deptId" multiple clearable style="width:100%" @change="getDeptLeader">
15
-              <el-option v-for="item in deptList" :key="item.deptId" :label="item.deptName" :value="item.deptId"
16
-                v-if="item.deptName != '四川中水成勘院测绘工程有限责任公司'">
17
-              </el-option>
18
-            </el-select>
19
-          </el-form-item>
20
-        </el-col>
21
-        <el-col :span="12" :xs="24">
22
-          <el-form-item label="部门负责人:" prop="deptLeader">
23
-            <el-select v-model="form.deptLeader" multiple clearable style="width:100%">
24
-              <el-option v-for="item in $store.state.user.userList" :key="item.userId" :label="item.nickName"
25
-                :value="item.userId">
26
-              </el-option>
27
-            </el-select>
28
-          </el-form-item>
29
-        </el-col>
30
-      </el-row> -->
31 11
       <el-row :gutter="20">
32 12
         <el-col :span="12" :xs="24">
33 13
           <el-form-item label="项目负责人:" prop="projectLeader">
34 14
             <el-select v-model="peopleForm.deptId" @change="handleChangeDept" clearable style="width:60%">
35
-              <el-option v-for="item in peopleForm.deptList" :key="item.deptId" :label="item.deptName"
15
+              <el-option v-for="item, index in peopleForm.deptList" :key="'d' + index" :label="item.deptName"
36 16
                 :value="item.deptId" v-if="item.deptName != '四川中水成勘院测绘工程有限责任公司'">
37 17
               </el-option>
38 18
             </el-select>
39 19
             <el-select v-model="form.projectLeader" placeholder="请选择项目负责人" clearable style="width:40%">
40
-              <el-option v-for="item in peopleForm.userList" :key="item.userId" :label="item.nickName"
20
+              <el-option v-for="item, index in peopleForm.userList" :key="'l' + index" :label="item.nickName"
41 21
                 :value="item.userId" />
42 22
             </el-select>
43 23
           </el-form-item>
@@ -45,40 +25,16 @@
45 25
         <el-col :span="12" :xs="24">
46 26
           <el-form-item label="现场负责人:" prop="siteLeader">
47 27
             <el-select v-model="form.siteLeader" filterable clearable style="width:100%">
48
-              <el-option v-for="item in peopleForm.allDeptUserList" :key="item.userId" :label="item.nickName"
28
+              <el-option v-for="item, index in peopleForm.allDeptUserList" :key="'s' + index" :label="item.nickName"
49 29
                 :value="item.userId" v-if="item.nickName != 'admin'">
50 30
               </el-option>
51 31
             </el-select>
52 32
           </el-form-item>
53 33
         </el-col>
54 34
       </el-row>
55
-      <!-- <el-row :gutter="20">
56
-        <el-col :span="12" :xs="24">
57
-          <el-form-item label="组织交底日期:" prop="organizeTime">
58
-            <el-date-picker style="width: 100%;" v-model="form.organizeTime" value-format="yyyy-MM-dd" type="date"
59
-              placeholder="选择日期">
60
-            </el-date-picker>
61
-          </el-form-item>
62
-        </el-col>
63
-        <el-col :span="12" :xs="24">
64
-          <el-form-item label="组织交底文档:" prop="organizeDocument">
65
-            <div v-if="form.organizeDocument" class="upload-list">
66
-              <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.organizeDocument}`)">
67
-                {{ getFileName(form.organizeDocument) }}
68
-              </el-link>
69
-              <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + form.organizeDocument}`"
70
-                :underline="false" target="_blank">
71
-                <span class="el-icon-download">下载文件</span>
72
-              </el-link>
73
-            </div>
74
-            <FileUpload v-if="taskName == '项目安排'" ref="orz" :limit="1" :filePathName="'组织交底文件'"
75
-              :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'rar', 'zip']" @input="setOrganizeDocument">
76
-            </FileUpload>
77
-          </el-form-item>
78
-        </el-col>
79
-      </el-row> -->
80 35
     </el-form>
81 36
     <div slot="footer" class="dialog-footer" style="text-align: center;">
37
+      <el-button type="danger" @click="$emit('returnBack')" :disabled="disabled">退 回</el-button>
82 38
       <el-button type="warning" @click="save" :disabled="disabled">保 存</el-button>
83 39
       <el-button type="primary" @click="confirmPlanForm" :disabled="disabled">提 交</el-button>
84 40
     </div>
@@ -91,6 +47,8 @@ import { listUser } from '@/api/system/user'
91 47
 import { getUsersDeptLeaderByDept, getDeptLeadersByDeptId, getUsersManageLeaderByDept } from '@/api/system/post'
92 48
 import { complete, rejectTask, returnList, returnTask, getNextFlowNode, delegate, flowTaskForm, } from "@/api/flowable/todo";
93 49
 import { listProject, getProject, addProject, updateProject, delProject, submitProject, modifyProject } from "@/api/oa/project/project";
50
+import { listSubProcInstId, delDeployment } from "@/api/flowable/finished"
51
+import { cancelSubProcess } from '@/utils/cancelSubProcess';
94 52
 export default {
95 53
   props: {
96 54
     disabled: {
@@ -251,7 +209,20 @@ export default {
251 209
         }
252 210
       })
253 211
     },
254
-    confirmPlanForm() {
212
+    async confirmPlanForm() {
213
+      let resProcInstId = await listSubProcInstId({ instanceId: this.taskForm.procInsId });
214
+      let ids = resProcInstId.data.map(item => item.id);
215
+      if (ids.length > 0) {
216
+        cancelSubProcess(ids, this.taskForm.formId).then(res => {
217
+          if (res.code == 200) {
218
+            this.sendConfirm();
219
+          }
220
+        })
221
+      } else {
222
+        this.sendConfirm();
223
+      }
224
+    },
225
+    sendConfirm() {
255 226
       this.$confirm('项目安排之后会自动发起预算编制、技术方案、安全交底三个子流程,将无法进行撤回操作,是否继续提交?', '提示', {
256 227
         confirmButtonText: '确定',
257 228
         cancelButtonText: '取消',
@@ -282,7 +253,6 @@ export default {
282 253
           }
283 254
         })
284 255
       })
285
-
286 256
     },
287 257
     cancel() {
288 258
       this.form = {}

+ 4
- 2
oa-ui/src/views/flowable/form/projectProcess/assessWork.vue Bestand weergeven

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-07-08 16:16:27
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-09-29 10:40:31
5
+ * @LastEditTime: 2025-01-22 17:01:42
6 6
 -->
7 7
 <template>
8 8
   <div class="app-container">
@@ -68,9 +68,11 @@
68 68
     </el-form>
69 69
 
70 70
     <div slot="footer" class="dialog-footer" style="text-align: center;">
71
+      <el-button type="danger" @click="$emit('returnBack')" :disabled="disabled">退 回</el-button>
71 72
       <el-button type="warning" @click="save" :disabled="disabled">保 存</el-button>
72 73
       <el-button type="primary" @click="confirm" :disabled="disabled">提 交</el-button>
73 74
     </div>
75
+
74 76
   </div>
75 77
 </template>
76 78
 
@@ -109,7 +111,6 @@ export default {
109 111
           remark: "",
110 112
         },
111 113
       ],
112
-
113 114
     }
114 115
   },
115 116
   created() {
@@ -193,6 +194,7 @@ export default {
193 194
     getDeptLeader(val) {
194 195
       let deptId = Number(val[0])
195 196
       getUsersDeptLeaderByDept({ deptId: Number(deptId) }).then(res => {
197
+        this.taskForm.variables = {}
196 198
         this.$set(this.taskForm.variables, "approval", res.data.userId);
197 199
       })
198 200
     }

+ 6
- 5
oa-ui/src/views/flowable/form/projectProcess/businessReview.vue Bestand weergeven

@@ -1,8 +1,8 @@
1 1
 <!--
2 2
  * @Author: ysh
3 3
  * @Date: 2024-04-08 13:56:14
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-09-24 10:31:28
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2025-01-22 14:55:32
6 6
 -->
7 7
 <template>
8 8
   <div class="app-container">
@@ -18,9 +18,10 @@
18 18
       <el-form-item label="审核时间:">
19 19
         {{ form.jyApprovalTime }}
20 20
       </el-form-item>
21
-      <el-form-item>
22
-        <p style="text-align:center;"><el-button type="primary" @click="confirm">确认审核</el-button></p>
23
-      </el-form-item>
21
+      <el-row class="text-center">
22
+        <el-button type="danger" @click="$emit('returnBack')" :disabled="disabled">退 回</el-button>
23
+        <el-button type="primary" @click="confirm">确认审核</el-button>
24
+      </el-row>
24 25
     </el-form>
25 26
   </div>
26 27
 </template>

+ 2
- 1
oa-ui/src/views/flowable/form/projectProcess/inProgress.vue Bestand weergeven

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-06-21 18:51:54
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2025-01-22 10:58:59
5
+ * @LastEditTime: 2025-01-23 14:20:57
6 6
 -->
7 7
 <template>
8 8
   <div>
@@ -118,6 +118,7 @@
118 118
         <settle-data :taskForm="taskForm" :taskName="taskName"></settle-data>
119 119
       </div>
120 120
       <div slot="footer" class="dialog-footer" style="text-align: center">
121
+        <el-button type="danger" @click="$emit('returnBack')" :disabled="disabled">退 回</el-button>
121 122
         <el-button @click="preserve()" :disabled="disabled" type="warning">保 存</el-button>
122 123
         <el-button type="primary" @click="submitNextFlow()" :disabled="disabled">项目结束</el-button>
123 124
       </div>

+ 28
- 9
oa-ui/src/views/flowable/form/projectProcess/index.vue Bestand weergeven

@@ -2,32 +2,38 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-02-27 14:49:15
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-09-11 16:28:20
5
+ * @LastEditTime: 2025-01-22 14:29:46
6 6
 -->
7 7
 
8 8
 <template>
9 9
   <div class="project-wrapper">
10
+    <div class="mt20 mb20" v-if="showAlter">
11
+      <el-alert title="任务被退回,请修改后重新提交" type="error" :closable="false">
12
+        <return-comment :taskForm="taskForm" @isReturn="isReturn"></return-comment>
13
+      </el-alert>
14
+    </div>
10 15
     <el-row :gutter="20">
11
-      <el-col :xs="24":md="18">
16
+      <el-col :xs="24" :md="18">
12 17
         <el-tabs tabPosition="left" type="card" class="tabs-border" v-model="activeName">
13 18
           <el-tab-pane label="项目登记" name="项目登记">
14 19
             <addproject :taskForm="taskForm" :taskName="taskName" :disabled="taskName != '项目登记'" @goBack="goBack">
15 20
             </addproject>
16 21
           </el-tab-pane>
17 22
           <el-tab-pane label="核定工作" name="核定工作">
18
-            <assess-work :taskForm="taskForm" :taskName="taskName" :disabled="taskName != '核定工作'" @goBack="goBack"></assess-work>
23
+            <assess-work :taskForm="taskForm" :taskName="taskName" :disabled="taskName != '核定工作'"
24
+              @goBack="goBack" @returnBack="returnOpen = true"></assess-work>
19 25
           </el-tab-pane>
20 26
           <el-tab-pane label="项目安排" name="项目安排">
21
-            <arrangeProject :taskForm="taskForm" :taskName="'项目安排'" :disabled="taskName != '项目安排'" @goBack="goBack">
27
+            <arrangeProject :taskForm="taskForm" :taskName="'项目安排'" :disabled="taskName != '项目安排'" @goBack="goBack" @returnBack="returnOpen = true">
22 28
             </arrangeProject>
23 29
           </el-tab-pane>
24 30
           <el-tab-pane label="经营审核" name="经营审核">
25 31
             <business-review :taskForm="taskForm" :taskName="taskName" :disabled="taskName != '经营审核'"
26
-              @goBack="goBack"></business-review>
32
+              @goBack="goBack" @returnBack="returnOpen = true"></business-review>
27 33
           </el-tab-pane>
28 34
           <el-tab-pane label="分管审核" name="分管审核">
29 35
             <manage-review :taskForm="taskForm" :taskName="taskName" :disabled="taskName != '分管审核'"
30
-              @goBack="goBack"></manage-review>
36
+              @goBack="goBack" @returnBack="returnOpen = true"></manage-review>
31 37
           </el-tab-pane>
32 38
           <!-- <el-tab-pane label="生产确认" name="生产确认">
33 39
             <sc-confirm :taskForm="taskForm" :taskName="taskName" :disabled="taskName != '生产确认'"
@@ -35,7 +41,7 @@
35 41
           </el-tab-pane> -->
36 42
           <el-tab-pane label="项目生产" name="项目生产">
37 43
             <in-progress :taskForm="taskForm" :taskName="taskName" :disabled="taskName != '项目生产'"
38
-              @goBack="goBack"></in-progress>
44
+              @goBack="goBack" @returnBack="returnOpen = true"></in-progress>
39 45
           </el-tab-pane>
40 46
           <el-tab-pane label="项目预算" name="项目预算">
41 47
             <budget-tab :taskForm="taskForm" @goBack="goBack"></budget-tab>
@@ -60,6 +66,9 @@
60 66
         </el-card>
61 67
       </el-col>
62 68
     </el-row>
69
+    <el-dialog title="退回" :visible.sync="returnOpen" width="40%" append-to-body>
70
+      <return-btn :taskForm="taskForm" @goBack="$emit('goBack')" @cancel="returnOpen = false"></return-btn>
71
+    </el-dialog>
63 72
   </div>
64 73
 </template>
65 74
 
@@ -80,6 +89,8 @@ import planTab from './planTab.vue'
80 89
 import SafeTab from './safeTab.vue'
81 90
 import technicalTab from './technicalTab.vue'
82 91
 import AssessWork from './assessWork.vue'
92
+import ReturnComment from '@/views/flowable/form/components/flowBtn/returnComment.vue';
93
+import ReturnBtn from '@/views/flowable/form/components/flowBtn/returnBtn.vue';
83 94
 export default {
84 95
   props: {
85 96
     taskName: {
@@ -89,7 +100,10 @@ export default {
89 100
       type: Object,
90 101
     }
91 102
   },
92
-  components: { addproject, arrangeProject, businessReview, flow, ManageReview, ScConfirm, InProgress, BudgetTab, planTab, SafeTab, technicalTab, AssessWork },
103
+  components: {
104
+    addproject, arrangeProject, businessReview, flow, ManageReview, ScConfirm, InProgress, BudgetTab, planTab, SafeTab, technicalTab, AssessWork, ReturnComment,
105
+    ReturnBtn
106
+  },
93 107
   data() {
94 108
     return {
95 109
       activeName: '项目登记',
@@ -129,6 +143,8 @@ export default {
129 143
         remark: ''
130 144
       }],
131 145
       flowData: {},
146
+      showAlter: true,
147
+      returnOpen:false,
132 148
     }
133 149
   },
134 150
   created() {
@@ -250,7 +266,10 @@ export default {
250 266
     },
251 267
     goBack() {
252 268
       this.$emit('goBack')
253
-    }
269
+    },
270
+    isReturn(val) {
271
+      this.showAlter = val
272
+    },
254 273
   },
255 274
 }
256 275
 </script>

+ 5
- 4
oa-ui/src/views/flowable/form/projectProcess/manageReview.vue Bestand weergeven

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-04-08 13:56:14
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-09-30 09:23:49
5
+ * @LastEditTime: 2025-01-22 15:03:06
6 6
 -->
7 7
 <template>
8 8
   <div class="app-container">
@@ -34,9 +34,10 @@
34 34
       <el-form-item label="审核时间:">
35 35
         {{ form.manageApprovalTime }}
36 36
       </el-form-item>
37
-      <el-form-item>
38
-        <p style="text-align:center;"><el-button type="primary" @click="confirm">确认审核</el-button></p>
39
-      </el-form-item>
37
+      <el-row class="text-center">
38
+        <el-button type="danger" @click="$emit('returnBack')" :disabled="disabled">退 回</el-button>
39
+        <el-button type="primary" @click="confirm">确认审核</el-button>
40
+      </el-row>
40 41
     </el-form>
41 42
 
42 43
     <el-dialog title="安全交底记录表" :visible.sync="openSafe" width="1000px" append-to-body>

+ 1
- 1
oa-ui/src/views/oa/archive/index.vue Bestand weergeven

@@ -49,7 +49,7 @@
49 49
       <el-table-column label="项目编号" align="center" prop="project.projectNumber" />
50 50
       <el-table-column label="项目名称" align="center" prop="project.projectName" />
51 51
       <el-table-column label="备注说明" align="center" :show-overflow-tooltip="true" width="150" prop="submitSituation" />
52
-      <el-table-column label="项目负责人" align="center" prop="leaderUser.nickName" />
52
+      <el-table-column label="发起人" align="center" prop="leaderUser.nickName" />
53 53
       <!-- <el-table-column label="生产部门检查员" align="center" prop="produceUser.nickName" /> -->
54 54
       <!-- <el-table-column label="质量检查员" align="center" prop="qualityUser.nickName" /> -->
55 55
       <el-table-column label="技术质量与安全部意见" align="center" :show-overflow-tooltip="true" width="150" prop="deptComment" />

+ 1
- 1
oa-ui/vue.config.js Bestand weergeven

@@ -35,7 +35,7 @@ module.exports = {
35 35
     proxy: {
36 36
       // detail: https://cli.vuejs.org/config/#devserver-proxy
37 37
       [process.env.VUE_APP_BASE_API]: {
38
-        target: `http://localhost:8086`,
38
+        target: `http://localhost:8080`,
39 39
         // target: `http://localhost:8080`,
40 40
         changeOrigin: true,
41 41
         pathRewrite: {

Laden…
Annuleren
Opslaan