Browse Source

修改合同、项目数据列表界面可点击按钮发起流程;

新增合同在合同拟稿时候的保存按钮。
余思翰 10 months ago
parent
commit
044cc3da31

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

@@ -79,13 +79,6 @@ public class CmcContractController extends BaseController
79 79
     @PostMapping
80 80
     public AjaxResult add(@RequestBody CmcContract cmcContract)
81 81
     {
82
-        if (!cmcContract.getPartyAId().matches("-?\\d+(\\.\\d+)?")) {
83
-            CmcPartyA cmcPartyA = new CmcPartyA();
84
-            cmcPartyA.setPartyAId(String.valueOf(cmcPartyAService.selectCmcPartyAList(new CmcPartyA()).size() + 1));
85
-            cmcPartyA.setPartyAName(cmcContract.getPartyAId());
86
-            cmcPartyAService.insertCmcPartyA(cmcPartyA);
87
-            cmcContract.setPartyAId(cmcPartyA.getPartyAId());
88
-        }
89 82
         return toAjax(cmcContractService.insertCmcContract(cmcContract));
90 83
     }
91 84
 

+ 1
- 0
oa-back/ruoyi-admin/src/main/resources/application-druid.yml View File

@@ -9,6 +9,7 @@ spring:
9 9
                 url: jdbc:mysql://localhost:3306/cmc_oa?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
10 10
                 username: root
11 11
                 password: 123456
12
+#                password: cmcroot
12 13
             # 从库数据源
13 14
             slave:
14 15
                 # 从数据源开关/默认关闭

+ 2
- 1
oa-back/ruoyi-admin/src/main/resources/application.yml View File

@@ -18,6 +18,7 @@ cmc:
18 18
 server:
19 19
   # 服务器的HTTP端口,默认为8080
20 20
   port: 8080
21
+#  port: 8086
21 22
   servlet:
22 23
     # 应用的访问路径
23 24
     context-path: /
@@ -60,7 +61,7 @@ spring:
60 61
       # 单个文件大小
61 62
       max-file-size: 100MB
62 63
       # 设置总上传的文件大小
63
-      max-request-size: 20MB
64
+      max-request-size: 200MB
64 65
   # 服务模块
65 66
   devtools:
66 67
     restart:

+ 0
- 2
oa-ui/src/components/Editor/index.vue View File

@@ -186,7 +186,6 @@ export default {
186 186
   },
187 187
   methods: {
188 188
     init() {
189
-      debugger
190 189
       const editor = this.$refs.editor;
191 190
       this.Quill = new Quill(editor, this.options);
192 191
       var Size = Quill.import("formats/size");
@@ -285,7 +284,6 @@ export default {
285 284
       return true;
286 285
     },
287 286
     handleUploadSuccess(res, file) {
288
-      debugger
289 287
       // 如果上传成功
290 288
       if (res.code == 200) {
291 289
         // 获取富文本组件实例

+ 58
- 24
oa-ui/src/views/flowable/form/business/contractForm.vue View File

@@ -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-07-09 17:42:01
5
+ * @LastEditTime: 2024-07-24 16:09:37
6 6
 -->
7 7
 <template>
8 8
   <div class="app-container">
@@ -14,26 +14,27 @@
14 14
           <el-row :gutter="20">
15 15
             <el-col :span="12" :xs="24">
16 16
               <el-form-item label="投标项目名称:" prop="tenderId">
17
-                <el-button type="primary" size="mini" @click="tbOpen = true" v-if="taskName == '合同拟稿'">选择投标项目</el-button>
17
+                <el-button type="primary" size="mini" @click="tbOpen = true"
18
+                  v-if="taskName == '合同拟稿'">选择投标项目</el-button>
18 19
                 <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="3" direction="vertical">
19 20
                   <el-descriptions-item label="投标项目名称" label-class-name="my-label" :span="3">{{ chooseTender.projectName
20
-                  }}</el-descriptions-item>
21
+                    }}</el-descriptions-item>
21 22
                   <el-descriptions-item label="项目来源" label-class-name="my-label">{{ getProjectSource(chooseTender)
22
-                  }}</el-descriptions-item>
23
+                    }}</el-descriptions-item>
23 24
                   <el-descriptions-item label="联系人" label-class-name="my-label">{{ chooseTender.aPerson
24
-                  }}</el-descriptions-item>
25
+                    }}</el-descriptions-item>
25 26
                   <el-descriptions-item label="联系电话" label-class-name="my-label">{{ chooseTender.aPhone
26
-                  }}</el-descriptions-item>
27
+                    }}</el-descriptions-item>
27 28
                 </el-descriptions>
28 29
               </el-form-item>
29 30
               <el-form-item label="合同名称" prop="contractName">
30
-                <el-input type="textarea" :rows="3" style="width: 100%;" v-model="form.contractName" placeholder="请输入合同名称"
31
-                  :disabled="taskName != '合同拟稿'"></el-input>
31
+                <el-input type="textarea" :rows="3" style="width: 100%;" v-model="form.contractName"
32
+                  placeholder="请输入合同名称" :disabled="taskName != '合同拟稿'"></el-input>
32 33
               </el-form-item>
33 34
               <el-form-item label="甲方单位" prop="partyAId">
34 35
                 <el-select v-model="form.partyAId" filterable placeholder="请选择" disabled style="width: 100%;">
35
-                  <el-option v-for="item in partyAList" :key="item.value" :label="item.partyAName" :value="item.partyAId"
36
-                    :disabled="taskName != '合同拟稿'">
36
+                  <el-option v-for="item in partyAList" :key="item.value" :label="item.partyAName"
37
+                    :value="item.partyAId" :disabled="taskName != '合同拟稿'">
37 38
                   </el-option>
38 39
                 </el-select>
39 40
                 <el-button type="primary" @click="partyAOpen = true" size="mini"
@@ -48,7 +49,8 @@
48 49
                   :disabled="taskName != '合同拟稿'"></el-input>
49 50
               </el-form-item>
50 51
               <el-form-item label="合同金额" prop="amount">
51
-                <el-input style="width:100%;" v-model="form.amount" placeholder="请输入合同金额" :disabled="taskName != '合同拟稿'">
52
+                <el-input style="width:100%;" v-model="form.amount" placeholder="请输入合同金额"
53
+                  :disabled="taskName != '合同拟稿'">
52 54
                   <template slot="append">元</template>
53 55
                 </el-input>
54 56
               </el-form-item>
@@ -77,7 +79,8 @@
77 79
           </el-row>
78 80
           <el-form-item label="合同文件" prop="contractDocument">
79 81
             <FileUpload v-if="taskName == '合同拟稿'" :disabled="taskName != '合同拟稿'" ref="contractFile" :limit="1"
80
-              :filePathName="'承接合同/合同文件'" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'rar', 'zip']" @input="getContractPath">
82
+              :filePathName="'承接合同/合同文件'" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'rar', 'zip']"
83
+              @input="getContractPath">
81 84
             </FileUpload>
82 85
             <div v-if="form.contractDocument && taskName != '合同拟稿'">
83 86
               <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.contractDocument}`)">
@@ -134,8 +137,8 @@
134 137
                     :disabled="taskName != '合同拟稿'"></el-input>
135 138
                 </td>
136 139
                 <td>
137
-                  <el-button type="danger" icon="el-icon-minus" size="mini" circle @click="deletWorkItem(index)"
138
-                    :disabled="taskName != '合同拟稿'"></el-button>
140
+                  <el-button type="text" style="color:#F56C6C" size="mini" circle @click="deletWorkItem(index)"
141
+                    :disabled="taskName != '合同拟稿'">删除行</el-button>
139 142
                 </td>
140 143
               </tr>
141 144
             </table>
@@ -169,8 +172,8 @@
169 172
                     clearable :disabled="taskName != '合同拟稿'"></el-input-number>
170 173
                 </td>
171 174
                 <td>
172
-                  <el-date-picker style="width: 140px" v-model="payment.paymentTime" value-format="yyyy-MM-dd" type="date"
173
-                    placeholder="选择日期" :disabled="taskName != '合同拟稿'">
175
+                  <el-date-picker style="width: 140px" v-model="payment.paymentTime" value-format="yyyy-MM-dd"
176
+                    type="date" placeholder="选择日期" :disabled="taskName != '合同拟稿'">
174 177
                   </el-date-picker>
175 178
                 </td>
176 179
                 <td>
@@ -392,8 +395,8 @@
392 395
           </el-row>
393 396
           <el-divider></el-divider>
394 397
           <el-form-item label="签订日期" prop="signDate">
395
-            <el-date-picker clearable v-model="form.signDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择签订日期"
396
-              :disabled="taskName != '合同签订'">
398
+            <el-date-picker clearable v-model="form.signDate" type="date" value-format="yyyy-MM-dd"
399
+              placeholder="请选择签订日期" :disabled="taskName != '合同签订'">
397 400
             </el-date-picker>
398 401
           </el-form-item>
399 402
           <el-form-item label="签订备注" prop="signRemark">
@@ -403,8 +406,8 @@
403 406
           <el-form-item label="签订扫描件" prop="signScan">
404 407
             <!-- <el-input v-model="form.signScan" placeholder="请输入签订扫描件" :disabled="taskName != '合同签订'" /> -->
405 408
             <FileUpload :disabled="taskName != '合同签订'" v-if="form.signScan == null || form.signScan == ''"
406
-              ref="contractFile" :limit="1" :filePathName="'承接合同文件'" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'rar', 'zip']"
407
-              @input="getSignScanPath">
409
+              ref="contractFile" :limit="1" :filePathName="'承接合同文件'"
410
+              :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'rar', 'zip']" @input="getSignScanPath">
408 411
             </FileUpload>
409 412
             <div v-if="form.signScan && taskName != '合同签订'">
410 413
               <!-- <transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear"
@@ -433,6 +436,7 @@
433 436
           </el-form-item>
434 437
         </el-form>
435 438
         <div style="text-align: center;" v-if="taskName">
439
+          <el-button type="warning" @click="saves()" :disabled="formDisabled" v-if="taskName == '合同拟稿'">保 存</el-button>
436 440
           <el-button type="primary" @click="submitForm" :disabled="formDisabled">提 交</el-button>
437 441
         </div>
438 442
       </el-col>` `
@@ -698,11 +702,11 @@ export default {
698 702
               this.isSelect = true
699 703
             })
700 704
           }
701
-          listContractWork({ contractId: this.taskForm.formId }).then(res => {
705
+          listContractWork({ pageNum: 1, pageSize: 100, contractId: this.taskForm.formId }).then(res => {
702 706
             if (res.rows)
703 707
               this.workList = res.rows;
704 708
           });
705
-          listContractPayment({ contractId: this.taskForm.formId }).then(res => {
709
+          listContractPayment({ pageNum: 1, pageSize: 100, contractId: this.taskForm.formId }).then(res => {
706 710
             if (res.rows)
707 711
               this.paymentList = res.rows;
708 712
           });
@@ -978,7 +982,7 @@ export default {
978 982
     validateTenderId(tenderId) {
979 983
       // 这里添加你的验证逻辑  
980 984
       // 例如,检查tenderId是否为空或者是否符合其他规则  
981
-      if (!tenderId || tenderId.trim() === '') {
985
+      if (!tenderId) {
982 986
         this.$message.error('请选择一个有效的投标项目');
983 987
         return false;
984 988
       }
@@ -993,6 +997,34 @@ export default {
993 997
       }
994 998
       return true;
995 999
     },
1000
+    // 保存信息
1001
+    saves() {
1002
+      if (this.formTotal != 0) {
1003
+        this.updateContractData();
1004
+        this.updateRelatedProject();
1005
+      } else {
1006
+        this.form.contractId = this.taskForm.formId;
1007
+        addContract(this.form).then(response => {
1008
+          if (response.code == 200) {
1009
+            this.$modal.msgSuccess("新增成功");
1010
+            this.open = false;
1011
+            for (let work of this.workList) {
1012
+              work.contractId = this.form.contractId
1013
+              addContractWork(work);
1014
+            }
1015
+            for (let payment of this.paymentList) {
1016
+              payment.contractId = this.form.contractId
1017
+              addContractPayment(payment);
1018
+            }
1019
+            for (let projectId of this.projectContractForm.projectIds) {
1020
+              addProjectContract({ projectId: projectId, contractId: this.form.contractId });
1021
+            }
1022
+          } else {
1023
+            this.$message.error("新增失败,请确认合同编码是否唯一");
1024
+          }
1025
+        });
1026
+      }
1027
+    },
996 1028
     /** 提交按钮 */
997 1029
     submitForm() {
998 1030
       this.isTenderIdValid = this.validateTenderId(this.form.tenderId);
@@ -1091,12 +1123,14 @@ export default {
1091 1123
               }
1092 1124
             });
1093 1125
           }
1126
+        } else {
1127
+          this.$message.error('请完善必填项')
1094 1128
         }
1095 1129
       });
1096 1130
     },
1097 1131
     updateContractData() {
1098 1132
       updateContract(this.form).then(response => {
1099
-        this.$modal.msgSuccess("数据添加成功");
1133
+        this.$modal.msgSuccess("修改成功");
1100 1134
         this.open = false;
1101 1135
         delContractWork(this.form.contractId).then(res => {
1102 1136
           for (let work of this.workList) {

+ 57
- 15
oa-ui/src/views/flowable/form/business/subContract.vue View File

@@ -1,8 +1,8 @@
1 1
 <!--
2 2
  * @Author: ysh
3 3
  * @Date: 2024-05-10 15:31:57
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-07-12 17:03:07
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-07-24 15:56:52
6 6
 -->
7 7
 <template>
8 8
   <div class="app-container">
@@ -55,8 +55,8 @@
55 55
           <el-row :gutter="20">
56 56
             <el-col :span="16" :xs="24">
57 57
               <el-form-item label="承接单位" prop="partnerId">
58
-                <el-select allow-create v-model="form.partnerId" multiple filterable placeholder="请选择" style="width: 84%;"
59
-                  disabled clearable>
58
+                <el-select allow-create v-model="form.partnerId" multiple filterable placeholder="请选择"
59
+                  style="width: 84%;" disabled clearable>
60 60
                   <el-option v-for="item in partnerList" :key="item.value" :label="item.partnerName"
61 61
                     :value="item.partnerId">
62 62
                   </el-option>
@@ -75,10 +75,11 @@
75 75
           <el-row :gutter="20">
76 76
             <el-col :span="16" :xs="24">
77 77
               <el-form-item label="合同文件" prop="contractDocument">
78
-                <FileUpload v-if="formTotal == 0" :disabled="taskName != '合同拟稿'" ref="contractFile" :limit="1"
79
-                  :filePathName="'分包合同/合同文件'" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'rar', 'zip']" @input="getContractPath">
78
+                <FileUpload v-if="taskName == '合同拟稿'" :disabled="taskName != '合同拟稿'" ref="contractFile" :limit="1"
79
+                  :filePathName="'分包合同/合同文件'" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'rar', 'zip']"
80
+                  @input="getContractPath">
80 81
                 </FileUpload>
81
-                <div v-if="taskName != '合同拟稿' && form.contractDocument">
82
+                <div v-if="form.contractDocument">
82 83
                   <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.contractDocument}`)">
83 84
                     {{ getFileName(form.contractDocument) }}
84 85
                   </el-link>
@@ -174,8 +175,8 @@
174 175
                     :disabled="taskName != '合同拟稿'"></el-input-number>
175 176
                 </td>
176 177
                 <td>
177
-                  <el-date-picker style="width: 140px" v-model="payment.paymentTime" value-format="yyyy-MM-dd" type="date"
178
-                    placeholder="选择日期" :disabled="taskName != '合同拟稿'">
178
+                  <el-date-picker style="width: 140px" v-model="payment.paymentTime" value-format="yyyy-MM-dd"
179
+                    type="date" placeholder="选择日期" :disabled="taskName != '合同拟稿'">
179 180
                   </el-date-picker>
180 181
                 </td>
181 182
                 <td>
@@ -325,7 +326,8 @@
325 326
                 <td colspan="5" style="text-align:left;">
326 327
                   <FileUpload v-if="meetingForm.document == null || meetingForm.document == ''" ref="contractFile"
327 328
                     :limit="1" :filePathName="'分包合同/会议评审意见'" :disabled="taskName != '会议评审'"
328
-                    :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'rar', 'zip']" @input="getMeetingPath"></FileUpload>
329
+                    :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'rar', 'zip']" @input="getMeetingPath">
330
+                  </FileUpload>
329 331
                   <div v-if="meetingForm.document != null && meetingForm.document != ''">
330 332
                     <file-item :document="meetingForm.document"></file-item>
331 333
                   </div>
@@ -389,8 +391,8 @@
389 391
           </el-row>
390 392
           <el-divider></el-divider>
391 393
           <el-form-item label="签订日期" prop="signDate">
392
-            <el-date-picker clearable v-model="form.signDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择签订日期"
393
-              :disabled="taskName != '合同签订'">
394
+            <el-date-picker clearable v-model="form.signDate" type="date" value-format="yyyy-MM-dd"
395
+              placeholder="请选择签订日期" :disabled="taskName != '合同签订'">
394 396
             </el-date-picker>
395 397
           </el-form-item>
396 398
           <el-form-item label="签订备注" prop="signRemark">
@@ -398,7 +400,8 @@
398 400
           </el-form-item>
399 401
           <el-form-item label="签订扫描件" prop="signScan">
400 402
             <FileUpload :disabled="taskName != '合同签订'" v-if="form.signScan == null || form.signScan == ''" :limit="1"
401
-              :filePathName="'分包合同文件'" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'rar', 'zip']" @input="getSignScanPath">
403
+              :filePathName="'分包合同文件'" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'rar', 'zip']"
404
+              @input="getSignScanPath">
402 405
             </FileUpload>
403 406
             <div v-if="form.signScan && taskName != '合同签订'">
404 407
               <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.signScan}`)">
@@ -412,6 +415,7 @@
412 415
           </el-form-item>
413 416
         </el-form>
414 417
         <div style="text-align: center;" v-if="flowDisabled">
418
+          <el-button type="warning" @click="saves()" :disabled="formDisabled" v-if="taskName == '合同拟稿'">保 存</el-button>
415 419
           <el-button type="primary" @click="submitForm" :disabled="formDisabled">提 交</el-button>
416 420
         </div>
417 421
       </el-col>
@@ -706,11 +710,11 @@ export default {
706 710
               })
707 711
             }
708 712
           })
709
-          listContractWork({ contractId: this.taskForm.formId }).then(res => {
713
+          listContractWork({ pageNum: 1, pageSize: 100, contractId: this.taskForm.formId }).then(res => {
710 714
             if (res.rows)
711 715
               this.workList = res.rows;
712 716
           });
713
-          listContractPayment({ contractId: this.taskForm.formId }).then(res => {
717
+          listContractPayment({ pageNum: 1, pageSize: 100, contractId: this.taskForm.formId }).then(res => {
714 718
             if (res.rows)
715 719
               this.paymentList = res.rows;
716 720
           });
@@ -923,6 +927,44 @@ export default {
923 927
       }
924 928
       return true;
925 929
     },
930
+    // 保存信息
931
+    saves() {
932
+      if (this.formTotal != 0) {
933
+        if (this.form.partnerId)
934
+          this.form.partnerId = this.form.partnerId.join(',')
935
+        updateSubContract(this.form).then(response => {
936
+          this.$modal.msgSuccess("修改成功");
937
+          this.open = false;
938
+          this.getList();
939
+          this.updateChooseProjectList()
940
+        });
941
+      } else {
942
+        this.form.subContractId = this.taskForm.formId;
943
+        if (this.form.partnerId)
944
+          this.form.partnerId = this.form.partnerId.join(',')
945
+        addSubContract(this.form).then(response => {
946
+          this.$modal.msgSuccess("新增成功");
947
+          this.open = false;
948
+          this.getList();
949
+        });
950
+        const subContractId = this.form.subContractId;
951
+        this.chooseProjectList.forEach(item => {
952
+          addProjectSubcontract({ subContractId: subContractId, projectId: item.projectId })
953
+        })
954
+        for (let work of this.workList) {
955
+          work.contractId = subContractId;
956
+          addContractWork(work);
957
+        }
958
+        for (let payment of this.paymentList) {
959
+          payment.contractId = subContractId;
960
+          addContractPayment(payment);
961
+        }
962
+        const params = { taskId: this.taskForm.taskId };
963
+        getNextFlowNode(params).then(res => {
964
+          this.contractDraftSubmit(handleComplete)
965
+        })
966
+      }
967
+    },
926 968
     /** 提交按钮 */
927 969
     submitForm() {
928 970
       let isProjectValid = this.validateManual(this.chooseProjectList);

+ 0
- 1
oa-ui/src/views/flowable/form/oa/deviceForm.vue View File

@@ -441,7 +441,6 @@ export default {
441 441
         });
442 442
       } else if (this.taskName == '安排设备') {
443 443
         getUsersManageLeader({ userId: this.form.applier }).then(res => {
444
-          debugger
445 444
           let userId = [];
446 445
           res.data.forEach(user => {
447 446
             userId.push(user.userId)

+ 0
- 1
oa-ui/src/views/flowable/form/projectProcess/addproject.vue View File

@@ -301,7 +301,6 @@ export default {
301 301
       // 获取下一个流程节点
302 302
       this.$refs['projectAdd'].validate((vaild) => {
303 303
         if (vaild) {
304
-          console.log(vaild);
305 304
           const params = { taskId: this.taskForm.taskId };
306 305
           getNextFlowNode(params).then(res => {
307 306
             complete(this.taskForm).then(response => {

+ 20
- 13
oa-ui/src/views/flowable/form/projectProcess/arrangeProject.vue View File

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-03-19 09:24:06
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-07-10 17:51:06
5
+ * @LastEditTime: 2024-07-24 11:04:44
6 6
 -->
7 7
 <template>
8 8
   <div class="app-container">
@@ -32,7 +32,8 @@
32 32
         <el-col :span="12" :xs="24">
33 33
           <el-form-item label="项目负责人:" prop="projectLeader">
34 34
             <el-select v-model="form.projectLeader" placeholder="请选择项目负责人" size="large" disabled>
35
-              <el-option v-for="item in $store.state.user.userList" :key="item.userId" :label="item.nickName" :value="item.userId" />
35
+              <el-option v-for="item in $store.state.user.userList" :key="item.userId" :label="item.nickName"
36
+                :value="item.userId" />
36 37
             </el-select>
37 38
             <!-- <el-tag effect="plain" type="warning" style="margin-right: 10px;"
38 39
               v-if="form.projectLeader != '' && form.projectLeader != undefined">{{
@@ -258,17 +259,23 @@ export default {
258 259
         if (resData.data) {
259 260
           approvalId = resData.data[0].userId;
260 261
         }
261
-        const params = { taskId: this.taskForm.taskId };
262
-        // 获取下一个流程节点
263
-        getNextFlowNode(params).then(res => {
264
-          this.$set(this.taskForm.variables, "formId", this.taskForm.formId);
265
-          this.$set(this.taskForm.variables, "budgetInitiator", this.peopleForm.userId || this.form.projectLeader);
266
-          this.$set(this.taskForm.variables, "planInitiator", this.peopleForm.userId || this.form.projectLeader);
267
-          this.$set(this.taskForm.variables, "approval", approvalId);
268
-          complete(this.taskForm).then(response => {
269
-            this.$modal.msgSuccess(response.msg);
270
-            this.$emit('goBack');
271
-          });
262
+        this.$refs['arrangeForm'].validate((vaild) => {
263
+          if (vaild) {
264
+            const params = { taskId: this.taskForm.taskId };
265
+            // 获取下一个流程节点
266
+            getNextFlowNode(params).then(res => {
267
+              this.$set(this.taskForm.variables, "formId", this.taskForm.formId);
268
+              this.$set(this.taskForm.variables, "budgetInitiator", this.peopleForm.userId || this.form.projectLeader);
269
+              this.$set(this.taskForm.variables, "planInitiator", this.peopleForm.userId || this.form.projectLeader);
270
+              this.$set(this.taskForm.variables, "approval", approvalId);
271
+              complete(this.taskForm).then(response => {
272
+                this.$modal.msgSuccess(response.msg);
273
+                this.$emit('goBack');
274
+              });
275
+            })
276
+          }else{
277
+            this.$message.error('请完善必填项')
278
+          }
272 279
         })
273 280
       })
274 281
 

+ 2
- 2
oa-ui/src/views/flowable/task/myProcess/index.vue View File

@@ -1,8 +1,8 @@
1 1
 <!--
2 2
  * @Author: ysh
3 3
  * @Date: 2024-01-03 09:23:11
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-07-04 13:06:15
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-07-24 10:21:34
6 6
 -->
7 7
 <template>
8 8
   <div class="app-container">

+ 22
- 7
oa-ui/src/views/oa/contract/index.vue View File

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-03-18 09:05:41
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-07-23 17:11:21
5
+ * @LastEditTime: 2024-07-24 15:01:08
6 6
 -->
7 7
 <template>
8 8
   <div class="app-container">
@@ -54,10 +54,10 @@
54 54
         <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
55 55
           v-hasPermi="['oa:contract:remove']">删除</el-button>
56 56
       </el-col> -->
57
-      <!-- <el-col :span="1.5">
58
-        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleRegister"
59
-          v-hasPermi="['oa:contract:add']">登记合同</el-button>
60
-      </el-col> -->
57
+      <el-col :span="1.5">
58
+        <el-button type="success" plain icon="el-icon-plus" size="mini" @click="handleRegister"
59
+          v-hasPermi="['oa:contract:add']">登记承接合同</el-button>
60
+      </el-col>
61 61
       <el-col :span="1.5">
62 62
         <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
63 63
           v-hasPermi="['oa:contract:export']">导出</el-button>
@@ -322,8 +322,23 @@ export default {
322 322
       });
323 323
     },
324 324
     // 登记合同
325
-    handleRegister(row) {
326
-      // this.handleStartProcess(row)
325
+    async handleRegister() {
326
+      let response = await listDefinition({
327
+        pageNum: 1,
328
+        pageSize: 9999,
329
+        name: "承接合同评审",
330
+        category: "business",
331
+      })
332
+      if (response.data.total == 1) {
333
+        let obj = response.data.records[0]
334
+        this.$confirm("是否发起承接合同评审流程?", '提示', {
335
+          confirmButtonText: '确定',
336
+          cancelButtonText: '取消',
337
+          type: 'warning'
338
+        }).then(() => {
339
+          this.handleStartProcess(obj)
340
+        }).catch(() => { });
341
+      }
327 342
     },
328 343
     handleStartProcess(row) {
329 344
       let formId = new Snowflake(1n, 1n, 0n).nextId().toString();

+ 82
- 2
oa-ui/src/views/oa/contract/subContract.vue View File

@@ -27,6 +27,10 @@
27 27
     </el-form>
28 28
 
29 29
     <el-row :gutter="10" class="mb8">
30
+      <el-col :span="1.5">
31
+        <el-button type="success" plain icon="el-icon-plus" size="mini" @click="handleRegister"
32
+          v-hasPermi="['oa:contract:add']">登记分包合同</el-button>
33
+      </el-col>
30 34
       <el-col :span="1.5">
31 35
         <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
32 36
           v-hasPermi="['oa:subContract:export']">导出</el-button>
@@ -112,7 +116,8 @@
112 116
           <el-input v-model="form.drafter" placeholder="请输入拟稿人" />
113 117
         </el-form-item>
114 118
         <el-form-item label="拟稿日期" prop="draftTime">
115
-          <el-date-picker clearable v-model="form.draftTime" type="date" value-format="yyyy-MM-dd" placeholder="请选择拟稿日期">
119
+          <el-date-picker clearable v-model="form.draftTime" type="date" value-format="yyyy-MM-dd"
120
+            placeholder="请选择拟稿日期">
116 121
           </el-date-picker>
117 122
         </el-form-item>
118 123
         <el-form-item label="合同备注" prop="remark">
@@ -145,6 +150,10 @@
145 150
 import { listSubContract, getSubContract, delSubContract, addSubContract, updateSubContract } from "@/api/oa/contract/subContract";
146 151
 import { listPartner } from "@/api/oa/partner/partner";
147 152
 import subContract from '../../flowable/form/business/subContract.vue';
153
+import { listDefinition } from "@/api/flowable/definition";
154
+import { definitionStart, flowXmlAndNode } from "@/api/flowable/definition";
155
+import { todoList, getNextFlowNodeByStart } from "@/api/flowable/todo";
156
+import { Snowflake } from '@/utils/snowFlake.js'
148 157
 
149 158
 export default {
150 159
   components: { subContract },
@@ -214,7 +223,7 @@ export default {
214 223
     remoteMethod(val) {
215 224
       listPartner({
216 225
         pageNum: 1,
217
-        pageSize: 20, 
226
+        pageSize: 20,
218 227
         partnerName: val
219 228
       }).then(res => {
220 229
         this.partnerList = res.rows;
@@ -282,6 +291,65 @@ export default {
282 291
         this.title = "修改cmc分包合同评审";
283 292
       });
284 293
     },
294
+    async handleRegister() {
295
+      let response = await listDefinition({
296
+        pageNum: 1,
297
+        pageSize: 9999,
298
+        name: "分包合同评审",
299
+        category: "business",
300
+      })
301
+      if (response.data.total == 1) {
302
+        let obj = response.data.records[0]
303
+        this.$confirm("是否发起分包合同评审流程?", '提示', {
304
+          confirmButtonText: '确定',
305
+          cancelButtonText: '取消',
306
+          type: 'warning'
307
+        }).then(() => {
308
+          this.handleStartProcess(obj)
309
+        }).catch(() => { });
310
+      }
311
+    },
312
+    handleStartProcess(row) {
313
+      let formId = new Snowflake(1n, 1n, 0n).nextId().toString();
314
+      getNextFlowNodeByStart({ deploymentId: row.deploymentId, variables: { formId: formId } }).then(res => {
315
+        let data = res.data;
316
+        const variables = {};
317
+        const formData = {};
318
+        formData.disabled = true;
319
+        formData.formBtns = false;
320
+        formData.formId = formId
321
+        if (row.id) {
322
+          variables.variables = formData;
323
+          let routePath = this.getRoutePath(row);
324
+          definitionStart(row.id, JSON.stringify(variables)).then(res => {
325
+            this.$modal.msgSuccess(res.msg);
326
+            let procInstanceId = res.data;
327
+            todoList({
328
+              pageNum: 1,
329
+              pageSize: 99999999, processInsId: procInstanceId
330
+            }).then(toDoRes => {
331
+              let records = toDoRes.data.records;
332
+              if (records.length == 1) {
333
+                records = records[0]
334
+              }
335
+              this.$router.push({
336
+                path: routePath,
337
+                query: {
338
+                  procInsId: records.procInsId,
339
+                  executionId: records.executionId,
340
+                  deployId: records.deployId,
341
+                  taskId: records.taskId,
342
+                  taskName: records.taskName,
343
+                  startUser: records.startUserName + '-' + records.startDeptName,
344
+                  formId: formData.formId,
345
+                  procDefName: records.procDefName
346
+                }
347
+              })
348
+            })
349
+          })
350
+        }
351
+      })
352
+    },
285 353
     /** 提交按钮 */
286 354
     submitForm() {
287 355
       this.$refs["form"].validate(valid => {
@@ -302,6 +370,18 @@ export default {
302 370
         }
303 371
       });
304 372
     },
373
+    getRoutePath(row) {
374
+      let path;
375
+      for (let p of this.publicData.pathRoute) {
376
+        if (p.name == row.name) {
377
+          path = p.path
378
+          break
379
+        } else {
380
+          path = '/flowable/task/todo/detail/index'
381
+        }
382
+      }
383
+      return path
384
+    },
305 385
     /** 删除按钮操作 */
306 386
     handleDelete(row) {
307 387
       const subContractIds = row.subContractId || this.ids;

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

@@ -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-07-18 13:54:18
5
+ * @LastEditTime: 2024-07-24 16:28:58
6 6
 -->
7 7
 <template>
8 8
   <div class="project-wrapper">
@@ -72,10 +72,10 @@
72 72
     <el-card style="margin-top: 20px;">
73 73
       <div slot="header" class="card-header">
74 74
         <div style="font-weight: bold;font-size: 20px;">项目列表</div>
75
-        <!-- <div>
76
-          <el-button style="float: right;margin-right: 10px;" type="warning" size="mini" icon="el-icon-plus"
77
-            @click="handleAdd">新增项目</el-button>
78
-        </div> -->
75
+        <div>
76
+          <el-button style="float: right;margin-right: 10px;" type="success" size="mini" icon="el-icon-plus"
77
+            @click="handleRegister">登记项目</el-button>
78
+        </div>
79 79
       </div>
80 80
       <el-table v-loading="loading" :data="projectList" style="margin-top: 30px;">
81 81
         <el-table-column type="index" width="50">
@@ -93,9 +93,10 @@
93 93
               :percentage="scope.row.percentage" text-color="#fff"></el-progress>
94 94
           </template>
95 95
         </el-table-column>
96
-        <el-table-column label="项目编号" align="center" key="projectNumber" prop="projectNumber" width="120px"/>
96
+        <el-table-column label="项目编号" align="center" key="projectNumber" prop="projectNumber" width="120px" />
97 97
         <el-table-column label="项目名称" align="center" key="projectName" prop="projectName" />
98
-        <el-table-column label="项目负责人" align="center" key="projectLeaderName" prop="projectLeaderUser.nickName" width="120px" />
98
+        <el-table-column label="项目负责人" align="center" key="projectLeaderName" prop="projectLeaderUser.nickName"
99
+          width="120px" />
99 100
         <el-table-column label="项目级别" align="center" key="projectLevel" prop="projectLevel" width="120px">
100 101
           <template slot-scope="scope">
101 102
             <el-tag :type="scope.row.projectLevel ? (scope.row.projectLevel === '0' ? 'info' : 'danger') : 'info'"
@@ -104,7 +105,7 @@
104 105
             </el-tag>
105 106
           </template>
106 107
         </el-table-column>
107
-        <el-table-column label="项目类型" align="center" key="projectType" prop="projectType" width="120px"/>
108
+        <el-table-column label="项目类型" align="center" key="projectType" prop="projectType" width="120px" />
108 109
         <el-table-column label="操作" align="center" width="160" class-name="small-padding fixed-width">
109 110
           <template slot-scope="scope" v-if="scope.row.userId !== 1">
110 111
             <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)"
@@ -246,6 +247,10 @@ import { listDept } from '@/api/system/dept';
246 247
 import { listUser, getUser } from '@/api/system/user';
247 248
 import { mapGetters } from 'vuex';
248 249
 import { checkPermi } from '@/utils/permission';
250
+import { listDefinition } from "@/api/flowable/definition";
251
+import { definitionStart, flowXmlAndNode } from "@/api/flowable/definition";
252
+import { todoList, getNextFlowNodeByStart } from "@/api/flowable/todo";
253
+import { Snowflake } from '@/utils/snowFlake.js'
249 254
 
250 255
 export default {
251 256
   computed: {
@@ -455,7 +460,78 @@ export default {
455 460
       } else {
456 461
         return 'success'
457 462
       }
458
-    }
463
+    },
464
+    async handleRegister() {
465
+      let response = await listDefinition({
466
+        pageNum: 1,
467
+        pageSize: 9999,
468
+        name: "项目流转",
469
+        category: "project",
470
+      })
471
+      if (response.data.total == 1) {
472
+        let obj = response.data.records[0]
473
+        this.$confirm("是否发起项目流转?", '提示', {
474
+          confirmButtonText: '确定',
475
+          cancelButtonText: '取消',
476
+          type: 'warning'
477
+        }).then(() => {
478
+          this.handleStartProcess(obj)
479
+        }).catch(() => { });
480
+      }
481
+    },
482
+    handleStartProcess(row) {
483
+      let formId = new Snowflake(1n, 1n, 0n).nextId().toString();
484
+      getNextFlowNodeByStart({ deploymentId: row.deploymentId, variables: { formId: formId } }).then(res => {
485
+        let data = res.data;
486
+        const variables = {};
487
+        const formData = {};
488
+        formData.disabled = true;
489
+        formData.formBtns = false;
490
+        formData.formId = formId
491
+        if (row.id) {
492
+          variables.variables = formData;
493
+          let routePath = this.getRoutePath(row);
494
+          definitionStart(row.id, JSON.stringify(variables)).then(res => {
495
+            this.$modal.msgSuccess(res.msg);
496
+            let procInstanceId = res.data;
497
+            todoList({
498
+              pageNum: 1,
499
+              pageSize: 99999999, processInsId: procInstanceId
500
+            }).then(toDoRes => {
501
+              let records = toDoRes.data.records;
502
+              if (records.length == 1) {
503
+                records = records[0]
504
+              }
505
+              this.$router.push({
506
+                path: routePath,
507
+                query: {
508
+                  procInsId: records.procInsId,
509
+                  executionId: records.executionId,
510
+                  deployId: records.deployId,
511
+                  taskId: records.taskId,
512
+                  taskName: records.taskName,
513
+                  startUser: records.startUserName + '-' + records.startDeptName,
514
+                  formId: formData.formId,
515
+                  procDefName: records.procDefName
516
+                }
517
+              })
518
+            })
519
+          })
520
+        }
521
+      })
522
+    },
523
+    getRoutePath(row) {
524
+      let path;
525
+      for (let p of this.publicData.pathRoute) {
526
+        if (p.name == row.name) {
527
+          path = p.path
528
+          break
529
+        } else {
530
+          path = '/flowable/task/todo/detail/index'
531
+        }
532
+      }
533
+      return path
534
+    },
459 535
   },
460 536
 }
461 537
 </script>

+ 5
- 20
oa-ui/src/views/oa/project/info.vue View File

@@ -160,7 +160,7 @@
160 160
                 <svg-icon slot="prefix" icon-class="dept" />
161 161
                 承担部门
162 162
               </template>
163
-              <div style="display: flex;" class="ml20">
163
+              <div style="display: flex;" class="ml20" v-if="project.undertakingDept">
164 164
                 <div>{{ getDeptNames(project.undertakingDept) }}</div>
165 165
                 <div>
166 166
                   <el-button class="ml20" type="success" plain size="mini" icon="el-icon-refresh"
@@ -183,7 +183,7 @@
183 183
                 <svg-icon slot="prefix" icon-class="user" />
184 184
                 项目负责人
185 185
               </template>
186
-              <div style="display: flex;" class="ml20">
186
+              <div style="display: flex;" class="ml20" v-if="project.projectLeader">
187 187
                 <div>{{ project.projectLeaderUser ? project.projectLeaderUser.nickName : "" }}</div>
188 188
                 <div>
189 189
                   <el-button class="ml20" type="success" plain size="mini" icon="el-icon-refresh"
@@ -517,7 +517,7 @@ export default {
517 517
     this.getUserList();
518 518
     this.getDeviceList();
519 519
     this.getCarList();
520
-    if (this.$route.query) {
520
+    if (this.$route.query.projectId) {
521 521
       this.taskForm.formId = this.$route.query.projectId;
522 522
       let projectId = this.$route.query.projectId;
523 523
       this.getProjectInfo(projectId);
@@ -526,6 +526,8 @@ export default {
526 526
       this.getContractDataList(projectId);
527 527
       this.getProjectProgressList(projectId);
528 528
       this.getProjectChangeList(projectId);
529
+    }else{
530
+      this.goBack();
529 531
     }
530 532
   },
531 533
   data() {
@@ -659,23 +661,6 @@ export default {
659 661
         }
660 662
       })
661 663
     },
662
-    getUserName(userId) {
663
-      if (userId) {
664
-        let arr = this.userList.filter(item => item.userId == userId)
665
-        if (arr.length == 1) {
666
-          let name = arr[0].nickName
667
-          return name
668
-        }
669
-
670
-      }
671
-    },
672
-    getUserListName(userIdArr) {
673
-      if (userIdArr) {
674
-        for (let user of userIdArr) {
675
-
676
-        }
677
-      }
678
-    },
679 664
     getFileName(name) {
680 665
       if (name != null) {
681 666
         let arr = name.split('/')

Loading…
Cancel
Save