Browse Source

修改细节

余思翰 1 year ago
parent
commit
208532b73d

+ 17
- 6
oa-ui/src/utils/deleteResource.js View File

1
 /*
1
 /*
2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-06-13 17:07:59
3
  * @Date: 2024-06-13 17:07:59
4
- * @LastEditors: 
5
- * @LastEditTime: 2024-06-14 09:55:50
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-06-19 16:43:47
6
  */
6
  */
7
 import request from '@/utils/request'
7
 import request from '@/utils/request'
8
 
8
 
11
     procDefName: '承接合同评审',
11
     procDefName: '承接合同评审',
12
     apiUrl: [
12
     apiUrl: [
13
       '/oa/contract/:id',
13
       '/oa/contract/:id',
14
+      '/oa/contractWork/:id',
14
       '/oa/contractComment/:id',
15
       '/oa/contractComment/:id',
15
       '/oa/contractMeeting/:id',
16
       '/oa/contractMeeting/:id',
16
       '/oa/contractPayment/:id',
17
       '/oa/contractPayment/:id',
18
+      '/oa/projectContract/:id',
17
     ]
19
     ]
18
   },
20
   },
19
   {
21
   {
25
     ]
27
     ]
26
   },
28
   },
27
   {
29
   {
28
-    procDefName: '项目结算',
30
+    procDefName: '分包合同评审',
29
     apiUrl: [
31
     apiUrl: [
30
-      '/oa/settle/:id',
31
-      '/oa/settleSummary/:id',
32
-      '/oa/settleWork/:id',
32
+      '/oa/subContract/:id',
33
+      '/oa/contractWork/:id',
34
+      '/oa/contractComment/:id',
35
+      '/oa/contractMeeting/:id',
36
+      '/oa/contractPayment/:id',
37
+      '/oa/projectSubcontract/:id',
38
+    ]
39
+  },
40
+  {
41
+    procDefName: '用车审批',
42
+    apiUrl: [
43
+      '/oa/carApproval/:id',
33
     ]
44
     ]
34
   }
45
   }
35
 ]
46
 ]

+ 0
- 1
oa-ui/src/views/flowable/form/budget/components/choosePeople.vue View File

121
       this.chooseUser = val
121
       this.chooseUser = val
122
     },
122
     },
123
     handleCurrentChange(val) {
123
     handleCurrentChange(val) {
124
-      console.log(val);
125
       if (!this.multiple) {
124
       if (!this.multiple) {
126
         this.chooseUser = val
125
         this.chooseUser = val
127
       }
126
       }

+ 33
- 23
oa-ui/src/views/flowable/form/business/contractForm.vue View File

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-05-10 15:31:57
3
  * @Date: 2024-05-10 15:31:57
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-06-18 19:11:39
5
+ * @LastEditTime: 2024-06-19 15:55:48
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="app-container">
8
   <div class="app-container">
14
           <el-row :gutter="20">
14
           <el-row :gutter="20">
15
             <el-col :span="12" :xs="24">
15
             <el-col :span="12" :xs="24">
16
               <el-form-item label="投标项目名称:" prop="tenderId">
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
                 <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="3" direction="vertical">
19
                 <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="3" direction="vertical">
19
                   <el-descriptions-item label="投标项目名称" label-class-name="my-label" :span="3">{{ chooseTender.projectName
20
                   <el-descriptions-item label="投标项目名称" label-class-name="my-label" :span="3">{{ chooseTender.projectName
20
-                  }}</el-descriptions-item>
21
+                    }}</el-descriptions-item>
21
                   <el-descriptions-item label="项目来源" label-class-name="my-label">{{ getProjectSource(chooseTender)
22
                   <el-descriptions-item label="项目来源" label-class-name="my-label">{{ getProjectSource(chooseTender)
22
-                  }}</el-descriptions-item>
23
+                    }}</el-descriptions-item>
23
                   <el-descriptions-item label="联系人" label-class-name="my-label">{{ chooseTender.aPerson
24
                   <el-descriptions-item label="联系人" label-class-name="my-label">{{ chooseTender.aPerson
24
-                  }}</el-descriptions-item>
25
+                    }}</el-descriptions-item>
25
                   <el-descriptions-item label="联系电话" label-class-name="my-label">{{ chooseTender.aPhone
26
                   <el-descriptions-item label="联系电话" label-class-name="my-label">{{ chooseTender.aPhone
26
-                  }}</el-descriptions-item>
27
+                    }}</el-descriptions-item>
27
                 </el-descriptions>
28
                 </el-descriptions>
28
               </el-form-item>
29
               </el-form-item>
29
               <el-form-item label="合同名称" prop="contractName">
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
               </el-form-item>
33
               </el-form-item>
33
               <el-form-item label="甲方单位" prop="partyAId">
34
               <el-form-item label="甲方单位" prop="partyAId">
34
                 <el-select v-model="form.partyAId" filterable placeholder="请选择" disabled style="width: 100%;">
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
                   </el-option>
38
                   </el-option>
38
                 </el-select>
39
                 </el-select>
39
-                <el-button type="primary" @click="partyAOpen = true" size="mini" v-if="taskName == '合同拟稿'">选择单位</el-button>
40
+                <el-button type="primary" @click="partyAOpen = true" size="mini"
41
+                  v-if="taskName == '合同拟稿'">选择单位</el-button>
40
               </el-form-item>
42
               </el-form-item>
41
               <el-form-item label="合同编码" prop="contractCode">
43
               <el-form-item label="合同编码" prop="contractCode">
42
                 <el-input style="width: 100%;" v-model="form.contractCode" placeholder="请输入合同编码"
44
                 <el-input style="width: 100%;" v-model="form.contractCode" placeholder="请输入合同编码"
47
                   :disabled="taskName != '合同拟稿'"></el-input>
49
                   :disabled="taskName != '合同拟稿'"></el-input>
48
               </el-form-item>
50
               </el-form-item>
49
               <el-form-item label="合同金额" prop="amount">
51
               <el-form-item label="合同金额" prop="amount">
50
-                <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 != '合同拟稿'">
51
                   <template slot="append">元</template>
54
                   <template slot="append">元</template>
52
                 </el-input>
55
                 </el-input>
53
               </el-form-item>
56
               </el-form-item>
168
                     clearable :disabled="taskName != '合同拟稿'"></el-input-number>
171
                     clearable :disabled="taskName != '合同拟稿'"></el-input-number>
169
                 </td>
172
                 </td>
170
                 <td>
173
                 <td>
171
-                  <el-date-picker style="width: 140px" v-model="payment.paymentTime" value-format="yyyy-MM-dd" type="date"
172
-                    placeholder="选择日期" :disabled="taskName != '合同拟稿'">
174
+                  <el-date-picker style="width: 140px" v-model="payment.paymentTime" value-format="yyyy-MM-dd"
175
+                    type="date" placeholder="选择日期" :disabled="taskName != '合同拟稿'">
173
                   </el-date-picker>
176
                   </el-date-picker>
174
                 </td>
177
                 </td>
175
                 <td>
178
                 <td>
371
           </el-row>
374
           </el-row>
372
           <el-divider></el-divider>
375
           <el-divider></el-divider>
373
           <el-form-item label="签订日期" prop="signDate">
376
           <el-form-item label="签订日期" prop="signDate">
374
-            <el-date-picker clearable v-model="form.signDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择签订日期"
375
-              :disabled="taskName != '合同签订'">
377
+            <el-date-picker clearable v-model="form.signDate" type="date" value-format="yyyy-MM-dd"
378
+              placeholder="请选择签订日期" :disabled="taskName != '合同签订'">
376
             </el-date-picker>
379
             </el-date-picker>
377
           </el-form-item>
380
           </el-form-item>
378
           <el-form-item label="签订备注" prop="signRemark">
381
           <el-form-item label="签订备注" prop="signRemark">
447
 import { listContractPayment, addContractPayment, delContractPayment } from "@/api/oa/contract/contractPayment";
450
 import { listContractPayment, addContractPayment, delContractPayment } from "@/api/oa/contract/contractPayment";
448
 import { listContractComment, addContractComment, updateContractComment } from "@/api/oa/contract/contractComment";
451
 import { listContractComment, addContractComment, updateContractComment } from "@/api/oa/contract/contractComment";
449
 import { getContractMeeting, addContractMeeting, updateContractMeeting } from "@/api/oa/contract/contractMeeting";
452
 import { getContractMeeting, addContractMeeting, updateContractMeeting } from "@/api/oa/contract/contractMeeting";
450
-import { listProjectContract, addProjectContract } from "@/api/oa/contract/projectContract";
453
+import { listProjectContract, addProjectContract, delProjectContract } from "@/api/oa/contract/projectContract";
451
 import { complete, rejectTask, returnList, returnTask, getNextFlowNode, delegate, flowTaskForm, } from "@/api/flowable/todo";
454
 import { complete, rejectTask, returnList, returnTask, getNextFlowNode, delegate, flowTaskForm, } from "@/api/flowable/todo";
452
 import { listTender, getTender } from "@/api/oa/tender/tender";
455
 import { listTender, getTender } from "@/api/oa/tender/tender";
453
 import { getUsersDeptLeader, getUsersManageLeader, getUsersDeptLeaderByDept } from '@/api/system/post.js'
456
 import { getUsersDeptLeader, getUsersManageLeader, getUsersDeptLeaderByDept } from '@/api/system/post.js'
458
 import { listPartyA } from "@/api/oa/partyA/partyA";
461
 import { listPartyA } from "@/api/oa/partyA/partyA";
459
 import FileItem from './fileItem.vue';
462
 import FileItem from './fileItem.vue';
460
 import { mapGetters } from "vuex";
463
 import { mapGetters } from "vuex";
461
-import ChoosePartyA from '../components/choosePartyA.vue';
464
+import ChoosePartyA from '@/views/flowable/form/components/choosePartyA.vue';
462
 export default {
465
 export default {
463
   dicts: ['cmc_scale_grade', 'cmc_unit'],
466
   dicts: ['cmc_scale_grade', 'cmc_unit'],
464
   components: {
467
   components: {
519
       // 是否显示弹出层
522
       // 是否显示弹出层
520
       open: false,
523
       open: false,
521
       tbOpen: false,
524
       tbOpen: false,
522
-      partyAOpen:false,
525
+      partyAOpen: false,
523
       // 表单参数
526
       // 表单参数
524
       form: {
527
       form: {
525
         amount: 0,
528
         amount: 0,
771
         pageSize: 99999999
774
         pageSize: 99999999
772
       }).then(response => {
775
       }).then(response => {
773
         this.partyAList = response.rows;
776
         this.partyAList = response.rows;
774
-        console.log(this.partyAList)
775
       })
777
       })
776
     },
778
     },
777
     // 查询项目列表
779
     // 查询项目列表
984
           if (this.formTotal != 0) {
986
           if (this.formTotal != 0) {
985
             const params = { taskId: this.taskForm.taskId };
987
             const params = { taskId: this.taskForm.taskId };
986
             this.updateContractData();
988
             this.updateContractData();
989
+            this.updateRelatedProject();
987
             if (this.taskName == '合同拟稿') {
990
             if (this.taskName == '合同拟稿') {
988
               this.firstGetNextFlow();
991
               this.firstGetNextFlow();
989
               return
992
               return
1075
         })
1078
         })
1076
       });
1079
       });
1077
     },
1080
     },
1081
+    updateRelatedProject() {
1082
+      delProjectContract(this.taskForm.formId).then(() => {
1083
+        for (let projectId of this.projectContractForm.projectIds) {
1084
+          addProjectContract({ projectId: projectId, contractId: this.taskForm.formId });
1085
+        }
1086
+      })
1087
+    },
1078
     firstGetNextFlow() {
1088
     firstGetNextFlow() {
1079
       const params = { taskId: this.taskForm.taskId };
1089
       const params = { taskId: this.taskForm.taskId };
1080
       getNextFlowNode(params).then(res => {
1090
       getNextFlowNode(params).then(res => {
1158
       this.isSelect = true
1168
       this.isSelect = true
1159
       this.form.partyAId = val.partyAId
1169
       this.form.partyAId = val.partyAId
1160
     },
1170
     },
1161
-    confirmPartyA(val){
1171
+    confirmPartyA(val) {
1162
       this.partyAOpen = false
1172
       this.partyAOpen = false
1163
-      if(val && val.length > 1 ){
1173
+      if (val && val.length > 1) {
1164
         return this.$message.error('请选择一个甲方单位')
1174
         return this.$message.error('请选择一个甲方单位')
1165
       }
1175
       }
1166
       if (val) {
1176
       if (val) {
1167
-        this.$set(this.form,'partyAId',val[0].partyAId)
1177
+        this.$set(this.form, 'partyAId', val[0].partyAId)
1168
       }
1178
       }
1169
     },
1179
     },
1170
     calculatePaymentAmount(payment) {
1180
     calculatePaymentAmount(payment) {

+ 144
- 106
oa-ui/src/views/flowable/form/business/subContract.vue View File

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-05-10 15:31:57
3
  * @Date: 2024-05-10 15:31:57
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-06-18 18:41:01
5
+ * @LastEditTime: 2024-06-19 16:18:08
6
+-->
7
+<!--
8
+ * @Author: ysh
9
+ * @Date: 2024-05-10 15:31:57
10
+ * @LastEditors: Please set LastEditors
11
+ * @LastEditTime: 2024-06-19 10:26:51
6
 -->
12
 -->
7
 <template>
13
 <template>
8
   <div class="app-container">
14
   <div class="app-container">
13
           <el-divider></el-divider>
19
           <el-divider></el-divider>
14
           <el-form-item label="项目编号:" prop="projectId">
20
           <el-form-item label="项目编号:" prop="projectId">
15
             <el-button type="primary" size="mini" @click="open = true" v-if="taskName == '合同拟稿'">选择项目</el-button>
21
             <el-button type="primary" size="mini" @click="open = true" v-if="taskName == '合同拟稿'">选择项目</el-button>
16
-            <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="1">
22
+            <!-- <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="1">
17
               <el-descriptions-item label="项目编号" label-class-name="my-label">
23
               <el-descriptions-item label="项目编号" label-class-name="my-label">
18
                 {{ chooseProject.projectNumber }}</el-descriptions-item>
24
                 {{ chooseProject.projectNumber }}</el-descriptions-item>
19
               <el-descriptions-item label="项目名称" label-class-name="my-label">{{ chooseProject.projectName
25
               <el-descriptions-item label="项目名称" label-class-name="my-label">{{ chooseProject.projectName
25
               </el-descriptions-item>
31
               </el-descriptions-item>
26
               <el-descriptions-item label="项目类型" label-class-name="my-label">{{ chooseProject.projectType
32
               <el-descriptions-item label="项目类型" label-class-name="my-label">{{ chooseProject.projectType
27
                 }}</el-descriptions-item>
33
                 }}</el-descriptions-item>
28
-            </el-descriptions>
34
+            </el-descriptions> -->
35
+            <el-table :data="chooseProjectList" border v-if="isSelect">
36
+              <el-table-column type="index" width="50" label="序号" />
37
+              <el-table-column label="项目编号" align="center" key="projectNumber" prop="projectNumber" />
38
+              <el-table-column label="项目名称" align="center" key="projectName" prop="projectName" />
39
+              <el-table-column label="项目负责人" align="center" key="projectLeaderName" prop="projectLeaderUser.nickName" />
40
+              <el-table-column label="主合同编码" align="center" key="contractCode" prop="contractCode" />
41
+              <el-table-column label="主合同编号" align="center" key="contractNumber" prop="contractNumber" />
42
+              <el-table-column label="主合同金额" align="center" key="amount" prop="amount" />
43
+            </el-table>
29
           </el-form-item>
44
           </el-form-item>
30
-          <el-row :gutter="20">
31
-            <el-col :span="8" :xs="24">
32
-              <el-form-item label="主合同金额" prop="amount">
33
-                <el-input v-model="amount" :disabled="true" />
34
-              </el-form-item>
35
-            </el-col>
36
-            <el-col :span="8" :xs="24">
37
-              <el-form-item label="合同编码" prop="contractCode">
38
-                <el-input v-model="contractCode" :disabled="true" />
39
-              </el-form-item>
40
-            </el-col>
41
-            <el-col :span="8" :xs="24">
42
-              <el-form-item label="合同编号" prop="contractNumber">
43
-                <el-input v-model="contractNumber" :disabled="true" />
44
-              </el-form-item>
45
-            </el-col>
46
-          </el-row>
45
+
47
           <el-divider></el-divider>
46
           <el-divider></el-divider>
48
           <el-row :gutter="20">
47
           <el-row :gutter="20">
49
             <el-col :span="16" :xs="24">
48
             <el-col :span="16" :xs="24">
67
                     :value="item.partnerId">
66
                     :value="item.partnerId">
68
                   </el-option>
67
                   </el-option>
69
                 </el-select>
68
                 </el-select>
70
-                <el-button type="primary" @click="partnerOpen = true" size="mini" v-if="taskName == '合同拟稿'">选择单位</el-button>
69
+                <el-button type="primary" @click="partnerOpen = true" size="mini"
70
+                  v-if="taskName == '合同拟稿'">选择单位</el-button>
71
               </el-form-item>
71
               </el-form-item>
72
             </el-col>
72
             </el-col>
73
             <el-col :span="8" :xs="24">
73
             <el-col :span="8" :xs="24">
426
 import { listDept } from '@/api/system/dept'
426
 import { listDept } from '@/api/system/dept'
427
 import { listUser } from '@/api/system/user'
427
 import { listUser } from '@/api/system/user'
428
 import { listPartner, getPartner } from "@/api/oa/partner/partner";
428
 import { listPartner, getPartner } from "@/api/oa/partner/partner";
429
-import { listContractWork, addContractWork } from "@/api/oa/contract/contractWork";
430
-import { listContractPayment, addContractPayment } from "@/api/oa/contract/contractPayment";
431
-import { listContractComment, addContractComment, updateContractComment } from "@/api/oa/contract/contractComment";
432
-import { getContractMeeting, addContractMeeting, updateContractMeeting } from "@/api/oa/contract/contractMeeting";
429
+import { listContractWork, addContractWork, delContractWork } from "@/api/oa/contract/contractWork";
430
+import { listContractPayment, addContractPayment, delContractPayment } from "@/api/oa/contract/contractPayment";
431
+import { listContractComment, addContractComment, updateContractComment, delContractComment } from "@/api/oa/contract/contractComment";
432
+import { getContractMeeting, addContractMeeting, updateContractMeeting, delContractMeeting } from "@/api/oa/contract/contractMeeting";
433
 import { listProjectContract } from "@/api/oa/contract/projectContract";
433
 import { listProjectContract } from "@/api/oa/contract/projectContract";
434
 import { getContract } from "@/api/oa/contract/contract";
434
 import { getContract } from "@/api/oa/contract/contract";
435
 import { listSubContract, getSubContract, delSubContract, addSubContract, updateSubContract } from "@/api/oa/contract/subContract";
435
 import { listSubContract, getSubContract, delSubContract, addSubContract, updateSubContract } from "@/api/oa/contract/subContract";
436
+import { listProjectSubcontract, addProjectSubcontract, delProjectSubcontract } from '@/api/oa/contract/projectSubcontract'
436
 import { getUsersDeptLeader, getUsersManageLeader, getUsersDeptLeaderByDept } from '@/api/system/post.js'
437
 import { getUsersDeptLeader, getUsersManageLeader, getUsersDeptLeaderByDept } from '@/api/system/post.js'
437
 import flow from '@/views/flowable/task/todo/detail/flow'
438
 import flow from '@/views/flowable/task/todo/detail/flow'
438
 import { flowXmlAndNode } from "@/api/flowable/definition";
439
 import { flowXmlAndNode } from "@/api/flowable/definition";
523
       projectList: [],
524
       projectList: [],
524
       partnerList: [],
525
       partnerList: [],
525
       chooseProject: {},
526
       chooseProject: {},
527
+      chooseProjectList: [],
526
       chooseContract: {
528
       chooseContract: {
527
         contractCode: [],
529
         contractCode: [],
528
         contractNumber: [],
530
         contractNumber: [],
660
             this.commentOpen = true;
662
             this.commentOpen = true;
661
             this.meetingOpen = false;
663
             this.meetingOpen = false;
662
           }
664
           }
663
-          if (res.data.projectId) {
664
-            getProject(res.data.projectId).then(res => {
665
-              this.chooseProject = res.data;
666
-              this.isSelect = true
667
-              listProjectContract({ projectId: this.chooseProject.projectId }).then(response => {
668
-                if (response.rows) {
669
-                  for (let row of response.rows) {
670
-                    getContract(row.contractId).then(r => {
671
-                      this.chooseContract.amount.push(r.data.amount);
672
-                      this.chooseContract.contractCode.push(r.data.contractCode);
673
-                      this.chooseContract.contractNumber.push(r.data.contractNumber);
674
-                      this.amount = this.chooseContract.amount.join('、');
675
-                      this.contractCode = this.chooseContract.contractCode.join('、');
676
-                      this.contractNumber = this.chooseContract.contractNumber.join('、');
677
-                    });
665
+          listProjectSubcontract({ subContractId: res.data.subContractId }).then(res => {
666
+            if (res.rows) {
667
+              res.rows.forEach(project => {
668
+                getProject(project.projectId).then(res => {
669
+                  if (res.data) {
670
+                    this.chooseProjectList.push(res.data);
671
+                    this.confirmProject(this.chooseProjectList)
678
                   }
672
                   }
679
-                }
680
-                else
681
-                  this.chooseContract = {};
673
+                })
682
               })
674
               })
683
-            })
684
-          }
675
+            }
676
+          })
685
           listContractWork({ contractId: this.taskForm.formId }).then(res => {
677
           listContractWork({ contractId: this.taskForm.formId }).then(res => {
686
             if (res.rows)
678
             if (res.rows)
687
               this.workList = res.rows;
679
               this.workList = res.rows;
863
     },
855
     },
864
     /** 提交按钮 */
856
     /** 提交按钮 */
865
     submitForm() {
857
     submitForm() {
866
-      let isProjectValid = this.validateManual(this.form.projectId);
858
+      let isProjectValid = this.validateManual(this.chooseProjectList);
867
       let isDocValid = this.validateDocument(this.form.contractDocument)
859
       let isDocValid = this.validateDocument(this.form.contractDocument)
868
       if (!(isProjectValid || isDocValid)) {
860
       if (!(isProjectValid || isDocValid)) {
869
         // 无效,阻止提交  
861
         // 无效,阻止提交  
878
             })
870
             })
879
           };
871
           };
880
           if (this.formTotal != 0) {
872
           if (this.formTotal != 0) {
873
+            if (this.form.partnerId)
874
+              this.form.partnerId = this.form.partnerId.join(',')
881
             updateSubContract(this.form).then(response => {
875
             updateSubContract(this.form).then(response => {
882
               this.$modal.msgSuccess("修改成功");
876
               this.$modal.msgSuccess("修改成功");
883
               this.open = false;
877
               this.open = false;
884
               this.getList();
878
               this.getList();
879
+              this.updateChooseProjectList()
885
             });
880
             });
886
             const params = { taskId: this.taskForm.taskId };
881
             const params = { taskId: this.taskForm.taskId };
887
             getNextFlowNode(params).then(res => {
882
             getNextFlowNode(params).then(res => {
888
               if (this.taskName == '分管审核') {
883
               if (this.taskName == '分管审核') {
889
                 handleComplete(this.taskForm);
884
                 handleComplete(this.taskForm);
890
               }
885
               }
886
+              else if (this.taskName == '合同拟稿') {
887
+                this.contractDraftSubmit(handleComplete)
888
+              }
891
               else if (this.taskName == '线上会审') {
889
               else if (this.taskName == '线上会审') {
892
                 for (let comment of this.commentList) {
890
                 for (let comment of this.commentList) {
893
                   updateContractComment(comment);
891
                   updateContractComment(comment);
924
               this.getList();
922
               this.getList();
925
             });
923
             });
926
             const subContractId = this.form.subContractId;
924
             const subContractId = this.form.subContractId;
925
+            this.chooseProjectList.forEach(item => {
926
+              addProjectSubcontract({ subContractId: subContractId, projectId: item.projectId })
927
+            })
927
             for (let work of this.workList) {
928
             for (let work of this.workList) {
928
               work.contractId = subContractId;
929
               work.contractId = subContractId;
929
               addContractWork(work);
930
               addContractWork(work);
934
             }
935
             }
935
             const params = { taskId: this.taskForm.taskId };
936
             const params = { taskId: this.taskForm.taskId };
936
             getNextFlowNode(params).then(res => {
937
             getNextFlowNode(params).then(res => {
937
-              if (this.commentOpen == false && this.meetingOpen == false) {
938
-                getUsersManageLeader({ userId: this.$store.getters.userId }).then(res => {
939
-                  let userId = res.data.userId;
940
-                  this.$set(this.taskForm.variables, "approval", userId);
941
-                  this.$set(this.taskForm.variables, "commentType", '0');
942
-                  handleComplete(this.taskForm);
943
-                })
944
-              }
945
-              else if (this.commentOpen == true && this.meetingOpen == false) {
946
-                let approvalList = [];
947
-                for (let comment of this.commentList) {
948
-                  comment.contractId = this.form.subContractId
949
-                  addContractComment(comment);
950
-                  approvalList.push(comment.userId)
951
-                }
952
-                this.$set(this.taskForm.variables, "approvalList", approvalList);
953
-                this.$set(this.taskForm.variables, "commentType", '2');
954
-                handleComplete(this.taskForm);
955
-              }
956
-              else if (this.commentOpen == false && this.meetingOpen == true) {
957
-                this.meetingForm.contractId = this.form.subContractId;
958
-                let formData = new FormData();
959
-                let jsonForm = JSON.stringify(this.meetingForm);
960
-                formData.append("form", jsonForm);
961
-                addContractMeeting(formData);
962
-                this.$set(this.taskForm.variables, "approval", this.meetingForm.hostId);
963
-                this.$set(this.taskForm.variables, "commentType", '1');
964
-                handleComplete(this.taskForm);
965
-              }
938
+              this.contractDraftSubmit(handleComplete)
966
             })
939
             })
940
+
967
           }
941
           }
968
         }
942
         }
969
       });
943
       });
970
     },
944
     },
971
-    confirmProject(val) {
972
-      this.open = false
973
-      if (val.length > 1) {
974
-        this.$message.error('请选择一个项目');
975
-        return;
945
+    // 合同拟稿提交事件
946
+    contractDraftSubmit(handleComplete) {
947
+      if (this.commentOpen == false && this.meetingOpen == false) {
948
+        getUsersManageLeader({ userId: this.$store.getters.userId }).then(res => {
949
+          let userId = res.data.userId;
950
+          this.$set(this.taskForm.variables, "approval", userId);
951
+          this.$set(this.taskForm.variables, "commentType", '0');
952
+          handleComplete(this.taskForm);
953
+        })
976
       }
954
       }
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
-          });
955
+      else if (this.commentOpen == true && this.meetingOpen == false) {
956
+        let approvalList = [];
957
+        for (let comment of this.commentList) {
958
+          comment.contractId = this.form.subContractId
959
+          addContractComment(comment);
960
+          approvalList.push(comment.userId)
961
+        }
962
+        this.$set(this.taskForm.variables, "approvalList", approvalList);
963
+        this.$set(this.taskForm.variables, "commentType", '2');
964
+        handleComplete(this.taskForm);
965
+      }
966
+      else if (this.commentOpen == false && this.meetingOpen == true) {
967
+        this.meetingForm.contractId = this.form.subContractId;
968
+        let formData = new FormData();
969
+        let jsonForm = JSON.stringify(this.meetingForm);
970
+        formData.append("form", jsonForm);
971
+        addContractMeeting(formData);
972
+        this.$set(this.taskForm.variables, "approval", this.meetingForm.hostId);
973
+        this.$set(this.taskForm.variables, "commentType", '1');
974
+        handleComplete(this.taskForm);
991
       }
975
       }
992
     },
976
     },
977
+    updateChooseProjectList() {
978
+      const subContractId = this.taskForm.formId
979
+      delProjectSubcontract(subContractId).then(() => {
980
+        this.chooseProjectList.forEach(item => {
981
+          addProjectSubcontract({ subContractId: subContractId, projectId: item.projectId })
982
+        })
983
+      })
984
+      delContractWork(subContractId).then(() => {
985
+        for (let work of this.workList) {
986
+          work.contractId = subContractId;
987
+          addContractWork(work);
988
+        }
989
+      })
990
+      delContractPayment(subContractId).then(() => {
991
+        for (let payment of this.paymentList) {
992
+          payment.contractId = subContractId;
993
+          addContractPayment(payment);
994
+        }
995
+      })
996
+    },
993
     // 确定合作单位
997
     // 确定合作单位
994
     confirmPartners(val) {
998
     confirmPartners(val) {
995
       this.partnerOpen = false
999
       this.partnerOpen = false
1009
         this.form.partnerId = ids
1013
         this.form.partnerId = ids
1010
       }
1014
       }
1011
     },
1015
     },
1016
+    confirmProject(val) {
1017
+      this.open = false
1018
+      // if (val.length > 1) {
1019
+      //   this.$message.error('请选择一个项目');
1020
+      //   return;
1021
+      // }
1022
+      // if (val.length === 1) {
1023
+      //   this.chooseProject = val[0];
1024
+      //   this.isSelect = true;
1025
+      //   this.form.projectId = val[0].projectId;
1026
+
1027
+      //   this.fetchContracts(this.form.projectId)
1028
+      //     .then(contractData => {
1029
+      //       this.processContractData(contractData);
1030
+      //     })
1031
+      //     .catch(error => {
1032
+      //       console.error('获取合同列表时出错:', error);
1033
+      //       this.$message.error('获取合同列表时出错');
1034
+      //     });
1035
+      // }
1036
+      if (val) {
1037
+        this.chooseProjectList = val;
1038
+        this.isSelect = true
1039
+        val.map(item => {
1040
+          this.fetchContracts(item.projectId)
1041
+            .then(contractData => {
1042
+              let [contractCode, contractNumber, amount] = this.processContractData(contractData);
1043
+              this.$set(item, 'contractCode', contractCode)
1044
+              this.$set(item, 'contractNumber', contractNumber)
1045
+              this.$set(item, 'amount', amount)
1046
+            })
1047
+        })
1048
+      }
1049
+    },
1012
     // 获取合同详情
1050
     // 获取合同详情
1013
     fetchContracts(projectId) {
1051
     fetchContracts(projectId) {
1014
       return new Promise((resolve, reject) => {
1052
       return new Promise((resolve, reject) => {
1032
     },
1070
     },
1033
     // 处理合同编码、合同编号的格式
1071
     // 处理合同编码、合同编号的格式
1034
     processContractData(contractData) {
1072
     processContractData(contractData) {
1035
-      this.chooseContract = {
1073
+      let chooseContract = {
1036
         amount: [],
1074
         amount: [],
1037
         contractCode: [],
1075
         contractCode: [],
1038
         contractNumber: []
1076
         contractNumber: []
1039
-      };
1077
+      }
1040
       contractData.forEach(contract => {
1078
       contractData.forEach(contract => {
1041
         if (contract.data) {
1079
         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);
1080
+          chooseContract.amount.push(contract.data.amount);
1081
+          chooseContract.contractCode.push(contract.data.contractCode);
1082
+          chooseContract.contractNumber.push(contract.data.contractNumber);
1045
         }
1083
         }
1046
       });
1084
       });
1047
-
1048
-      this.amount = this.chooseContract.amount.join('、');
1049
-      this.contractCode = this.chooseContract.contractCode.join('、');
1050
-      this.contractNumber = this.chooseContract.contractNumber.join('、');
1085
+      let amount = chooseContract.amount.join('、');
1086
+      let contractCode = chooseContract.contractCode.join('、');
1087
+      let contractNumber = chooseContract.contractNumber.join('、');
1088
+      return [contractCode, contractNumber, amount]
1051
     },
1089
     },
1052
     getFileName(name) {
1090
     getFileName(name) {
1053
       if (name) {
1091
       if (name) {
1090
     validateManual(name) {
1128
     validateManual(name) {
1091
       // 这里添加你的验证逻辑  
1129
       // 这里添加你的验证逻辑  
1092
       // 例如,检查tenderId是否为空或者是否符合其他规则  
1130
       // 例如,检查tenderId是否为空或者是否符合其他规则  
1093
-      if (!name || name.trim() === '') {
1094
-        this.$message.error('请选择一个有效项目');
1131
+      if (name && name.length == 0) {
1132
+        this.$message.error('请选择至少一个有效项目');
1095
         return false;
1133
         return false;
1096
       }
1134
       }
1097
       return true;
1135
       return true;
1098
     },
1136
     },
1099
     calculatePaymentAmount(payment) {
1137
     calculatePaymentAmount(payment) {
1100
       let amount = (payment.paymentPercentage / 100) * this.form.subAmount
1138
       let amount = (payment.paymentPercentage / 100) * this.form.subAmount
1101
-      this.$set(payment, 'paymentAmount', Number(amount))
1139
+      this.$set(payment, 'paymentAmount', Number(amount).toFixed(2))
1102
     },
1140
     },
1103
   }
1141
   }
1104
 };
1142
 };

+ 1
- 2
oa-ui/src/views/flowable/form/components/choosePartner.vue View File

14
     </el-form>
14
     </el-form>
15
     <el-row :gutter="10" class="mb8">
15
     <el-row :gutter="10" class="mb8">
16
       <el-col :span="1.5">
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>
17
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
19
       </el-col>
18
       </el-col>
20
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
19
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
21
     </el-row>
20
     </el-row>

+ 1
- 1
oa-ui/src/views/flowable/form/components/chooseProject.vue View File

29
       <el-table-column label="项目名称" align="center" key="projectName" prop="projectName" :show-overflow-tooltip="true" />
29
       <el-table-column label="项目名称" align="center" key="projectName" prop="projectName" :show-overflow-tooltip="true" />
30
       <el-table-column label="项目负责人" align="center" key="projectLeader" prop="projectLeaderUser.nickName"
30
       <el-table-column label="项目负责人" align="center" key="projectLeader" prop="projectLeaderUser.nickName"
31
         :show-overflow-tooltip="true" />
31
         :show-overflow-tooltip="true" />
32
-      <el-table-column label="甲方公司" align="center" key="partyA" prop="partyA.partyName" :show-overflow-tooltip="true" />
32
+      <el-table-column label="甲方单位" align="center" key="partyA" prop="partyA.partyName" :show-overflow-tooltip="true" />
33
       <el-table-column label="项目类型" align="center" key="projectType" prop="projectType" />
33
       <el-table-column label="项目类型" align="center" key="projectType" prop="projectType" />
34
     </el-table>
34
     </el-table>
35
     <div style="text-align: right;" class="mt20 mr20">
35
     <div style="text-align: right;" class="mt20 mr20">

+ 4
- 1
oa-ui/src/views/flowable/form/oa/carForm.vue View File

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-02-29 11:44:28
3
  * @Date: 2024-02-29 11:44:28
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-06-13 14:19:03
5
+ * @LastEditTime: 2024-06-19 16:36:07
6
 -->
6
 -->
7
 
7
 
8
 <template>
8
 <template>
500
     // 获取下一个审批人
500
     // 获取下一个审批人
501
     getNextFlowNodeApproval() {
501
     getNextFlowNodeApproval() {
502
       if (this.taskName == '用车申请') {
502
       if (this.taskName == '用车申请') {
503
+        if (this.dept < 102 && this.dept != 0)
504
+          this.dept = 102
503
         this.$set(this.taskForm.variables, "dept", this.dept);
505
         this.$set(this.taskForm.variables, "dept", this.dept);
504
         if (this.dept == 102) {
506
         if (this.dept == 102) {
505
           getUserByPost({ postName: '总经理' }).then(result => {
507
           getUserByPost({ postName: '总经理' }).then(result => {
705
   width: 100px;
707
   width: 100px;
706
   background: #E1F3D8;
708
   background: #E1F3D8;
707
 }
709
 }
710
+
708
 ::v-deep .el-textarea.is-disabled .el-textarea__inner {
711
 ::v-deep .el-textarea.is-disabled .el-textarea__inner {
709
   color: #121212 !important;
712
   color: #121212 !important;
710
 }
713
 }

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

329
         partyAName: partyAName
329
         partyAName: partyAName
330
       }).then(response => {
330
       }).then(response => {
331
         this.partyAList = response.rows;
331
         this.partyAList = response.rows;
332
-        console.log(this.addForm, this.partyAList);
333
       })
332
       })
334
     },
333
     },
335
     cancel() {
334
     cancel() {

+ 34
- 28
oa-ui/src/views/flowable/form/projectProcess/technicalTab.vue View File

1
 <!--
1
 <!--
2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-04-19 15:32:00
3
  * @Date: 2024-04-19 15:32:00
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-06-19 15:56:42
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-06-19 17:36:00
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="app-container">
8
   <div class="app-container">
164
   },
164
   },
165
   watch: {
165
   watch: {
166
     'taskForm.formId'(newval) {
166
     'taskForm.formId'(newval) {
167
-      this.getUserList();
168
       this.initForm();
167
       this.initForm();
168
+      this.getUserList();
169
     },
169
     },
170
     projectNumber(newval) {
170
     projectNumber(newval) {
171
       this.$set(this.form, "projectNumber", newval);
171
       this.$set(this.form, "projectNumber", newval);
190
   methods: {
190
   methods: {
191
     /** 查询cmc技术交底列表 */
191
     /** 查询cmc技术交底列表 */
192
     initForm() {
192
     initForm() {
193
-      getTechnical(this.taskForm.formId).then((res) => {
194
-        if (res.data) {
193
+      this.loadTechnicalAndProjectData();
194
+    },
195
+    async loadTechnicalAndProjectData() {
196
+      try {
197
+        const technicalRes = await getTechnical(this.taskForm.formId);
198
+        if (technicalRes.data) {
195
           this.haveTechnical = true;
199
           this.haveTechnical = true;
196
-          this.form = res.data;
197
-          if (this.projectNumber != '' && this.projectName != '') {
198
-            this.$set(this.form, "projectNumber", this.projectNumber);
199
-            this.$set(this.form, "projectName", this.projectName);
200
-          } else {
201
-            getProject(this.taskForm.formId).then(res => {
202
-              if (res.data) {
203
-                this.$set(this.form, "projectNumber", res.data.projectNumber);
204
-                this.$set(this.form, "projectName", res.data.projectName);
205
-              }
206
-            })
207
-          }
208
-          let data = res.data;
209
-          if (res.data.qualityInspector == null || res.data.qualityInspector == undefined || res.data.qualityInspector == "") {
210
-            data.qualityInspector = []
211
-          } else {
212
-            let arr = []
213
-            data.qualityInspector = data.qualityInspector.split(',');
214
-            for (let inspector of data.qualityInspector) {
215
-              arr.push(parseInt(inspector))
200
+          this.form = technicalRes.data;
201
+          if (!this.projectNumber || !this.projectName) {
202
+            // 仅在需要时调用getProject  
203
+            const projectRes = await getProject(this.taskForm.formId);
204
+            if (projectRes.data) {
205
+              this.$set(this.form, "projectNumber", projectRes.data.projectNumber);
206
+              this.$set(this.form, "projectName", projectRes.data.projectName);
216
             }
207
             }
217
-            data.qualityInspector = arr
218
           }
208
           }
219
-          this.$set(this.form, "qualityInspector", data.qualityInspector);
209
+          this.processQualityInspector(this.form);
220
         }
210
         }
221
-      });
211
+      } catch (error) {
212
+      }
213
+    },
214
+    processQualityInspector(form) {
215
+      debugger
216
+      if (Array.isArray(form.qualityInspector)) {
217
+        // 如果已经是数组,则不需要进一步处理  
218
+        // 除非你想将数组中的字符串元素转换为整数  
219
+        // 例如:form.qualityInspector = form.qualityInspector.map(inspector => parseInt(inspector, 10));  
220
+      } else if (typeof form.qualityInspector === 'string') {
221
+        // 如果是一个字符串,则按逗号分割并转换为整数数组  
222
+        const qualityInspectorArr = form.qualityInspector.split(',').map(inspector => parseInt(inspector, 10));
223
+        this.$set(form, "qualityInspector", qualityInspectorArr);
224
+      } else if (form.qualityInspector === null || form.qualityInspector === undefined || form.qualityInspector === '') {
225
+        // 如果为空、null或undefined,则设置为空数组  
226
+        this.$set(form, "qualityInspector", []);
227
+      }
222
     },
228
     },
223
     // 查询用户列表
229
     // 查询用户列表
224
     getUserList() {
230
     getUserList() {

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

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-01-03 09:23:11
3
  * @Date: 2024-01-03 09:23:11
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-06-13 18:24:59
6
--->
7
-<!--
8
- * @Author: ysh
9
- * @Date: 2024-01-03 09:23:11
10
- * @LastEditors: Please set LastEditors
11
- * @LastEditTime: 2024-06-13 17:23:42
5
+ * @LastEditTime: 2024-06-19 16:29:56
12
 -->
6
 -->
13
 <template>
7
 <template>
14
   <div class="app-container">
8
   <div class="app-container">
478
       })
472
       })
479
     },
473
     },
480
     deleteDataByUrl(procDefName, id) {
474
     deleteDataByUrl(procDefName, id) {
481
-      switch (procDefName) {
482
-        case '承接合同评审':
483
-          return deleteResources(procDefName, id)
484
-      }
475
+      return deleteResources(procDefName, id)
485
     },
476
     },
486
     // 子流程不可以删除
477
     // 子流程不可以删除
487
     beDeleted(row) {
478
     beDeleted(row) {

+ 0
- 1
oa-ui/src/views/oa/budget/index.vue View File

230
       });
230
       });
231
     },
231
     },
232
     remoteMethod(val) {
232
     remoteMethod(val) {
233
-      console.log(val);
234
       listProject({
233
       listProject({
235
         pageNum: 1,
234
         pageNum: 1,
236
         pageSize: 20, 
235
         pageSize: 20, 

+ 3
- 1
oa-ui/src/views/oa/contract/index.vue View File

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-03-18 09:05:41
3
  * @Date: 2024-03-18 09:05:41
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-06-18 17:34:15
5
+ * @LastEditTime: 2024-06-19 11:03: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="partyA.partyAName" width="220px" />
63
       <el-table-column label="合同名称" align="center" prop="contractName" width="220px" />
64
       <el-table-column label="合同名称" align="center" prop="contractName" width="220px" />
64
       <el-table-column label="合同编码" align="center" prop="contractCode" />
65
       <el-table-column label="合同编码" align="center" prop="contractCode" />
65
       <el-table-column label="合同编号" align="center" prop="contractNumber" />
66
       <el-table-column label="合同编号" align="center" prop="contractNumber" />
229
       this.loading = true;
230
       this.loading = true;
230
       listContract(this.queryParams).then(response => {
231
       listContract(this.queryParams).then(response => {
231
         this.contractList = response.rows;
232
         this.contractList = response.rows;
233
+
232
         this.total = response.total;
234
         this.total = response.total;
233
         this.loading = false;
235
         this.loading = false;
234
       });
236
       });

+ 38
- 11
oa-ui/src/views/oa/contract/subContract.vue View File

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="128px">
3
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="128px">
4
-      <el-form-item label="主合同id" prop="contractId">
5
-        <el-input v-model="queryParams.contractId" placeholder="请输入主合同id" clearable @keyup.enter.native="handleQuery" />
6
-      </el-form-item>
7
-      <el-form-item label="承接单位id" prop="partnerId">
8
-        <el-input v-model="queryParams.partnerId" placeholder="请输入承接单位id" clearable @keyup.enter.native="handleQuery" />
4
+      <el-form-item label="承接单位" prop="partnerId">
5
+        <el-input v-model="queryParams.partnerId" placeholder="请输入承接单位" clearable @keyup.enter.native="handleQuery" />
9
       </el-form-item>
6
       </el-form-item>
10
       <el-form-item label="拟稿人" prop="drafter">
7
       <el-form-item label="拟稿人" prop="drafter">
11
         <el-select v-model="queryParams.drafter" filterable clearable @change="handleQuery">
8
         <el-select v-model="queryParams.drafter" filterable clearable @change="handleQuery">
28
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
25
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
29
     </el-row>
26
     </el-row>
30
 
27
 
31
-    <el-table v-loading="loading" :data="subContractList" @selection-change="handleSelectionChange">
28
+    <el-table v-loading="loading" border :data="subContractList" @selection-change="handleSelectionChange">
32
       <el-table-column type="index" label="序号" width="55" align="center" />
29
       <el-table-column type="index" label="序号" width="55" align="center" />
33
-      <el-table-column label="主合同id" align="center" prop="contractId" />
34
-      <el-table-column label="合同名称" align="center" prop="subContractName" />
30
+      <el-table-column label="合同名称" align="center" prop="subContractName" width="200px" />
35
       <el-table-column label="分包合同金额" align="center" prop="subAmount" />
31
       <el-table-column label="分包合同金额" align="center" prop="subAmount" />
36
       <el-table-column label="承接单位id" align="center" prop="partnerId" />
32
       <el-table-column label="承接单位id" align="center" prop="partnerId" />
37
       <!-- <el-table-column label="承接单位联系人" align="center" prop="contactPerson" /> -->
33
       <!-- <el-table-column label="承接单位联系人" align="center" prop="contactPerson" /> -->
38
-      <el-table-column label="拟稿人" align="center" prop="drafter" />
34
+      <el-table-column label="拟稿人" align="center" prop="drafter">
35
+        <template slot-scope="scope">
36
+          {{ getUserName(scope.row.drafter) }}
37
+        </template>
38
+      </el-table-column>
39
+
39
       <el-table-column label="拟稿日期" align="center" prop="draftTime" width="180">
40
       <el-table-column label="拟稿日期" align="center" prop="draftTime" width="180">
40
         <template slot-scope="scope">
41
         <template slot-scope="scope">
41
           <span>{{ parseTime(scope.row.draftTime, '{y}-{m}-{d}') }}</span>
42
           <span>{{ parseTime(scope.row.draftTime, '{y}-{m}-{d}') }}</span>
48
         </template>
49
         </template>
49
       </el-table-column>
50
       </el-table-column>
50
       <el-table-column label="签订备注" align="center" prop="signRemark" />
51
       <el-table-column label="签订备注" align="center" prop="signRemark" />
51
-      <el-table-column label="签订扫描件" align="center" prop="signScan" />
52
-      <el-table-column label="评审方式" align="center" prop="commentType" />
52
+      <el-table-column label="签订扫描件" align="center" prop="signScan">
53
+        <template slot-scope="scope">
54
+          <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + scope.row.signScan}`)">
55
+            {{ getFileName(scope.row.signScan) }}
56
+          </el-link>
57
+        </template>
58
+      </el-table-column>
59
+      <el-table-column label="评审方式" align="center" prop="commentType" >
60
+        <template slot-scope="scope">
61
+          <el-tag :type="scope.row.commentType == '2' ? 'success':'warning'">
62
+            {{ setCommentType(scope.row.commentType) }}
63
+          </el-tag>
64
+        </template>
65
+      </el-table-column>
53
       <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">
54
         <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)"
67
         <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)"
55
           v-hasPermi="['oa:subContract:query']">查看</el-button>
68
           v-hasPermi="['oa:subContract:query']">查看</el-button>
104
         <el-button @click="cancel">取 消</el-button>
117
         <el-button @click="cancel">取 消</el-button>
105
       </div>
118
       </div>
106
     </el-dialog>
119
     </el-dialog>
120
+
121
+    <el-dialog :title="title" :visible.sync="openInfo" append-to-body>
122
+      
123
+    </el-dialog>
107
   </div>
124
   </div>
108
 </template>
125
 </template>
109
 
126
 
114
   name: "SubContract",
131
   name: "SubContract",
115
   data() {
132
   data() {
116
     return {
133
     return {
134
+      baseUrl: process.env.VUE_APP_BASE_API,
117
       // 遮罩层
135
       // 遮罩层
118
       loading: true,
136
       loading: true,
119
       // 选中数组
137
       // 选中数组
265
       this.download('oa/subContract/export', {
283
       this.download('oa/subContract/export', {
266
         ...this.queryParams
284
         ...this.queryParams
267
       }, `subContract_${new Date().getTime()}.xlsx`)
285
       }, `subContract_${new Date().getTime()}.xlsx`)
286
+    },
287
+    setCommentType(commentType){
288
+      if(commentType == '2'){
289
+        return '线上评审'
290
+      }else if (commentType == '0'){
291
+        return '无须评审'
292
+      }else{
293
+        return '会议评审'
294
+      }
268
     }
295
     }
269
   }
296
   }
270
 };
297
 };

+ 4
- 2
oa-ui/src/views/oa/technical/index.vue View File

153
         <el-button @click="cancel">取 消</el-button>
153
         <el-button @click="cancel">取 消</el-button>
154
       </div>
154
       </div>
155
     </el-dialog>
155
     </el-dialog>
156
-    <el-dialog :title="title" :visible.sync="infoOpen" width="70%" append-to-body>
156
+    <el-dialog :title="title" :visible.sync="infoOpen" width="50%" append-to-body>
157
       <technical-tab :taskForm="taskForm"></technical-tab>
157
       <technical-tab :taskForm="taskForm"></technical-tab>
158
     </el-dialog>
158
     </el-dialog>
159
   </div>
159
   </div>
208
       },
208
       },
209
       // 表单参数
209
       // 表单参数
210
       form: {},
210
       form: {},
211
-      taskForm: {},
211
+      taskForm: {
212
+        formId:''
213
+      },
212
       // 表单校验
214
       // 表单校验
213
       rules: {
215
       rules: {
214
       }
216
       }

+ 24
- 7
oa-ui/src/views/oa/tender/index.vue View File

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="投标项目名称" prop="projectName" label-width="100px">
4
       <el-form-item label="投标项目名称" prop="projectName" label-width="100px">
5
-        <el-input v-model="queryParams.projectName" placeholder="请输入投标项目名称" clearable @keyup.enter.native="handleQuery" />
5
+        <el-input v-model="queryParams.projectName" placeholder="请输入投标项目名称" clearable
6
+          @keyup.enter.native="handleQuery" />
6
       </el-form-item>
7
       </el-form-item>
7
       <el-form-item label="投标时间" prop="tenderTime">
8
       <el-form-item label="投标时间" prop="tenderTime">
8
         <el-date-picker clearable v-model="queryParams.tenderTime" type="date" value-format="yyyy-MM-dd"
9
         <el-date-picker clearable v-model="queryParams.tenderTime" type="date" value-format="yyyy-MM-dd"
38
     <el-table v-loading="loading" :data="tenderList" @selection-change="handleSelectionChange">
39
     <el-table v-loading="loading" :data="tenderList" @selection-change="handleSelectionChange">
39
       <el-table-column type="selection" width="55" align="center" min-width="100px" />
40
       <el-table-column type="selection" width="55" align="center" min-width="100px" />
40
       <el-table-column type="index" label="序号" width="55" align="center" min-width="100px" />
41
       <el-table-column type="index" label="序号" width="55" align="center" min-width="100px" />
41
-      <!-- <el-table-column label="投标id" align="center" prop="tenderId" min-width="100px" /> -->
42
       <el-table-column label="投标项目名称" align="center" prop="projectName" min-width="100px" />
42
       <el-table-column label="投标项目名称" align="center" prop="projectName" min-width="100px" />
43
       <el-table-column label="招标业主" align="center" prop="partyA.partyAName" min-width="100px" />
43
       <el-table-column label="招标业主" align="center" prop="partyA.partyAName" min-width="100px" />
44
-      <!-- <el-table-column label="业主联系人" align="center" prop="aPerson" min-width="100px" /> -->
45
-      <!-- <el-table-column label="业主联系电话" align="center" prop="aPhone" min-width="100px" /> -->
46
       <el-table-column label="招标代理" align="center" prop="agent" min-width="100px" />
44
       <el-table-column label="招标代理" align="center" prop="agent" min-width="100px" />
47
-      <!-- <el-table-column label="代理联系人" align="center" prop="agentPerson" min-width="100px" /> -->
48
-      <!-- <el-table-column label="代理联系电话" align="center" prop="agentPhone" min-width="100px" /> -->
49
       <el-table-column label="招标地点" align="center" prop="place" min-width="100px" />
45
       <el-table-column label="招标地点" align="center" prop="place" min-width="100px" />
50
       <!-- <el-table-column label="投标部门" align="center" prop="dept" min-width="100px">
46
       <!-- <el-table-column label="投标部门" align="center" prop="dept" min-width="100px">
51
         <template slot-scope="scope">
47
         <template slot-scope="scope">
121
               <span class="require_input">* </span>招标业主
117
               <span class="require_input">* </span>招标业主
122
             </template>
118
             </template>
123
             <el-form-item prop="partyAId">
119
             <el-form-item prop="partyAId">
124
-              <el-select allow-create v-model="form.partyAId" filterable placeholder="请选择" style="width: 100%;" clearable>
120
+              <el-select allow-create v-model="form.partyAId" filterable disabled placeholder="请选择" style="width: 100%;"
121
+                clearable>
125
                 <el-option v-for="item in partyAList" :key="item.value" :label="item.partyAName" :value="item.partyAId">
122
                 <el-option v-for="item in partyAList" :key="item.value" :label="item.partyAName" :value="item.partyAId">
126
                 </el-option>
123
                 </el-option>
127
               </el-select>
124
               </el-select>
125
+              <el-button type="primary" @click="partyAOpen = true" size="mini">选择单位</el-button>
128
             </el-form-item>
126
             </el-form-item>
129
           </el-descriptions-item>
127
           </el-descriptions-item>
130
           <el-descriptions-item>
128
           <el-descriptions-item>
381
         <el-button @click="cancel">取 消</el-button>
379
         <el-button @click="cancel">取 消</el-button>
382
       </div>
380
       </div>
383
     </el-dialog>
381
     </el-dialog>
382
+
383
+    <el-dialog title="选择甲方单位" :visible.sync="partyAOpen" width="70%" append-to-body>
384
+      <ChoosePartyA @confirm="confirmPartyA"></ChoosePartyA>
385
+    </el-dialog>
384
   </div>
386
   </div>
385
 </template>
387
 </template>
386
 
388
 
390
 import { listUser, deptTreeSelect } from "@/api/system/user";
392
 import { listUser, deptTreeSelect } from "@/api/system/user";
391
 import { Snowflake } from '@/utils/snowFlake.js'
393
 import { Snowflake } from '@/utils/snowFlake.js'
392
 import { listPartyA } from "@/api/oa/partyA/partyA";
394
 import { listPartyA } from "@/api/oa/partyA/partyA";
395
+import ChoosePartyA from '@/views/flowable/form/components/choosePartyA.vue';
393
 export default {
396
 export default {
394
   name: "Tender",
397
   name: "Tender",
398
+  components:{
399
+    ChoosePartyA
400
+  },
395
   data() {
401
   data() {
396
     return {
402
     return {
397
       baseUrl: process.env.VUE_APP_BASE_API,
403
       baseUrl: process.env.VUE_APP_BASE_API,
414
       title: "",
420
       title: "",
415
       // 是否显示弹出层
421
       // 是否显示弹出层
416
       open: false,
422
       open: false,
423
+      partyAOpen: false,
417
       isView: true,
424
       isView: true,
418
       // 对话框属性
425
       // 对话框属性
419
       dialogProperty: {
426
       dialogProperty: {
725
     toPath(url) {
732
     toPath(url) {
726
       this.open = false
733
       this.open = false
727
       this.reviewWord(url)
734
       this.reviewWord(url)
735
+    },
736
+    confirmPartyA(val) {
737
+      this.partyAOpen = false
738
+      if (val && val.length > 1) {
739
+        return this.$message.error('请选择一个甲方单位')
740
+      }
741
+      if (val) {
742
+        this.getPartyAList();
743
+        this.$set(this.form, 'partyAId', val[0].partyAId)
744
+      }
728
     }
745
     }
729
   }
746
   }
730
 };
747
 };

Loading…
Cancel
Save