Browse Source

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

余思翰 8 months ago
parent
commit
ef86b1834f

+ 9
- 0
oa-back/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/CmcProjectContractController.java View File

94
     {
94
     {
95
         return success(cmcProjectContractService.deleteCmcProjectContractByContractIds(contractIds));
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 View File

58
      * @return 结果
58
      * @return 结果
59
      */
59
      */
60
     public int deleteCmcProjectContractByContractIds(String[] contractIds);
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 View File

51
      */
51
      */
52
     public int deleteCmcProjectContractByContractIds(String[] contractIds);
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
      * 删除cmc项目合同信息
63
      * 删除cmc项目合同信息
56
      * 
64
      * 

+ 12
- 0
oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/service/impl/CmcProjectContractServiceImpl.java View File

79
         return cmcProjectContractMapper.deleteCmcProjectContractByContractIds(contractIds);
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
      * 删除cmc项目合同信息
95
      * 删除cmc项目合同信息
84
      * 
96
      * 

+ 6
- 0
oa-back/ruoyi-system/src/main/resources/mapper/oa/CmcProjectContractMapper.xml View File

56
             #{contractId}
56
             #{contractId}
57
         </foreach>
57
         </foreach>
58
     </delete>
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
 </mapper>
65
 </mapper>

+ 17
- 16
oa-ui/src/router/index.js View File

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-01-03 09:23:11
3
  * @Date: 2024-01-03 09:23:11
4
  * @LastEditors: Please set LastEditors
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
 import Vue from 'vue'
7
 import Vue from 'vue'
20
 import Router from 'vue-router'
8
 import Router from 'vue-router'
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
     component: Layout,
331
     component: Layout,
330
     hidden: true,
332
     hidden: true,
331
     children: [
333
     children: [
332
       {
334
       {
333
-        path: '',
335
+        path: 'projectInfo/info/:id',
334
         component: () => import('@/views/oa/project/info'),
336
         component: () => import('@/views/oa/project/info'),
335
         name: 'projectInfo',
337
         name: 'projectInfo',
336
         meta: { title: '项目详情', icon: '' }
338
         meta: { title: '项目详情', icon: '' }
337
-
338
       }
339
       }
339
     ]
340
     ]
340
   },
341
   },

+ 2
- 1
oa-ui/src/utils/deleteResource.js View File

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-06-13 17:07:59
3
  * @Date: 2024-06-13 17:07:59
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-09-27 11:41:27
5
+ * @LastEditTime: 2024-10-09 13:52:58
6
  */
6
  */
7
 import request from '@/utils/request'
7
 import request from '@/utils/request'
8
 
8
 
46
     apiUrl: [
46
     apiUrl: [
47
       '/oa/project/:id',
47
       '/oa/project/:id',
48
       '/oa/projectWork/:id',
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 View File

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-05-10 15:31:57
3
  * @Date: 2024-05-10 15:31:57
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-10-08 09:28:41
5
+ * @LastEditTime: 2024-10-09 14:19:38
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="app-container">
8
   <div class="app-container">
10
       <el-col :span="flowDisabled ? 18 : 24" :xs="24">
10
       <el-col :span="flowDisabled ? 18 : 24" :xs="24">
11
         <h2 class="text-center"><b>承接合同评审表</b></h2>
11
         <h2 class="text-center"><b>承接合同评审表</b></h2>
12
         <el-divider></el-divider>
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
         <el-form ref="form" :model="form" :rules="rules" label-width="130px" :disabled="formDisabled">
16
         <el-form ref="form" :model="form" :rules="rules" label-width="130px" :disabled="formDisabled">
14
           <el-form-item label="投标项目名称:" prop="tenderId">
17
           <el-form-item label="投标项目名称:" prop="tenderId">
15
             <el-button type="primary" size="mini" @click="tbOpen = true" v-if="taskName == '合同拟稿'">选择投标项目</el-button>
18
             <el-button type="primary" size="mini" @click="tbOpen = true" v-if="taskName == '合同拟稿'">选择投标项目</el-button>
280
               </tr>
283
               </tr>
281
             </table>
284
             </table>
282
           </el-form-item>
285
           </el-form-item>
286
+          <el-form-item label="">
287
+          </el-form-item>
283
           <el-divider></el-divider>
288
           <el-divider></el-divider>
284
           <el-form-item label="分管审批意见" prop="managerComment">
289
           <el-form-item label="分管审批意见" prop="managerComment">
285
             <el-input v-model="form.managerComment" type="textarea" :autosize="{ minRows: 4 }" placeholder="请输入审批意见"
290
             <el-input v-model="form.managerComment" type="textarea" :autosize="{ minRows: 4 }" placeholder="请输入审批意见"
397
 import { listSubContract, getSubContract, delSubContract, addSubContract, updateSubContract } from "@/api/oa/contract/subContract";
402
 import { listSubContract, getSubContract, delSubContract, addSubContract, updateSubContract } from "@/api/oa/contract/subContract";
398
 import { listContractSubcontract, delContractSubcontract, addContractSubcontract } from "@/api/oa/contract/contractSubcontract"
403
 import { listContractSubcontract, delContractSubcontract, addContractSubcontract } from "@/api/oa/contract/contractSubcontract"
399
 import flow from '@/views/flowable/task/todo/detail/flow'
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
 import ChooseProject from '../components/chooseProject.vue';
406
 import ChooseProject from '../components/chooseProject.vue';
402
 import ChooseTender from '../components/chooseTender.vue';
407
 import ChooseTender from '../components/chooseTender.vue';
403
 import { listPartyA } from "@/api/oa/partyA/partyA";
408
 import { listPartyA } from "@/api/oa/partyA/partyA";
409
 import projectInfo from '@/views/oa/project/info'
414
 import projectInfo from '@/views/oa/project/info'
410
 import ChooseSubcontract from '@/views/flowable/form/components/chooseSubcontract.vue';
415
 import ChooseSubcontract from '@/views/flowable/form/components/chooseSubcontract.vue';
411
 import subContract from '@/views/flowable/form/business/subContract.vue';
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
 export default {
420
 export default {
413
   dicts: ['cmc_scale_grade', 'cmc_unit'],
421
   dicts: ['cmc_scale_grade', 'cmc_unit'],
414
   components: {
422
   components: {
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
     updateContractData() {
1023
     updateContractData() {
1036
       this.workList = this.$refs.workTableRef.workList;
1024
       this.workList = this.$refs.workTableRef.workList;
1037
       this.paymentList = this.$refs.paymentRef.paymentList;
1025
       this.paymentList = this.$refs.paymentRef.paymentList;
1038
       updateContract(this.form).then(response => {
1026
       updateContract(this.form).then(response => {
1039
-        this.$modal.msgSuccess("修改成功");
1027
+        this.$modal.msgSuccess("保存成功");
1040
         this.open = false;
1028
         this.open = false;
1041
         // 删除合同的工作和支付信息,并等待两个操作完成
1029
         // 删除合同的工作和支付信息,并等待两个操作完成
1042
         Promise.all([
1030
         Promise.all([
1044
           delContractPayment(this.form.contractId)
1032
           delContractPayment(this.form.contractId)
1045
         ]).then(([workRes, paymentRes]) => {
1033
         ]).then(([workRes, paymentRes]) => {
1046
           // 添加工作信息
1034
           // 添加工作信息
1047
-          const workPromises = this.workList.map(work => {
1035
+          const workPromises = this.workList.map(async work => {
1048
             work.contractId = this.form.contractId;
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
             payment.contractId = this.form.contractId;
1041
             payment.contractId = this.form.contractId;
1054
-            return addContractPayment(payment);
1042
+            return await addContractPayment(payment);
1055
           });
1043
           });
1056
           // 等待所有添加操作完成
1044
           // 等待所有添加操作完成
1057
           return Promise.all([...workPromises, ...paymentPromises]);
1045
           return Promise.all([...workPromises, ...paymentPromises]);
1058
         }).then(() => {
1046
         }).then(() => {
1059
-          this.$modal.msgSuccess("计划工作量和回款计划添加成功");
1047
+          // this.$modal.msgSuccess("计划工作量和回款计划添加成功");
1060
         }).catch(error => {
1048
         }).catch(error => {
1061
           this.$modal.msgError("操作失败: " + error.message);
1049
           this.$modal.msgError("操作失败: " + error.message);
1062
         });
1050
         });
1201
       delContractSubcontract(row.subContractId)
1189
       delContractSubcontract(row.subContractId)
1202
       this.connectSubContractList.splice(index, 1)
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
 </script>
1268
 </script>

+ 10
- 6
oa-ui/src/views/flowable/form/components/choosePartyA.vue View File

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

+ 49
- 16
oa-ui/src/views/flowable/form/projectProcess/addproject.vue View File

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-03-18 11:00:04
3
  * @Date: 2024-03-18 11:00:04
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-09-29 11:47:57
5
+ * @LastEditTime: 2024-10-09 14:29:14
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="project-wrapper">
8
   <div class="project-wrapper">
129
 import { listProjectContract, addProjectContract } from "@/api/oa/contract/projectContract";
129
 import { listProjectContract, addProjectContract } from "@/api/oa/contract/projectContract";
130
 import { listContract, getContract, delContract, addContract, updateContract } from "@/api/oa/contract/contract";
130
 import { listContract, getContract, delContract, addContract, updateContract } from "@/api/oa/contract/contract";
131
 import { listPartyA } from "@/api/oa/partyA/partyA";
131
 import { listPartyA } from "@/api/oa/partyA/partyA";
132
+import { listContractWork, addContractWork, delContractWork } from "@/api/oa/contract/contractWork";
132
 import chooseContract from '../components/chooseContract.vue';
133
 import chooseContract from '../components/chooseContract.vue';
133
 import ChoosePartyA from '@/views/flowable/form/components/choosePartyA.vue';
134
 import ChoosePartyA from '@/views/flowable/form/components/choosePartyA.vue';
134
 import ArrangeProject from './arrangeProject.vue';
135
 import ArrangeProject from './arrangeProject.vue';
176
         registerTime: undefined,
177
         registerTime: undefined,
177
         projectRegistrant: "",
178
         projectRegistrant: "",
178
         projectLevel: "0",
179
         projectLevel: "0",
179
-        taskDocument: ''
180
+        taskDocument: '',
181
+        undertakingDept: ''
180
       },
182
       },
181
       chooseContractInfo: {
183
       chooseContractInfo: {
182
         contractCode: '',
184
         contractCode: '',
225
     this.getPartyAList();
227
     this.getPartyAList();
226
     this.getDeptList();
228
     this.getDeptList();
227
     this.getContractDataList();
229
     this.getContractDataList();
230
+    if (this.$cache.local.get('contractId')) {
231
+      const contractId = this.$cache.local.get('contractId')
232
+      this.afterJumpByContract(contractId)
233
+    }
228
     // this.getList();
234
     // this.getList();
229
   },
235
   },
230
   mounted() {
236
   mounted() {
299
     getContractDataList() {
305
     getContractDataList() {
300
       listProjectContract({ projectId: this.taskForm.formId }).then(res => {
306
       listProjectContract({ projectId: this.taskForm.formId }).then(res => {
301
         if (res.rows) {
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
               if (res.data) {
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
         await updateProject(this.addForm)
383
         await updateProject(this.addForm)
356
         this.$modal.msgSuccess("保存成功")
384
         this.$modal.msgSuccess("保存成功")
357
       }
385
       }
386
+      if (this.$cache.local.get('contractId')) {
387
+        this.$cache.local.remove('contractId')
388
+      }
358
     },
389
     },
359
     async confirmAddForm() {
390
     async confirmAddForm() {
360
       let leaderData = await getUsersDeptLeaderByDept({ deptId: 109 })
391
       let leaderData = await getUsersDeptLeaderByDept({ deptId: 109 })
400
           dom.scrollIntoView({ behavior: 'smooth' });
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
     confirmPartyA(val) {
438
     confirmPartyA(val) {
406
       this.partyAOpen = false
439
       this.partyAOpen = false

+ 22
- 0
oa-ui/src/views/flowable/form/projectProcess/planWorkload.vue View File

55
 <script>
55
 <script>
56
 import { listProject, getProject, addProject, updateProject, delProject } from "@/api/oa/project/project";
56
 import { listProject, getProject, addProject, updateProject, delProject } from "@/api/oa/project/project";
57
 import { listProjectWork, addProjectWork, delProjectWork } from "@/api/oa/project/projectWork";
57
 import { listProjectWork, addProjectWork, delProjectWork } from "@/api/oa/project/projectWork";
58
+import { listContractWork, addContractWork, delContractWork } from "@/api/oa/contract/contractWork";
58
 export default {
59
 export default {
59
   dicts: ['cmc_scale_grade', 'cmc_unit'],
60
   dicts: ['cmc_scale_grade', 'cmc_unit'],
60
   props: {
61
   props: {
78
   },
79
   },
79
   created() {
80
   created() {
80
     this.getList();
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
   methods: {
87
   methods: {
83
     getList() {
88
     getList() {
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
     addWorkList() {
111
     addWorkList() {
91
       this.workList.push({
112
       this.workList.push({
92
         content: "",
113
         content: "",
121
   /*设置背景颜色*/
142
   /*设置背景颜色*/
122
   /* background-color: #bfa; */
143
   /* background-color: #bfa; */
123
 }
144
 }
145
+
124
 .delete-btn {
146
 .delete-btn {
125
   color: #F56C6C;
147
   color: #F56C6C;
126
   cursor: pointer;
148
   cursor: pointer;

+ 1
- 1
oa-ui/src/views/oa/contract/components/edit.vue View File

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

+ 9
- 6
oa-ui/src/views/oa/project/index.vue View File

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-02-27 14:49:15
3
  * @Date: 2024-02-27 14:49:15
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-09-23 16:15:25
5
+ * @LastEditTime: 2024-10-09 16:25:24
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="project-wrapper">
8
   <div class="project-wrapper">
364
     },
364
     },
365
     handleView(row) {
365
     handleView(row) {
366
       let id = row.projectId
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
     handleUpdate(row) {
374
     handleUpdate(row) {
373
       this.addForm = row;
375
       this.addForm = row;
463
     formatStatus(row) {
465
     formatStatus(row) {
464
       if (!row) {
466
       if (!row) {
465
         row = 0
467
         row = 0
468
+        return 'exception'
466
       }
469
       }
467
       if (row <= 20) {
470
       if (row <= 20) {
468
         return 'exception'
471
         return 'exception'
469
       } else if (row > 20 && row <= 50) {
472
       } else if (row > 20 && row <= 50) {
470
         return 'warning'
473
         return 'warning'
471
       } else if (row > 50 && row <= 80) {
474
       } else if (row > 50 && row <= 80) {
472
-        return ''
475
+        return null
473
       } else {
476
       } else {
474
         return 'success'
477
         return 'success'
475
       }
478
       }

+ 11
- 1
oa-ui/src/views/oa/project/info.vue View File

573
       default: true
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
   created() {
587
   created() {
577
     this.getUserList();
588
     this.getUserList();
578
     this.getDeviceList();
589
     this.getDeviceList();
637
   methods: {
648
   methods: {
638
     scrollToAnchor(anchor) {
649
     scrollToAnchor(anchor) {
639
       const element = this.$refs[anchor];
650
       const element = this.$refs[anchor];
640
-      console.log(element.offsetTop);
641
       if (element) {
651
       if (element) {
642
         window.scrollTo({
652
         window.scrollTo({
643
           behavior: 'smooth',
653
           behavior: 'smooth',

Loading…
Cancel
Save