Bläddra i källkod

修改承接合同流程表单

余思翰 1 år sedan
förälder
incheckning
e792f0b32a

+ 12
- 7
oa-ui/src/components/FileUpload/index.vue Visa fil

@@ -20,9 +20,9 @@
20 20
       <!-- 上传提示 -->
21 21
       <div class="el-upload__tip" slot="tip" v-if="showTip">
22 22
         请上传
23
-        <template v-if="fileSize">
23
+        <!-- <template v-if="fileSize">
24 24
           大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
25
-        </template>
25
+        </template> -->
26 26
         <template v-if="fileType">
27 27
           格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b>
28 28
         </template>
@@ -83,11 +83,18 @@ export default {
83 83
       type: Boolean,
84 84
       default: true,
85 85
     },
86
-    isModify:{
86
+    isModify: {
87 87
       type: Boolean,
88 88
       default: false,
89
+    },
90
+    filePathName:{
91
+      type: String,
92
+      default: '',
89 93
     }
90 94
   },
95
+  created(){
96
+    this.additionalData.fileType = this.filePathName
97
+  },
91 98
   data() {
92 99
     return {
93 100
       number: 0,
@@ -98,7 +105,7 @@ export default {
98 105
         Authorization: "Bearer " + getToken(),
99 106
       },
100 107
       additionalData: {
101
-        fileType: "投标文件",
108
+        fileType: '',
102 109
       },
103 110
       fileList: [],
104 111
     };
@@ -161,7 +168,7 @@ export default {
161 168
       return true;
162 169
     },
163 170
     // 文件个数超出
164
-    handleExceed() {
171
+    handleExceed(files, fileList) {
165 172
       this.$modal.msgError(`上传文件数量不能超过 ${this.limit} 个!`);
166 173
     },
167 174
     // 上传失败
@@ -172,7 +179,6 @@ export default {
172 179
     // 上传成功回调
173 180
     handleUploadSuccess(res, file) {
174 181
       if (res.code === 200) {
175
-        console.log(res);
176 182
         this.uploadList.push({ name: res.fileName, url: res.fileName });
177 183
         this.uploadedSuccessfully();
178 184
       } else {
@@ -210,7 +216,6 @@ export default {
210 216
     // 对象转成指定字符串分隔
211 217
     listToString(list, separator) {
212 218
       let strs = "";
213
-      debugger
214 219
       separator = separator || ",";
215 220
       for (let i in list) {
216 221
         strs += list[i].url + separator;

+ 108
- 87
oa-ui/src/views/flowable/form/business/contractForm.vue Visa fil

@@ -1,3 +1,9 @@
1
+<!--
2
+ * @Author: ysh
3
+ * @Date: 2024-05-10 15:31:57
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-05-13 18:58:07
6
+-->
1 7
 <template>
2 8
   <div class="app-container">
3 9
     <el-row :gutter="20">
@@ -8,30 +14,32 @@
8 14
           <el-row :gutter="20">
9 15
             <el-col :span="12" :xs="24">
10 16
               <el-form-item label="投标项目名称:" prop="tenderId">
11
-                <el-select v-model="form.tenderId" filterable placeholder="请选择" @change="handleSelectTender"
17
+                <el-button type="primary" size="mini" @click="tbOpen = true">选择投标项目</el-button>
18
+                <!-- <el-select v-model="form.tenderId" filterable placeholder="请选择" @change="handleSelectTender"
12 19
                   :disabled="taskName != '合同拟稿'" clearable>
13 20
                   <el-option v-for="item in tenderList" :key="item.value" :label="item.projectName"
14 21
                     :value="item.tenderId">
15 22
                   </el-option>
16
-                </el-select>
23
+                </el-select> -->
17 24
                 <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="2" direction="vertical">
18
-                  <el-descriptions-item label="项目名称" label-class-name="my-label" :span="2">{{ chooseTender.projectName
19
-                  }}</el-descriptions-item>
25
+                  <el-descriptions-item label="投标项目名称" label-class-name="my-label" :span="2">{{ chooseTender.projectName
26
+                    }}</el-descriptions-item>
20 27
                   <el-descriptions-item label="项目来源" label-class-name="my-label">{{ getProjectSource(chooseTender)
21
-                  }}</el-descriptions-item>
22
-                  <el-descriptions-item label="甲方单位" label-class-name="my-label">{{ chooseTender.partyA
23
-                  }}</el-descriptions-item>
28
+                    }}</el-descriptions-item>
29
+                  <el-descriptions-item label="招标业主" label-class-name="my-label">{{ chooseTender.partyA
30
+                    }}</el-descriptions-item>
24 31
                   <el-descriptions-item label="联系人" label-class-name="my-label">{{ chooseTender.aPerson
25
-                  }}</el-descriptions-item>
32
+                    }}</el-descriptions-item>
26 33
                   <el-descriptions-item label="联系电话" label-class-name="my-label">{{ chooseTender.aPhone
27
-                  }}</el-descriptions-item>
34
+                    }}</el-descriptions-item>
28 35
                 </el-descriptions>
29 36
               </el-form-item>
30 37
 
31 38
               <el-row :gutter="20">
32 39
                 <el-col :span="12" :xs="24">
33 40
                   <el-form-item label="合同编码" prop="contractCode">
34
-                    <el-input v-model="form.contractCode" placeholder="请输入合同编码" :disabled="taskName != '合同拟稿'"></el-input>
41
+                    <el-input v-model="form.contractCode" placeholder="请输入合同编码"
42
+                      :disabled="taskName != '合同拟稿'"></el-input>
35 43
                   </el-form-item>
36 44
                 </el-col>
37 45
                 <el-col :span="12" :xs="24">
@@ -57,12 +65,13 @@
57 65
 
58 66
             <el-col :span="12" :xs="24">
59 67
               <el-form-item label="关联项目编号:" prop="projectIds">
60
-                <el-select v-model="projectContractForm.projectIds" multiple filterable placeholder="请选择"
68
+                <!-- <el-select v-model="projectContractForm.projectIds" multiple filterable placeholder="请选择"
61 69
                   @change="handleSelectProject" :disabled="taskName != '合同拟稿'" clearable>
62
-                  <el-option v-for="item in projectList" :key="item.value" :label="item.projectNumber + item.projectName"
63
-                    :value="item.projectId">
70
+                  <el-option v-for="item in projectList" :key="item.value"
71
+                    :label="item.projectNumber + item.projectName" :value="item.projectId">
64 72
                   </el-option>
65
-                </el-select>
73
+                </el-select> -->
74
+                <el-button type="primary" size="mini" @click="open = true">选择项目</el-button>
66 75
               </el-form-item>
67 76
               <el-table v-loading="loading" :data="chooseProjectList">
68 77
                 <el-table-column label="项目编号" align="center" prop="projectNumber"></el-table-column>
@@ -74,7 +83,20 @@
74 83
 
75 84
           </el-row>
76 85
           <el-form-item label="合同文件" prop="contractDocument">
77
-            <el-input v-model="form.contractDocument" placeholder="请输入合同文件" :disabled="taskName != '合同拟稿'" />
86
+            <FileUpload v-if="form.tenderId == null" ref="contractFile" :limit="1" :filePathName="'合同文件'"
87
+              :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="getContractPath"></FileUpload>
88
+            <div v-if="form.tenderId != null">
89
+              <transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear"
90
+                tag="ul">
91
+                <li key="li01" class="el-upload-list__item ele-upload-list__item-content">
92
+                  <el-link :href="`${baseUrl}${'/profile/upload' + form.contractDocument}`" :underline="false"
93
+                    target="_blank">
94
+                    <span class="el-icon-document" style="color:#0011ff;text-decoration: underline;"> {{
95
+      getFileName(form.contractDocument) }} </span>
96
+                  </el-link>
97
+                </li>
98
+              </transition-group>
99
+            </div>
78 100
           </el-form-item>
79 101
           <el-divider></el-divider>
80 102
           <el-form-item label="合同计划工作量:">
@@ -115,12 +137,13 @@
115 137
                     :disabled="taskName != '合同拟稿'"></el-input>
116 138
                 </td>
117 139
                 <td>
118
-                  <el-button type="danger" icon="el-icon-minus" size="mini" circle
119
-                    @click="deletWorkItem(index)" :disabled="taskName != '合同拟稿'"></el-button>
140
+                  <el-button type="danger" icon="el-icon-minus" size="mini" circle @click="deletWorkItem(index)"
141
+                    :disabled="taskName != '合同拟稿'"></el-button>
120 142
                 </td>
121 143
               </tr>
122 144
             </table>
123
-            <el-button icon="el-icon-plus" size="mini" @click="addWorkList()" type="primary" plain :disabled="taskName != '合同拟稿'"></el-button>
145
+            <el-button icon="el-icon-plus" size="mini" @click="addWorkList()" type="primary" plain
146
+              :disabled="taskName != '合同拟稿'"></el-button>
124 147
           </el-form-item>
125 148
           <el-form-item label="合同回款计划:">
126 149
             <table border="1">
@@ -147,8 +170,8 @@
147 170
                   <el-input v-model="payment.paymentAmount" clearable :disabled="taskName != '合同拟稿'"></el-input>
148 171
                 </td>
149 172
                 <td>
150
-                  <el-date-picker style="width: 140px" v-model="payment.paymentTime" value-format="yyyy-MM-dd" type="date"
151
-                    placeholder="选择日期" :disabled="taskName != '合同拟稿'">
173
+                  <el-date-picker style="width: 140px" v-model="payment.paymentTime" value-format="yyyy-MM-dd"
174
+                    type="date" placeholder="选择日期" :disabled="taskName != '合同拟稿'">
152 175
                   </el-date-picker>
153 176
                 </td>
154 177
                 <td>
@@ -156,12 +179,13 @@
156 179
                     :disabled="taskName != '合同拟稿'"></el-input>
157 180
                 </td>
158 181
                 <td>
159
-                  <el-button type="danger" icon="el-icon-minus" size="mini" circle
160
-                    @click="deletPaymentItem(index)" :disabled="taskName != '合同拟稿'"></el-button>
182
+                  <el-button type="danger" icon="el-icon-minus" size="mini" circle @click="deletPaymentItem(index)"
183
+                    :disabled="taskName != '合同拟稿'"></el-button>
161 184
                 </td>
162 185
               </tr>
163 186
             </table>
164
-            <el-button icon="el-icon-plus" size="mini" @click="addPaymentList()" type="primary" plain :disabled="taskName != '合同拟稿'"></el-button>
187
+            <el-button icon="el-icon-plus" size="mini" @click="addPaymentList()" type="primary" plain
188
+              :disabled="taskName != '合同拟稿'"></el-button>
165 189
           </el-form-item>
166 190
           <el-form-item label="合同备注" prop="remark">
167 191
             <el-input v-model="form.remark" placeholder="请输入合同备注" :disabled="taskName != '合同拟稿'" />
@@ -189,12 +213,12 @@
189 213
           <el-form-item label="线上会审:" v-if="commentOpen">
190 214
             <table border="1">
191 215
               <tr>
192
-                <td>序号</td>
216
+                <td style="width: 50px;">序号</td>
193 217
                 <td>会审部门</td>
194 218
                 <td>会审人</td>
195 219
                 <td>会审意见</td>
196 220
                 <td>会审附件</td>
197
-                <td>签名</td>
221
+                <td style="width: 90px;">签名</td>
198 222
                 <td>日期</td>
199 223
               </tr>
200 224
               <tr v-for="(comment, index) in commentList" :key="index">
@@ -219,9 +243,12 @@
219 243
                   <el-input v-model="comment.comment" type="textarea" clearable :autosize="{ minRows: 4, maxRows: 10 }"
220 244
                     :disabled="taskName != '线上会审' || (taskName == '线上会审' && !comment.commentUser)"></el-input>
221 245
                 </td>
222
-                <td>
223
-                  <el-input v-model="comment.document" clearable
224
-                    :disabled="taskName != '线上会审' || (taskName == '线上会审' && !comment.commentUser)"></el-input>
246
+                <td style="text-align:left;">
247
+                  <FileUpload :limit="1" :filePathName="'合同文件'"
248
+                    :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input=""></FileUpload>
249
+                  <!-- <el-input v-model="comment.document" clearable
250
+                    :disabled="taskName != '线上会审' || (taskName == '线上会审' && !comment.commentUser)"></el-input> -->
251
+
225 252
                 </td>
226 253
                 <td>
227 254
                   <span class="auditor"> {{ comment.commentUser ? comment.commentUser.nickName : '' }} </span>
@@ -230,12 +257,13 @@
230 257
                   <span> {{ comment.commentTime }} </span>
231 258
                 </td>
232 259
                 <td>
233
-                  <el-button type="danger" icon="el-icon-minus" size="mini" circle
234
-                    @click="deletCommentItem(index)" :disabled="taskName != '合同拟稿'"></el-button>
260
+                  <el-button type="danger" icon="el-icon-minus" size="mini" circle @click="deletCommentItem(index)"
261
+                    :disabled="taskName != '合同拟稿'"></el-button>
235 262
                 </td>
236 263
               </tr>
237 264
             </table>
238
-            <el-button icon="el-icon-plus" size="mini" @click="addCommentList()" type="primary" plain :disabled="taskName != '合同拟稿'"></el-button>
265
+            <el-button icon="el-icon-plus" size="mini" @click="addCommentList()" type="primary" plain
266
+              :disabled="taskName != '合同拟稿'"></el-button>
239 267
           </el-form-item>
240 268
           <el-form-item label="会议评审:" v-if="meetingOpen">
241 269
             <table border="1">
@@ -314,8 +342,8 @@
314 342
           </el-row>
315 343
           <el-divider></el-divider>
316 344
           <el-form-item label="签订日期" prop="signDate">
317
-            <el-date-picker clearable v-model="form.signDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择签订日期"
318
-              :disabled="taskName != '合同签订'">
345
+            <el-date-picker clearable v-model="form.signDate" type="date" value-format="yyyy-MM-dd"
346
+              placeholder="请选择签订日期" :disabled="taskName != '合同签订'">
319 347
             </el-date-picker>
320 348
           </el-form-item>
321 349
           <el-form-item label="签订备注" prop="signRemark">
@@ -329,7 +357,7 @@
329 357
           <el-button type="primary" @click="submitForm">确 定</el-button>
330 358
           <el-button @click="cancel">取 消</el-button>
331 359
         </div>
332
-      </el-col>
360
+      </el-col>` `
333 361
       <el-col :span="6" :xs="24">
334 362
         <el-card>
335 363
           <h2 style="text-align: center;">流程进度</h2>
@@ -339,6 +367,13 @@
339 367
         </el-card>
340 368
       </el-col>
341 369
     </el-row>
370
+
371
+    <el-dialog title="选择项目" :visible.sync="open" width="70%" append-to-body>
372
+      <choose-project @chooseProject="confirmProject" :chooseList="chooseProjectList"></choose-project>
373
+    </el-dialog>
374
+    <el-dialog title="选择投标项目" :visible.sync="tbOpen" width="70%" append-to-body>
375
+      <choose-tender @choose="confirmTender"></choose-tender>
376
+    </el-dialog>
342 377
   </div>
343 378
 </template>
344 379
 
@@ -358,9 +393,13 @@ import { listTender, getTender } from "@/api/oa/tender/tender";
358 393
 import { getUsersDeptLeader, getUsersManageLeader, getUsersDeptLeaderByDept } from '@/api/system/post.js'
359 394
 import flow from '@/views/flowable/task/todo/detail/flow'
360 395
 import { flowXmlAndNode } from "@/api/flowable/definition";
396
+import ChooseProject from '../components/chooseProject.vue';
397
+import ChooseTender from '../components/chooseTender.vue';
361 398
 export default {
362 399
   components: {
363
-    flow
400
+    flow,
401
+    ChooseProject,
402
+    ChooseTender
364 403
   },
365 404
   props: {
366 405
     taskName: {
@@ -375,6 +414,7 @@ export default {
375 414
   name: "Contract",
376 415
   data() {
377 416
     return {
417
+      baseUrl: process.env.VUE_APP_BASE_API,
378 418
       draftUser: '',
379 419
       draftTime: undefined,
380 420
       managerUser: '',
@@ -399,6 +439,7 @@ export default {
399 439
       title: "",
400 440
       // 是否显示弹出层
401 441
       open: false,
442
+      tbOpen: false,
402 443
       // 查询参数
403 444
       queryParams: {
404 445
         pageNum: 1,
@@ -548,15 +589,15 @@ export default {
548 589
               this.isSelect = true
549 590
             })
550 591
           }
551
-          listContractWork({contractId: this.taskForm.formId}).then(res => {
592
+          listContractWork({ contractId: this.taskForm.formId }).then(res => {
552 593
             if (res.rows)
553 594
               this.workList = res.rows;
554 595
           });
555
-          listContractPayment({contractId: this.taskForm.formId}).then(res => {
596
+          listContractPayment({ contractId: this.taskForm.formId }).then(res => {
556 597
             if (res.rows)
557 598
               this.paymentList = res.rows;
558 599
           });
559
-          listContractComment({contractId: this.taskForm.formId}).then(res => {
600
+          listContractComment({ contractId: this.taskForm.formId }).then(res => {
560 601
             if (res.rows)
561 602
               this.commentList = res.rows;
562 603
             for (let comment of this.commentList) {
@@ -774,38 +815,6 @@ export default {
774 815
       };
775 816
       this.resetForm("form");
776 817
     },
777
-    /** 搜索按钮操作 */
778
-    handleQuery() {
779
-      this.queryParams.pageNum = 1;
780
-      this.getList();
781
-    },
782
-    /** 重置按钮操作 */
783
-    resetQuery() {
784
-      this.resetForm("queryForm");
785
-      this.handleQuery();
786
-    },
787
-    // 多选框选中数据
788
-    handleSelectionChange(selection) {
789
-      this.ids = selection.map(item => item.contractId)
790
-      this.single = selection.length !== 1
791
-      this.multiple = !selection.length
792
-    },
793
-    /** 新增按钮操作 */
794
-    handleAdd() {
795
-      this.reset();
796
-      this.open = true;
797
-      this.title = "添加cmc合同评审";
798
-    },
799
-    /** 修改按钮操作 */
800
-    handleUpdate(row) {
801
-      this.reset();
802
-      const contractId = row.contractId || this.ids
803
-      getContract(contractId).then(response => {
804
-        this.form = response.data;
805
-        this.open = true;
806
-        this.title = "修改cmc合同评审";
807
-      });
808
-    },
809 818
     /** 提交按钮 */
810 819
     submitForm() {
811 820
       this.$refs["form"].validate(valid => {
@@ -875,7 +884,7 @@ export default {
875 884
               addContractPayment(payment);
876 885
             }
877 886
             for (let projectId of this.projectContractForm.projectIds) {
878
-              addProjectContract({projectId: projectId, contractId: this.form.contractId});
887
+              addProjectContract({ projectId: projectId, contractId: this.form.contractId });
879 888
             }
880 889
             const params = { taskId: this.taskForm.taskId };
881 890
             getNextFlowNode(params).then(res => {
@@ -922,35 +931,47 @@ export default {
922 931
         }
923 932
       });
924 933
     },
925
-    /** 删除按钮操作 */
926
-    handleDelete(row) {
927
-      const contractIds = row.contractId || this.ids;
928
-      this.$modal.confirm('是否确认删除cmc合同评审编号为"' + contractIds + '"的数据项?').then(function () {
929
-        return delContract(contractIds);
930
-      }).then(() => {
931
-        this.getList();
932
-        this.$modal.msgSuccess("删除成功");
933
-      }).catch(() => { });
934
+    getContractPath(val) {
935
+      let arr = val.split('/upload')
936
+      this.form.contractDocument = arr[1]
937
+      if (val == "") {
938
+        this.form.contractDocument = ""
939
+      }
940
+    },
941
+    getFileName(name) {
942
+      let arr = name.split('/')
943
+      return arr[arr.length - 1];
934 944
     },
935
-    /** 导出按钮操作 */
936
-    handleExport() {
937
-      this.download('oa/contract/export', {
938
-        ...this.queryParams
939
-      }, `contract_${new Date().getTime()}.xlsx`)
945
+    confirmProject(val) {
946
+      this.open = false
947
+      for (let v of val) {
948
+        this.projectContractForm.projectIds.push(v.projectId);
949
+      }
950
+      this.chooseProjectList = val
951
+    },
952
+    confirmTender(val) {
953
+      this.tbOpen = false
954
+      this.form.tenderId = val.tenderId
955
+      this.chooseTender = val
956
+      this.isSelect = true
940 957
     }
941 958
   }
942 959
 }
943 960
 </script>
944 961
 
945 962
 <style lang="scss" scoped>
963
+@import "@/assets/styles/element-reset.scss";
964
+
946 965
 table {
947
-  /*居中*/
948
-  margin: 0 auto;
949 966
   /*边框*/
950 967
   /* border: 1px solid black; */
951 968
   text-align: center;
952 969
   border-collapse: collapse;
970
+
953 971
   /*设置背景颜色*/
954 972
   /* background-color: #bfa; */
973
+  td {
974
+    padding: 5px;
975
+  }
955 976
 }
956 977
 </style>

+ 119
- 0
oa-ui/src/views/flowable/form/components/chooseProject.vue Visa fil

@@ -0,0 +1,119 @@
1
+<template>
2
+  <div>
3
+    <el-row>
4
+      <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="88px">
5
+        <el-form-item label="项目编号" prop="projectNumber">
6
+          <el-input v-model="queryParams.projectNumber" placeholder="请输入项目编号" clearable
7
+            @keyup.enter.native="handleQuery()" />
8
+        </el-form-item>
9
+        <el-form-item label="项目名称" prop="projectName">
10
+          <el-input v-model="queryParams.projectName" placeholder="请输入项目名称" clearable
11
+            @keyup.enter.native="handleQuery()" />
12
+        </el-form-item>
13
+        <el-form-item label="项目负责人" prop="projectLeader">
14
+          <el-select v-model="queryParams.projectLeader" clearable filterable placeholder="请输入项目负责人" size="large"
15
+            style="width: 240px" @keyup.enter.native="handleQuery()">
16
+            <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId" />
17
+          </el-select>
18
+        </el-form-item>
19
+        <el-form-item>
20
+          <el-button type="primary" icon="el-icon-search" @click="handleQuery()">搜索</el-button>
21
+        </el-form-item>
22
+      </el-form>
23
+    </el-row>
24
+
25
+    <el-table ref="chooseProject" v-loading="loading" :data="projectList" @selection-change="handleSelectionChange"
26
+      :row-key="getRowKeys">
27
+      <el-table-column type="selection" width="50" align="center" :reserve-selection="true" />
28
+      <el-table-column label="项目编号" align="center" key="projectNumber" prop="projectNumber" />
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="projectLeader"
31
+        :show-overflow-tooltip="true" />
32
+      <el-table-column label="甲方公司" align="center" key="partyA" prop="partyA" :show-overflow-tooltip="true" />
33
+      <el-table-column label="项目类型" align="center" key="projectType" prop="projectType" />
34
+    </el-table>
35
+    <div style="text-align: right;" class="mt20 mr20">
36
+      <el-pagination @current-change="getList" :current-page.sync="queryParams.pageNum"
37
+        :page-size="queryParams.pageSize" layout="total, prev, pager, next" :total="total">
38
+      </el-pagination>
39
+    </div>
40
+    <div>
41
+      已选项目:<el-tag v-for="item in chooseProject" style="margin: 5px;" :key="item.projectId">{{ item.projectNumber + '-'
42
+        + item.projectName }}</el-tag>
43
+    </div>
44
+    <div style="text-align: center;margin-top: 20px;">
45
+      <el-button type="primary" @click="confirmChoose">确认选择</el-button>
46
+      <el-button @click="clearChoose">清空选择</el-button>
47
+    </div>
48
+  </div>
49
+</template>
50
+
51
+<script>
52
+import { listProject, submitProject, modifyProject, delProject } from "@/api/oa/project/project";
53
+import { listUser, getUser } from '@/api/system/user'
54
+export default {
55
+  props: {
56
+    chooseList: {
57
+      type: Array,
58
+      default: []
59
+    }
60
+  },
61
+  data() {
62
+    return {
63
+      // 查询参数
64
+      queryParams: {
65
+        pageNum: 1,
66
+        pageSize: 10,
67
+        projectNumber: '',
68
+        projectLeader: undefined,
69
+        projectName: '',
70
+      },
71
+      projectList: [],
72
+      userList: [],
73
+      total: 0,
74
+      loading: true,
75
+      chooseProject: []
76
+    }
77
+  },
78
+  created() {
79
+    this.getList();
80
+    this.getUserList();
81
+    this.chooseProject = this.chooseList;
82
+  },
83
+  methods: {
84
+    // 查询项目列表
85
+    getList() {
86
+      this.loading = true
87
+      listProject(this.queryParams).then(response => {
88
+        this.projectList = response.rows;
89
+        this.total = response.total;
90
+        this.loading = false;
91
+      })
92
+    },
93
+    /** 查询用户列表 */
94
+    getUserList() {
95
+      listUser({ pageNum: 1, pageSize: 9999 }).then(res => {
96
+        this.userList = res.rows
97
+      })
98
+    },
99
+    handleQuery() {
100
+      this.queryParams.pageNum = 1;
101
+      this.getList();
102
+    },
103
+    handleSelectionChange(val) {
104
+      this.chooseProject = val
105
+    },
106
+    getRowKeys(row) {
107
+      return row.projectId;
108
+    },
109
+    confirmChoose() {
110
+      this.$emit('chooseProject', this.chooseProject)
111
+    },
112
+    clearChoose() {
113
+      this.$refs.chooseProject.clearSelection();
114
+    }
115
+  },
116
+}
117
+</script>
118
+
119
+<style lang="scss" scoped></style>

+ 110
- 0
oa-ui/src/views/flowable/form/components/chooseTender.vue Visa fil

@@ -0,0 +1,110 @@
1
+<template>
2
+  <div>
3
+    <el-row>
4
+      <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="88px">
5
+        <el-form-item label="投标项目名称" prop="projectName">
6
+          <el-input v-model="queryParams.projectName" placeholder="请输入项目名称" clearable
7
+            @keyup.enter.native="handleQuery()" />
8
+        </el-form-item>
9
+        <el-form-item label="招标业主" prop="partyA">
10
+          <el-input v-model="queryParams.partyA" placeholder="请输入招标业主" clearable @keyup.enter.native="handleQuery" />
11
+        </el-form-item>
12
+        <el-form-item label="投标时间" prop="tenderTime">
13
+          <el-date-picker clearable v-model="queryParams.tenderTime" type="date" value-format="yyyy-MM-dd"
14
+            placeholder="请选择投标时间">
15
+          </el-date-picker>
16
+        </el-form-item>
17
+        <el-form-item>
18
+          <el-button type="primary" icon="el-icon-search" @click="handleQuery()">搜索</el-button>
19
+        </el-form-item>
20
+      </el-form>
21
+    </el-row>
22
+
23
+    <el-table ref="choosePTender" v-loading="loading" :data="tenderList" highlight-current-row
24
+      @current-change="handleCurrentChange" :row-key="getRowKeys" @row-dblclick="confirmChoose">
25
+      <el-table-column label="投标项目名称" align="center" key="projectName" prop="projectName"
26
+        :show-overflow-tooltip="true" />
27
+      <el-table-column label="招标业主" align="center" prop="partyA" min-width="100px" />
28
+      <el-table-column label="招标代理" align="center" prop="agent" min-width="100px" />
29
+      <el-table-column label="招标地点" align="center" prop="place" min-width="100px" />
30
+      <el-table-column label="业主预算" align="center" prop="budget" min-width="100px" />
31
+    </el-table>
32
+    <div style="text-align: right;" class="mt20 mr20">
33
+      <el-pagination @current-change="getList" :current-page.sync="queryParams.pageNum"
34
+        :page-size="queryParams.pageSize" layout="total, prev, pager, next" :total="total">
35
+      </el-pagination>
36
+    </div>
37
+    <div>
38
+      已选项目:<el-tag>{{ choosePTender.projectName }}</el-tag>
39
+    </div>
40
+    <div style="text-align: center;margin-top: 20px;">
41
+      <el-button type="primary" @click="confirmChoose">确认选择</el-button>
42
+      <el-button @click="clearChoose">清空选择</el-button>
43
+    </div>
44
+  </div>
45
+</template>
46
+
47
+<script>
48
+import { listProject, submitProject, modifyProject, delProject } from "@/api/oa/project/project";
49
+import { listUser, getUser } from '@/api/system/user'
50
+import { listTender, getTender } from "@/api/oa/tender/tender";
51
+export default {
52
+  props: {
53
+  },
54
+  data() {
55
+    return {
56
+      // 查询参数
57
+      queryParams: {
58
+        pageNum: 1,
59
+        pageSize: 10
60
+      },
61
+      tenderList: [],
62
+      userList: [],
63
+      total: 0,
64
+      loading: true,
65
+      choosePTender: {
66
+        projectName: ''
67
+      }
68
+    }
69
+  },
70
+  created() {
71
+    this.getList();
72
+    this.getUserList();
73
+  },
74
+  methods: {
75
+    // 查询项目列表
76
+    getList() {
77
+      this.loading = true
78
+      listTender(this.queryParams).then(response => {
79
+        this.tenderList = response.rows;
80
+        this.total = response.total;
81
+        this.loading = false;
82
+      })
83
+    },
84
+    /** 查询用户列表 */
85
+    getUserList() {
86
+      listUser({ pageNum: 1, pageSize: 9999 }).then(res => {
87
+        this.userList = res.rows
88
+      })
89
+    },
90
+    handleQuery() {
91
+      this.queryParams.pageNum = 1;
92
+      this.getList();
93
+    },
94
+    handleCurrentChange(val) {
95
+      this.choosePTender = val
96
+    },
97
+    getRowKeys(row) {
98
+      return row.tenderId;
99
+    },
100
+    confirmChoose() {
101
+      this.$emit('choose', this.choosePTender)
102
+    },
103
+    clearChoose() {
104
+      this.$refs.choosePTender.clearSelection();
105
+    }
106
+  },
107
+}
108
+</script>
109
+
110
+<style lang="scss" scoped></style>

+ 77
- 22
oa-ui/src/views/oa/tender/index.vue Visa fil

@@ -24,37 +24,34 @@
24 24
         <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
25 25
           v-hasPermi="['oa:tender:add']">新增</el-button>
26 26
       </el-col>
27
-      <el-col :span="1.5">
28
-        <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
29
-          v-hasPermi="['oa:tender:edit']">修改</el-button>
30
-      </el-col>
31 27
       <el-col :span="1.5">
32 28
         <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
33 29
           v-hasPermi="['oa:tender:remove']">删除</el-button>
34 30
       </el-col>
35
-      <el-col :span="1.5">
31
+      <!-- <el-col :span="1.5">
36 32
         <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
37 33
           v-hasPermi="['oa:tender:export']">导出</el-button>
38
-      </el-col>
34
+      </el-col> -->
39 35
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
40 36
     </el-row>
41 37
 
42 38
     <el-table v-loading="loading" :data="tenderList" @selection-change="handleSelectionChange">
43 39
       <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" />
44 41
       <!-- <el-table-column label="投标id" align="center" prop="tenderId" min-width="100px" /> -->
45 42
       <el-table-column label="投标项目名称" align="center" prop="projectName" min-width="100px" />
46 43
       <el-table-column label="招标业主" align="center" prop="partyA" min-width="100px" />
47
-      <el-table-column label="业主联系人" align="center" prop="aPerson" min-width="100px" />
48
-      <el-table-column label="业主联系电话" align="center" prop="aPhone" 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" /> -->
49 46
       <el-table-column label="招标代理" align="center" prop="agent" min-width="100px" />
50
-      <el-table-column label="代理联系人" align="center" prop="agentPerson" min-width="100px" />
51
-      <el-table-column label="代理联系电话" align="center" prop="agentPhone" 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" /> -->
52 49
       <el-table-column label="招标地点" align="center" prop="place" min-width="100px" />
53
-      <el-table-column label="投标部门" align="center" prop="dept" min-width="100px">
50
+      <!-- <el-table-column label="投标部门" align="center" prop="dept" min-width="100px">
54 51
         <template slot-scope="scope">
55 52
           {{ getNameByDeptId(scope.row.dept) }}
56 53
         </template>
57
-      </el-table-column>
54
+</el-table-column> -->
58 55
       <el-table-column label="投标委托人" align="center" prop="trustee" min-width="100px">
59 56
         <template slot-scope="scope">
60 57
           {{ getNameByUserId(scope.row.trustee) }}
@@ -94,6 +91,8 @@
94 91
       <!-- <el-table-column label="标书文件" align="center" prop="tenderDocument" /> -->
95 92
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right">
96 93
         <template slot-scope="scope">
94
+          <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)"
95
+            v-hasPermi="['oa:tender:view']">查看</el-button>
97 96
           <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
98 97
             v-hasPermi="['oa:tender:edit']">修改</el-button>
99 98
           <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
@@ -108,7 +107,7 @@
108 107
     <!-- 添加或修改投标管理对话框 -->
109 108
     <el-dialog :title="title" :visible.sync="open" :width="dialogProperty.dialogWidth" append-to-body
110 109
       :close-on-click-modal="false">
111
-      <el-form ref="form" :rules="rules" :model="form">
110
+      <el-form ref="form" :rules="rules" :model="form" :disabled="formDisabled">
112 111
         <el-descriptions class="margin-top" :column="dialogProperty.column" border>
113 112
           <el-descriptions-item :span="3">
114 113
             <template slot="label">
@@ -252,9 +251,12 @@
252 251
             <template slot="label">
253 252
               招标文件
254 253
             </template>
255
-            <FileUpload v-if="form.tenderId == null" ref="zbFile" :limit="1"
254
+            <FileUpload v-if="form.tenderId == null" ref="zbFile" :limit="1" :filePathName="'投标文件'"
256 255
               :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="getUploadPathBidDocument"></FileUpload>
257 256
             <div v-if="form.tenderId != null">
257
+
258
+              <FileUpload ref="zb" :limit="1" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" :isShowTip="false"
259
+              :filePathName="'投标文件'" :isModify="true" @input="getUploadPathBidDocument"></FileUpload>
258 260
               <transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear"
259 261
                 tag="ul">
260 262
                 <li key="li01" class="el-upload-list__item ele-upload-list__item-content">
@@ -262,6 +264,9 @@
262 264
                     target="_blank">
263 265
                     <span class="el-icon-document"> {{ getFileName(form.bidDocument) }} </span>
264 266
                   </el-link>
267
+                  <div class="ele-upload-list__item-content-action">
268
+                    <el-link :underline="false" @click="handleFileDelete('zb')" type="danger">删除</el-link>
269
+                  </div>
265 270
                 </li>
266 271
               </transition-group>
267 272
             </div>
@@ -353,9 +358,11 @@
353 358
             <template slot="label">
354 359
               标书文件
355 360
             </template>
356
-            <FileUpload v-if="form.tenderId == null" ref="bsFile" :limit="1" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']"
357
-              @input="getUploadPathTenderDocument"></FileUpload>
361
+            <FileUpload v-if="form.tenderId == null" ref="bsFile" :limit="1" :filePathName="'投标文件'"
362
+              :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="getUploadPathTenderDocument"></FileUpload>
358 363
             <div v-if="form.tenderId != null">
364
+              <FileUpload ref="bs" :limit="1" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" :isShowTip="false"  :filePathName="'投标文件'"
365
+                :isModify="true" @input="getUploadPathTenderDocument"></FileUpload>
359 366
               <transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear"
360 367
                 tag="ul">
361 368
                 <li key="li02" class="el-upload-list__item ele-upload-list__item-content">
@@ -363,8 +370,9 @@
363 370
                     target="_blank">
364 371
                     <span class="el-icon-document"> {{ getFileName(form.tenderDocument) }} </span>
365 372
                   </el-link>
366
-                  <FileUpload :limit="1" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" :isShowTip="false" :isModify="true"
367
-                    @input="getUploadPathTenderDocument"></FileUpload>
373
+                  <div class="ele-upload-list__item-content-action">
374
+                    <el-link :underline="false" @click="handleFileDelete('bs')" type="danger">删除</el-link>
375
+                  </div>
368 376
                 </li>
369 377
               </transition-group>
370 378
             </div>
@@ -372,7 +380,7 @@
372 380
         </el-descriptions>
373 381
       </el-form>
374 382
       <div slot="footer" class="dialog-footer" style="text-align: center;">
375
-        <el-button type="primary" @click="submitForm">确 定</el-button>
383
+        <el-button :disabled="formDisabled" type="primary" @click="submitForm">确 定</el-button>
376 384
         <el-button @click="cancel">取 消</el-button>
377 385
       </div>
378 386
     </el-dialog>
@@ -412,6 +420,7 @@ export default {
412 420
         dialogWidth: '1200px',
413 421
         column: 3,
414 422
       },
423
+      formDisabled: false,
415 424
       // 查询参数
416 425
       queryParams: {
417 426
         pageNum: 1,
@@ -520,7 +529,6 @@ export default {
520 529
     getUserList() {
521 530
       listUser({ pageNum: 1, pageSize: 99999, deptId: this.form.dept }).then(response => {
522 531
         this.userList = response.rows;
523
-        console.log(response.rows);
524 532
       }
525 533
       );
526 534
     },
@@ -606,6 +614,16 @@ export default {
606 614
       this.form.dept = 105
607 615
       this.open = true;
608 616
       this.title = "添加投标信息";
617
+      this.formDisabled = false;
618
+    },
619
+    handleView(row) {
620
+      const tenderId = row.tenderId || this.ids
621
+      getTender(tenderId).then(response => {
622
+        this.form = response.data;
623
+        this.open = true;
624
+        this.formDisabled = true;
625
+        this.title = "查看投标信息";
626
+      });
609 627
     },
610 628
     /** 修改按钮操作 */
611 629
     handleUpdate(row) {
@@ -614,6 +632,7 @@ export default {
614 632
       getTender(tenderId).then(response => {
615 633
         this.form = response.data;
616 634
         this.open = true;
635
+        this.formDisabled = false;
617 636
         this.title = "修改投标信息";
618 637
       });
619 638
     },
@@ -639,22 +658,33 @@ export default {
639 658
       });
640 659
     },
641 660
     getUploadPathBidDocument(val) {
642
-      console.log(val);
643 661
       let arr = val.split('/upload')
644 662
       this.form.bidDocument = arr[1]
663
+      if (val == "") {
664
+        this.form.bidDocument = ""
665
+      }
645 666
     },
646 667
     getUploadPathTenderDocument(val) {
647 668
       let arr = val.split('/upload')
648 669
       this.form.tenderDocument = arr[1]
670
+      if (val == "") {
671
+        this.form.tenderDocument = ""
672
+      }
649 673
     },
650 674
     getFileName(name) {
651 675
       let arr = name.split('/')
652 676
       return arr[arr.length - 1];
653 677
     },
678
+    handleFileDelete(name) {
679
+      if (name == 'zb')
680
+        this.$refs.zb.handleDelete(0);
681
+      else
682
+        this.$refs.bs.handleDelete(0);
683
+    },
654 684
     /** 删除按钮操作 */
655 685
     handleDelete(row) {
656 686
       const tenderIds = row.tenderId || this.ids;
657
-      this.$modal.confirm('是否确认删除投标管理编号为"' + tenderIds + '"的数据项?').then(function () {
687
+      this.$modal.confirm('删除后不可恢复,是否确认删除?').then(function () {
658 688
         return delTender(tenderIds);
659 689
       }).then(() => {
660 690
         this.getList();
@@ -675,6 +705,8 @@ export default {
675 705
 };
676 706
 </script>
677 707
 <style lang="scss" scoped>
708
+@import "@/assets/styles/element-reset.scss";
709
+
678 710
 ::v-deep .el-descriptions-item__label.is-bordered-label {
679 711
   color: #121212;
680 712
   // background: rgba($color: #46a6ff, $alpha: 0.1);
@@ -700,4 +732,27 @@ export default {
700 732
   font-weight: bold;
701 733
   display: inline-block;
702 734
 }
735
+
736
+
737
+.upload-file-uploader {
738
+  margin-bottom: 5px;
739
+}
740
+
741
+.upload-file-list .el-upload-list__item {
742
+  border: 1px solid #e4e7ed;
743
+  line-height: 2;
744
+  margin-bottom: 10px;
745
+  position: relative;
746
+}
747
+
748
+.upload-file-list .ele-upload-list__item-content {
749
+  display: flex;
750
+  justify-content: space-between;
751
+  align-items: center;
752
+  color: inherit;
753
+}
754
+
755
+.ele-upload-list__item-content-action .el-link {
756
+  margin-right: 10px;
757
+}
703 758
 </style>

Loading…
Avbryt
Spara