Sfoglia il codice sorgente

修改投标上传文件

余思翰 1 anno fa
parent
commit
b2f4dd129a
2 ha cambiato i file con 439 aggiunte e 295 eliminazioni
  1. 48
    15
      oa-ui/src/components/FileUpload/index.vue
  2. 391
    280
      oa-ui/src/views/oa/tender/index.vue

+ 48
- 15
oa-ui/src/components/FileUpload/index.vue Vedi File

1
 <template>
1
 <template>
2
   <div class="upload-file">
2
   <div class="upload-file">
3
     <el-upload
3
     <el-upload
4
-      multiple
5
       :action="uploadFileUrl"
4
       :action="uploadFileUrl"
5
+      :data="additionalData"
6
       :before-upload="handleBeforeUpload"
6
       :before-upload="handleBeforeUpload"
7
       :file-list="fileList"
7
       :file-list="fileList"
8
       :limit="limit"
8
       :limit="limit"
13
       :headers="headers"
13
       :headers="headers"
14
       class="upload-file-uploader"
14
       class="upload-file-uploader"
15
       ref="fileUpload"
15
       ref="fileUpload"
16
+      accept=".doc,.docx,.xls,.xlsx,.pdf"
16
     >
17
     >
17
       <!-- 上传按钮 -->
18
       <!-- 上传按钮 -->
18
       <el-button size="mini" type="primary">选取文件</el-button>
19
       <el-button size="mini" type="primary">选取文件</el-button>
19
       <!-- 上传提示 -->
20
       <!-- 上传提示 -->
20
       <div class="el-upload__tip" slot="tip" v-if="showTip">
21
       <div class="el-upload__tip" slot="tip" v-if="showTip">
21
         请上传
22
         请上传
22
-        <template v-if="fileSize"> 大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b> </template>
23
-        <template v-if="fileType"> 格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b> </template>
23
+        <template v-if="fileSize">
24
+          大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
25
+        </template>
26
+        <template v-if="fileType">
27
+          格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b>
28
+        </template>
24
         的文件
29
         的文件
25
       </div>
30
       </div>
26
     </el-upload>
31
     </el-upload>
27
 
32
 
28
     <!-- 文件列表 -->
33
     <!-- 文件列表 -->
29
-    <transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear" tag="ul">
30
-      <li :key="file.url" class="el-upload-list__item ele-upload-list__item-content" v-for="(file, index) in fileList">
34
+    <transition-group
35
+      class="upload-file-list el-upload-list el-upload-list--text"
36
+      name="el-fade-in-linear"
37
+      tag="ul"
38
+    >
39
+      <li
40
+        :key="file.url"
41
+        class="el-upload-list__item ele-upload-list__item-content"
42
+        v-for="(file, index) in fileList"
43
+        v-if="!isModify"
44
+      >
31
         <el-link :href="`${baseUrl}${file.url}`" :underline="false" target="_blank">
45
         <el-link :href="`${baseUrl}${file.url}`" :underline="false" target="_blank">
32
           <span class="el-icon-document"> {{ getFileName(file.name) }} </span>
46
           <span class="el-icon-document"> {{ getFileName(file.name) }} </span>
33
         </el-link>
47
         </el-link>
34
         <div class="ele-upload-list__item-content-action">
48
         <div class="ele-upload-list__item-content-action">
35
-          <el-link :underline="false" @click="handleDelete(index)" type="danger">删除</el-link>
49
+          <el-link :underline="false" @click="handleDelete(index)" type="danger"
50
+            >删除</el-link
51
+          >
36
         </div>
52
         </div>
37
       </li>
53
       </li>
38
     </transition-group>
54
     </transition-group>
65
     // 是否显示提示
81
     // 是否显示提示
66
     isShowTip: {
82
     isShowTip: {
67
       type: Boolean,
83
       type: Boolean,
68
-      default: true
84
+      default: true,
85
+    },
86
+    isModify:{
87
+      type: Boolean,
88
+      default: false,
69
     }
89
     }
70
   },
90
   },
71
   data() {
91
   data() {
77
       headers: {
97
       headers: {
78
         Authorization: "Bearer " + getToken(),
98
         Authorization: "Bearer " + getToken(),
79
       },
99
       },
100
+      additionalData: {
101
+        fileType: "投标文件",
102
+      },
80
       fileList: [],
103
       fileList: [],
81
     };
104
     };
82
   },
105
   },
86
         if (val) {
109
         if (val) {
87
           let temp = 1;
110
           let temp = 1;
88
           // 首先将值转为数组
111
           // 首先将值转为数组
89
-          const list = Array.isArray(val) ? val : this.value.split(',');
112
+          const list = Array.isArray(val) ? val : this.value.split(",");
90
           // 然后将数组转为对象数组
113
           // 然后将数组转为对象数组
91
           this.fileList = list.map(item => {
114
           this.fileList = list.map(item => {
92
             if (typeof item === "string") {
115
             if (typeof item === "string") {
101
         }
124
         }
102
       },
125
       },
103
       deep: true,
126
       deep: true,
104
-      immediate: true
105
-    }
127
+      immediate: true,
128
+    },
106
   },
129
   },
107
   computed: {
130
   computed: {
108
     // 是否显示提示
131
     // 是否显示提示
115
     handleBeforeUpload(file) {
138
     handleBeforeUpload(file) {
116
       // 校检文件类型
139
       // 校检文件类型
117
       if (this.fileType) {
140
       if (this.fileType) {
118
-        const fileName = file.name.split('.');
141
+        const fileName = file.name.split(".");
119
         const fileExt = fileName[fileName.length - 1];
142
         const fileExt = fileName[fileName.length - 1];
120
         const isTypeOk = this.fileType.indexOf(fileExt) >= 0;
143
         const isTypeOk = this.fileType.indexOf(fileExt) >= 0;
121
         if (!isTypeOk) {
144
         if (!isTypeOk) {
122
-          this.$modal.msgError(`文件格式不正确, 请上传${this.fileType.join("/")}格式文件!`);
145
+          this.$modal.msgError(
146
+            `文件格式不正确, 请上传${this.fileType.join("/")}格式文件!`
147
+          );
123
           return false;
148
           return false;
124
         }
149
         }
125
       }
150
       }
147
     // 上传成功回调
172
     // 上传成功回调
148
     handleUploadSuccess(res, file) {
173
     handleUploadSuccess(res, file) {
149
       if (res.code === 200) {
174
       if (res.code === 200) {
175
+        console.log(res);
150
         this.uploadList.push({ name: res.fileName, url: res.fileName });
176
         this.uploadList.push({ name: res.fileName, url: res.fileName });
151
         this.uploadedSuccessfully();
177
         this.uploadedSuccessfully();
152
       } else {
178
       } else {
184
     // 对象转成指定字符串分隔
210
     // 对象转成指定字符串分隔
185
     listToString(list, separator) {
211
     listToString(list, separator) {
186
       let strs = "";
212
       let strs = "";
213
+      debugger
187
       separator = separator || ",";
214
       separator = separator || ",";
188
       for (let i in list) {
215
       for (let i in list) {
189
         strs += list[i].url + separator;
216
         strs += list[i].url + separator;
190
       }
217
       }
191
-      return strs != '' ? strs.substr(0, strs.length - 1) : '';
192
-    }
193
-  }
218
+      return strs != "" ? strs.substr(0, strs.length - 1) : "";
219
+    },
220
+    handleUpload() {
221
+      this.$refs.fileUpload.submit();
222
+    },
223
+  },
194
 };
224
 };
195
 </script>
225
 </script>
196
 
226
 
198
 .upload-file-uploader {
228
 .upload-file-uploader {
199
   margin-bottom: 5px;
229
   margin-bottom: 5px;
200
 }
230
 }
231
+
201
 .upload-file-list .el-upload-list__item {
232
 .upload-file-list .el-upload-list__item {
202
   border: 1px solid #e4e7ed;
233
   border: 1px solid #e4e7ed;
203
   line-height: 2;
234
   line-height: 2;
204
   margin-bottom: 10px;
235
   margin-bottom: 10px;
205
   position: relative;
236
   position: relative;
206
 }
237
 }
238
+
207
 .upload-file-list .ele-upload-list__item-content {
239
 .upload-file-list .ele-upload-list__item-content {
208
   display: flex;
240
   display: flex;
209
   justify-content: space-between;
241
   justify-content: space-between;
210
   align-items: center;
242
   align-items: center;
211
   color: inherit;
243
   color: inherit;
212
 }
244
 }
245
+
213
 .ele-upload-list__item-content-action .el-link {
246
 .ele-upload-list__item-content-action .el-link {
214
   margin-right: 10px;
247
   margin-right: 10px;
215
 }
248
 }

+ 391
- 280
oa-ui/src/views/oa/tender/index.vue Vedi File

50
       <el-table-column label="代理联系人" align="center" prop="agentPerson" 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" />
51
       <el-table-column label="代理联系电话" align="center" prop="agentPhone" min-width="100px" />
52
       <el-table-column label="招标地点" align="center" prop="place" min-width="100px" />
52
       <el-table-column label="招标地点" align="center" prop="place" min-width="100px" />
53
-      <el-table-column label="投标部门" align="center" prop="dept" min-width="100px" />
54
-      <el-table-column label="投标委托人" align="center" prop="trustee" min-width="100px" />
53
+      <el-table-column label="投标部门" align="center" prop="dept" min-width="100px">
54
+        <template slot-scope="scope">
55
+          {{ getNameByDeptId(scope.row.dept) }}
56
+        </template>
57
+      </el-table-column>
58
+      <el-table-column label="投标委托人" align="center" prop="trustee" min-width="100px">
59
+        <template slot-scope="scope">
60
+          {{ getNameByUserId(scope.row.trustee) }}
61
+        </template>
62
+      </el-table-column>
55
       <el-table-column label="业主预算" align="center" prop="budget" min-width="100px" />
63
       <el-table-column label="业主预算" align="center" prop="budget" min-width="100px" />
56
       <el-table-column label="拟报价金额" align="center" prop="quote" min-width="100px" />
64
       <el-table-column label="拟报价金额" align="center" prop="quote" min-width="100px" />
57
       <el-table-column label="保证金" align="center" prop="deposit" min-width="100px" />
65
       <el-table-column label="保证金" align="center" prop="deposit" min-width="100px" />
84
       <!-- <el-table-column label="标书检查人" align="center" prop="tenderChecker" /> -->
92
       <!-- <el-table-column label="标书检查人" align="center" prop="tenderChecker" /> -->
85
       <!-- <el-table-column label="标书打印装订人" align="center" prop="tenderPrinter" /> -->
93
       <!-- <el-table-column label="标书打印装订人" align="center" prop="tenderPrinter" /> -->
86
       <!-- <el-table-column label="标书文件" align="center" prop="tenderDocument" /> -->
94
       <!-- <el-table-column label="标书文件" align="center" prop="tenderDocument" /> -->
87
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
95
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right">
88
         <template slot-scope="scope">
96
         <template slot-scope="scope">
89
           <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
97
           <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
90
             v-hasPermi="['oa:tender:edit']">修改</el-button>
98
             v-hasPermi="['oa:tender:edit']">修改</el-button>
98
       @pagination="getList" />
106
       @pagination="getList" />
99
 
107
 
100
     <!-- 添加或修改投标管理对话框 -->
108
     <!-- 添加或修改投标管理对话框 -->
101
-    <el-dialog :title="title" :visible.sync="open" :width="dialogProperty.dialogWidth" append-to-body :close-on-click-modal="false">
102
-      <el-descriptions class="margin-top" :column="dialogProperty.column" border>
103
-        <el-descriptions-item :span="3">
104
-          <template slot="label">
105
-            投标项目名称
106
-          </template>
107
-          <el-input v-model="form.projectName"></el-input>
108
-        </el-descriptions-item>
109
-        <el-descriptions-item>
110
-          <template slot="label">
111
-            招标业主
112
-          </template>
113
-          <el-input v-model="form.partyA"></el-input>
114
-        </el-descriptions-item>
115
-        <el-descriptions-item>
116
-          <template slot="label">
117
-            业主联系人
118
-          </template>
119
-          <el-input v-model="form.aPerson"></el-input>
120
-        </el-descriptions-item>
121
-        <el-descriptions-item>
122
-          <template slot="label">
123
-            业主联系电话
124
-          </template>
125
-          <el-input v-model="form.aPhone"></el-input>
126
-        </el-descriptions-item>
127
-        <el-descriptions-item>
128
-          <template slot="label">
129
-            招标代理
130
-          </template>
131
-          <el-input v-model="form.agent"></el-input>
132
-        </el-descriptions-item>
133
-        <el-descriptions-item>
134
-          <template slot="label">
135
-            代理联系人
136
-          </template>
137
-          <el-input v-model="form.agentPerson"></el-input>
138
-        </el-descriptions-item>
139
-        <el-descriptions-item>
140
-          <template slot="label">
141
-            代理联系电话
142
-          </template>
143
-          <el-input v-model="form.agentPhone"></el-input>
144
-        </el-descriptions-item>
145
-        <el-descriptions-item>
146
-          <template slot="label">
147
-            招标地点
148
-          </template>
149
-          <el-input v-model="form.place"></el-input>
150
-        </el-descriptions-item>
151
-        <el-descriptions-item>
152
-          <template slot="label">
153
-            投标部门
154
-          </template>
155
-          <el-input v-model="form.dept"></el-input>
156
-        </el-descriptions-item>
157
-        <el-descriptions-item>
158
-          <template slot="label">
159
-            投标委托人
160
-          </template>
161
-          <el-input v-model="form.trustee"></el-input>
162
-        </el-descriptions-item>
163
-        <el-descriptions-item>
164
-          <template slot="label">
165
-            业主预算
166
-          </template>
167
-          <el-input v-model="form.budget">
168
-            <span slot="append">元</span>
169
-          </el-input>
170
-        </el-descriptions-item>
171
-        <el-descriptions-item>
172
-          <template slot="label">
173
-            拟报价金额
174
-          </template>
175
-          <el-input v-model="form.quote">
176
-            <span slot="append">元</span>
177
-          </el-input>
178
-        </el-descriptions-item>
179
-        <el-descriptions-item>
180
-          <template slot="label">
181
-            保证金
182
-          </template>
183
-          <el-input v-model="form.deposit">
184
-            <span slot="append">元</span>
185
-          </el-input>
186
-        </el-descriptions-item>
187
-        <el-descriptions-item>
188
-          <template slot="label">
189
-            投标时间
190
-          </template>
191
-          <el-date-picker clearable v-model="form.tenderTime" type="date" value-format="yyyy-MM-dd"
192
-            placeholder="请选择投标时间">
193
-          </el-date-picker>
194
-        </el-descriptions-item>
195
-        <el-descriptions-item>
196
-          <template slot="label">
197
-            标书购买截止时间
198
-          </template>
199
-          <el-date-picker clearable v-model="form.bidBuyDeadline" type="date" value-format="yyyy-MM-dd"
200
-            placeholder="请选择标书购买截止时间">
201
-          </el-date-picker>
202
-        </el-descriptions-item>
203
-        <el-descriptions-item>
204
-          <template slot="label">
205
-            招标信息网址
206
-          </template>
207
-          <el-input v-model="form.bidWebsite"></el-input>
208
-        </el-descriptions-item>
209
-        <el-descriptions-item :span="3">
210
-          <template slot="label">
211
-            招标文件
212
-          </template>
213
-          <el-input v-model="form.bidDocument"></el-input>
214
-        </el-descriptions-item>
215
-        <el-descriptions-item :span="3">
216
-          <template slot="label">
217
-            项目内容简述
218
-          </template>
219
-          <el-input v-model="form.projectBriefly"></el-input>
220
-        </el-descriptions-item>
221
-        <el-descriptions-item>
222
-          <template slot="label">
223
-            商务标书编写人
224
-          </template>
225
-          <el-input v-model="form.businessWriter"></el-input>
226
-        </el-descriptions-item>
227
-        <el-descriptions-item>
228
-          <template slot="label">
229
-            商务标书要求提交时间
230
-          </template>
231
-          <el-date-picker clearable v-model="form.businessDeadline" type="date" value-format="yyyy-MM-dd"
232
-            placeholder="请选择商务标书要求提交时间">
233
-          </el-date-picker>
234
-        </el-descriptions-item>
235
-        <el-descriptions-item>
236
-          <template slot="label">
237
-            技术标书编写人
238
-          </template>
239
-          <el-input v-model="form.techWriter"></el-input>
240
-        </el-descriptions-item>
241
-        <el-descriptions-item>
242
-          <template slot="label">
243
-            技术标书要求提交时间
244
-          </template>
245
-          <el-date-picker clearable v-model="form.techDeadline" type="date" value-format="yyyy-MM-dd"
246
-            placeholder="请选择技术标书要求提交时间">
247
-          </el-date-picker>
248
-        </el-descriptions-item>
249
-        <el-descriptions-item>
250
-          <template slot="label">
251
-            标书合稿人
252
-          </template>
253
-          <el-input v-model="form.tenderCombiner"></el-input>
254
-        </el-descriptions-item>
255
-        <el-descriptions-item>
256
-          <template slot="label">
257
-            标书检查人
258
-          </template>
259
-          <el-input v-model="form.tenderChecker"></el-input>
260
-        </el-descriptions-item>
261
-        <el-descriptions-item>
262
-          <template slot="label">
263
-            标书打印装订人
264
-          </template>
265
-          <el-input v-model="form.tenderPrinter"></el-input>
266
-        </el-descriptions-item>
267
-        <el-descriptions-item>
268
-          <template slot="label">
269
-            标书文件
270
-          </template>
271
-          <el-input v-model="form.tenderDocument"></el-input>
272
-        </el-descriptions-item>
273
-      </el-descriptions>
274
-
275
-      <!-- <el-form ref="form" :model="form" :rules="rules" label-width="160px" style="padding-right: 50px;">
276
-        <el-form-item label="投标项目名称" prop="projectName">
277
-          <el-input v-model="form.projectName" placeholder="请输入投标项目名称" />
278
-        </el-form-item>
279
-        <el-form-item label="招标业主" prop="partyA">
280
-          <el-input v-model="form.partyA" placeholder="请输入招标业主" />
281
-        </el-form-item>
282
-        <el-form-item label="业主联系人" prop="aPerson">
283
-          <el-input v-model="form.aPerson" placeholder="请输入业主联系人" />
284
-        </el-form-item>
285
-        <el-form-item label="业主联系电话" prop="aPhone">
286
-          <el-input v-model="form.aPhone" placeholder="请输入业主联系电话" />
287
-        </el-form-item>
288
-        <el-form-item label="招标代理" prop="agent">
289
-          <el-input v-model="form.agent" placeholder="请输入招标代理" />
290
-        </el-form-item>
291
-        <el-form-item label="代理联系人" prop="agentPerson">
292
-          <el-input v-model="form.agentPerson" placeholder="请输入代理联系人" />
293
-        </el-form-item>
294
-        <el-form-item label="代理联系电话" prop="agentPhone">
295
-          <el-input v-model="form.agentPhone" placeholder="请输入代理联系电话" />
296
-        </el-form-item>
297
-        <el-form-item label="招标地点" prop="place">
298
-          <el-input v-model="form.place" placeholder="请输入招标地点" />
299
-        </el-form-item>
300
-        <el-form-item label="投标部门" prop="dept">
301
-          <el-input v-model="form.dept" placeholder="请输入投标部门" />
302
-        </el-form-item>
303
-        <el-form-item label="投标委托人" prop="trustee">
304
-          <el-input v-model="form.trustee" placeholder="请输入投标委托人" />
305
-        </el-form-item>
306
-        <el-form-item label="业主预算" prop="budget">
307
-          <el-input v-model="form.budget" placeholder="请输入业主预算" />
308
-        </el-form-item>
309
-        <el-form-item label="拟报价金额" prop="quote">
310
-          <el-input v-model="form.quote" placeholder="请输入拟报价金额" />
311
-        </el-form-item>
312
-        <el-form-item label="保证金" prop="deposit">
313
-          <el-input v-model="form.deposit" placeholder="请输入保证金" />
314
-        </el-form-item>
315
-        <el-form-item label="投标时间" prop="tenderTime">
316
-          <el-date-picker clearable
317
-            v-model="form.tenderTime"
318
-            type="date"
319
-            value-format="yyyy-MM-dd"
320
-            placeholder="请选择投标时间">
321
-          </el-date-picker>
322
-        </el-form-item>
323
-        <el-form-item label="标书购买截止时间" prop="bidBuyDeadline">
324
-          <el-date-picker clearable
325
-            v-model="form.bidBuyDeadline"
326
-            type="date"
327
-            value-format="yyyy-MM-dd"
328
-            placeholder="请选择标书购买截止时间">
329
-          </el-date-picker>
330
-        </el-form-item>
331
-        <el-form-item label="招标信息网址" prop="bidWebsite">
332
-          <el-input v-model="form.bidWebsite" placeholder="请输入招标信息网址" />
333
-        </el-form-item>
334
-        <el-form-item label="招标文件" prop="bidDocument">
335
-          <el-input v-model="form.bidDocument" placeholder="请输入招标文件" />
336
-        </el-form-item>
337
-        <el-form-item label="项目内容简述" prop="projectBriefly">
338
-          <el-input v-model="form.projectBriefly" placeholder="请输入项目内容简述" />
339
-        </el-form-item>
340
-        <el-form-item label="商务标书编写人" prop="businessWriter">
341
-          <el-input v-model="form.businessWriter" placeholder="请输入商务标书编写人" />
342
-        </el-form-item>
343
-        <el-form-item label="商务标书要求提交时间" prop="businessDeadline">
344
-          <el-date-picker clearable
345
-            v-model="form.businessDeadline"
346
-            type="date"
347
-            value-format="yyyy-MM-dd"
348
-            placeholder="请选择商务标书要求提交时间">
349
-          </el-date-picker>
350
-        </el-form-item>
351
-        <el-form-item label="技术标书编写人" prop="techWriter">
352
-          <el-input v-model="form.techWriter" placeholder="请输入技术标书编写人" />
353
-        </el-form-item>
354
-        <el-form-item label="技术标书要求提交时间" prop="techDeadline">
355
-          <el-date-picker clearable
356
-            v-model="form.techDeadline"
357
-            type="date"
358
-            value-format="yyyy-MM-dd"
359
-            placeholder="请选择技术标书要求提交时间">
360
-          </el-date-picker>
361
-        </el-form-item>
362
-        <el-form-item label="标书合稿人" prop="tenderCombiner">
363
-          <el-input v-model="form.tenderCombiner" placeholder="请输入标书合稿人" />
364
-        </el-form-item>
365
-        <el-form-item label="标书检查人" prop="tenderChecker">
366
-          <el-input v-model="form.tenderChecker" placeholder="请输入标书检查人" />
367
-        </el-form-item>
368
-        <el-form-item label="标书打印装订人" prop="tenderPrinter">
369
-          <el-input v-model="form.tenderPrinter" placeholder="请输入标书打印装订人" />
370
-        </el-form-item>
371
-        <el-form-item label="标书文件" prop="tenderDocument">
372
-          <el-input v-model="form.tenderDocument" placeholder="请输入标书文件" />
373
-        </el-form-item>
374
-      </el-form> -->
109
+    <el-dialog :title="title" :visible.sync="open" :width="dialogProperty.dialogWidth" append-to-body
110
+      :close-on-click-modal="false">
111
+      <el-form ref="form" :rules="rules" :model="form">
112
+        <el-descriptions class="margin-top" :column="dialogProperty.column" border>
113
+          <el-descriptions-item :span="3">
114
+            <template slot="label">
115
+              <span class="require_input">* </span>投标项目名称
116
+            </template>
117
+            <el-form-item prop="projectName">
118
+              <el-input v-model="form.projectName"></el-input>
119
+            </el-form-item>
120
+          </el-descriptions-item>
121
+          <el-descriptions-item>
122
+            <template slot="label">
123
+              <span class="require_input">* </span>招标业主
124
+            </template>
125
+            <el-form-item prop="partyA">
126
+              <el-input v-model="form.partyA"></el-input>
127
+            </el-form-item>
128
+          </el-descriptions-item>
129
+          <el-descriptions-item>
130
+            <template slot="label">
131
+              业主联系人
132
+            </template>
133
+            <el-form-item prop="aPerson">
134
+              <el-input v-model="form.aPerson"></el-input>
135
+            </el-form-item>
136
+          </el-descriptions-item>
137
+          <el-descriptions-item>
138
+            <template slot="label">
139
+              业主联系电话
140
+            </template>
141
+            <el-form-item prop="aPhone">
142
+              <el-input v-model="form.aPhone"></el-input>
143
+            </el-form-item>
144
+          </el-descriptions-item>
145
+          <el-descriptions-item>
146
+            <template slot="label">
147
+              <span class="require_input">* </span>招标代理
148
+            </template>
149
+            <el-form-item prop="agent">
150
+              <el-input v-model="form.agent"></el-input>
151
+            </el-form-item>
152
+          </el-descriptions-item>
153
+          <el-descriptions-item>
154
+            <template slot="label">
155
+              代理联系人
156
+            </template>
157
+            <el-form-item prop="agentPerson">
158
+              <el-input v-model="form.agentPerson"></el-input>
159
+            </el-form-item>
160
+          </el-descriptions-item>
161
+          <el-descriptions-item>
162
+            <template slot="label">
163
+              代理联系电话
164
+            </template>
165
+            <el-form-item prop="agentPhone">
166
+              <el-input v-model="form.agentPhone"></el-input>
167
+            </el-form-item>
168
+          </el-descriptions-item>
169
+          <el-descriptions-item>
170
+            <template slot="label">
171
+              <span class="require_input">* </span>投标地点
172
+            </template>
173
+            <el-form-item prop="place">
174
+              <el-input v-model="form.place"></el-input>
175
+            </el-form-item>
176
+          </el-descriptions-item>
177
+          <el-descriptions-item>
178
+            <template slot="label">
179
+              投标部门
180
+            </template>
181
+            <el-form-item prop="dept">
182
+              <el-select v-model="form.dept" placeholder="请选择" style="width:100%;" @change="getUserList()">
183
+                <el-option v-for="item in deptList" :key="item.id" :label="item.label" :value="item.id">
184
+                </el-option>
185
+              </el-select>
186
+            </el-form-item>
187
+          </el-descriptions-item>
188
+          <el-descriptions-item>
189
+            <template slot="label">
190
+              <span class="require_input">* </span>投标委托人
191
+            </template>
192
+            <el-form-item prop="trustee">
193
+              <el-select v-model="form.trustee" placeholder="请选择" style="width:100%;">
194
+                <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId">
195
+                </el-option>
196
+              </el-select>
197
+            </el-form-item>
198
+          </el-descriptions-item>
199
+          <el-descriptions-item>
200
+            <template slot="label">
201
+              <span class="require_input">* </span>业主预算
202
+            </template>
203
+            <el-form-item prop="budget">
204
+              <el-input-number :controls="false" v-model="form.budget"></el-input-number><span> 元</span>
205
+            </el-form-item>
206
+          </el-descriptions-item>
207
+          <el-descriptions-item>
208
+            <template slot="label">
209
+              拟报价金额
210
+            </template>
211
+            <el-form-item prop="quote">
212
+              <el-input-number :controls="false" v-model="form.quote"></el-input-number><span> 元</span>
213
+            </el-form-item>
214
+          </el-descriptions-item>
215
+          <el-descriptions-item>
216
+            <template slot="label">
217
+              保证金
218
+            </template>
219
+            <el-form-item prop="deposit">
220
+              <el-input-number :controls="false" v-model="form.deposit"></el-input-number><span> 元</span>
221
+            </el-form-item>
222
+          </el-descriptions-item>
223
+          <el-descriptions-item>
224
+            <template slot="label">
225
+              <span class="require_input">* </span>投标时间
226
+            </template>
227
+            <el-form-item prop="tenderTime">
228
+              <el-date-picker clearable v-model="form.tenderTime" type="date" value-format="yyyy-MM-dd"
229
+                placeholder="请选择投标时间">
230
+              </el-date-picker>
231
+            </el-form-item>
232
+          </el-descriptions-item>
233
+          <el-descriptions-item>
234
+            <template slot="label">
235
+              标书购买截止时间
236
+            </template>
237
+            <el-form-item prop="bidBuyDeadline">
238
+              <el-date-picker clearable v-model="form.bidBuyDeadline" type="date" value-format="yyyy-MM-dd"
239
+                placeholder="标书购买截止时间">
240
+              </el-date-picker>
241
+            </el-form-item>
242
+          </el-descriptions-item>
243
+          <el-descriptions-item>
244
+            <template slot="label">
245
+              招标信息网址
246
+            </template>
247
+            <el-form-item prop="bidWebsite">
248
+              <el-input v-model="form.bidWebsite"></el-input>
249
+            </el-form-item>
250
+          </el-descriptions-item>
251
+          <el-descriptions-item :span="3">
252
+            <template slot="label">
253
+              招标文件
254
+            </template>
255
+            <FileUpload v-if="form.tenderId == null" ref="zbFile" :limit="1"
256
+              :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="getUploadPathBidDocument"></FileUpload>
257
+            <div v-if="form.tenderId != null">
258
+              <transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear"
259
+                tag="ul">
260
+                <li key="li01" class="el-upload-list__item ele-upload-list__item-content">
261
+                  <el-link :href="`${baseUrl}${'/profile/upload' + form.bidDocument}`" :underline="false"
262
+                    target="_blank">
263
+                    <span class="el-icon-document"> {{ getFileName(form.bidDocument) }} </span>
264
+                  </el-link>
265
+                </li>
266
+              </transition-group>
267
+            </div>
268
+          </el-descriptions-item>
269
+          <el-descriptions-item :span="3">
270
+            <template slot="label">
271
+              项目内容简述
272
+            </template>
273
+            <el-form-item prop="projectBriefly">
274
+              <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 4 }" v-model="form.projectBriefly"></el-input>
275
+            </el-form-item>
276
+          </el-descriptions-item>
277
+          <el-descriptions-item>
278
+            <template slot="label">
279
+              <span class="require_input">* </span>商务标书编写人
280
+            </template>
281
+            <el-form-item prop="businessWriter">
282
+              <el-select v-model="form.businessWriter" placeholder="请选择" style="width:100%;">
283
+                <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId">
284
+                </el-option>
285
+              </el-select>
286
+            </el-form-item>
287
+          </el-descriptions-item>
288
+          <el-descriptions-item>
289
+            <template slot="label">
290
+              <span class="require_input">* </span>商务标书要求提交时间
291
+            </template>
292
+            <el-form-item prop="businessDeadline">
293
+              <el-date-picker clearable v-model="form.businessDeadline" type="date" value-format="yyyy-MM-dd"
294
+                placeholder="请选择商务标书要求提交时间">
295
+              </el-date-picker>
296
+            </el-form-item>
297
+          </el-descriptions-item>
298
+          <el-descriptions-item>
299
+            <template slot="label">
300
+              <span class="require_input">* </span>技术标书编写人
301
+            </template>
302
+            <el-form-item prop="techWriter">
303
+              <el-select v-model="form.techWriter" placeholder="请选择" style="width:100%;">
304
+                <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId">
305
+                </el-option>
306
+              </el-select>
307
+            </el-form-item>
308
+          </el-descriptions-item>
309
+          <el-descriptions-item>
310
+            <template slot="label">
311
+              <span class="require_input">* </span>技术标书要求提交时间
312
+            </template>
313
+            <el-form-item prop="techDeadline">
314
+              <el-date-picker clearable v-model="form.techDeadline" type="date" value-format="yyyy-MM-dd"
315
+                placeholder="请选择技术标书要求提交时间">
316
+              </el-date-picker>
317
+            </el-form-item>
318
+          </el-descriptions-item>
319
+          <el-descriptions-item>
320
+            <template slot="label">
321
+              <span class="require_input">* </span>标书合稿人
322
+            </template>
323
+            <el-form-item prop="tenderCombiner">
324
+              <el-select v-model="form.tenderCombiner" placeholder="请选择" style="width:100%;">
325
+                <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId">
326
+                </el-option>
327
+              </el-select>
328
+            </el-form-item>
329
+          </el-descriptions-item>
330
+          <el-descriptions-item>
331
+            <template slot="label">
332
+              <span class="require_input">* </span>标书检查人
333
+            </template>
334
+            <el-form-item prop="tenderChecker">
335
+              <el-select v-model="form.tenderChecker" placeholder="请选择" style="width:100%;">
336
+                <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId">
337
+                </el-option>
338
+              </el-select>
339
+            </el-form-item>
340
+          </el-descriptions-item>
341
+          <el-descriptions-item>
342
+            <template slot="label">
343
+              <span class="require_input">* </span>标书打印装订人
344
+            </template>
345
+            <el-form-item prop="tenderPrinter">
346
+              <el-select v-model="form.tenderPrinter" placeholder="请选择" style="width:100%;">
347
+                <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId">
348
+                </el-option>
349
+              </el-select>
350
+            </el-form-item>
351
+          </el-descriptions-item>
352
+          <el-descriptions-item>
353
+            <template slot="label">
354
+              标书文件
355
+            </template>
356
+            <FileUpload v-if="form.tenderId == null" ref="bsFile" :limit="1" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']"
357
+              @input="getUploadPathTenderDocument"></FileUpload>
358
+            <div v-if="form.tenderId != null">
359
+              <transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear"
360
+                tag="ul">
361
+                <li key="li02" class="el-upload-list__item ele-upload-list__item-content">
362
+                  <el-link :href="`${baseUrl}${'/profile/upload' + form.tenderDocument}`" :underline="false"
363
+                    target="_blank">
364
+                    <span class="el-icon-document"> {{ getFileName(form.tenderDocument) }} </span>
365
+                  </el-link>
366
+                  <FileUpload :limit="1" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" :isShowTip="false" :isModify="true"
367
+                    @input="getUploadPathTenderDocument"></FileUpload>
368
+                </li>
369
+              </transition-group>
370
+            </div>
371
+          </el-descriptions-item>
372
+        </el-descriptions>
373
+      </el-form>
375
       <div slot="footer" class="dialog-footer" style="text-align: center;">
374
       <div slot="footer" class="dialog-footer" style="text-align: center;">
376
         <el-button type="primary" @click="submitForm">确 定</el-button>
375
         <el-button type="primary" @click="submitForm">确 定</el-button>
377
         <el-button @click="cancel">取 消</el-button>
376
         <el-button @click="cancel">取 消</el-button>
382
 
381
 
383
 <script>
382
 <script>
384
 import { listTender, getTender, delTender, addTender, updateTender } from "@/api/oa/tender/tender";
383
 import { listTender, getTender, delTender, addTender, updateTender } from "@/api/oa/tender/tender";
385
-
384
+import { listDept } from '@/api/system/dept'
385
+import { listUser, deptTreeSelect } from "@/api/system/user";
386
+import { Snowflake } from '@/utils/snowFlake.js'
386
 export default {
387
 export default {
387
   name: "Tender",
388
   name: "Tender",
388
   data() {
389
   data() {
389
     return {
390
     return {
391
+      baseUrl: process.env.VUE_APP_BASE_API,
390
       // 遮罩层
392
       // 遮罩层
391
       loading: true,
393
       loading: true,
392
       // 选中数组
394
       // 选中数组
442
         tenderDocument: null
444
         tenderDocument: null
443
       },
445
       },
444
       // 表单参数
446
       // 表单参数
445
-      form: {},
447
+      form: {
448
+        dept: 105
449
+      },
446
       // 表单校验
450
       // 表单校验
447
       rules: {
451
       rules: {
448
-      }
452
+        projectName: [
453
+          { required: true, message: '投标项目名称不能为空', trigger: 'blur' }
454
+        ],
455
+        partyA: [
456
+          { required: true, message: '招标业主不能为空', trigger: 'blur' }
457
+        ],
458
+        budget: [
459
+          { required: true, message: '业主预算不能为空', trigger: 'blur' }
460
+        ],
461
+        agent: [
462
+          { required: true, message: '招标代理不能忘为空', trigger: 'blur' }
463
+        ],
464
+        place: [
465
+          { required: true, message: '投标地点不能为空', trigger: 'blur' }
466
+        ],
467
+        tenderTime: [
468
+          { required: true, message: '投标时间不能为空', trigger: 'change' }
469
+        ],
470
+        trustee: [
471
+          { required: true, message: '投标委托人不能为空', trigger: 'blur' }
472
+        ],
473
+        businessWriter: [
474
+          { required: true, message: '商务标书编写人不能为空', trigger: 'blur' }
475
+        ],
476
+        businessDeadline: [
477
+          { required: true, message: '要求时间不能为空', trigger: 'change' }
478
+        ],
479
+        techWriter: [
480
+          { required: true, message: '技术标书编写人不能为空', trigger: 'blur' }
481
+        ],
482
+        techDeadline: [
483
+          { required: true, message: '要求时间不能为空', trigger: 'change' }
484
+        ],
485
+        tenderCombiner: [
486
+          { required: true, message: '标书合稿人不能为空', trigger: 'blur' }
487
+        ],
488
+        tenderChecker: [
489
+          { required: true, message: '标书检查人不能为空', trigger: 'blur' }
490
+        ],
491
+        tenderPrinter: [
492
+          { required: true, message: '打印装订人不能为空', trigger: 'blur' }
493
+        ],
494
+
495
+      },
496
+      deptList: [],
497
+      deptOptions: undefined,
498
+      userList: [],
499
+
449
     };
500
     };
450
   },
501
   },
451
   created() {
502
   created() {
452
     this.getList();
503
     this.getList();
504
+    this.getDeptTree();
453
     if (this.$store.state.app.device == 'mobile') {
505
     if (this.$store.state.app.device == 'mobile') {
454
       this.dialogProperty.column = 1
506
       this.dialogProperty.column = 1
455
       this.dialogProperty.dialogWidth = '90%'
507
       this.dialogProperty.dialogWidth = '90%'
464
         this.total = response.total;
516
         this.total = response.total;
465
         this.loading = false;
517
         this.loading = false;
466
       });
518
       });
519
+    },/** 查询用户列表 */
520
+    getUserList() {
521
+      listUser({ pageNum: 1, pageSize: 99999, deptId: this.form.dept }).then(response => {
522
+        this.userList = response.rows;
523
+        console.log(response.rows);
524
+      }
525
+      );
526
+    },
527
+    /** 查询部门 */
528
+    getDeptTree() {
529
+      deptTreeSelect().then(response => {
530
+        this.deptOptions = response.data;
531
+        this.deptList = response.data[0].children;
532
+        this.getUserList();
533
+      });
534
+    },
535
+    getNameByUserId(userId) {
536
+      let curUser;
537
+      if (this.userList.length != 0) {
538
+        curUser = this.userList.filter(user => user.userId == userId);
539
+        return curUser[0].nickName
540
+      }
541
+    },
542
+    getNameByDeptId(deptId) {
543
+      let curDept;
544
+      if (this.deptList.length != 0) {
545
+        curDept = this.deptList.filter(dept => dept.id == deptId);
546
+        return curDept[0].label
547
+      }
467
     },
548
     },
468
     // 取消按钮
549
     // 取消按钮
469
     cancel() {
550
     cancel() {
522
     /** 新增按钮操作 */
603
     /** 新增按钮操作 */
523
     handleAdd() {
604
     handleAdd() {
524
       this.reset();
605
       this.reset();
606
+      this.form.dept = 105
525
       this.open = true;
607
       this.open = true;
526
       this.title = "添加投标信息";
608
       this.title = "添加投标信息";
527
     },
609
     },
546
               this.getList();
628
               this.getList();
547
             });
629
             });
548
           } else {
630
           } else {
631
+            this.form.tenderId = new Snowflake(1n, 1n, 0n).nextId().toString();
549
             addTender(this.form).then(response => {
632
             addTender(this.form).then(response => {
550
               this.$modal.msgSuccess("新增成功");
633
               this.$modal.msgSuccess("新增成功");
551
               this.open = false;
634
               this.open = false;
555
         }
638
         }
556
       });
639
       });
557
     },
640
     },
641
+    getUploadPathBidDocument(val) {
642
+      console.log(val);
643
+      let arr = val.split('/upload')
644
+      this.form.bidDocument = arr[1]
645
+    },
646
+    getUploadPathTenderDocument(val) {
647
+      let arr = val.split('/upload')
648
+      this.form.tenderDocument = arr[1]
649
+    },
650
+    getFileName(name) {
651
+      let arr = name.split('/')
652
+      return arr[arr.length - 1];
653
+    },
558
     /** 删除按钮操作 */
654
     /** 删除按钮操作 */
559
     handleDelete(row) {
655
     handleDelete(row) {
560
       const tenderIds = row.tenderId || this.ids;
656
       const tenderIds = row.tenderId || this.ids;
570
       this.download('oa/tender/export', {
666
       this.download('oa/tender/export', {
571
         ...this.queryParams
667
         ...this.queryParams
572
       }, `tender_${new Date().getTime()}.xlsx`)
668
       }, `tender_${new Date().getTime()}.xlsx`)
669
+    },
670
+    // 修改投标部门
671
+    changeDept() {
672
+      this.getUserList();
573
     }
673
     }
574
   }
674
   }
575
 };
675
 };
589
 ::v-deep .el-form-item--medium .el-form-item__label {
689
 ::v-deep .el-form-item--medium .el-form-item__label {
590
   font-weight: 500;
690
   font-weight: 500;
591
 }
691
 }
692
+
693
+::v-deep .el-form-item {
694
+  margin-bottom: 10px;
695
+}
696
+
697
+.require_input {
698
+  color: #f00;
699
+  font-size: 20px;
700
+  font-weight: bold;
701
+  display: inline-block;
702
+}
592
 </style>
703
 </style>

Loading…
Annulla
Salva