소스 검색

承接合同可直接项目流转,项目台账标签页可来回切换

余思翰 6 달 전
부모
커밋
ef86b1834f

+ 9
- 0
oa-back/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/CmcProjectContractController.java 파일 보기

@@ -94,4 +94,13 @@ public class CmcProjectContractController extends BaseController
94 94
     {
95 95
         return success(cmcProjectContractService.deleteCmcProjectContractByContractIds(contractIds));
96 96
     }
97
+    /**
98
+     * 删除cmc项目合同
99
+     */
100
+    @Log(title = "cmc项目合同", businessType = BusinessType.DELETE)
101
+    @DeleteMapping("/delete/{projectIds}")
102
+    public AjaxResult removeByProjectIds(@PathVariable String[] projectIds)
103
+    {
104
+        return success(cmcProjectContractService.deleteCmcProjectContractByProjectIds(projectIds));
105
+    }
97 106
 }

+ 9
- 0
oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/mapper/CmcProjectContractMapper.java 파일 보기

@@ -58,4 +58,13 @@ public interface CmcProjectContractMapper
58 58
      * @return 结果
59 59
      */
60 60
     public int deleteCmcProjectContractByContractIds(String[] contractIds);
61
+
62
+    /**
63
+     * 批量删除cmc项目合同
64
+     *
65
+     * @param projectIds 需要删除的数据主键集合
66
+     * @return 结果
67
+     */
68
+    public int deleteCmcProjectContractByProjectIds(String[] projectIds);
69
+
61 70
 }

+ 8
- 0
oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/service/ICmcProjectContractService.java 파일 보기

@@ -51,6 +51,14 @@ public interface ICmcProjectContractService
51 51
      */
52 52
     public int deleteCmcProjectContractByContractIds(String[] contractIds);
53 53
 
54
+    /**
55
+     * 批量删除cmc项目合同
56
+     *
57
+     * @param projectIds 需要删除的cmc项目合同主键集合
58
+     * @return 结果
59
+     */
60
+    public int deleteCmcProjectContractByProjectIds(String[] projectIds);
61
+
54 62
     /**
55 63
      * 删除cmc项目合同信息
56 64
      * 

+ 12
- 0
oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/service/impl/CmcProjectContractServiceImpl.java 파일 보기

@@ -79,6 +79,18 @@ public class CmcProjectContractServiceImpl implements ICmcProjectContractService
79 79
         return cmcProjectContractMapper.deleteCmcProjectContractByContractIds(contractIds);
80 80
     }
81 81
 
82
+    /**
83
+     * 批量删除cmc项目合同
84
+     *
85
+     * @param projectIds 需要删除的cmc项目合同主键
86
+     * @return 结果
87
+     */
88
+    @Override
89
+    public int deleteCmcProjectContractByProjectIds(String[] projectIds)
90
+    {
91
+        return cmcProjectContractMapper.deleteCmcProjectContractByProjectIds(projectIds);
92
+    }
93
+
82 94
     /**
83 95
      * 删除cmc项目合同信息
84 96
      * 

+ 6
- 0
oa-back/ruoyi-system/src/main/resources/mapper/oa/CmcProjectContractMapper.xml 파일 보기

@@ -56,4 +56,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
56 56
             #{contractId}
57 57
         </foreach>
58 58
     </delete>
59
+    <delete id="deleteCmcProjectContractByProjectIds" parameterType="String">
60
+        delete from cmc_project_contract where project_id in
61
+        <foreach item="projectId" collection="array" open="(" separator="," close=")">
62
+            #{projectId}
63
+        </foreach>
64
+    </delete>
59 65
 </mapper>

+ 17
- 16
oa-ui/src/router/index.js 파일 보기

@@ -2,19 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-01-03 09:23:11
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-06-04 09:56:16
6
- */
7
-/*
8
- * @Author: ysh
9
- * @Date: 2024-01-03 09:23:11
10
- * @LastEditors: wrh
11
- * @LastEditTime: 2024-05-22 13:51:01
12
- */
13
-/*
14
- * @Author: ysh
15
- * @Date: 2024-01-03 09:23:11
16
- * @LastEditors: Please set LastEditors
17
- * @LastEditTime: 2024-03-15 14:18:00
5
+ * @LastEditTime: 2024-10-09 15:45:22
18 6
  */
19 7
 import Vue from 'vue'
20 8
 import Router from 'vue-router'
@@ -324,17 +312,30 @@ export const constantRoutes = [
324 312
       }
325 313
     ]
326 314
   },
315
+  // {
316
+  //   path: '/project/info',
317
+  //   component: Layout,
318
+  //   hidden: true,
319
+  //   children: [
320
+  //     {
321
+  //       path: '',
322
+  //       component: () => import('@/views/oa/project/info'),
323
+  //       name: 'projectInfo',
324
+  //       meta: { title: '项目详情', icon: '' }
325
+
326
+  //     }
327
+  //   ]
328
+  // },
327 329
   {
328
-    path: '/project/info',
330
+    path: '',
329 331
     component: Layout,
330 332
     hidden: true,
331 333
     children: [
332 334
       {
333
-        path: '',
335
+        path: 'projectInfo/info/:id',
334 336
         component: () => import('@/views/oa/project/info'),
335 337
         name: 'projectInfo',
336 338
         meta: { title: '项目详情', icon: '' }
337
-
338 339
       }
339 340
     ]
340 341
   },

+ 2
- 1
oa-ui/src/utils/deleteResource.js 파일 보기

@@ -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-09-27 11:41:27
5
+ * @LastEditTime: 2024-10-09 13:52:58
6 6
  */
7 7
 import request from '@/utils/request'
8 8
 
@@ -46,6 +46,7 @@ const apiEndpoints = [
46 46
     apiUrl: [
47 47
       '/oa/project/:id',
48 48
       '/oa/projectWork/:id',
49
+      '/oa/projectContract/delete/:id'
49 50
     ]
50 51
   },
51 52
   {

+ 90
- 28
oa-ui/src/views/flowable/form/business/contractForm.vue 파일 보기

@@ -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: 2024-10-08 09:28:41
5
+ * @LastEditTime: 2024-10-09 14:19:38
6 6
 -->
7 7
 <template>
8 8
   <div class="app-container">
@@ -10,6 +10,9 @@
10 10
       <el-col :span="flowDisabled ? 18 : 24" :xs="24">
11 11
         <h2 class="text-center"><b>承接合同评审表</b></h2>
12 12
         <el-divider></el-divider>
13
+        <div style="text-align:right;">
14
+          <el-button type="warning" size="mini" @click="gotoProjectRegister()" icon="el-icon-plus">项目登记、安排生产</el-button>
15
+        </div>
13 16
         <el-form ref="form" :model="form" :rules="rules" label-width="130px" :disabled="formDisabled">
14 17
           <el-form-item label="投标项目名称:" prop="tenderId">
15 18
             <el-button type="primary" size="mini" @click="tbOpen = true" v-if="taskName == '合同拟稿'">选择投标项目</el-button>
@@ -280,6 +283,8 @@
280 283
               </tr>
281 284
             </table>
282 285
           </el-form-item>
286
+          <el-form-item label="">
287
+          </el-form-item>
283 288
           <el-divider></el-divider>
284 289
           <el-form-item label="分管审批意见" prop="managerComment">
285 290
             <el-input v-model="form.managerComment" type="textarea" :autosize="{ minRows: 4 }" placeholder="请输入审批意见"
@@ -397,7 +402,7 @@ import { getUsersDeptLeader, getUsersManageLeader, getUsersDeptLeaderByDept, get
397 402
 import { listSubContract, getSubContract, delSubContract, addSubContract, updateSubContract } from "@/api/oa/contract/subContract";
398 403
 import { listContractSubcontract, delContractSubcontract, addContractSubcontract } from "@/api/oa/contract/contractSubcontract"
399 404
 import flow from '@/views/flowable/task/todo/detail/flow'
400
-import { flowXmlAndNode } from "@/api/flowable/definition";
405
+import { definitionStart,flowXmlAndNode } from "@/api/flowable/definition";
401 406
 import ChooseProject from '../components/chooseProject.vue';
402 407
 import ChooseTender from '../components/chooseTender.vue';
403 408
 import { listPartyA } from "@/api/oa/partyA/partyA";
@@ -409,6 +414,9 @@ import paymentTable from './components/paymentTable.vue';
409 414
 import projectInfo from '@/views/oa/project/info'
410 415
 import ChooseSubcontract from '@/views/flowable/form/components/chooseSubcontract.vue';
411 416
 import subContract from '@/views/flowable/form/business/subContract.vue';
417
+import { listDefinition } from "@/api/flowable/definition";
418
+import { Snowflake } from '@/utils/snowFlake.js'
419
+import { todoList, getNextFlowNodeByStart } from "@/api/flowable/todo";
412 420
 export default {
413 421
   dicts: ['cmc_scale_grade', 'cmc_unit'],
414 422
   components: {
@@ -1012,31 +1020,11 @@ export default {
1012 1020
         }
1013 1021
       });
1014 1022
     },
1015
-    // updateContractData() {
1016
-    //   this.workList = this.$refs.workTableRef.workList;
1017
-    //   this.paymentList = this.$refs.paymentRef.paymentList;
1018
-    //   updateContract(this.form).then(response => {
1019
-    //     this.$modal.msgSuccess("修改成功");
1020
-    //     this.open = false;
1021
-    //     delContractWork(this.form.contractId).then(res => {
1022
-    //       for (let work of this.workList) {
1023
-    //         work.contractId = this.form.contractId
1024
-    //         addContractWork(work);
1025
-    //       }
1026
-    //     })
1027
-    //     delContractPayment(this.form.contractId).then(res => {
1028
-    //       for (let payment of this.paymentList) {
1029
-    //         payment.contractId = this.form.contractId
1030
-    //         addContractPayment(payment);
1031
-    //       }
1032
-    //     })
1033
-    //   });
1034
-    // },
1035 1023
     updateContractData() {
1036 1024
       this.workList = this.$refs.workTableRef.workList;
1037 1025
       this.paymentList = this.$refs.paymentRef.paymentList;
1038 1026
       updateContract(this.form).then(response => {
1039
-        this.$modal.msgSuccess("修改成功");
1027
+        this.$modal.msgSuccess("保存成功");
1040 1028
         this.open = false;
1041 1029
         // 删除合同的工作和支付信息,并等待两个操作完成
1042 1030
         Promise.all([
@@ -1044,19 +1032,19 @@ export default {
1044 1032
           delContractPayment(this.form.contractId)
1045 1033
         ]).then(([workRes, paymentRes]) => {
1046 1034
           // 添加工作信息
1047
-          const workPromises = this.workList.map(work => {
1035
+          const workPromises = this.workList.map(async work => {
1048 1036
             work.contractId = this.form.contractId;
1049
-            return addContractWork(work);
1037
+            return await addContractWork(work);
1050 1038
           });
1051 1039
           // 添加支付信息
1052
-          const paymentPromises = this.paymentList.map(payment => {
1040
+          const paymentPromises = this.paymentList.map(async payment => {
1053 1041
             payment.contractId = this.form.contractId;
1054
-            return addContractPayment(payment);
1042
+            return await addContractPayment(payment);
1055 1043
           });
1056 1044
           // 等待所有添加操作完成
1057 1045
           return Promise.all([...workPromises, ...paymentPromises]);
1058 1046
         }).then(() => {
1059
-          this.$modal.msgSuccess("计划工作量和回款计划添加成功");
1047
+          // this.$modal.msgSuccess("计划工作量和回款计划添加成功");
1060 1048
         }).catch(error => {
1061 1049
           this.$modal.msgError("操作失败: " + error.message);
1062 1050
         });
@@ -1201,6 +1189,80 @@ export default {
1201 1189
       delContractSubcontract(row.subContractId)
1202 1190
       this.connectSubContractList.splice(index, 1)
1203 1191
     },
1192
+    // 跳转项目流转,并结束流程
1193
+    async gotoProjectRegister() {
1194
+      let response = await listDefinition({
1195
+        pageNum: 1,
1196
+        pageSize: 9999,
1197
+        name: "项目流转",
1198
+        category: "project",
1199
+      })
1200
+      if (response.data.total == 1) {
1201
+        let obj = response.data.records[0]
1202
+        this.$confirm("是否发起项目流转?若页面未跳转,请刷新页面", '提示', {
1203
+          confirmButtonText: '确定',
1204
+          cancelButtonText: '取消',
1205
+          type: 'warning'
1206
+        }).then(() => {
1207
+          this.handleStartProcess(obj)
1208
+        })
1209
+      }
1210
+    },
1211
+    handleStartProcess(row) {
1212
+      let formId = new Snowflake(1n, 1n, 0n).nextId().toString();
1213
+      getNextFlowNodeByStart({ deploymentId: row.deploymentId, variables: { formId: formId } }).then(res => {
1214
+        let data = res.data;
1215
+        const variables = {};
1216
+        const formData = {};
1217
+        formData.disabled = true;
1218
+        formData.formBtns = false;
1219
+        formData.formId = formId
1220
+        if (row.id) {
1221
+          variables.variables = formData;
1222
+          let routePath = this.getRoutePath(row);
1223
+          this.$emit('goBack');
1224
+          this.$cache.local.set('contractId',`${this.taskForm.formId}`)
1225
+          definitionStart(row.id, JSON.stringify(variables)).then(res => {
1226
+            this.$modal.msgSuccess(res.msg);
1227
+            let procInstanceId = res.data;
1228
+            todoList({
1229
+              pageNum: 1,
1230
+              pageSize: 99999999, processInsId: procInstanceId
1231
+            }).then(toDoRes => {
1232
+              let records = toDoRes.data.records;
1233
+              if (records.length == 1) {
1234
+                records = records[0]
1235
+              }
1236
+              this.$router.push({
1237
+                path: routePath,
1238
+                query: {
1239
+                  procInsId: records.procInsId,
1240
+                  executionId: records.executionId,
1241
+                  deployId: records.deployId,
1242
+                  taskId: records.taskId,
1243
+                  taskName: records.taskName,
1244
+                  startUser: records.startUserName + '-' + records.startDeptName,
1245
+                  formId: formData.formId,
1246
+                  procDefName: records.procDefName,
1247
+                }
1248
+              })
1249
+            })
1250
+          })
1251
+        }
1252
+      })
1253
+    },
1254
+    getRoutePath(row) {
1255
+      let path;
1256
+      for (let p of this.publicData.pathRoute) {
1257
+        if (p.name == row.name) {
1258
+          path = p.path
1259
+          break
1260
+        } else {
1261
+          path = '/flowable/task/todo/detail/index'
1262
+        }
1263
+      }
1264
+      return path
1265
+    },
1204 1266
   }
1205 1267
 }
1206 1268
 </script>

+ 10
- 6
oa-ui/src/views/flowable/form/components/choosePartyA.vue 파일 보기

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-06-18 17:38:50
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-09-18 11:16:02
5
+ * @LastEditTime: 2024-10-09 11:31:52
6 6
 -->
7 7
 <template>
8 8
   <div>
@@ -124,22 +124,26 @@ export default {
124 124
     };
125 125
   },
126 126
   created() {
127
+    this.firstGetList();
127 128
     this.getList();
128 129
   },
129 130
   watch: {
130 131
     projectSource() {
132
+      this.firstGetList();
131 133
       this.getList();
132 134
     }
133 135
   },
134 136
   methods: {
135
-    /** 查询cmc业主单位列表 */
136
-    getList() {
137
-      this.loading = true;
137
+    firstGetList() {
138 138
       if (this.projectSource == '0') {
139
-        this.queryParams.partyAName = '中国电建集团成都勘测设计研究院有限公司'
139
+        this.$set(this.queryParams, 'partyAName', '中国电建集团成都勘测设计研究院有限公司')
140 140
       } else if (this.projectSource == '1') {
141
-        this.queryParams.partyAName = null
141
+        this.$set(this.queryParams, 'partyAName', null)
142 142
       }
143
+    },
144
+    /** 查询cmc业主单位列表 */
145
+    getList() {
146
+      this.loading = true;
143 147
       listPartyA(this.queryParams).then(response => {
144 148
         this.partyAList = response.rows;
145 149
         this.total = response.total;

+ 49
- 16
oa-ui/src/views/flowable/form/projectProcess/addproject.vue 파일 보기

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-03-18 11:00:04
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-09-29 11:47:57
5
+ * @LastEditTime: 2024-10-09 14:29:14
6 6
 -->
7 7
 <template>
8 8
   <div class="project-wrapper">
@@ -129,6 +129,7 @@ import { listProjectWork, addProjectWork, delProjectWork } from "@/api/oa/projec
129 129
 import { listProjectContract, addProjectContract } from "@/api/oa/contract/projectContract";
130 130
 import { listContract, getContract, delContract, addContract, updateContract } from "@/api/oa/contract/contract";
131 131
 import { listPartyA } from "@/api/oa/partyA/partyA";
132
+import { listContractWork, addContractWork, delContractWork } from "@/api/oa/contract/contractWork";
132 133
 import chooseContract from '../components/chooseContract.vue';
133 134
 import ChoosePartyA from '@/views/flowable/form/components/choosePartyA.vue';
134 135
 import ArrangeProject from './arrangeProject.vue';
@@ -176,7 +177,8 @@ export default {
176 177
         registerTime: undefined,
177 178
         projectRegistrant: "",
178 179
         projectLevel: "0",
179
-        taskDocument: ''
180
+        taskDocument: '',
181
+        undertakingDept: ''
180 182
       },
181 183
       chooseContractInfo: {
182 184
         contractCode: '',
@@ -225,6 +227,10 @@ export default {
225 227
     this.getPartyAList();
226 228
     this.getDeptList();
227 229
     this.getContractDataList();
230
+    if (this.$cache.local.get('contractId')) {
231
+      const contractId = this.$cache.local.get('contractId')
232
+      this.afterJumpByContract(contractId)
233
+    }
228 234
     // this.getList();
229 235
   },
230 236
   mounted() {
@@ -299,21 +305,43 @@ export default {
299 305
     getContractDataList() {
300 306
       listProjectContract({ projectId: this.taskForm.formId }).then(res => {
301 307
         if (res.rows) {
302
-          for (let row of res.rows) {
303
-            getContract(row.contractId).then(res => {
308
+          // 创建一个数组来存储所有的 getContract 请求
309
+          const contractPromises = res.rows.map(row => getContract(row.contractId));
310
+          // 使用 Promise.all 来处理所有的请求
311
+          Promise.all(contractPromises).then(contractResponses => {
312
+            contractResponses.forEach(res => {
304 313
               if (res.data) {
305
-                if (this.chooseContractInfo.contractCode != '') {
306
-                  this.chooseContractInfo.contractCode = this.chooseContractInfo.contractCode + '、' + res.data.contractCode;
307
-                } else {
308
-                  this.chooseContractInfo.contractCode = res.data.contractCode;
309
-                }
310
-                if (this.chooseContractInfo.contractNumber != '') {
311
-                  this.chooseContractInfo.contractNumber = this.chooseContractInfo.contractNumber + '、' + res.data.contractNumber;
312
-                } else {
313
-                  this.chooseContractInfo.contractNumber = res.data.contractNumber;
314
-                }
314
+                // 合并合同信息
315
+                this.chooseContractInfo.contractCode += this.chooseContractInfo.contractCode ? '、' : '' + res.data.contractCode;
316
+                this.chooseContractInfo.contractNumber += this.chooseContractInfo.contractNumber ? '、' : '' + res.data.contractNumber;
315 317
               }
316
-            })
318
+            });
319
+          }).catch(err => {
320
+            console.error('获取合同失败:', err);
321
+            // 可以在这里处理错误,比如设置一个错误状态
322
+          });
323
+        }
324
+      }).catch(err => {
325
+        console.error('获取项目合同失败:', err);
326
+        // 可以在这里处理错误,比如设置一个错误状态
327
+      });
328
+    },
329
+    // 从承接合同跳转过来的
330
+    afterJumpByContract(contractId) {
331
+      getContract(contractId).then(res => {
332
+        if (res.data) {
333
+          this.chooseContractInfo = res.data;
334
+          this.$set(this.addForm, 'partyAId', res.data.partyAId);
335
+          this.$set(this.addForm, 'projectName', res.data.contractName);
336
+          if (res.data.partyA) {
337
+            let partyAName = res.data.partyA.partyAName;
338
+            if (partyAName.indexOf('中国电建集团成都勘测设计研究院') != -1) {
339
+              this.$set(this.addForm, 'projectSource', '0');
340
+              this.changeProjectSource('0');
341
+            } else {
342
+              this.$set(this.addForm, 'projectSource', '1');
343
+              this.changeProjectSource('1');
344
+            }
317 345
           }
318 346
         }
319 347
       })
@@ -355,6 +383,9 @@ export default {
355 383
         await updateProject(this.addForm)
356 384
         this.$modal.msgSuccess("保存成功")
357 385
       }
386
+      if (this.$cache.local.get('contractId')) {
387
+        this.$cache.local.remove('contractId')
388
+      }
358 389
     },
359 390
     async confirmAddForm() {
360 391
       let leaderData = await getUsersDeptLeaderByDept({ deptId: 109 })
@@ -400,7 +431,9 @@ export default {
400 431
           dom.scrollIntoView({ behavior: 'smooth' });
401 432
         }
402 433
       })
403
-
434
+      if (this.$cache.local.get('contractId')) {
435
+        this.$cache.local.remove('contractId')
436
+      }
404 437
     },
405 438
     confirmPartyA(val) {
406 439
       this.partyAOpen = false

+ 22
- 0
oa-ui/src/views/flowable/form/projectProcess/planWorkload.vue 파일 보기

@@ -55,6 +55,7 @@
55 55
 <script>
56 56
 import { listProject, getProject, addProject, updateProject, delProject } from "@/api/oa/project/project";
57 57
 import { listProjectWork, addProjectWork, delProjectWork } from "@/api/oa/project/projectWork";
58
+import { listContractWork, addContractWork, delContractWork } from "@/api/oa/contract/contractWork";
58 59
 export default {
59 60
   dicts: ['cmc_scale_grade', 'cmc_unit'],
60 61
   props: {
@@ -78,6 +79,10 @@ export default {
78 79
   },
79 80
   created() {
80 81
     this.getList();
82
+    if (this.$cache.local.get('contractId')) {
83
+      const contractId = this.$cache.local.get('contractId')
84
+      this.getContractWorkList(contractId)
85
+    }
81 86
   },
82 87
   methods: {
83 88
     getList() {
@@ -87,6 +92,22 @@ export default {
87 92
         }
88 93
       })
89 94
     },
95
+    getContractWorkList(contractId) {
96
+      listContractWork({ pageNum: 1, pageSize: 100, contractId }).then(res => {
97
+        if (res.rows.length > 0)
98
+          this.workList = res.rows;
99
+        else {
100
+          this.workList = [{
101
+            content: "",
102
+            scale: "",
103
+            unit: "",
104
+            workload: "",
105
+            deadline: undefined,
106
+            remark: "",
107
+          }]
108
+        }
109
+      });
110
+    },
90 111
     addWorkList() {
91 112
       this.workList.push({
92 113
         content: "",
@@ -121,6 +142,7 @@ table {
121 142
   /*设置背景颜色*/
122 143
   /* background-color: #bfa; */
123 144
 }
145
+
124 146
 .delete-btn {
125 147
   color: #F56C6C;
126 148
   cursor: pointer;

+ 1
- 1
oa-ui/src/views/oa/contract/components/edit.vue 파일 보기

@@ -424,7 +424,7 @@ export default {
424 424
           // 等待所有添加操作完成
425 425
           return Promise.all([...workPromises, ...paymentPromises]);
426 426
         }).then(() => {
427
-          this.$modal.msgSuccess("计划工作量和回款计划添加成功");
427
+          // this.$modal.msgSuccess("计划工作量和回款计划添加成功");
428 428
         }).catch(error => {
429 429
           this.$modal.msgError("操作失败: " + error.message);
430 430
         });

+ 9
- 6
oa-ui/src/views/oa/project/index.vue 파일 보기

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-02-27 14:49:15
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-09-23 16:15:25
5
+ * @LastEditTime: 2024-10-09 16:25:24
6 6
 -->
7 7
 <template>
8 8
   <div class="project-wrapper">
@@ -364,10 +364,12 @@ export default {
364 364
     },
365 365
     handleView(row) {
366 366
       let id = row.projectId
367
-      this.$router.push({
368
-        path: '/project/info',
369
-        query: { projectId: id }
370
-      })
367
+      this.$router.push(
368
+        {
369
+          name: 'projectInfo',
370
+          params: { id },
371
+          query: { projectId: id, projectName: row.projectName }
372
+        });
371 373
     },
372 374
     handleUpdate(row) {
373 375
       this.addForm = row;
@@ -463,13 +465,14 @@ export default {
463 465
     formatStatus(row) {
464 466
       if (!row) {
465 467
         row = 0
468
+        return 'exception'
466 469
       }
467 470
       if (row <= 20) {
468 471
         return 'exception'
469 472
       } else if (row > 20 && row <= 50) {
470 473
         return 'warning'
471 474
       } else if (row > 50 && row <= 80) {
472
-        return ''
475
+        return null
473 476
       } else {
474 477
         return 'success'
475 478
       }

+ 11
- 1
oa-ui/src/views/oa/project/info.vue 파일 보기

@@ -573,6 +573,17 @@ export default {
573 573
       default: true
574 574
     }
575 575
   },
576
+  beforeCreate() {
577
+    // 可有可无,在面包屑中展示
578
+    this.$route.meta.title = this.$route.query.projectName
579
+    // 找到当前tab并修改当前tab显示的标题
580
+    let currentView = this.$store.getters.visitedViews[this.$store.getters.visitedViews.findIndex(
581
+      (item) => item.path === this.$route.path
582
+    )]
583
+    if (currentView != null) {
584
+      currentView.title = this.$route.query.projectName
585
+    }
586
+  },
576 587
   created() {
577 588
     this.getUserList();
578 589
     this.getDeviceList();
@@ -637,7 +648,6 @@ export default {
637 648
   methods: {
638 649
     scrollToAnchor(anchor) {
639 650
       const element = this.$refs[anchor];
640
-      console.log(element.offsetTop);
641 651
       if (element) {
642 652
         window.scrollTo({
643 653
           behavior: 'smooth',

Loading…
취소
저장