소스 검색

新增甲方单位、合作单位选择模块

余思翰 11 달 전
부모
커밋
aebda93197

+ 1
- 1
oa-back/ruoyi-admin/src/main/resources/application.yml 파일 보기

58
   servlet:
58
   servlet:
59
     multipart:
59
     multipart:
60
       # 单个文件大小
60
       # 单个文件大小
61
-      max-file-size: 10MB
61
+      max-file-size: 100MB
62
       # 设置总上传的文件大小
62
       # 设置总上传的文件大小
63
       max-request-size: 20MB
63
       max-request-size: 20MB
64
   # 服务模块
64
   # 服务模块

+ 2
- 2
oa-ui/src/views/flowable/form/budget/budgetInfo.vue 파일 보기

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-04-03 16:28:09
3
  * @Date: 2024-04-03 16:28:09
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-06-13 13:50:24
5
+ * @LastEditTime: 2024-06-18 15:19:08
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="main">
8
   <div class="main">
357
         <td>{{ budgetForm.businessRemark }}</td>
357
         <td>{{ budgetForm.businessRemark }}</td>
358
       </tr>
358
       </tr>
359
       <tr>
359
       <tr>
360
-        <td colspan="3" class="head">成本合计</td>
360
+        <td colspan="3" class="head">预算总额</td>
361
         <td colspan="5" class="head">{{ budgetForm.totalBudget }}</td>
361
         <td colspan="5" class="head">{{ budgetForm.totalBudget }}</td>
362
       </tr>
362
       </tr>
363
       <tr v-if="contract.contractId">
363
       <tr v-if="contract.contractId">

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

1
 <!--
1
 <!--
2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-05-10 15:31:57
3
  * @Date: 2024-05-10 15:31:57
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-06-18 11:15:07
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-06-18 19:11:39
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="app-container">
8
   <div class="app-container">
31
                   :disabled="taskName != '合同拟稿'"></el-input>
31
                   :disabled="taskName != '合同拟稿'"></el-input>
32
               </el-form-item>
32
               </el-form-item>
33
               <el-form-item label="甲方单位" prop="partyAId">
33
               <el-form-item label="甲方单位" prop="partyAId">
34
-                <el-select allow-create v-model="form.partyAId" filterable placeholder="请选择" style="width: 100%;"
35
-                  clearable>
34
+                <el-select v-model="form.partyAId" filterable placeholder="请选择" disabled style="width: 100%;">
36
                   <el-option v-for="item in partyAList" :key="item.value" :label="item.partyAName" :value="item.partyAId"
35
                   <el-option v-for="item in partyAList" :key="item.value" :label="item.partyAName" :value="item.partyAId"
37
                     :disabled="taskName != '合同拟稿'">
36
                     :disabled="taskName != '合同拟稿'">
38
                   </el-option>
37
                   </el-option>
39
                 </el-select>
38
                 </el-select>
39
+                <el-button type="primary" @click="partyAOpen = true" size="mini" v-if="taskName == '合同拟稿'">选择单位</el-button>
40
               </el-form-item>
40
               </el-form-item>
41
               <el-form-item label="合同编码" prop="contractCode">
41
               <el-form-item label="合同编码" prop="contractCode">
42
                 <el-input style="width: 100%;" v-model="form.contractCode" placeholder="请输入合同编码"
42
                 <el-input style="width: 100%;" v-model="form.contractCode" placeholder="请输入合同编码"
431
     <el-dialog title="选择投标项目" :visible.sync="tbOpen" width="70%" append-to-body>
431
     <el-dialog title="选择投标项目" :visible.sync="tbOpen" width="70%" append-to-body>
432
       <choose-tender @choose="confirmTender"></choose-tender>
432
       <choose-tender @choose="confirmTender"></choose-tender>
433
     </el-dialog>
433
     </el-dialog>
434
+    <el-dialog title="选择甲方单位" :visible.sync="partyAOpen" width="70%" append-to-body>
435
+      <choose-party-a @confirm="confirmPartyA"></choose-party-a>
436
+    </el-dialog>
434
   </div>
437
   </div>
435
 </template>
438
 </template>
436
 
439
 
455
 import { listPartyA } from "@/api/oa/partyA/partyA";
458
 import { listPartyA } from "@/api/oa/partyA/partyA";
456
 import FileItem from './fileItem.vue';
459
 import FileItem from './fileItem.vue';
457
 import { mapGetters } from "vuex";
460
 import { mapGetters } from "vuex";
461
+import ChoosePartyA from '../components/choosePartyA.vue';
458
 export default {
462
 export default {
459
   dicts: ['cmc_scale_grade', 'cmc_unit'],
463
   dicts: ['cmc_scale_grade', 'cmc_unit'],
460
   components: {
464
   components: {
461
     flow,
465
     flow,
462
     ChooseProject,
466
     ChooseProject,
463
     ChooseTender,
467
     ChooseTender,
464
-    FileItem
468
+    FileItem,
469
+    ChoosePartyA
465
   },
470
   },
466
   props: {
471
   props: {
467
     taskName: {
472
     taskName: {
514
       // 是否显示弹出层
519
       // 是否显示弹出层
515
       open: false,
520
       open: false,
516
       tbOpen: false,
521
       tbOpen: false,
522
+      partyAOpen:false,
517
       // 表单参数
523
       // 表单参数
518
       form: {
524
       form: {
519
         amount: 0,
525
         amount: 0,
765
         pageSize: 99999999
771
         pageSize: 99999999
766
       }).then(response => {
772
       }).then(response => {
767
         this.partyAList = response.rows;
773
         this.partyAList = response.rows;
774
+        console.log(this.partyAList)
768
       })
775
       })
769
     },
776
     },
770
     // 查询项目列表
777
     // 查询项目列表
1151
       this.isSelect = true
1158
       this.isSelect = true
1152
       this.form.partyAId = val.partyAId
1159
       this.form.partyAId = val.partyAId
1153
     },
1160
     },
1161
+    confirmPartyA(val){
1162
+      this.partyAOpen = false
1163
+      if(val && val.length > 1 ){
1164
+        return this.$message.error('请选择一个甲方单位')
1165
+      }
1166
+      if (val) {
1167
+        this.$set(this.form,'partyAId',val[0].partyAId)
1168
+      }
1169
+    },
1154
     calculatePaymentAmount(payment) {
1170
     calculatePaymentAmount(payment) {
1155
       let amount = (payment.paymentPercentage / 100) * this.form.amount
1171
       let amount = (payment.paymentPercentage / 100) * this.form.amount
1156
       this.$set(payment, 'paymentAmount', Number(amount))
1172
       this.$set(payment, 'paymentAmount', Number(amount))

+ 121
- 134
oa-ui/src/views/flowable/form/business/subContract.vue 파일 보기

1
 <!--
1
 <!--
2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-05-10 15:31:57
3
  * @Date: 2024-05-10 15:31:57
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-06-12 17:22:33
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-06-18 18:41:01
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="app-container">
8
   <div class="app-container">
13
           <el-divider></el-divider>
13
           <el-divider></el-divider>
14
           <el-form-item label="项目编号:" prop="projectId">
14
           <el-form-item label="项目编号:" prop="projectId">
15
             <el-button type="primary" size="mini" @click="open = true" v-if="taskName == '合同拟稿'">选择项目</el-button>
15
             <el-button type="primary" size="mini" @click="open = true" v-if="taskName == '合同拟稿'">选择项目</el-button>
16
-            <!-- <el-select v-model="form.projectId" filterable placeholder="请选择" @change="handleSelectProject"
17
-              :disabled="taskName != '合同拟稿'" clearable>
18
-              <el-option v-for="item in projectList" :key="item.value" :label="item.projectNumber + item.projectName"
19
-                :value="item.projectId">
20
-              </el-option>
21
-            </el-select> -->
22
             <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="1">
16
             <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="1">
23
               <el-descriptions-item label="项目编号" label-class-name="my-label">
17
               <el-descriptions-item label="项目编号" label-class-name="my-label">
24
                 {{ chooseProject.projectNumber }}</el-descriptions-item>
18
                 {{ chooseProject.projectNumber }}</el-descriptions-item>
59
             </el-col>
53
             </el-col>
60
             <el-col :span="8" :xs="24">
54
             <el-col :span="8" :xs="24">
61
               <el-form-item label="分包合同金额(元)" prop="subAmount" label-width="160px">
55
               <el-form-item label="分包合同金额(元)" prop="subAmount" label-width="160px">
62
-                <el-input v-model="form.subAmount" placeholder="请输入分包合同金额" :disabled="taskName != '合同拟稿'" />
56
+                <el-input-number :controls="false" v-model="form.subAmount" placeholder="请输入分包合同金额"
57
+                  :disabled="taskName != '合同拟稿'" />
63
               </el-form-item>
58
               </el-form-item>
64
             </el-col>
59
             </el-col>
65
           </el-row>
60
           </el-row>
66
           <el-row :gutter="20">
61
           <el-row :gutter="20">
67
             <el-col :span="16" :xs="24">
62
             <el-col :span="16" :xs="24">
68
               <el-form-item label="承接单位" prop="partnerId">
63
               <el-form-item label="承接单位" prop="partnerId">
69
-                <el-select allow-create v-model="form.partnerId" filterable placeholder="请选择" style="width: 100%;"
70
-                  :disabled="taskName != '合同拟稿'" clearable @change="handleSelectPartner">
64
+                <el-select allow-create v-model="form.partnerId" multiple filterable placeholder="请选择"
65
+                  style="width: 84%;" disabled clearable>
71
                   <el-option v-for="item in partnerList" :key="item.value" :label="item.partnerName"
66
                   <el-option v-for="item in partnerList" :key="item.value" :label="item.partnerName"
72
                     :value="item.partnerId">
67
                     :value="item.partnerId">
73
                   </el-option>
68
                   </el-option>
74
                 </el-select>
69
                 </el-select>
70
+                <el-button type="primary" @click="partnerOpen = true" size="mini" v-if="taskName == '合同拟稿'">选择单位</el-button>
75
               </el-form-item>
71
               </el-form-item>
76
             </el-col>
72
             </el-col>
77
             <el-col :span="8" :xs="24">
73
             <el-col :span="8" :xs="24">
83
 
79
 
84
           <el-row :gutter="20">
80
           <el-row :gutter="20">
85
             <el-col :span="16" :xs="24">
81
             <el-col :span="16" :xs="24">
86
-          <el-form-item label="合同文件" prop="contractDocument">
87
-            <FileUpload v-if="formTotal == 0"
88
-              :disabled="taskName != '合同拟稿'" ref="contractFile" :limit="1" :filePathName="'分包合同/合同文件'"
89
-              :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="getContractPath">
90
-            </FileUpload>
91
-            <div v-if="formTotal == 1">
92
-              <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.contractDocument}`)">
93
-                {{ getFileName(form.contractDocument) }}
94
-              </el-link>
95
-              <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + form.contractDocument}`"
96
-                :underline="false" target="_blank">
97
-                <span class="el-icon-download">下载文件</span>
98
-              </el-link>
99
-            </div>
100
-          </el-form-item>
82
+              <el-form-item label="合同文件" prop="contractDocument">
83
+                <FileUpload v-if="formTotal == 0" :disabled="taskName != '合同拟稿'" ref="contractFile" :limit="1"
84
+                  :filePathName="'分包合同/合同文件'" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']"
85
+                  @input="getContractPath">
86
+                </FileUpload>
87
+                <div v-if="formTotal == 1">
88
+                  <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.contractDocument}`)">
89
+                    {{ getFileName(form.contractDocument) }}
90
+                  </el-link>
91
+                  <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + form.contractDocument}`"
92
+                    :underline="false" target="_blank">
93
+                    <span class="el-icon-download">下载文件</span>
94
+                  </el-link>
95
+                </div>
96
+              </el-form-item>
101
             </el-col>
97
             </el-col>
102
             <el-col :span="8" :xs="24">
98
             <el-col :span="8" :xs="24">
103
               <el-form-item label="联系电话" prop="telephone">
99
               <el-form-item label="联系电话" prop="telephone">
418
     <el-dialog title="选择项目" :visible.sync="open" width="70%" append-to-body>
414
     <el-dialog title="选择项目" :visible.sync="open" width="70%" append-to-body>
419
       <project-choose @chooseProject="confirmProject"></project-choose>
415
       <project-choose @chooseProject="confirmProject"></project-choose>
420
     </el-dialog>
416
     </el-dialog>
417
+    <el-dialog title="选择合作单位" :visible.sync="partnerOpen" width="70%" append-to-body>
418
+      <choose-partner @confirm="confirmPartners"></choose-partner>
419
+    </el-dialog>
421
   </div>
420
   </div>
422
 </template>
421
 </template>
423
 
422
 
441
 import projectChoose from '../components/chooseProject.vue';
440
 import projectChoose from '../components/chooseProject.vue';
442
 import FileItem from './fileItem.vue';
441
 import FileItem from './fileItem.vue';
443
 import { mapGetters } from "vuex";
442
 import { mapGetters } from "vuex";
443
+import ChoosePartner from '../components/choosePartner.vue';
444
 export default {
444
 export default {
445
   dicts: ['cmc_scale_grade', 'cmc_unit'],
445
   dicts: ['cmc_scale_grade', 'cmc_unit'],
446
   components: {
446
   components: {
447
     flow,
447
     flow,
448
     projectChoose,
448
     projectChoose,
449
-    FileItem
449
+    FileItem,
450
+    ChoosePartner
450
   },
451
   },
451
   props: {
452
   props: {
452
     taskName: {
453
     taskName: {
493
       title: "",
494
       title: "",
494
       // 是否显示弹出层
495
       // 是否显示弹出层
495
       open: false,
496
       open: false,
497
+      partnerOpen: false,
496
       // 查询参数
498
       // 查询参数
497
       queryParams: {
499
       queryParams: {
498
         pageNum: 1,
500
         pageNum: 1,
645
         else {
647
         else {
646
           this.formTotal = 1;
648
           this.formTotal = 1;
647
           this.form = res.data;
649
           this.form = res.data;
650
+          this.form.partnerId = this.form.partnerId ? this.form.partnerId.split(',') : null;
648
           if (this.form.commentType == '0') {
651
           if (this.form.commentType == '0') {
649
             this.commentOpen = false;
652
             this.commentOpen = false;
650
             this.meetingOpen = false;
653
             this.meetingOpen = false;
759
         this.deptList = res.data
762
         this.deptList = res.data
760
       })
763
       })
761
     },
764
     },
762
-    // 选择单位
763
-    handleSelectPartner(val) {
764
-      getPartner(val).then(response => {
765
-        this.$set(this.form, 'contactPerson', response.data.contactPerson);
766
-        this.$set(this.form, 'telephone', response.data.telephone);
767
-      })
768
-    },
769
-    // 选择项目
770
-    handleSelectProject(val) {
771
-      if (val != "" && val != undefined && val != null) {
772
-        getProject(val).then(res => {
773
-          this.chooseProject = res.data;
774
-          this.isSelect = true;
775
-          listProjectContract({ projectId: this.chooseProject.projectId }).then(response => {
776
-            if (response.rows) {
777
-              for (let row of response.rows) {
778
-                getContract(row.contractId).then(r => {
779
-                  this.chooseContract.amount.push(r.data.amount);
780
-                  this.chooseContract.contractCode.push(r.data.contractCode);
781
-                  this.chooseContract.contractNumber.push(r.data.contractNumber);
782
-                  this.amount = this.chooseContract.amount.join('、');
783
-                  this.contractCode = this.chooseContract.contractCode.join('、');
784
-                  this.contractNumber = this.chooseContract.contractNumber.join('、');
785
-                });
786
-              }
787
-            }
788
-            else
789
-              this.chooseContract = {};
790
-          })
791
-        })
792
-      } else {
793
-        this.isSelect = false
794
-      }
795
-    },
796
-    // 取消按钮
797
-    cancel() {
798
-      this.open = false;
799
-      this.reset();
800
-    },
801
     isEmptyObject(obj) {
765
     isEmptyObject(obj) {
802
       for (var key in obj) {
766
       for (var key in obj) {
803
         if (obj.hasOwnProperty(key)) {
767
         if (obj.hasOwnProperty(key)) {
888
         }
852
         }
889
       })
853
       })
890
     },
854
     },
891
-    // 表单重置
892
-    reset() {
893
-      this.form = {
894
-        subContractId: null,
895
-        contractId: null,
896
-        subContractName: null,
897
-        subAmount: null,
898
-        partnerId: null,
899
-        contactPerson: null,
900
-        drafter: null,
901
-        draftTime: null,
902
-        remark: null,
903
-        signDate: null,
904
-        signRemark: null,
905
-        signScan: null,
906
-        commentType: null
907
-      };
908
-      this.resetForm("form");
909
-    },
910
     validateDocument(doc) {
855
     validateDocument(doc) {
911
       // 这里添加你的验证逻辑  
856
       // 这里添加你的验证逻辑  
912
       // 例如,检查tenderId是否为空或者是否符合其他规则  
857
       // 例如,检查tenderId是否为空或者是否符合其他规则  
926
       }
871
       }
927
       this.$refs["form"].validate(valid => {
872
       this.$refs["form"].validate(valid => {
928
         if (valid) {
873
         if (valid) {
874
+          const handleComplete = (taskForm) => {
875
+            complete(taskForm).then(response => {
876
+              this.$modal.msgSuccess(response.msg);
877
+              this.$emit('goBack');
878
+            })
879
+          };
929
           if (this.formTotal != 0) {
880
           if (this.formTotal != 0) {
930
             updateSubContract(this.form).then(response => {
881
             updateSubContract(this.form).then(response => {
931
               this.$modal.msgSuccess("修改成功");
882
               this.$modal.msgSuccess("修改成功");
935
             const params = { taskId: this.taskForm.taskId };
886
             const params = { taskId: this.taskForm.taskId };
936
             getNextFlowNode(params).then(res => {
887
             getNextFlowNode(params).then(res => {
937
               if (this.taskName == '分管审核') {
888
               if (this.taskName == '分管审核') {
938
-                complete(this.taskForm).then(response => {
939
-                  this.$modal.msgSuccess(response.msg);
940
-                  this.$emit('goBack')
941
-                });
889
+                handleComplete(this.taskForm);
942
               }
890
               }
943
               else if (this.taskName == '线上会审') {
891
               else if (this.taskName == '线上会审') {
944
                 for (let comment of this.commentList) {
892
                 for (let comment of this.commentList) {
947
                 getUsersManageLeader({ userId: this.form.drafter }).then(res => {
895
                 getUsersManageLeader({ userId: this.form.drafter }).then(res => {
948
                   let userId = res.data.userId;
896
                   let userId = res.data.userId;
949
                   this.$set(this.taskForm.variables, "approval", userId);
897
                   this.$set(this.taskForm.variables, "approval", userId);
950
-                  complete(this.taskForm).then(response => {
951
-                    this.$modal.msgSuccess(response.msg);
952
-                    this.$emit('goBack')
953
-                  });
898
+                  handleComplete(this.taskForm);
954
                 })
899
                 })
955
               }
900
               }
956
               else if (this.taskName == '会议评审') {
901
               else if (this.taskName == '会议评审') {
962
                 getUsersManageLeader({ userId: this.form.drafter }).then(res => {
907
                 getUsersManageLeader({ userId: this.form.drafter }).then(res => {
963
                   let userId = res.data.userId;
908
                   let userId = res.data.userId;
964
                   this.$set(this.taskForm.variables, "approval", userId);
909
                   this.$set(this.taskForm.variables, "approval", userId);
965
-                  complete(this.taskForm).then(response => {
966
-                    this.$modal.msgSuccess(response.msg);
967
-                    this.$emit('goBack')
968
-                  });
910
+                  handleComplete(this.taskForm);
969
                 })
911
                 })
970
               }
912
               }
971
               else if (this.taskName == '合同签订') {
913
               else if (this.taskName == '合同签订') {
972
-                complete(this.taskForm).then(response => {
973
-                  this.$modal.msgSuccess(response.msg);
974
-                  this.$emit('goBack')
975
-                });
914
+                handleComplete(this.taskForm);
976
               }
915
               }
977
             })
916
             })
978
           } else {
917
           } else {
979
             this.form.subContractId = this.taskForm.formId;
918
             this.form.subContractId = this.taskForm.formId;
919
+            if (this.form.partnerId)
920
+              this.form.partnerId = this.form.partnerId.join(',')
980
             addSubContract(this.form).then(response => {
921
             addSubContract(this.form).then(response => {
981
               this.$modal.msgSuccess("新增成功");
922
               this.$modal.msgSuccess("新增成功");
982
               this.open = false;
923
               this.open = false;
983
               this.getList();
924
               this.getList();
984
             });
925
             });
926
+            const subContractId = this.form.subContractId;
985
             for (let work of this.workList) {
927
             for (let work of this.workList) {
986
-              work.contractId = this.form.subContractId
928
+              work.contractId = subContractId;
987
               addContractWork(work);
929
               addContractWork(work);
988
             }
930
             }
989
             for (let payment of this.paymentList) {
931
             for (let payment of this.paymentList) {
990
-              payment.contractId = this.form.subContractId
932
+              payment.contractId = subContractId;
991
               addContractPayment(payment);
933
               addContractPayment(payment);
992
             }
934
             }
993
             const params = { taskId: this.taskForm.taskId };
935
             const params = { taskId: this.taskForm.taskId };
997
                   let userId = res.data.userId;
939
                   let userId = res.data.userId;
998
                   this.$set(this.taskForm.variables, "approval", userId);
940
                   this.$set(this.taskForm.variables, "approval", userId);
999
                   this.$set(this.taskForm.variables, "commentType", '0');
941
                   this.$set(this.taskForm.variables, "commentType", '0');
1000
-                  complete(this.taskForm).then(response => {
1001
-                    this.$modal.msgSuccess(response.msg);
1002
-                    this.$emit('goBack')
1003
-                  });
942
+                  handleComplete(this.taskForm);
1004
                 })
943
                 })
1005
               }
944
               }
1006
               else if (this.commentOpen == true && this.meetingOpen == false) {
945
               else if (this.commentOpen == true && this.meetingOpen == false) {
1012
                 }
951
                 }
1013
                 this.$set(this.taskForm.variables, "approvalList", approvalList);
952
                 this.$set(this.taskForm.variables, "approvalList", approvalList);
1014
                 this.$set(this.taskForm.variables, "commentType", '2');
953
                 this.$set(this.taskForm.variables, "commentType", '2');
1015
-                complete(this.taskForm).then(response => {
1016
-                  this.$modal.msgSuccess(response.msg);
1017
-                  this.$emit('goBack')
1018
-                });
954
+                handleComplete(this.taskForm);
1019
               }
955
               }
1020
               else if (this.commentOpen == false && this.meetingOpen == true) {
956
               else if (this.commentOpen == false && this.meetingOpen == true) {
1021
                 this.meetingForm.contractId = this.form.subContractId;
957
                 this.meetingForm.contractId = this.form.subContractId;
1025
                 addContractMeeting(formData);
961
                 addContractMeeting(formData);
1026
                 this.$set(this.taskForm.variables, "approval", this.meetingForm.hostId);
962
                 this.$set(this.taskForm.variables, "approval", this.meetingForm.hostId);
1027
                 this.$set(this.taskForm.variables, "commentType", '1');
963
                 this.$set(this.taskForm.variables, "commentType", '1');
1028
-                complete(this.taskForm).then(response => {
1029
-                  this.$modal.msgSuccess(response.msg);
1030
-                  this.$emit('goBack')
1031
-                });
964
+                handleComplete(this.taskForm);
1032
               }
965
               }
1033
             })
966
             })
1034
           }
967
           }
1039
       this.open = false
972
       this.open = false
1040
       if (val.length > 1) {
973
       if (val.length > 1) {
1041
         this.$message.error('请选择一个项目');
974
         this.$message.error('请选择一个项目');
1042
-        return
1043
-      } else if (val.length == 1) {
1044
-        this.chooseProject = val[0]
1045
-        this.isSelect = true
1046
-        this.form.projectId = val[0].projectId
1047
-        listProjectContract({ projectId: this.form.projectId }).then(response => {
975
+        return;
976
+      }
977
+
978
+      if (val.length === 1) {
979
+        this.chooseProject = val[0];
980
+        this.isSelect = true;
981
+        this.form.projectId = val[0].projectId;
982
+
983
+        this.fetchContracts(this.form.projectId)
984
+          .then(contractData => {
985
+            this.processContractData(contractData);
986
+          })
987
+          .catch(error => {
988
+            console.error('获取合同列表时出错:', error);
989
+            this.$message.error('获取合同列表时出错');
990
+          });
991
+      }
992
+    },
993
+    // 确定合作单位
994
+    confirmPartners(val) {
995
+      this.partnerOpen = false
996
+      if (val) {
997
+        let ids = []
998
+        let contactPerson = []
999
+        let telephone = []
1000
+        val.map(item => {
1001
+          ids.push(item.partnerId)
1002
+          if (item.contactPerson)
1003
+            contactPerson.push(item.contactPerson)
1004
+          if (item.telephone)
1005
+            telephone.push(item.telephone)
1006
+        })
1007
+        this.$set(this.form, 'contactPerson', contactPerson.join(','));
1008
+        this.$set(this.form, 'telephone', telephone.join(','));
1009
+        this.form.partnerId = ids
1010
+      }
1011
+    },
1012
+    // 获取合同详情
1013
+    fetchContracts(projectId) {
1014
+      return new Promise((resolve, reject) => {
1015
+        listProjectContract({ projectId: projectId }).then(response => {
1048
           if (response.rows) {
1016
           if (response.rows) {
1049
-            for (let row of response.rows) {
1050
-              getContract(row.contractId).then(r => {
1051
-                this.chooseContract.amount.push(r.data.amount);
1052
-                this.chooseContract.contractCode.push(r.data.contractCode);
1053
-                this.chooseContract.contractNumber.push(r.data.contractNumber);
1054
-                this.amount = this.chooseContract.amount.join('、');
1055
-                this.contractCode = this.chooseContract.contractCode.join('、');
1056
-                this.contractNumber = this.chooseContract.contractNumber.join('、');
1017
+            const contractIds = response.rows.map(row => row.contractId);
1018
+            Promise.all(contractIds.map(contractId => getContract(contractId)))
1019
+              .then(contractData => {
1020
+                resolve(contractData);
1021
+              })
1022
+              .catch(error => {
1023
+                reject(error);
1057
               });
1024
               });
1058
-            }
1025
+          } else {
1026
+            resolve([]); // 如果没有合同,返回一个空数组  
1059
           }
1027
           }
1060
-          else
1061
-            this.chooseContract = {};
1062
-        })
1063
-      }
1028
+        }).catch(error => {
1029
+          reject(error);
1030
+        });
1031
+      });
1032
+    },
1033
+    // 处理合同编码、合同编号的格式
1034
+    processContractData(contractData) {
1035
+      this.chooseContract = {
1036
+        amount: [],
1037
+        contractCode: [],
1038
+        contractNumber: []
1039
+      };
1040
+      contractData.forEach(contract => {
1041
+        if (contract.data) {
1042
+          this.chooseContract.amount.push(contract.data.amount);
1043
+          this.chooseContract.contractCode.push(contract.data.contractCode);
1044
+          this.chooseContract.contractNumber.push(contract.data.contractNumber);
1045
+        }
1046
+      });
1047
+
1048
+      this.amount = this.chooseContract.amount.join('、');
1049
+      this.contractCode = this.chooseContract.contractCode.join('、');
1050
+      this.contractNumber = this.chooseContract.contractNumber.join('、');
1064
     },
1051
     },
1065
     getFileName(name) {
1052
     getFileName(name) {
1066
       if (name) {
1053
       if (name) {

+ 228
- 0
oa-ui/src/views/flowable/form/components/choosePartner.vue 파일 보기

1
+<template>
2
+  <div>
3
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
4
+      <el-form-item label="单位名称" prop="partnerName">
5
+        <el-input v-model="queryParams.partnerName" placeholder="请输入单位名称" clearable @keyup.enter.native="handleQuery" />
6
+      </el-form-item>
7
+      <el-form-item label="资质等级" prop="qualification">
8
+        <el-input v-model="queryParams.qualification" placeholder="请输入资质等级" clearable
9
+          @keyup.enter.native="handleQuery" />
10
+      </el-form-item>
11
+      <el-form-item>
12
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
13
+      </el-form-item>
14
+    </el-form>
15
+    <el-row :gutter="10" class="mb8">
16
+      <el-col :span="1.5">
17
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
18
+          v-hasPermi="['oa:partner:add']">新增</el-button>
19
+      </el-col>
20
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
21
+    </el-row>
22
+    <el-table ref="partner" v-loading="loading" :data="partnerList" :row-key="getRowKeys"
23
+      @selection-change="handleSelectionChange">
24
+      <el-table-column type="selection" width="55" align="center" />
25
+      <el-table-column label="单位名称" align="center" prop="partnerName" width="200px" />
26
+      <el-table-column label="联系人" align="center" prop="contactPerson" />
27
+      <el-table-column label="联系电话" align="center" prop="telephone" />
28
+      <el-table-column label="资质等级" align="center" prop="qualification" />
29
+      <el-table-column label="内业规模" align="center" prop="inWorker" />
30
+      <el-table-column label="外业规模" align="center" prop="outWorker" />
31
+      <el-table-column label="擅长业务方向" align="center" prop="strength" />
32
+      <el-table-column label="履约能力评价" align="center" prop="fulfill" />
33
+    </el-table>
34
+    <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
35
+      @pagination="getList" />
36
+    <div>
37
+      已选单位:<el-tag v-for="item in partners" style="margin: 5px;" :key="item.partnerId">{{ item.partnerName }}</el-tag>
38
+    </div>
39
+    <div style="text-align: center;margin-top: 20px;">
40
+      <el-button type="primary" @click="confirmChoose">确认选择</el-button>
41
+      <el-button @click="clearChoose">清空选择</el-button>
42
+    </div>
43
+    <el-dialog :title="title" :visible.sync="open" width="50%" append-to-body>
44
+      <el-form ref="form" :model="form" :rules="rules" label-width="90px">
45
+        <el-row>
46
+          <el-col :span="12" :gutter="20">
47
+            <el-form-item label="单位名称" prop="partnerName">
48
+              <el-input v-model="form.partnerName" placeholder="请输入单位名称" />
49
+            </el-form-item>
50
+            <el-form-item label="主要联系人" prop="contactPerson">
51
+              <el-input v-model="form.contactPerson" placeholder="请输入联系人" />
52
+            </el-form-item>
53
+            <el-form-item label="联系电话" prop="telephone">
54
+              <el-input v-model="form.telephone" placeholder="请输入联系电话" />
55
+            </el-form-item>
56
+          </el-col>
57
+          <el-col :span="12">
58
+            <el-form-item label="资质等级" prop="qualification">
59
+              <el-input v-model="form.qualification" placeholder="请输入资质等级" />
60
+            </el-form-item>
61
+            <el-form-item label="内业规模" prop="inWorker">
62
+              <el-input v-model="form.inWorker" placeholder="请输入内业规模" />
63
+            </el-form-item>
64
+            <el-form-item label="外业规模" prop="outWorker">
65
+              <el-input v-model="form.outWorker" placeholder="请输入外业规模" />
66
+            </el-form-item>
67
+          </el-col>
68
+        </el-row>
69
+        <el-form-item label="主要技术装备" prop="equipment" label-width="120px">
70
+          <el-input v-model="form.equipment" placeholder="请输入主要技术装备" />
71
+        </el-form-item>
72
+        <el-form-item label="擅长业务方向" prop="strength" label-width="120px">
73
+          <el-input v-model="form.strength" placeholder="请输入擅长业务方向" />
74
+        </el-form-item>
75
+        <el-form-item label="履约能力评价" prop="fulfill" label-width="120px">
76
+          <el-input v-model="form.fulfill" placeholder="请输入履约能力评价" />
77
+        </el-form-item>
78
+        <el-form-item label="备注说明" prop="remark" label-width="120px">
79
+          <el-input v-model="form.remark" type="textarea" :autosize="{ minRows: 4, maxRows: 10 }"
80
+            placeholder="请输入备注说明" />
81
+        </el-form-item>
82
+      </el-form>
83
+      <div slot="footer" class="dialog-footer">
84
+        <el-button type="primary" @click="submitForm">确 定</el-button>
85
+        <el-button @click="cancel">取 消</el-button>
86
+      </div>
87
+    </el-dialog>
88
+  </div>
89
+</template>
90
+
91
+<script>
92
+import { listPartner, getPartner, delPartner, addPartner, updatePartner } from "@/api/oa/partner/partner";
93
+
94
+export default {
95
+  name: "Partner",
96
+  data() {
97
+    return {
98
+      // 遮罩层
99
+      loading: true,
100
+      // 选中数组
101
+      ids: [],
102
+      // 非单个禁用
103
+      single: true,
104
+      // 非多个禁用
105
+      multiple: true,
106
+      // 显示搜索条件
107
+      showSearch: true,
108
+      // 总条数
109
+      total: 0,
110
+      // cmc合作单位表格数据
111
+      partnerList: [],
112
+      // 弹出层标题
113
+      title: "",
114
+      // 是否显示弹出层
115
+      open: false,
116
+      // 查询参数
117
+      queryParams: {
118
+        pageNum: 1,
119
+        pageSize: 10,
120
+        partnerName: null,
121
+        contactPerson: null,
122
+        telephone: null,
123
+        qualification: null,
124
+        inWorker: null,
125
+        outWorker: null,
126
+        equipment: null,
127
+        strength: null,
128
+        fulfill: null,
129
+      },
130
+      // 表单参数
131
+      form: {},
132
+      // 表单校验
133
+      rules: {
134
+        partnerName: [
135
+          { required: true, message: '请输入单位名称', trigger: 'blur' },
136
+        ]
137
+      },
138
+      partners: []
139
+    };
140
+  },
141
+  created() {
142
+    this.getList();
143
+  },
144
+  methods: {
145
+    /** 查询cmc合作单位列表 */
146
+    getList() {
147
+      this.loading = true;
148
+      listPartner(this.queryParams).then(response => {
149
+        this.partnerList = response.rows;
150
+        this.total = response.total;
151
+        this.loading = false;
152
+      });
153
+    },
154
+    // 取消按钮
155
+    cancel() {
156
+      this.open = false;
157
+      this.reset();
158
+    },
159
+    // 表单重置
160
+    reset() {
161
+      this.form = {
162
+        partnerId: null,
163
+        partnerName: null,
164
+        contactPerson: null,
165
+        telephone: null,
166
+        qualification: null,
167
+        inWorker: null,
168
+        outWorker: null,
169
+        equipment: null,
170
+        strength: null,
171
+        fulfill: null,
172
+        remark: null
173
+      };
174
+      this.resetForm("form");
175
+    },
176
+    /** 搜索按钮操作 */
177
+    handleQuery() {
178
+      this.queryParams.pageNum = 1;
179
+      this.getList();
180
+    },
181
+    /** 新增按钮操作 */
182
+    handleAdd() {
183
+      this.reset();
184
+      this.open = true;
185
+      this.title = "添加合作单位";
186
+    },
187
+    handleView(row) {
188
+
189
+    },
190
+    /** 提交按钮 */
191
+    submitForm() {
192
+      this.$refs["form"].validate(valid => {
193
+        if (valid) {
194
+          if (this.form.partnerId != null) {
195
+            updatePartner(this.form).then(response => {
196
+              this.$modal.msgSuccess("修改成功");
197
+              this.open = false;
198
+              this.getList();
199
+            });
200
+          } else {
201
+            addPartner(this.form).then(response => {
202
+              this.$modal.msgSuccess("新增成功");
203
+              this.open = false;
204
+              this.getList();
205
+            });
206
+          }
207
+        }
208
+      });
209
+    },
210
+    getRowKeys(row) {
211
+      return row.partnerName;
212
+    },
213
+    // 多选框选中数据
214
+    handleSelectionChange(selection) {
215
+      this.partners = selection
216
+    },
217
+    // 清空选择
218
+    clearChoose() {
219
+      this.$refs.partner.clearSelection();
220
+    },
221
+    confirmChoose() {
222
+      this.$emit('confirm', this.partners)
223
+    },
224
+  }
225
+};
226
+</script>
227
+
228
+<style lang="scss" scoped></style>

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

1
+<!--
2
+ * @Author: ysh
3
+ * @Date: 2024-06-18 17:38:50
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-06-18 19:00:46
6
+-->
7
+<template>
8
+  <div>
9
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
10
+      <el-form-item label="单位名称" prop="partyAName">
11
+        <el-input v-model="queryParams.partyAName" placeholder="请输入单位名称" clearable @keyup.enter.native="handleQuery" />
12
+      </el-form-item>
13
+      <el-form-item>
14
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
15
+      </el-form-item>
16
+    </el-form>
17
+    <el-row :gutter="10" class="mb8">
18
+      <el-col :span="1.5">
19
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
20
+      </el-col>
21
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
22
+    </el-row>
23
+
24
+    <el-table ref="partyA" v-loading="loading" :data="partyAList" :row-key="getRowKeys"
25
+      @selection-change="handleSelectionChange">
26
+      <el-table-column type="selection" width="55" align="center" />
27
+      <el-table-column label="序号" align="center" prop="partyAId" />
28
+      <el-table-column label="单位名称" align="center" prop="partyAName" width="300px" />
29
+      <el-table-column label="联系人" align="center" prop="aPerson" />
30
+      <el-table-column label="联系电话" align="center" prop="aPhone" />
31
+      <el-table-column label="备注说明" align="center" prop="remark" />
32
+    </el-table>
33
+
34
+    <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
35
+      @pagination="getList" />
36
+    <div>
37
+      已选单位:<el-tag v-for="item in choosePartyA" style="margin: 5px;" :key="item.partyAId">{{ item.partyAName }}</el-tag>
38
+    </div>
39
+    <div style="text-align: center;margin-top: 20px;">
40
+      <el-button type="primary" @click="confirmChoose">确认选择</el-button>
41
+      <el-button @click="clearChoose">清空选择</el-button>
42
+    </div>
43
+    <!-- 添加或修改cmc业主单位对话框 -->
44
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
45
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
46
+        <el-form-item label="单位名称" prop="partyAName">
47
+          <el-input v-model="form.partyAName" placeholder="请输入单位名称" />
48
+        </el-form-item>
49
+        <el-form-item label="联系人" prop="aPerson">
50
+          <el-input v-model="form.aPerson" placeholder="请输入联系人" />
51
+        </el-form-item>
52
+        <el-form-item label="联系电话" prop="aPhone">
53
+          <el-input v-model="form.aPhone" placeholder="请输入联系电话" />
54
+        </el-form-item>
55
+        <el-form-item label="备注说明" prop="remark">
56
+          <el-input v-model="form.remark" placeholder="请输入备注说明" />
57
+        </el-form-item>
58
+      </el-form>
59
+      <div slot="footer" class="dialog-footer">
60
+        <el-button type="primary" @click="submitForm">确 定</el-button>
61
+        <el-button @click="cancel">取 消</el-button>
62
+      </div>
63
+    </el-dialog>
64
+  </div>
65
+</template>
66
+
67
+
68
+<script>
69
+import { listPartyA, getPartyA, delPartyA, addPartyA, updatePartyA } from "@/api/oa/partyA/partyA";
70
+
71
+export default {
72
+  name: "PartyA",
73
+  data() {
74
+    return {
75
+      // 遮罩层
76
+      loading: true,
77
+      // 选中数组
78
+      ids: [],
79
+      // 非单个禁用
80
+      single: true,
81
+      // 非多个禁用
82
+      multiple: true,
83
+      // 显示搜索条件
84
+      showSearch: true,
85
+      // 总条数
86
+      total: 0,
87
+      // cmc业主单位表格数据
88
+      partyAList: [],
89
+      // 弹出层标题
90
+      title: "",
91
+      // 是否显示弹出层
92
+      open: false,
93
+      // 查询参数
94
+      queryParams: {
95
+        pageNum: 1,
96
+        pageSize: 10,
97
+        partyAName: null,
98
+        aPerson: null,
99
+        aPhone: null,
100
+      },
101
+      // 表单参数
102
+      form: {},
103
+      // 表单校验
104
+      rules: {
105
+        partyAName: [
106
+          { required: true, message: '请输入单位名称', trigger: 'blur' },
107
+        ]
108
+      },
109
+      choosePartyA: []
110
+    };
111
+  },
112
+  created() {
113
+    this.getList();
114
+  },
115
+  methods: {
116
+    /** 查询cmc业主单位列表 */
117
+    getList() {
118
+      this.loading = true;
119
+      listPartyA(this.queryParams).then(response => {
120
+        this.partyAList = response.rows;
121
+        this.total = response.total;
122
+        this.loading = false;
123
+      });
124
+    },
125
+    // 取消按钮
126
+    cancel() {
127
+      this.open = false;
128
+      this.reset();
129
+    },
130
+    // 表单重置
131
+    reset() {
132
+      this.form = {
133
+        partyAId: null,
134
+        partyAName: null,
135
+        aPerson: null,
136
+        aPhone: null,
137
+        remark: null
138
+      };
139
+      this.resetForm("form");
140
+    },
141
+    /** 搜索按钮操作 */
142
+    handleQuery() {
143
+      this.queryParams.pageNum = 1;
144
+      this.getList();
145
+    },
146
+    /** 新增按钮操作 */
147
+    handleAdd() {
148
+      this.reset();
149
+      this.open = true;
150
+      this.title = "添加甲方单位";
151
+    },
152
+    /** 修改按钮操作 */
153
+    handleUpdate(row) {
154
+      this.reset();
155
+      const partyAId = row.partyAId || this.ids
156
+      getPartyA(partyAId).then(response => {
157
+        this.form = response.data;
158
+        this.open = true;
159
+        this.title = "修改甲方单位";
160
+      });
161
+    },
162
+    /** 提交按钮 */
163
+    submitForm() {
164
+      this.$refs["form"].validate(valid => {
165
+        if (valid) {
166
+          if (this.form.partyAId != null) {
167
+            updatePartyA(this.form).then(response => {
168
+              this.$modal.msgSuccess("修改成功");
169
+              this.open = false;
170
+              this.getList();
171
+            });
172
+          } else {
173
+            addPartyA(this.form).then(response => {
174
+              this.$modal.msgSuccess("新增成功");
175
+              this.open = false;
176
+              this.getList();
177
+            });
178
+          }
179
+        }
180
+      });
181
+    },
182
+    getRowKeys(row) {
183
+      return row.partyAId;
184
+    },
185
+    // 多选框选中数据
186
+    handleSelectionChange(selection) {
187
+      this.choosePartyA = selection
188
+    },
189
+    // 清空选择
190
+    clearChoose() {
191
+      this.$refs.partyA.clearSelection();
192
+    },
193
+    confirmChoose() {
194
+      this.$emit('confirm', this.choosePartyA)
195
+    },
196
+  }
197
+};
198
+</script>
199
+<style lang="scss" scoped></style>

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

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-06-14 15:37:51
5
+ * @LastEditTime: 2024-06-18 14:52:40
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="project-wrapper">
8
   <div class="project-wrapper">
108
           </el-link>
108
           </el-link>
109
         </div>
109
         </div>
110
       </el-form-item>
110
       </el-form-item>
111
+      <el-form-item label="资料提交要求:" prop="projectRequest">
112
+        <el-input v-model="addForm.projectRequest" type="textarea" :autosize="{ minRows: 4, maxRows: 10}"></el-input>
113
+      </el-form-item>
111
       <el-form-item label="备注:" prop="remark">
114
       <el-form-item label="备注:" prop="remark">
112
-        <el-input v-model="addForm.remark" type="textarea" rows="3"></el-input>
115
+        <el-input v-model="addForm.remark" type="textarea" :autosize="{ minRows: 4, maxRows: 10}"></el-input>
113
       </el-form-item>
116
       </el-form-item>
114
       <el-row>
117
       <el-row>
115
         <el-col :span="6" :xs="24" :offset="12">
118
         <el-col :span="6" :xs="24" :offset="12">

+ 53
- 10
oa-ui/src/views/oa/budget/index.vue 파일 보기

1
 <template>
1
 <template>
2
   <div class="app-container">
2
   <div class="app-container">
3
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
3
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
4
-      <el-form-item label="项目id" prop="projectId">
5
-        <el-input v-model="queryParams.projectId" placeholder="请输入项目id" clearable @keyup.enter.native="handleQuery" />
4
+      <el-form-item label="项目编号" prop="projectId">
5
+        <el-select v-model="queryParams.projectId" clearable filterable remote reserve-keyword placeholder="请输入项目编号"
6
+          :remote-method="remoteMethod" :loading="loading" style="width: 400px;">
7
+          <el-option v-for="project in projectList" :key="project.projectId"
8
+            :label="project.projectNumber + '-' + project.projectName" :value="project.projectId">
9
+          </el-option>
10
+        </el-select>
11
+      </el-form-item>
12
+      <el-form-item label="编制人" prop="compiler">
13
+        <el-select v-model="queryParams.compiler" filterable clearable>
14
+          <el-option :key="item.userId" v-for="item of $store.state.user.userList" :label="item.nickName"
15
+            :value="item.userId"></el-option>
16
+        </el-select>
6
       </el-form-item>
17
       </el-form-item>
7
       <el-form-item>
18
       <el-form-item>
8
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
19
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
10
       </el-form-item>
21
       </el-form-item>
11
     </el-form>
22
     </el-form>
12
 
23
 
13
-    <el-row :gutter="10" class="mb8">
24
+    <!-- <el-row :gutter="10" class="mb8">
14
       <el-col :span="1.5">
25
       <el-col :span="1.5">
15
         <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
26
         <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
16
           v-hasPermi="['oa:budget:add']">新增</el-button>
27
           v-hasPermi="['oa:budget:add']">新增</el-button>
28
           v-hasPermi="['oa:budget:export']">导出</el-button>
39
           v-hasPermi="['oa:budget:export']">导出</el-button>
29
       </el-col>
40
       </el-col>
30
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
41
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
31
-    </el-row>
42
+    </el-row> -->
32
 
43
 
33
     <el-table v-loading="loading" :data="budgetList" @selection-change="handleSelectionChange">
44
     <el-table v-loading="loading" :data="budgetList" @selection-change="handleSelectionChange">
34
-      <el-table-column label="项目id" align="center" prop="projectId" />
45
+      <el-table-column label="序号" align="center" type="index" />
46
+      <el-table-column label="项目编号" align="center" prop="project.projectNumber" />
47
+      <el-table-column label="项目名称" align="center" prop="project.projectName" />
35
       <el-table-column label="固定成本" align="center" prop="fixCost" />
48
       <el-table-column label="固定成本" align="center" prop="fixCost" />
36
-      <el-table-column label="直接成本" align="center" prop="directExpense" />
49
+      <el-table-column label="直接成本" align="center" prop="settleExpense" />
50
+      <el-table-column label="其他成本" align="center" prop="directExpense">
51
+        <template slot-scope="scope">
52
+          {{ (Number(scope.row.directExpense) - Number(scope.row.settleExpense)).toFixed(2) }}
53
+        </template>
54
+      </el-table-column>
37
       <el-table-column label="预算总额" align="center" prop="totalBudget" />
55
       <el-table-column label="预算总额" align="center" prop="totalBudget" />
38
       <el-table-column label="编制人" align="center" prop="compiler">
56
       <el-table-column label="编制人" align="center" prop="compiler">
39
         <template slot-scope="scope">
57
         <template slot-scope="scope">
47
       </el-table-column>
65
       </el-table-column>
48
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
66
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
49
         <template slot-scope="scope">
67
         <template slot-scope="scope">
50
-          <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
68
+          <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)"
69
+            v-hasPermi="['oa:budget:view']">查看</el-button>
70
+          <!-- <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
51
             v-hasPermi="['oa:budget:edit']">修改</el-button>
71
             v-hasPermi="['oa:budget:edit']">修改</el-button>
52
           <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
72
           <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
53
-            v-hasPermi="['oa:budget:remove']">删除</el-button>
73
+            v-hasPermi="['oa:budget:remove']">删除</el-button> -->
54
         </template>
74
         </template>
55
       </el-table-column>
75
       </el-table-column>
56
     </el-table>
76
     </el-table>
127
         <el-button @click="cancel">取 消</el-button>
147
         <el-button @click="cancel">取 消</el-button>
128
       </div>
148
       </div>
129
     </el-dialog>
149
     </el-dialog>
150
+
151
+    <el-dialog :title="title" :visible.sync="infoOpen" width="70%" append-to-body>
152
+      <budget-info :taskForm="taskForm" :taskName="''"></budget-info>
153
+    </el-dialog>
130
   </div>
154
   </div>
131
 </template>
155
 </template>
132
 
156
 
133
 <script>
157
 <script>
134
 import { listBudget, getBudget, delBudget, addBudget, updateBudget } from "@/api/oa/budget/budget";
158
 import { listBudget, getBudget, delBudget, addBudget, updateBudget } from "@/api/oa/budget/budget";
135
-
159
+import { listProject } from '@/api/oa/project/project';
160
+import budgetInfo from '../../flowable/form/budget/budgetInfo.vue';
136
 export default {
161
 export default {
137
   name: "Budget",
162
   name: "Budget",
163
+  components: { budgetInfo, },
138
   data() {
164
   data() {
139
     return {
165
     return {
140
       // 遮罩层
166
       // 遮罩层
155
       title: "",
181
       title: "",
156
       // 是否显示弹出层
182
       // 是否显示弹出层
157
       open: false,
183
       open: false,
184
+      infoOpen: false,
158
       // 查询参数
185
       // 查询参数
159
       queryParams: {
186
       queryParams: {
160
         pageNum: 1,
187
         pageNum: 1,
184
       form: {},
211
       form: {},
185
       // 表单校验
212
       // 表单校验
186
       rules: {
213
       rules: {
187
-      }
214
+      },
215
+      taskForm: {},
216
+      projectList: []
188
     };
217
     };
189
   },
218
   },
190
   created() {
219
   created() {
200
         this.loading = false;
229
         this.loading = false;
201
       });
230
       });
202
     },
231
     },
232
+    remoteMethod(val) {
233
+      console.log(val);
234
+      listProject({
235
+        pageNum: 1,
236
+        pageSize: 20, 
237
+        projectNumber: val
238
+      }).then(res => {
239
+        this.projectList = res.rows;
240
+      })
241
+    },
203
     // 取消按钮
242
     // 取消按钮
204
     cancel() {
243
     cancel() {
205
       this.open = false;
244
       this.open = false;
255
       this.open = true;
294
       this.open = true;
256
       this.title = "添加cmc预算管理";
295
       this.title = "添加cmc预算管理";
257
     },
296
     },
297
+    handleView(row) {
298
+      this.taskForm.formId = row.projectId;
299
+      this.infoOpen = true;
300
+    },
258
     /** 修改按钮操作 */
301
     /** 修改按钮操作 */
259
     handleUpdate(row) {
302
     handleUpdate(row) {
260
       this.reset();
303
       this.reset();

+ 3
- 3
oa-ui/src/views/oa/contract/index.vue 파일 보기

1
 <!--
1
 <!--
2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-03-18 09:05:41
3
  * @Date: 2024-03-18 09:05:41
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-06-18 10:40:58
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-06-18 17:34:15
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="app-container">
8
   <div class="app-container">
60
     <el-table v-loading="loading" border :data="contractList" @selection-change="handleSelectionChange">
60
     <el-table v-loading="loading" border :data="contractList" @selection-change="handleSelectionChange">
61
       <el-table-column type="selection" width="55" align="center" />
61
       <el-table-column type="selection" width="55" align="center" />
62
       <!-- <el-table-column label="合同id" align="center" prop="contractId" /> -->
62
       <!-- <el-table-column label="合同id" align="center" prop="contractId" /> -->
63
-      <el-table-column label="合同名称" align="center" prop="contractName" />
63
+      <el-table-column label="合同名称" align="center" prop="contractName" width="220px" />
64
       <el-table-column label="合同编码" align="center" prop="contractCode" />
64
       <el-table-column label="合同编码" align="center" prop="contractCode" />
65
       <el-table-column label="合同编号" align="center" prop="contractNumber" />
65
       <el-table-column label="合同编号" align="center" prop="contractNumber" />
66
       <el-table-column label="合同金额" align="center" prop="amount" />
66
       <el-table-column label="合同金额" align="center" prop="amount" />

+ 2
- 2
oa-ui/src/views/oa/partner/index.vue 파일 보기

210
     handleAdd() {
210
     handleAdd() {
211
       this.reset();
211
       this.reset();
212
       this.open = true;
212
       this.open = true;
213
-      this.title = "添加cmc合作单位";
213
+      this.title = "添加合作单位";
214
     },
214
     },
215
     handleView(row){
215
     handleView(row){
216
 
216
 
222
       getPartner(partnerId).then(response => {
222
       getPartner(partnerId).then(response => {
223
         this.form = response.data;
223
         this.form = response.data;
224
         this.open = true;
224
         this.open = true;
225
-        this.title = "修改cmc合作单位";
225
+        this.title = "修改合作单位";
226
       });
226
       });
227
     },
227
     },
228
     /** 提交按钮 */
228
     /** 提交按钮 */

Loading…
취소
저장