doctor-admin-components 1.0.13-pro.1 → 1.0.14-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +10 -2
  2. package/package.json +1 -1
  3. package/packages/index.js +16 -0
  4. package/packages/src/api/biz/bizContract.js +1005 -0
  5. package/packages/src/api/biz/bizFileInfo.js +16 -0
  6. package/packages/src/api/biz/bizInvoice.js +1 -1
  7. package/packages/src/api/biz/bizShipment.js +18 -0
  8. package/packages/src/assets/images/click-show-table.png +0 -0
  9. package/packages/src/assets/images/more.png +0 -0
  10. package/packages/src/assets/images/pdf-new.png +0 -0
  11. package/packages/src/components/DictTag/index.vue +12 -2
  12. package/packages/src/components/FileUpload/contract-drag-new.vue +100 -11
  13. package/packages/src/i18n/en/message.json +305 -0
  14. package/packages/src/i18n/index.js +38 -0
  15. package/packages/src/i18n/zh-CN/message.json +305 -0
  16. package/packages/src/index.js +24 -1
  17. package/packages/src/utils/index.js +35 -0
  18. package/packages/src/views/biz/bizFileInfo/PAYMENT_VOUCHER(/"payment_voucher/", /"/344/273/230/346/254/276/345/207/255/350/257/201.ini" +222 -0
  19. package/packages/src/views/biz/bizFileInfo/contract copy.vue +1711 -0
  20. package/packages/src/views/biz/bizFileInfo/contract.vue +1783 -986
  21. package/packages/src/views/biz/bizFileInfo/contractFile/BillOfLadingNoTab.vue +114 -0
  22. package/packages/src/views/biz/bizFileInfo/contractFile/ContentTitle.vue +102 -0
  23. package/packages/src/views/biz/bizFileInfo/contractFile/IMGPreviewCheckBox.vue +308 -0
  24. package/packages/src/views/biz/bizFileInfo/contractFile/Progress.vue +85 -0
  25. package/packages/src/views/biz/bizFileInfo/contractFile/ProgressDetail.vue +123 -0
  26. package/packages/src/views/biz/bizFileInfo/contractFile/SectionSlot.vue +83 -0
  27. package/packages/src/views/biz/bizFileInfo/contractFile/ShowAndHide.vue +178 -0
  28. package/packages/src/views/biz/bizFileInfo/fileShow copy.vue +321 -0
  29. package/packages/src/views/biz/bizFileInfo/fileShow.vue +143 -47
  30. package/packages/src/views/biz/bizFileInfo/fileShowClaim.vue +1 -1
  31. package/packages/src/views/biz/bizShipment/add.vue +124 -23
  32. package/packages/src/views/biz/bizShipment/referenceAlert.vue +168 -0
  33. package/packages/src/views/biz/contractTracing/billInfo.vue +64 -40
  34. package/packages/src/views/biz/contractTracing/companyBanks.vue +228 -0
  35. package/packages/src/views/biz/contractTracing/contractInfo.vue +1 -1
  36. package/packages/src/views/biz/contractTracing/contractPdf.vue +7 -4
  37. package/packages/src/views/biz/contractTracing/contractSummary.vue +24 -18
  38. package/packages/src/views/biz/contractTracing/contractTracingDetail copy.vue +107 -0
  39. package/packages/src/views/biz/contractTracing/contractTracingDetail.vue +281 -31
  40. package/packages/src/views/biz/contractTracing/editBill.vue +22 -9
  41. package/packages/src/views/biz/contractTracing/purchaseInvoiceUpload.vue +153 -7
  42. package/packages/src/views/biz/contractTracing/shipmentPurchaseAmount.vue +14 -0
  43. package/packages/src/views/biz/contractTracing/subCompanyDialog.vue +8 -2
  44. package/packages/src/views/components/RegionPicker/Distpicker.vue +459 -0
  45. package/packages/src/views/components/RegionPicker/districts.js +4641 -0
  46. package/packages/src/views/test.vue +3 -3
@@ -0,0 +1,1711 @@
1
+ <template>
2
+ <div class="app-container" v-if="linkId">
3
+ <div slot="header">
4
+ <el-row>
5
+ <el-button
6
+ style="float: right"
7
+ type="text"
8
+ @click="downloadZip"
9
+ >{{ $t("contractDetail.downloadZip") }}</el-button>
10
+ </el-row>
11
+ </div>
12
+ <el-timeline>
13
+ <el-timeline-item icon="el-icon-success" type="primary" size="large">
14
+ <div style="color: #1890ff">{{ $t("contractDetail.contractInfoConfirm") }}</div>
15
+ <div>
16
+ <el-row>
17
+ <el-col :span="5">
18
+ <div class="sub-title">
19
+ {{
20
+ contract.contractType == "sale"
21
+ ? $t("contractDetail.saleContract")
22
+ : $t("contractDetail.purchaseContract")
23
+ }}
24
+ <el-button
25
+ v-if="channel !== 'official-website'"
26
+ type="text"
27
+ size="mini"
28
+ @click="handleHistory('contract_formal')"
29
+ >历史合同文件</el-button>
30
+ </div>
31
+ <div class="file-list">
32
+ <file-show
33
+ :hiddenOperation="channel == 'official-website'"
34
+ @refresh="handleRefresh"
35
+ @checked="handleChecked"
36
+ @uncheck="handleUncheck"
37
+ :fileInfo="
38
+ getLastFileByList(contractFileInfo.latestContractFileInfo)
39
+ "
40
+ />
41
+ </div>
42
+ </el-col>
43
+ <el-col :span="4">
44
+ <div>
45
+ <div class="sub-title">{{ $t("contractDetail.blInfo") }}</div>
46
+ <div class="file-list">
47
+ <file-show
48
+ :hiddenOperation="channel == 'official-website'"
49
+ @refresh="handleRefresh"
50
+ @checked="handleChecked"
51
+ @uncheck="handleUncheck"
52
+ :fileInfo="
53
+ getLastFileByList(contractFileInfo.latestBillFileInfo)
54
+ "
55
+ />
56
+ </div>
57
+ </div>
58
+ </el-col>
59
+ <el-col :span="6">
60
+ <div class="file-list">
61
+ <file-show
62
+ :hiddenOperation="channel == 'official-website'"
63
+ @refresh="handleRefresh"
64
+ @checked="handleChecked"
65
+ @uncheck="handleUncheck"
66
+ :file-info="item"
67
+ v-for="(item, i) in contractFileInfo.personalBillFileInfo"
68
+ :key="i"
69
+ />
70
+ <contract-file-drag-upload
71
+ v-if="channel !== 'official-website'"
72
+ @upload="
73
+ handleUpload(
74
+ $event,
75
+ contract.dealId,
76
+ 'dealRecord',
77
+ 'personal_deal_bill'
78
+ )
79
+ "
80
+ :isShowTip="false"
81
+ />
82
+ </div>
83
+ </el-col>
84
+ <el-col :span="9">
85
+ <div>
86
+ <div v-if="channel !== 'official-website'" class="sub-title">
87
+ {{ $t("contractDetail.signContract") }}
88
+ <el-button style="margin-left: 10px" @click="counterSign" size="mini">撤回回签</el-button>
89
+ </div>
90
+ <div v-else class="sub-title">{{ $t("contractDetail.signContract") }}</div>
91
+ </div>
92
+ <div class="file-list">
93
+ <file-show
94
+ :hiddenOperation="channel == 'official-website'"
95
+ @refresh="handleRefresh"
96
+ @checked="handleChecked"
97
+ @uncheck="handleUncheck"
98
+ :file-info="item"
99
+ v-for="(item, i) in contractFileInfo.signContractFileInfo"
100
+ :key="i"
101
+ />
102
+ <contract-file-drag-upload
103
+ @upload="
104
+ handleUpload(
105
+ $event,
106
+ contract.contractId,
107
+ 'contract',
108
+ 'contract_sign'
109
+ )
110
+ "
111
+ :isShowTip="false"
112
+ />
113
+ </div>
114
+ </el-col>
115
+ </el-row>
116
+ <el-divider></el-divider>
117
+ <el-row>
118
+ <div class="sub-title">{{ $t("contractDetail.otherFile") }}</div>
119
+ <div class="file-list" v-if="contract.contractType == 'sale'">
120
+ <file-show
121
+ :hiddenOperation="channel == 'official-website'"
122
+ @refresh="handleRefresh"
123
+ @checked="handleChecked"
124
+ @uncheck="handleUncheck"
125
+ :file-info="item"
126
+ v-for="(item, i) in contractFileInfo.saleContractOtherFile"
127
+ :key="i"
128
+ />
129
+ <contract-file-drag-upload
130
+ @upload="
131
+ handleUpload(
132
+ $event,
133
+ contract.contractId,
134
+ 'contract',
135
+ 'sale_contract_other_file'
136
+ )
137
+ "
138
+ :isShowTip="false"
139
+ />
140
+ </div>
141
+ <div class="file-list" v-else>
142
+ <file-show
143
+ :hiddenOperation="channel == 'official-website'"
144
+ @refresh="handleRefresh"
145
+ @checked="handleChecked"
146
+ @uncheck="handleUncheck"
147
+ :file-info="item"
148
+ v-for="(item, i) in contractFileInfo.purchaseContractOtherFile"
149
+ :key="i"
150
+ />
151
+ <contract-file-drag-upload
152
+ @upload="
153
+ handleUpload(
154
+ $event,
155
+ contract.contractId,
156
+ 'contract',
157
+ 'purchase_contract_other_file'
158
+ )
159
+ "
160
+ :isShowTip="false"
161
+ />
162
+ </div>
163
+ </el-row>
164
+ </div>
165
+ </el-timeline-item>
166
+ <el-timeline-item
167
+ :icon="contractFileInfo.proformaInvoice ? 'el-icon-success' : ''"
168
+ :type="contractFileInfo.proformaInvoice ? 'primary' : ''"
169
+ size="large"
170
+ v-if="contract.deposit !== 0"
171
+ >
172
+ <el-row v-if="contract.contractType == 'sale'">
173
+ <el-col :span="2">
174
+ <div style="color: #1890ff">{{ $t("contractDetail.deposit") }}</div>
175
+ </el-col>
176
+ <el-col :span="4">
177
+ <div
178
+ v-if="
179
+ contractFileInfo.proformaInvoice &&
180
+ contractFileInfo.proformaInvoice.amount >
181
+ contractFileInfo.proformaInvoice.remainingAmount
182
+ "
183
+ class="el-icon-success customer-icon-success-color"
184
+ >
185
+ {{
186
+ channel !== "official-website"
187
+ ? "定金已收"
188
+ : $t("contractDetail.Deposit_Paid")
189
+ }}
190
+ </div>
191
+ <div v-else style="color: red">
192
+ {{
193
+ channel !== "official-website"
194
+ ? "定金未收"
195
+ : $t("contractDetail.Deposit_Unpaid")
196
+ }}
197
+ </div>
198
+ </el-col>
199
+ </el-row>
200
+ <el-row v-else>
201
+ <el-col :span="2">
202
+ <div style="color: #1890ff">{{ $t("contractDetail.deposit") }}</div>
203
+ </el-col>
204
+ <el-col :span="2">
205
+ <div
206
+ v-if="
207
+ contractFileInfo.proformaInvoice &&
208
+ contractFileInfo.proformaInvoice.amount >
209
+ contractFileInfo.proformaInvoice.remainingAmount
210
+ "
211
+ class="el-icon-success customer-icon-success-color"
212
+ >定金已付</div>
213
+ <div v-else style="color: red">定金未付</div>
214
+ </el-col>
215
+ </el-row>
216
+ <el-row v-if="channel !== 'official-website'">
217
+ <el-col :span="5">
218
+ <el-button type="primary" size="mini" @click="getDepositInvoice">
219
+ {{
220
+ contract.contractType == "sale" ? "生成定金发票" : "上传定金发票"
221
+ }}
222
+ </el-button>
223
+ </el-col>
224
+ </el-row>
225
+ <el-row>
226
+ <el-col :span="6">
227
+ <div class="sub-title">
228
+ {{ $t("contractDetail.depositInvoice") }}
229
+ <el-button
230
+ v-if="channel !== 'official-website'"
231
+ type="text"
232
+ size="small"
233
+ @click="skipInvoiceList"
234
+ >发票列表</el-button>
235
+ </div>
236
+ <div class="file-list">
237
+ <file-show
238
+ :hiddenOperation="channel == 'official-website'"
239
+ @refresh="handleRefresh"
240
+ @checked="handleChecked"
241
+ @uncheck="handleUncheck"
242
+ :fileInfo="
243
+ getLastFileByList(contractFileInfo.proformaInvoiceFileInfo)
244
+ "
245
+ />
246
+ </div>
247
+ </el-col>
248
+ <el-col :span="13">
249
+ <el-row style="margin-top: 20px"></el-row>
250
+ <div class="file-list">
251
+ <file-show
252
+ :hiddenOperation="channel == 'official-website'"
253
+ @refresh="handleRefresh"
254
+ @checked="handleChecked"
255
+ @uncheck="handleUncheck"
256
+ :file-info="item"
257
+ v-for="(
258
+ item, i
259
+ ) in contractFileInfo.personalProformaInvoiceFileInfo"
260
+ :key="i"
261
+ />
262
+ <contract-file-drag-upload
263
+ v-if="channel !== 'official-website'"
264
+ @upload="
265
+ handleUpload(
266
+ $event,
267
+ contractFileInfo.proformaInvoice.id,
268
+ 'invoice',
269
+ 'personal_proforma_invoice'
270
+ )
271
+ "
272
+ :isShowTip="false"
273
+ />
274
+ </div>
275
+ </el-col>
276
+ </el-row>
277
+ <el-row>
278
+ <div class="sub-title">{{ $t("contractDetail.depositRemittanceReceipt") }}</div>
279
+ <div class="file-list">
280
+ <file-show
281
+ :hiddenOperation="channel == 'official-website'"
282
+ @refresh="handleRefresh"
283
+ @checked="handleChecked"
284
+ @uncheck="handleUncheck"
285
+ :file-info="item"
286
+ v-for="(
287
+ item, i
288
+ ) in contractFileInfo.proformaInvoiceWaterBillFileInfo"
289
+ :key="i"
290
+ />
291
+ </div>
292
+ </el-row>
293
+ </el-timeline-item>
294
+ <el-timeline-item
295
+ :icon="contractFileInfo.shipmentFileInfoList ? 'el-icon-success' : ''"
296
+ :type="contractFileInfo.shipmentFileInfoList ? 'primary' : ''"
297
+ size="large"
298
+ >
299
+ <div style="color: #1890ff">{{ $t("contractDetail.tip5") }}</div>
300
+ <el-button
301
+ type="primary"
302
+ size="mini"
303
+ @click="handleGenerate"
304
+ v-if="
305
+ channel !== 'official-website' && contract.contractType == 'sale'
306
+ "
307
+ >生成装运</el-button>
308
+ <el-button
309
+ type="primary"
310
+ size="mini"
311
+ @click="handleGeneratePurchase"
312
+ v-if="
313
+ channel !== 'official-website' &&
314
+ contract.contractType == 'purchase'
315
+ "
316
+ >生成装运</el-button>
317
+ <el-tabs v-model="activeName">
318
+ <el-tab-pane
319
+ :label="
320
+ '提单号 ' +
321
+ (shipmentFileInfo.billOfLadingNo
322
+ ? shipmentFileInfo.billOfLadingNo
323
+ : '')
324
+ "
325
+ :name="shipmentIndex.toString()"
326
+ v-for="(
327
+ shipmentFileInfo, shipmentIndex
328
+ ) in contractFileInfo.shipmentFileInfoList"
329
+ :key="shipmentIndex"
330
+ >
331
+ <div
332
+ v-if="
333
+ channel !== 'official-website' &&
334
+ contract.contractType == 'purchase'
335
+ "
336
+ style="margin-bottom: 20px"
337
+ >
338
+ <el-button
339
+ type="primary"
340
+ size="mini"
341
+ v-if="shipmentFileInfo && shipmentFileInfo.shipmentId"
342
+ @click="
343
+ identifyPage(
344
+ '',
345
+ shipmentFileInfo && shipmentFileInfo.shipmentId,
346
+ 'summary'
347
+ )
348
+ "
349
+ >识别汇总</el-button>
350
+ <el-button type="primary" size="mini" @click="editShipment(shipmentFileInfo)">编辑船运</el-button>
351
+ </div>
352
+ <el-timeline>
353
+ <el-timeline-item
354
+ :icon="shipmentFileInfo ? 'el-icon-success' : ''"
355
+ :type="shipmentFileInfo ? 'primary' : ''"
356
+ size="large"
357
+ >
358
+ <div v-if="channel !== 'official-website'" style="color: #1890ff">首批货运</div>
359
+ <div>
360
+ <div class="sub-title">{{ $t("contractDetail.bookingConfirmation") }}</div>
361
+ <div class="file-list">
362
+ <file-show
363
+ :hiddenOperation="channel == 'official-website'"
364
+ @refresh="handleRefresh"
365
+ @checked="handleChecked"
366
+ @uncheck="handleUncheck"
367
+ :file-info="item"
368
+ v-for="(item, i) in shipmentFileInfo.bookingConfirmation"
369
+ :key="i"
370
+ />
371
+ <contract-file-drag-upload
372
+ v-if="channel !== 'official-website'"
373
+ @upload="
374
+ handleUpload(
375
+ $event,
376
+ shipmentFileInfo.shipmentId,
377
+ 'shipment',
378
+ 'shipment_booking_confirmation'
379
+ )
380
+ "
381
+ :isShowTip="false"
382
+ />
383
+ </div>
384
+ </div>
385
+ <el-divider></el-divider>
386
+ <el-row v-if="channel !== 'official-website'">
387
+ <el-col :span="6" v-if="contract.contractType == 'sale'">
388
+ <div>
389
+ <div class="sub-title">{{ $t("contractDetail.packingList") }}</div>
390
+ <div class="file-list">
391
+ <file-show
392
+ :hiddenOperation="channel == 'official-website'"
393
+ @refresh="handleRefresh"
394
+ @checked="handleChecked"
395
+ @uncheck="handleUncheck"
396
+ :file-info="
397
+ getLastFileByList(shipmentFileInfo.packingList)
398
+ "
399
+ />
400
+ </div>
401
+ </div>
402
+ </el-col>
403
+ <el-col :span="18">
404
+ <el-row v-if="contract.contractType == 'purchase'">
405
+ <div>
406
+ <div class="sub-title">
407
+ 装箱单(P)
408
+ <span
409
+ style="color: #1890ff; cursor: pointer"
410
+ v-if="
411
+ shipmentFileInfo &&
412
+ shipmentFileInfo.purchasePersonalPackingList &&
413
+ shipmentFileInfo.purchasePersonalPackingList[0] &&
414
+ shipmentFileInfo.purchasePersonalPackingList[0]
415
+ .url
416
+ "
417
+ @click="
418
+ identifyPage(
419
+ shipmentFileInfo &&
420
+ shipmentFileInfo.purchasePersonalPackingList &&
421
+ shipmentFileInfo
422
+ .purchasePersonalPackingList[0] &&
423
+ shipmentFileInfo
424
+ .purchasePersonalPackingList[0].url,
425
+ shipmentFileInfo && shipmentFileInfo.shipmentId,
426
+ 'packing'
427
+ )
428
+ "
429
+ >{{ identify }}</span>
430
+ </div>
431
+ <div class="file-list">
432
+ <file-show
433
+ :hiddenOperation="channel == 'official-website'"
434
+ @refresh="handleRefresh"
435
+ @checked="handleChecked"
436
+ @uncheck="handleUncheck"
437
+ :file-info="item"
438
+ v-for="(
439
+ item, i
440
+ ) in shipmentFileInfo.purchasePersonalPackingList"
441
+ :key="i"
442
+ />
443
+ <contract-file-drag-upload
444
+ v-if="channel !== 'official-website'"
445
+ @upload="
446
+ handleUpload(
447
+ $event,
448
+ shipmentFileInfo.shipmentId,
449
+ 'shipment',
450
+ 'purchase_personal_shipment_packing_list'
451
+ )
452
+ "
453
+ :isShowTip="false"
454
+ />
455
+ </div>
456
+ </div>
457
+ </el-row>
458
+ <el-row v-if="contract.contractType == 'sale'">
459
+ <div>
460
+ <div class="sub-title">装箱单(S)</div>
461
+
462
+ <div class="file-list">
463
+ <file-show
464
+ :hiddenOperation="channel == 'official-website'"
465
+ @refresh="handleRefresh"
466
+ @checked="handleChecked"
467
+ @uncheck="handleUncheck"
468
+ :file-info="item"
469
+ v-for="(
470
+ item, i
471
+ ) in shipmentFileInfo.salePersonalPackingList"
472
+ :key="i"
473
+ />
474
+ <contract-file-drag-upload
475
+ v-if="channel !== 'official-website'"
476
+ @upload="
477
+ handleUpload(
478
+ $event,
479
+ shipmentFileInfo.shipmentId,
480
+ 'shipment',
481
+ 'sale_personal_shipment_packing_list'
482
+ )
483
+ "
484
+ :isShowTip="false"
485
+ />
486
+ </div>
487
+ </div>
488
+ </el-row>
489
+ </el-col>
490
+ </el-row>
491
+ <el-divider></el-divider>
492
+ <div>
493
+ <div class="sub-title">{{ $t("contractDetail.packingPhoto") }}</div>
494
+ <el-row
495
+ style="margin-left: 60px"
496
+ v-for="(
497
+ containerFile, i
498
+ ) in shipmentFileInfo.containerFileInfoRespList"
499
+ :key="i"
500
+ >
501
+ <div style="display: flex; align-items: center">
502
+ <div>{{ "集装箱" + (i + 1) + containerFile.containerNo }}</div>
503
+ <div>
504
+ <el-button
505
+ type="text"
506
+ @click="shareContainerUrl(containerFile.containerId)"
507
+ >分享</el-button>
508
+ </div>
509
+ <!-- 展开/折叠按钮 -->
510
+ <div v-if="containerFile.packingPhoto.length > 1" style="margin-left: 10px;">
511
+ <el-button
512
+ type="text"
513
+ style="color: rgb(255, 0, 191);"
514
+ @click="toggleExpand(shipmentIndex, i)"
515
+ >
516
+ {{
517
+ containerFile.expandedFlag
518
+ ? "收起图片"
519
+ : "展开全部图片"
520
+ }}
521
+ </el-button>
522
+ </div>
523
+ </div>
524
+ <div class="file-list">
525
+ <div
526
+ v-if="
527
+ !containerFile.expandedFlag &&
528
+ containerFile.packingPhoto.length > 1
529
+ "
530
+ >
531
+ <file-show
532
+ :hiddenOperation="channel == 'official-website'"
533
+ @refresh="handleRefresh"
534
+ @checked="handleChecked"
535
+ @uncheck="handleUncheck"
536
+ :file-info="containerFile.packingPhoto[0]"
537
+ />
538
+ </div>
539
+ <div v-else class="file-list">
540
+ <file-show
541
+ :hiddenOperation="channel == 'official-website'"
542
+ @refresh="handleRefresh"
543
+ @checked="handleChecked"
544
+ @uncheck="handleUncheck"
545
+ :file-info="item"
546
+ v-for="(item, i) in containerFile.packingPhoto"
547
+ :key="i"
548
+ />
549
+ </div>
550
+
551
+ <contract-file-drag-upload
552
+ v-if="channel !== 'official-website'"
553
+ @upload="
554
+ handleUpload(
555
+ $event,
556
+ containerFile.containerId,
557
+ 'container',
558
+ 'container_packing_photo'
559
+ )
560
+ "
561
+ :isShowTip="false"
562
+ />
563
+ </div>
564
+ </el-row>
565
+ </div>
566
+ <el-divider></el-divider>
567
+ <div class="sub-title">
568
+ {{ $t("contractDetail.finallyInvoice") }}
569
+ <el-button
570
+ v-if="channel !== 'official-website'"
571
+ type="text"
572
+ size="small"
573
+ @click="skipInvoiceList"
574
+ >发票列表</el-button>
575
+ <span
576
+ v-if="channel !== 'official-website' &&
577
+ contract.contractType == 'purchase' "
578
+ style="color: #1890ff; margin-left: 10px"
579
+ >
580
+ {{
581
+ shipmentPurchaseAmountMessage}}
582
+ </span>
583
+ <el-button
584
+ style="color: #1890ff; cursor: pointer; margin-left: 10px"
585
+ v-if="channel !== 'official-website' &&
586
+ contract.contractType == 'purchase'"
587
+ type="text"
588
+ size="small"
589
+ @click="getShipmentPurchase(shipmentFileInfo)"
590
+ >点击可查看明细</el-button>
591
+ <div>{{ getShipmentPurchaseAmount(shipmentFileInfo,shipmentIndex) }}</div>
592
+ </div>
593
+ <el-row v-if="contract.quoteType != 'FIXED'">
594
+ <div v-if="contract.contractType == 'sale'">
595
+ <el-col :span="6">
596
+ <div style="margin-left: 60px">
597
+ <div
598
+ class="sub-title"
599
+ >{{ $t("contractDetail.saleTemporaryFinallyInvoice") }}</div>
600
+ <div class="file-list">
601
+ <file-show
602
+ :hiddenOperation="channel == 'official-website'"
603
+ @refresh="handleRefresh"
604
+ @checked="handleChecked"
605
+ @uncheck="handleUncheck"
606
+ :file-info="
607
+ getLastFileByList(
608
+ shipmentFileInfo.saleTemporaryFinallyInvoice
609
+ )
610
+ "
611
+ />
612
+ </div>
613
+ </div>
614
+ </el-col>
615
+ <el-col :span="18">
616
+ <div>
617
+ <div class="file-list">
618
+ <file-show
619
+ :hiddenOperation="channel == 'official-website'"
620
+ @refresh="handleRefresh"
621
+ @checked="handleChecked"
622
+ @uncheck="handleUncheck"
623
+ :file-info="item"
624
+ v-for="(
625
+ item, i
626
+ ) in shipmentFileInfo.salePersonalTemporaryFinallyInvoice"
627
+ :key="i"
628
+ />
629
+ <contract-file-drag-upload
630
+ v-if="channel !== 'official-website'"
631
+ @upload="
632
+ handleUpload(
633
+ $event,
634
+ shipmentFileInfo.shipmentId,
635
+ 'shipment',
636
+ 'sale_personal_temporary_finally_invoice'
637
+ )
638
+ "
639
+ :isShowTip="false"
640
+ />
641
+ </div>
642
+ </div>
643
+ </el-col>
644
+ </div>
645
+ <div v-else style="margin-left: 60px">
646
+ <div class="sub-title">
647
+ 临时尾款发票
648
+ <span
649
+ v-if="
650
+ channel !== 'official-website' &&
651
+ contract.contractType == 'purchase'
652
+ "
653
+ style="color: #1890ff; cursor: pointer; margin-left: 10px"
654
+ @click.stop="identifyPageBoth(shipmentFileInfo, 1)"
655
+ >{{ identify }}</span>
656
+ </div>
657
+ <div class="file-list">
658
+ <file-show
659
+ :hiddenOperation="channel == 'official-website'"
660
+ @refresh="handleRefresh"
661
+ @checked="handleChecked"
662
+ @uncheck="handleUncheck"
663
+ :file-info="item"
664
+ v-for="(
665
+ item, i
666
+ ) in shipmentFileInfo.purchaseTemporaryFinallyInvoice"
667
+ :key="i"
668
+ />
669
+ <contract-file-drag-upload
670
+ v-if="channel !== 'official-website'"
671
+ @upload="
672
+ handleUpload(
673
+ $event,
674
+ shipmentFileInfo.shipmentId,
675
+ 'shipment',
676
+ 'purchase_temporary_finally_invoice'
677
+ )
678
+ "
679
+ :isShowTip="false"
680
+ />
681
+ </div>
682
+ </div>
683
+ </el-row>
684
+
685
+ <el-divider v-if="contract.quoteType != 'FIXED'"></el-divider>
686
+
687
+ <el-row v-if="contract.contractType == 'sale'">
688
+ <el-col :span="6">
689
+ <div style="margin-left: 60px">
690
+ <div class="sub-title">{{ $t("contractDetail.saleFinallyInvoice") }}</div>
691
+ <div class="file-list">
692
+ <file-show
693
+ :hiddenOperation="channel == 'official-website'"
694
+ @refresh="handleRefresh"
695
+ @checked="handleChecked"
696
+ @uncheck="handleUncheck"
697
+ :file-info="
698
+ getLastFileByList(
699
+ shipmentFileInfo.saleFinallyInvoice
700
+ )
701
+ "
702
+ />
703
+ </div>
704
+ </div>
705
+ </el-col>
706
+ <el-col :span="18">
707
+ <div>
708
+ <div class="file-list">
709
+ <file-show
710
+ :hiddenOperation="channel == 'official-website'"
711
+ @refresh="handleRefresh"
712
+ @checked="handleChecked"
713
+ @uncheck="handleUncheck"
714
+ :file-info="item"
715
+ v-for="(
716
+ item, i
717
+ ) in shipmentFileInfo.salePersonalFinallyInvoice"
718
+ :key="i"
719
+ />
720
+ <contract-file-drag-upload
721
+ v-if="channel !== 'official-website'"
722
+ @upload="
723
+ handleUpload(
724
+ $event,
725
+ shipmentFileInfo.shipmentId,
726
+ 'shipment',
727
+ 'sale_personal_finally_invoice'
728
+ )
729
+ "
730
+ :isShowTip="false"
731
+ />
732
+ </div>
733
+ </div>
734
+ </el-col>
735
+ </el-row>
736
+ <el-row v-else>
737
+ <div style="margin-left: 60px">
738
+ <div class="sub-title">
739
+ 卖家采购尾款发票
740
+ <span
741
+ v-if="
742
+ channel !== 'official-website' &&
743
+ contract.contractType == 'purchase'
744
+ "
745
+ style="color: #1890ff; cursor: pointer; margin-left: 10px"
746
+ @click.stop="identifyPageBoth(shipmentFileInfo, 2)"
747
+ >{{ identify }}</span>
748
+ </div>
749
+ <div class="file-list">
750
+ <file-show
751
+ :hiddenOperation="channel == 'official-website'"
752
+ @refresh="handleRefresh"
753
+ @checked="handleChecked"
754
+ @uncheck="handleUncheck"
755
+ :file-info="item"
756
+ v-for="(
757
+ item, i
758
+ ) in shipmentFileInfo.purchaseFinallyInvoice"
759
+ :key="i"
760
+ />
761
+ <div>
762
+ <el-button
763
+ type="primary"
764
+ size="mini"
765
+ @click="
766
+ uploadFinalInvoice(
767
+ 'finally',
768
+ shipmentFileInfo.shipmentId
769
+ )
770
+ "
771
+ >上传采购尾款发票</el-button>
772
+ </div>
773
+ </div>
774
+ </div>
775
+ </el-row>
776
+ <el-divider></el-divider>
777
+ <!-- 提单草稿 -->
778
+ <el-row>
779
+ <div>
780
+ <div class="sub-title">
781
+ {{ $t("contractDetail.draftBillOfLading") }}
782
+ <span
783
+ style="color: #1890ff; cursor: pointer"
784
+ v-if="
785
+ shipmentFileInfo &&
786
+ shipmentFileInfo.draftBillOfLading &&
787
+ shipmentFileInfo.draftBillOfLading[0] &&
788
+ shipmentFileInfo.draftBillOfLading[0].url
789
+ "
790
+ @click="
791
+ identifyPage(
792
+ shipmentFileInfo &&
793
+ shipmentFileInfo.draftBillOfLading &&
794
+ shipmentFileInfo.draftBillOfLading[0] &&
795
+ shipmentFileInfo.draftBillOfLading[0].url,
796
+ shipmentFileInfo && shipmentFileInfo.shipmentId,
797
+ 'draft_bill'
798
+ )
799
+ "
800
+ >{{ identify }}</span>
801
+ </div>
802
+ <div class="file-list">
803
+ <file-show
804
+ :hiddenOperation="channel == 'official-website'"
805
+ @refresh="handleRefresh"
806
+ @checked="handleChecked"
807
+ @uncheck="handleUncheck"
808
+ :file-info="item"
809
+ v-for="(item, i) in shipmentFileInfo.draftBillOfLading"
810
+ :key="i"
811
+ />
812
+ <contract-file-drag-upload
813
+ v-if="channel !== 'official-website'"
814
+ @upload="
815
+ handleUpload(
816
+ $event,
817
+ shipmentFileInfo.shipmentId,
818
+ 'shipment',
819
+ 'draft_bill_of_lading'
820
+ )
821
+ "
822
+ :isShowTip="false"
823
+ />
824
+ </div>
825
+ </div>
826
+ </el-row>
827
+ <el-divider></el-divider>
828
+ <!-- 提单正本Copy -->
829
+ <el-row>
830
+ <div>
831
+ <div class="sub-title">{{ $t("contractDetail.BLCopy") }}</div>
832
+ <div class="file-list">
833
+ <file-show
834
+ :hiddenOperation="channel == 'official-website'"
835
+ @refresh="handleRefresh"
836
+ @checked="handleChecked"
837
+ @uncheck="handleUncheck"
838
+ :file-info="item"
839
+ v-for="(
840
+ item, i
841
+ ) in shipmentFileInfo.originalBillOfLadingCopy"
842
+ :key="i"
843
+ />
844
+ <contract-file-drag-upload
845
+ v-if="channel !== 'official-website'"
846
+ @upload="
847
+ handleUpload(
848
+ $event,
849
+ shipmentFileInfo.shipmentId,
850
+ 'shipment',
851
+ 'original_bill_of_lading_copy'
852
+ )
853
+ "
854
+ :isShowTip="false"
855
+ />
856
+ </div>
857
+ </div>
858
+ </el-row>
859
+ <el-divider></el-divider>
860
+ <div>
861
+ <div class="sub-title">{{ $t("contractDetail.otherShipmentFile") }}</div>
862
+ <div class="file-list" v-if="contract.contractType == 'sale'">
863
+ <file-show
864
+ :hiddenOperation="channel == 'official-website'"
865
+ @refresh="handleRefresh"
866
+ @checked="handleChecked"
867
+ @uncheck="handleUncheck"
868
+ :file-info="item"
869
+ v-for="(item, i) in shipmentFileInfo.saleShipmentOther"
870
+ :key="i"
871
+ />
872
+ <contract-file-drag-upload
873
+ v-if="channel !== 'official-website'"
874
+ @upload="
875
+ handleUpload(
876
+ $event,
877
+ shipmentFileInfo.shipmentId,
878
+ 'shipment',
879
+ 'sale_shipment_other'
880
+ )
881
+ "
882
+ :isShowTip="false"
883
+ />
884
+ </div>
885
+ <div v-else class="file-list">
886
+ <file-show
887
+ :hiddenOperation="channel == 'official-website'"
888
+ @refresh="handleRefresh"
889
+ @checked="handleChecked"
890
+ @uncheck="handleUncheck"
891
+ :file-info="item"
892
+ v-for="(
893
+ item, i
894
+ ) in shipmentFileInfo.purchaseShipmentOther"
895
+ :key="i"
896
+ />
897
+ <contract-file-drag-upload
898
+ v-if="channel !== 'official-website'"
899
+ @upload="
900
+ handleUpload(
901
+ $event,
902
+ shipmentFileInfo.shipmentId,
903
+ 'shipment',
904
+ 'purchase_shipment_other'
905
+ )
906
+ "
907
+ :isShowTip="false"
908
+ />
909
+ </div>
910
+ </div>
911
+ </el-timeline-item>
912
+ <el-timeline-item
913
+ :icon="shipmentFileInfo.waterBill ? 'el-icon-success' : ''"
914
+ :type="shipmentFileInfo.waterBill ? 'primary' : ''"
915
+ size="large"
916
+ >
917
+ <div v-if="channel !== 'official-website'" style="color: #1890ff">
918
+ {{
919
+ contract.contractType == "sale"
920
+ ? "尾款收款"
921
+ : $t("contractDetail.Final_payment")
922
+ }}
923
+ </div>
924
+ <div v-else class="sub-title">{{ $t("contractDetail.Final_payment") }}</div>
925
+ <el-row>
926
+ <el-col :span="8">
927
+ <div>
928
+ <div class="sub-title">{{ $t("contractDetail.finalPaymentMemo") }}</div>
929
+
930
+ <div class="file-list">
931
+ <file-show
932
+ :hiddenOperation="channel == 'official-website'"
933
+ @refresh="handleRefresh"
934
+ @checked="handleChecked"
935
+ @uncheck="handleUncheck"
936
+ :file-info="item"
937
+ v-for="(item, i) in shipmentFileInfo.waterBill"
938
+ :key="i"
939
+ />
940
+ </div>
941
+ </div>
942
+ </el-col>
943
+ <!-- <el-col :span="16">
944
+ <div v-if="contract.contractType == 'sale'">
945
+ <div class="file-list">
946
+ <file-show
947
+ :hiddenOperation="channel == 'official-website'"
948
+ @refresh="handleRefresh"
949
+ @checked="handleChecked"
950
+ @uncheck="handleUncheck"
951
+ :file-info="item"
952
+ v-for="(
953
+ item, i
954
+ ) in shipmentFileInfo.salePersonalWaterBill"
955
+ :key="i"
956
+ />
957
+ <contract-file-drag-upload
958
+ @upload="
959
+ handleUpload(
960
+ $event,
961
+ shipmentFileInfo.shipmentId,
962
+ 'shipment',
963
+ 'sale_personal_waterBill'
964
+ )
965
+ "
966
+ :isShowTip="false"
967
+ />
968
+ </div>
969
+ </div>
970
+ <div v-else>
971
+ <div class="file-list">
972
+ <file-show
973
+ :hiddenOperation="channel == 'official-website'"
974
+ @refresh="handleRefresh"
975
+ @checked="handleChecked"
976
+ @uncheck="handleUncheck"
977
+ :file-info="item"
978
+ v-for="(
979
+ item, i
980
+ ) in shipmentFileInfo.purchasePersonalWaterBill"
981
+ :key="i"
982
+ />
983
+ <contract-file-drag-upload
984
+ @upload="
985
+ handleUpload(
986
+ $event,
987
+ shipmentFileInfo.shipmentId,
988
+ 'shipment',
989
+ 'purchase_personal_waterBill'
990
+ )
991
+ "
992
+ :isShowTip="false"
993
+ />
994
+ </div>
995
+ </div>
996
+ </el-col>-->
997
+ </el-row>
998
+ <el-row>
999
+ <div>
1000
+ <div class="sub-title">{{ $t("contractDetail.swift") }}</div>
1001
+ <div class="file-list">
1002
+ <file-show
1003
+ :hiddenOperation="channel == 'official-website'"
1004
+ @refresh="handleRefresh"
1005
+ @checked="handleChecked"
1006
+ @uncheck="handleUncheck"
1007
+ :file-info="item"
1008
+ v-for="(item, i) in shipmentFileInfo.voucher"
1009
+ :key="i"
1010
+ />
1011
+ </div>
1012
+ </div>
1013
+ </el-row>
1014
+ </el-timeline-item>
1015
+ <el-timeline-item
1016
+ :icon="
1017
+ shipmentFileInfo.deliveryReceipt &&
1018
+ shipmentFileInfo.deliveryReceipt.length > 0
1019
+ ? 'el-icon-success'
1020
+ : ''
1021
+ "
1022
+ :type="
1023
+ shipmentFileInfo.deliveryReceipt &&
1024
+ shipmentFileInfo.deliveryReceipt.length > 0
1025
+ ? 'primary'
1026
+ : ''
1027
+ "
1028
+ size="large"
1029
+ >
1030
+ <div style="color: #1890ff">{{ $t("contractDetail.tip6") }}</div>
1031
+ <div class="sub-title">{{ $t("contractDetail.tip7") }}</div>
1032
+
1033
+ <div class="file-list">
1034
+ <file-show
1035
+ :hiddenOperation="channel == 'official-website'"
1036
+ @refresh="handleRefresh"
1037
+ @checked="handleChecked"
1038
+ @uncheck="handleUncheck"
1039
+ :file-info="item"
1040
+ v-for="(item, i) in shipmentFileInfo.deliveryReceipt"
1041
+ :key="i"
1042
+ />
1043
+ <!-- <contract-file-drag-upload
1044
+ v-if="channel !== 'official-website'"
1045
+ @upload="
1046
+ handleUpload(
1047
+ $event,
1048
+ shipmentFileInfo.shipmentId,
1049
+ 'shipment',
1050
+ 'shipment_delivery_receipt'
1051
+ )
1052
+ "
1053
+ :isShowTip="false"
1054
+ />-->
1055
+ </div>
1056
+ </el-timeline-item>
1057
+ </el-timeline>
1058
+ </el-tab-pane>
1059
+ </el-tabs>
1060
+ </el-timeline-item>
1061
+
1062
+ <el-timeline-item icon="el-icon-success" type="primary" size="large">
1063
+ <div style="color: #1890ff">{{ $t("contractDetail.tip8") }}</div>
1064
+ </el-timeline-item>
1065
+ </el-timeline>
1066
+ <el-timeline v-if="channel !== 'official-website' && claimFileInfoCom">
1067
+ <el-timeline-item icon="el-icon-success" type="primary" size="large">
1068
+ <span style="color: #1890ff">{{ $t("contractDetail.Claim_documents") }}</span>
1069
+ <div style="font-size: 16px; font-weight: 600; margin-top: 10px">
1070
+ {{
1071
+ buyerFlag
1072
+ ? $t("contractDetail.Credit_Note")
1073
+ : $t("contractDetail.Debit_Note")
1074
+ }}
1075
+ </div>
1076
+ <div class="file-list">
1077
+ <file-show
1078
+ :hiddenOperation="channel == 'official-website'"
1079
+ @refresh="handleRefresh"
1080
+ @checked="handleChecked"
1081
+ @uncheck="handleUncheck"
1082
+ :file-info="item"
1083
+ v-for="(item, i) in claimFileInfoCom"
1084
+ :key="i"
1085
+ />
1086
+ </div>
1087
+ </el-timeline-item>
1088
+
1089
+ <el-timeline-item
1090
+ icon="el-icon-success"
1091
+ :type="claimFileInfoCom ? 'primary' : ''"
1092
+ size="large"
1093
+ >
1094
+ <span style="color: #1890ff">{{ $t("contractDetail.Claim_completion") }}</span>
1095
+ </el-timeline-item>
1096
+ </el-timeline>
1097
+ <deposit-invoice ref="depositInvoice"></deposit-invoice>
1098
+
1099
+ <gen-shipment ref="genShipment" @refresh="handleRefresh" />
1100
+
1101
+ <purchase-invoice-upload ref="purchaseInvoice" @refresh="handleRefresh"></purchase-invoice-upload>
1102
+ <!-- 多个买家弹窗 -->
1103
+ <el-dialog title="请先选择收货买家" :visible.sync="dialogVisible" width="30%">
1104
+ <div>请在下方选择一个您需要发货的买家</div>
1105
+ <div>
1106
+ <el-radio-group v-model="selectRadio">
1107
+ <el-radio
1108
+ :label="key"
1109
+ v-for="(purchaseBuyerListItem, key) in purchaseBuyerList"
1110
+ :key="key"
1111
+ >
1112
+ {{ purchaseBuyerListItem.buyerUserInfo.companyName }} ({{
1113
+ purchaseBuyerListItem.contractNo
1114
+ }}) {{ purchaseBuyerListItem.buyerUserInfo.firstName }}
1115
+ {{ purchaseBuyerListItem.buyerUserInfo.lastName }}
1116
+ </el-radio>
1117
+ </el-radio-group>
1118
+ </div>
1119
+
1120
+ <span slot="footer" class="dialog-footer">
1121
+ <el-button @click="dialogVisible = false">取 消</el-button>
1122
+ <el-button type="primary" @click="addShipment">确 定</el-button>
1123
+ </span>
1124
+ </el-dialog>
1125
+ <shipment-add ref="shipmentGen" @refresh="handleRefresh" />
1126
+
1127
+ <shipment-purchase-amount ref="shipmentPurchaseAmount"></shipment-purchase-amount>
1128
+ </div>
1129
+ </template>
1130
+
1131
+ <script>
1132
+ import {
1133
+ chargedShipment,
1134
+ getPurchaseAmount,
1135
+ } from '../../../api/biz/bizShipment';
1136
+ import { listBizFileInfo, addBizFileInfo } from '../../../api/biz/bizFileInfo';
1137
+ import { getBizContractFileInfo } from '../../../api/biz/bizContract';
1138
+ import FileShow from './fileShow.vue';
1139
+ import FileShowClaim from './fileShowClaim.vue';
1140
+ import ContractFileUpload from '../../../components/FileUpload/contract.vue';
1141
+ import ContractFileDragUpload from '../../../components/FileUpload/contract-drag-new.vue';
1142
+ import { batchAsZip } from '../../../utils/zip';
1143
+ import {
1144
+ getBizContract,
1145
+ updateBizContract,
1146
+ signContract,
1147
+ } from '../../../api/biz/bizContract';
1148
+ import DepositInvoice from '../bizContract/depositInvoice.vue';
1149
+ import { getDepositInvoice, listBizInvoice } from '../../../api/biz/bizInvoice';
1150
+ import GenShipment from '../bizShipment/add.vue';
1151
+ import {
1152
+ listWithContractInfo,
1153
+ listSaleContracts,
1154
+ addBizShipment,
1155
+ addBizShipmentPurchase
1156
+ } from '../../../api/biz/bizContractDetail';
1157
+ import PurchaseInvoiceUpload from '../contractTracing/purchaseInvoiceUpload.vue';
1158
+ import ShipmentAdd from '../bizShipment/add.vue';
1159
+ import ShipmentPurchaseAmount from '../contractTracing/shipmentPurchaseAmount.vue';
1160
+ import { encryptId } from '../../../utils/index.js';
1161
+ import { Loading } from 'element-ui';
1162
+
1163
+ export default {
1164
+ name: 'ContractFile',
1165
+ components: {
1166
+ FileShow,
1167
+ ContractFileUpload,
1168
+ ContractFileDragUpload,
1169
+ DepositInvoice,
1170
+ GenShipment,
1171
+ PurchaseInvoiceUpload,
1172
+ FileShowClaim,
1173
+ ShipmentAdd,
1174
+ ShipmentPurchaseAmount,
1175
+ },
1176
+ props: {
1177
+ // 文件信息
1178
+ contract: {
1179
+ type: Object,
1180
+ default: () => {
1181
+ return {};
1182
+ },
1183
+ },
1184
+ channel: {
1185
+ type: String,
1186
+ default: '',
1187
+ },
1188
+ buyerFlag: {
1189
+ type: Boolean,
1190
+ default: true,
1191
+ },
1192
+ },
1193
+ data() {
1194
+ return {
1195
+ identify: '识别',
1196
+ selectRadio: 0,
1197
+ purchaseBuyerList: [],
1198
+ // purchaseBuyerList1: [
1199
+ // {
1200
+ // "contractId": 2046, // saleContractId
1201
+ // // purchaseContractId: ARP合同ID,
1202
+ // "contractNo": "ARS20231018-49366",
1203
+ // "buyerAccountId": 1003532,
1204
+ // "buyerUserInfo": {
1205
+ // "userId": 1003532,
1206
+ // "companyId": 11247,
1207
+ // "companyName": "顶点回收有限公司",
1208
+ // "firstName": "刘",
1209
+ // "lastName": "刘"
1210
+ // }
1211
+ // },
1212
+ // {
1213
+ // "contractId": 2046,
1214
+ // "contractNo": "ARS20231018-49366",
1215
+ // "buyerAccountId": 1003532,
1216
+ // "buyerUserInfo": {
1217
+ // "userId": 1003532,
1218
+ // "companyId": 11247,
1219
+ // "companyName": "顶点回收有限公司",
1220
+ // "firstName": "刘",
1221
+ // "lastName": "刘"
1222
+ // }
1223
+ // }
1224
+ // ],
1225
+ dialogVisible: false,
1226
+ activeName: '0',
1227
+ // 遮罩层
1228
+ loading: true,
1229
+ // 选中数组
1230
+ ids: [],
1231
+ // 非单个禁用
1232
+ single: true,
1233
+ // 非多个禁用
1234
+ multiple: true,
1235
+ // 显示搜索条件
1236
+ showSearch: true,
1237
+ // 总条数
1238
+ total: 0,
1239
+ // 文件信息表格数据
1240
+ fileInfoList: [],
1241
+ // 弹出层标题
1242
+ title: '',
1243
+ // 是否显示弹出层
1244
+ open: false,
1245
+ //是否显示上传弹出层
1246
+ uploadOpen: false,
1247
+ // 查询参数
1248
+ queryParams: {
1249
+ linkId: null,
1250
+ linkType: 'contract',
1251
+ fileName: null,
1252
+ fileType: null,
1253
+ url: null,
1254
+ ext: null,
1255
+ },
1256
+ // 表单参数
1257
+ form: {},
1258
+ //上传表单
1259
+ uploadForm: {},
1260
+ // 表单校验
1261
+ rules: {},
1262
+ lintId: null,
1263
+ selectFileList: [],
1264
+ contractId: null,
1265
+ //合同文件
1266
+ contractFileInfo: {
1267
+ latestContractFileInfo: [],
1268
+ },
1269
+ //参考采购价
1270
+ shipmentPurchaseAmountMessage: '',
1271
+ };
1272
+ },
1273
+ created() {
1274
+ const contractId = this.$route.params && this.$route.params.contractId;
1275
+ if (contractId) {
1276
+ this.linkId = contractId;
1277
+ this.contractId = contractId;
1278
+ this.getContractFileInfo(contractId);
1279
+ this.queryParams.linkId = contractId;
1280
+ }
1281
+ },
1282
+ mounted() {},
1283
+ methods: {
1284
+ getShipmentPurchaseAmount(shipmentFileInfo, shipmentIndex) {
1285
+ if (shipmentIndex == this.activeName) {
1286
+ getPurchaseAmount(shipmentFileInfo.shipmentId).then((res) => {
1287
+ this.shipmentPurchaseAmountMessage =
1288
+ '参考采购尾款$' +
1289
+ (
1290
+ res.data.totalPurchaseAmount - res.data.purchaseDepositAmount
1291
+ ).toFixed(2);
1292
+ });
1293
+ }
1294
+ },
1295
+ getShipmentPurchase(shipmentFileInfo) {
1296
+ this.$refs.shipmentPurchaseAmount.handleShow(shipmentFileInfo.shipmentId);
1297
+ },
1298
+ identifyPageBoth(shipmentFileInfo, type) {
1299
+ // 正式 purchaseFinallyInvoice
1300
+ if (type == 2) {
1301
+ if (shipmentFileInfo?.purchaseFinallyInvoice[0]?.url) {
1302
+ this.identifyPage(
1303
+ shipmentFileInfo?.purchaseFinallyInvoice[0]?.url,
1304
+ shipmentFileInfo && shipmentFileInfo.shipmentId,
1305
+ 'final_invoice'
1306
+ );
1307
+ }
1308
+ } else {
1309
+ // 临时 purchaseTemporaryFinallyInvoice
1310
+ this.identifyPage(
1311
+ shipmentFileInfo?.purchaseTemporaryFinallyInvoice[0]?.url,
1312
+ shipmentFileInfo && shipmentFileInfo.shipmentId,
1313
+ 'temporary_invoice'
1314
+ );
1315
+ }
1316
+ },
1317
+ editShipment(val) {
1318
+ this.$refs.shipmentGen.handleUpdate({
1319
+ shipmentId: val && val.shipmentId,
1320
+ });
1321
+ },
1322
+ identifyPage(url, shipmentId, type) {
1323
+ if (type == 'summary') {
1324
+ return this.$router.push({
1325
+ path: '/jxxg/ocr/index',
1326
+ query: {
1327
+ // url: url,
1328
+ shipmentId,
1329
+ shipmentOcrType: type,
1330
+ contractId: this.contractId,
1331
+ },
1332
+ });
1333
+ }
1334
+
1335
+ if (!url) {
1336
+ return this.$message.error('暂无文件');
1337
+ }
1338
+
1339
+ if (type == 'draft_bill') {
1340
+ return this.$router.push({
1341
+ path: '/jxxg/ocr/draft-bill',
1342
+ query: {
1343
+ url: url,
1344
+ shipmentId,
1345
+ shipmentOcrType: type,
1346
+ contractId: this.contractId,
1347
+ },
1348
+ });
1349
+ }
1350
+
1351
+ if (type == 'packing') {
1352
+ return this.$router.push({
1353
+ path: '/jxxg/ocr/packing-list',
1354
+ query: {
1355
+ url: url,
1356
+ shipmentId,
1357
+ shipmentOcrType: type,
1358
+ contractId: this.contractId,
1359
+ },
1360
+ });
1361
+ }
1362
+
1363
+ if (type == 'temporary_invoice') {
1364
+ return this.$router.push({
1365
+ path: '/jxxg/ocr/invoice-balance-temp',
1366
+ query: {
1367
+ url: url,
1368
+ shipmentId,
1369
+ shipmentOcrType: type,
1370
+ contractId: this.contractId,
1371
+ },
1372
+ });
1373
+ }
1374
+
1375
+ if (type == 'final_invoice') {
1376
+ return this.$router.push({
1377
+ path: '/jxxg/ocr/invoice-balance',
1378
+ query: {
1379
+ url: url,
1380
+ shipmentId,
1381
+ shipmentOcrType: type,
1382
+ contractId: this.contractId,
1383
+ },
1384
+ });
1385
+ }
1386
+ },
1387
+
1388
+ /**
1389
+ * @description: 添加货运
1390
+ * @return {*}
1391
+ */
1392
+ addShipment() {
1393
+ const purchaseBuyerInfo = this.purchaseBuyerList[this.selectRadio];
1394
+ let timer = Date.now();
1395
+ addBizShipmentPurchase({
1396
+ bookingNo: 'bookingNo-'+ timer,
1397
+ billOfLadingNo: 'billOfLadingNo-' + timer,
1398
+ saleContractId: purchaseBuyerInfo.contractId,
1399
+ purchaseContractId: this.contract.contractId,
1400
+ containerList:[{
1401
+ containerNo:'containerNo-1'
1402
+ }]
1403
+ }).then((res) => {
1404
+ if (res.code === 200) {
1405
+ this.$modal.msgSuccess('添加成功');
1406
+ this.handleRefresh();
1407
+ }
1408
+ });
1409
+ },
1410
+ // this.dialogVisible = false;
1411
+ // this.$refs.genShipment.handleAdd(
1412
+ // this.selectRadio,
1413
+ // this.contract.destination,
1414
+ // this.contract
1415
+ // );
1416
+ toggleExpand(shipmentIndex, index) {
1417
+ console.log(shipmentIndex, index);
1418
+ console.log(
1419
+ this.contractFileInfo.shipmentFileInfoList[shipmentIndex]
1420
+ .containerFileInfoRespList[index]
1421
+ );
1422
+ this.contractFileInfo.shipmentFileInfoList[
1423
+ shipmentIndex
1424
+ ].containerFileInfoRespList[index].expandedFlag =
1425
+ !this.contractFileInfo.shipmentFileInfoList[shipmentIndex]
1426
+ .containerFileInfoRespList[index].expandedFlag;
1427
+ },
1428
+ //跳转发票列表
1429
+ skipInvoiceList() {
1430
+ this.$router.push({
1431
+ name: 'Invoice',
1432
+ params: { contractNo: this.contract.contractNo },
1433
+ });
1434
+ },
1435
+ shareContainerUrl(containerId) {
1436
+ console.log(process.env.VUE_APP_PAGETOIMG_URL);
1437
+ this.shareImgUrl =
1438
+ // 获取要复制到剪切板的链接
1439
+ process.env.VUE_APP_PAGETOIMG_URL +
1440
+ '/share-cabinet?containerId=' +
1441
+ containerId +
1442
+ '&encryptedContainerId=' +
1443
+ encryptId(containerId);
1444
+
1445
+ // 创建临时 <textarea> 元素,将链接写入其中
1446
+ const textArea = document.createElement('textarea');
1447
+ textArea.value = this.shareImgUrl;
1448
+ document.body.appendChild(textArea);
1449
+
1450
+ // 选中并复制链接
1451
+ textArea.select();
1452
+ document.execCommand('copy');
1453
+
1454
+ // 将 <textarea> 元素删除
1455
+ document.body.removeChild(textArea);
1456
+ this.$modal.msgSuccess('已复制到剪切板');
1457
+ },
1458
+ //撤回回签
1459
+ counterSign() {
1460
+ //如果是回签合同 保留原合同状态
1461
+ updateBizContract({
1462
+ contractId: this.contractId,
1463
+ contractStatus:
1464
+ this.contract.beforeContractStatus || this.contract.contractStatus,
1465
+ }).then((res) => {
1466
+ this.$modal.msgSuccess('撤回回签成功');
1467
+ });
1468
+ },
1469
+ //生船运按钮操作
1470
+ handleGenerate() {
1471
+ listBizInvoice({
1472
+ contractId: this.contractId,
1473
+ invoiceType: 'sale',
1474
+ invoiceSpecies: 'proforma',
1475
+ }).then((res) => {
1476
+ if (
1477
+ res.rows.length <= 0 ||
1478
+ res.rows[0].amount == res.rows[0].remainingAmount
1479
+ ) {
1480
+ this.$confirm(
1481
+ '是否确认直接生成装运?请注意,此合同的定金发票尚未生成或已生成但未收款,请先确认相关情况。',
1482
+ '提示',
1483
+ {
1484
+ confirmButtonText: '确定',
1485
+ cancelButtonText: '取消',
1486
+ type: 'warning',
1487
+ }
1488
+ )
1489
+ .then(() => {
1490
+ listWithContractInfo({
1491
+ contractIds: [this.contractId],
1492
+ contractType: 'sale',
1493
+ }).then((response) => {
1494
+ this.$refs.genShipment.handleAdd(
1495
+ response.rows,
1496
+ this.contract.destination,
1497
+ this.contract
1498
+ );
1499
+ });
1500
+ })
1501
+ .catch(() => {});
1502
+ } else {
1503
+ listWithContractInfo({
1504
+ contractIds: [this.contractId],
1505
+ contractType: 'sale',
1506
+ }).then((response) => {
1507
+ this.$refs.genShipment.handleAdd(
1508
+ response.rows,
1509
+ this.contract.destination,
1510
+ this.contract
1511
+ );
1512
+ });
1513
+ }
1514
+ });
1515
+ },
1516
+ handleGeneratePurchase() {
1517
+ listSaleContracts({ purchaseContractNo: this.contract.contractNo }).then(
1518
+ (res) => {
1519
+ this.purchaseBuyerList = res.rows;
1520
+ if (res.rows.length > 1) {
1521
+ this.dialogVisible = true;
1522
+ } else {
1523
+ this.addShipment();
1524
+ }
1525
+ }
1526
+ );
1527
+ },
1528
+ handleRefresh() {
1529
+ this.getContractFileInfo(this.contractId);
1530
+ },
1531
+ //定金发票
1532
+ getDepositInvoice() {
1533
+ if (this.contract.contractType == 'sale') {
1534
+ getDepositInvoice(this.contract).then((response) => {
1535
+ const data = response.data;
1536
+ this.$refs.depositInvoice.handleShow(data);
1537
+ });
1538
+ } else {
1539
+ this.$refs.purchaseInvoice.handleUpload(this.contract, 'deposit');
1540
+ }
1541
+ },
1542
+ //上传尾款发票
1543
+ uploadFinalInvoice(type, shipmentId) {
1544
+ this.$refs.purchaseInvoice.handleUpload(this.contract, type, shipmentId);
1545
+ },
1546
+ getContractFileInfo(contractId) {
1547
+ getBizContractFileInfo(contractId).then((res) => {
1548
+ this.contractFileInfo = res.data;
1549
+ });
1550
+ },
1551
+ handleHistory(fileType) {
1552
+ this.$router.push({
1553
+ path: '/contract/file/history',
1554
+ query: {
1555
+ linkId: this.linkId,
1556
+ fileType: fileType,
1557
+ },
1558
+ });
1559
+ },
1560
+ downloadZip() {
1561
+ batchAsZip(
1562
+ this.selectFileList,
1563
+ 'contract-' + this.parseTime(new Date(), '{y}-{m}-{d}')
1564
+ );
1565
+ },
1566
+ handleChecked(file) {
1567
+ if (file) this.selectFileList.push(file);
1568
+ console.log(this.selectFileList);
1569
+ },
1570
+ handleUncheck(val) {
1571
+ let index = this.selectFileList.findIndex((item) => item.fileId === val);
1572
+ if (index > -1) this.selectFileList.splice(index, 1);
1573
+ console.log(this.selectFileList);
1574
+ },
1575
+ handleUpload(e, linkId, linkType, fileType) {
1576
+ let loadingInstance = Loading.service({
1577
+ text: '请稍候',
1578
+ spinner: 'el-icon-loading',
1579
+ background: 'rgba(0, 0, 0, 0.7)',
1580
+ });
1581
+ addBizFileInfo({
1582
+ linkId: linkId,
1583
+ linkType: linkType,
1584
+ fileName: e.originFileName,
1585
+ fileType: fileType,
1586
+ url: e.url,
1587
+ ext: e.url.substring(e.url.lastIndexOf('.')),
1588
+ }).then((res) => {
1589
+ loadingInstance.close();
1590
+ //如果是回签合同 保留原合同状态
1591
+ if (fileType == 'contract_sign') {
1592
+ let loading = Loading.service({
1593
+ text: '请稍候',
1594
+ spinner: 'el-icon-loading',
1595
+ background: 'rgba(0, 0, 0, 0.7)',
1596
+ });
1597
+ getBizContract(this.contractId).then((res) => {
1598
+ const contract = res.data;
1599
+ signContract({
1600
+ contractId: this.contractId,
1601
+ contractFlag: 'normal',
1602
+ contractStatus: 'signed',
1603
+ beforeContractStatus: contract.contractStatus,
1604
+ contractSignTime: new Date(),
1605
+ }).then((res) => {
1606
+ loading.close();
1607
+ this.$modal.msgSuccess('回签成功');
1608
+ });
1609
+ });
1610
+ }
1611
+ //如果是上传电放
1612
+ if (fileType == 'shipment_delivery_receipt') {
1613
+ let loading1 = Loading.service({
1614
+ text: '请稍候',
1615
+ spinner: 'el-icon-loading',
1616
+ background: 'rgba(0, 0, 0, 0.7)',
1617
+ });
1618
+ chargedShipment({ shipmentId: linkId }).then((response) => {
1619
+ loading1.close();
1620
+ this.$modal.msgSuccess('电放成功');
1621
+ });
1622
+ }
1623
+ this.getContractFileInfo(this.contractId);
1624
+ });
1625
+ },
1626
+
1627
+ getLastFileByList(fileList) {
1628
+ if (!fileList || fileList.length <= 0) {
1629
+ return;
1630
+ }
1631
+ //找到最新的文件
1632
+ let sortFileList = fileList?.slice()?.sort((a, b) => {
1633
+ return new Date(b.createTime) - new Date(a.createTime);
1634
+ });
1635
+ let file = sortFileList[0];
1636
+ return file;
1637
+ },
1638
+ getLastFile(fileType) {
1639
+ if (!fileType) {
1640
+ return;
1641
+ }
1642
+ //找到最新的文件
1643
+ let file = this.fileInfoList
1644
+ .filter((item) => item.fileType === fileType)
1645
+ .sort((a, b) => {
1646
+ return new Date(b.createTime) - new Date(a.createTime);
1647
+ })[0];
1648
+ return file;
1649
+ },
1650
+ getFileList(fileType) {
1651
+ if (!fileType) {
1652
+ return;
1653
+ }
1654
+ //找到最新的文件
1655
+ return this.fileInfoList.filter((item) => item.fileType === fileType);
1656
+ },
1657
+ /** 查询文件信息列表 */
1658
+ getList() {
1659
+ this.loading = true;
1660
+ listBizFileInfo(this.queryParams).then((response) => {
1661
+ this.fileInfoList = response.rows;
1662
+ this.total = response.total;
1663
+ this.loading = false;
1664
+ });
1665
+ },
1666
+ },
1667
+ computed: {
1668
+ claimFileInfoCom() {
1669
+ if (
1670
+ (this.contractFileInfo &&
1671
+ this.contractFileInfo.claimCreditNoteFileList &&
1672
+ this.contractFileInfo.claimCreditNoteFileList[0]) ||
1673
+ (this.contractFileInfo &&
1674
+ this.contractFileInfo.claimDebitNoteFileList &&
1675
+ this.contractFileInfo.claimDebitNoteFileList[0])
1676
+ ) {
1677
+ return this.buyerFlag
1678
+ ? this.contractFileInfo &&
1679
+ this.contractFileInfo.claimCreditNoteFileList &&
1680
+ this.contractFileInfo.claimCreditNoteFileList
1681
+ : this.contractFileInfo &&
1682
+ this.contractFileInfo.claimDebitNoteFileList &&
1683
+ this.contractFileInfo.claimDebitNoteFileList;
1684
+ } else {
1685
+ false;
1686
+ }
1687
+ },
1688
+ },
1689
+ };
1690
+ </script>
1691
+ <style lang="scss" scoped>
1692
+ .box-card {
1693
+ width: 100%;
1694
+ }
1695
+ .sub-title {
1696
+ font-size: 14px;
1697
+ font-weight: bold;
1698
+ margin-bottom: 10px;
1699
+ }
1700
+ .file-list {
1701
+ display: flex;
1702
+ flex-wrap: wrap;
1703
+
1704
+ .file-info {
1705
+ margin-right: 10px;
1706
+ }
1707
+ }
1708
+ ::v-deep .el-tabs--top .el-tabs__item.is-top:last-child {
1709
+ font-weight: 900;
1710
+ }
1711
+ </style>