doctor-admin-components 1.0.13-beta.9 → 1.0.13-pro.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.
@@ -1,1276 +0,0 @@
1
- <template>
2
- <div>
3
- <el-form
4
- :model="form"
5
- ref="form"
6
- :label-position="'left'"
7
- size="mini"
8
- :disabled="form.contractStatus == 'signed'"
9
- >
10
- <div>
11
- <el-descriptions
12
- class="margin-top"
13
- :title="form.contractType == 'sale' ? '买家争议' : '卖家争议'"
14
- :column="1"
15
- >
16
- <template slot="extra">
17
- <el-button type="text" size="small" @click="handleDisputeRecord"
18
- >争议记录</el-button
19
- >
20
- </template>
21
- </el-descriptions>
22
- <div
23
- v-if="form.normalDispute"
24
- style="word-wrap: break-word; width: 99%; font-size: small"
25
- >
26
- {{
27
- "【" +
28
- (form.normalDispute.createTime
29
- ? form.normalDispute.createTime
30
- : "") +
31
- "】" +
32
- (form.normalDispute.dispute ? form.normalDispute.dispute : "")
33
- }}
34
- </div>
35
- </div>
36
-
37
- <el-row>
38
- <div style="min-height: 40px; background: #e5e9f2; text-align: center">
39
- <span
40
- style="
41
- font-size: 16px;
42
- font-weight: 700;
43
- height: 35px;
44
- line-height: 35px;
45
- "
46
- >
47
- {{
48
- form.contractType == "sale"
49
- ? "Sales Contract"
50
- : "Purchase Contract"
51
- }}
52
- </span>
53
- </div>
54
- </el-row>
55
-
56
- <el-row>
57
- <el-col :span="12">
58
- <el-form-item
59
- label="Contract Order #:"
60
- prop="contractNo"
61
- label-width="130px"
62
- >
63
- <el-input v-model="form.contractNo" clearable size="mini" />
64
- </el-form-item>
65
- </el-col>
66
- <el-col :span="12">
67
- <el-form-item
68
- label="Contract Date:"
69
- prop="createTime"
70
- label-width="120px"
71
- >
72
- <el-date-picker
73
- style="width: 80%"
74
- clearable
75
- size="mini"
76
- v-model="form.createTime"
77
- type="date"
78
- value-format="yyyy-MM-dd HH:mm:ss"
79
- >
80
- </el-date-picker>
81
- </el-form-item>
82
- </el-col>
83
- </el-row>
84
-
85
- <el-row>
86
- <div class="grid-content bg-purple-light">
87
- <span class="text item">
88
- {{ "Company information" }}
89
- </span>
90
- </div>
91
- </el-row>
92
-
93
- <el-row>
94
- <el-col :span="17">
95
- <div class="text item">
96
- {{ "Seller" }}
97
- </div>
98
- </el-col>
99
- <el-col :span="6">
100
- <el-button
101
- type="text"
102
- @click="handleUserCompany(form.supplierCompanyId, 'seller')"
103
- buyerAccountId
104
- >Select Seller's Company
105
- </el-button>
106
- </el-col>
107
- </el-row>
108
- <el-form-item label="Company Name" label-width="120px">
109
- <el-input
110
- v-model="form.supplierContractCompany.companyEnglishName"
111
- clearable
112
- size="mini"
113
- disabled
114
- />
115
- </el-form-item>
116
- <el-form-item label="Company Adress" label-width="128px">
117
- <el-input
118
- v-model="form.supplierContractCompany.address"
119
- clearable
120
- size="mini"
121
- disabled
122
- />
123
- </el-form-item>
124
- <el-form-item label="Contact">
125
- {{ form.supplierContractCompany.contact }}
126
- </el-form-item>
127
- <el-form-item label="Email Address">
128
- {{ form.supplierContractCompany.email }}
129
- </el-form-item>
130
-
131
- <el-row>
132
- <el-col :span="17">
133
- <div class="text item">
134
- {{ "Buyer" }}
135
- </div>
136
- </el-col>
137
- <el-col :span="6">
138
- <el-button
139
- type="text"
140
- @click="handleUserCompany(form.buyCompanyId, 'buyer')"
141
- >Select Buyer's Company</el-button
142
- >
143
- </el-col>
144
- </el-row>
145
- <el-form-item label="Company Name" label-width="120px">
146
- <el-input
147
- v-model="form.buyContractCompany.companyEnglishName"
148
- clearable
149
- size="mini"
150
- disabled
151
- />
152
- </el-form-item>
153
- <el-form-item label="Company Adress" label-width="128px">
154
- <el-input
155
- v-model="form.buyContractCompany.address"
156
- clearable
157
- size="mini"
158
- disabled
159
- />
160
- </el-form-item>
161
- <el-form-item label="Contact">
162
- {{ form.buyContractCompany.contact }}
163
- </el-form-item>
164
- <el-form-item label="Email Address">
165
- {{ form.buyContractCompany.email }}
166
- </el-form-item>
167
-
168
- <el-row>
169
- <div class="grid-content bg-purple-light">
170
- <span class="text item">
171
- {{ "Commodity information" }}
172
- </span>
173
- </div>
174
- </el-row>
175
-
176
- <el-table :data="form.contractDetailList" size="mini">
177
- <el-table-column label="Description" align="center" width="180px">
178
- <template slot-scope="scope">
179
- <el-input
180
- v-model="scope.row.askName"
181
- type="textarea"
182
- autosize
183
- clearable
184
- size="mini"
185
- />
186
- </template>
187
- </el-table-column>
188
- <el-table-column label="Quantity" align="center" width="180px">
189
- <template slot-scope="scope">
190
- <el-input v-model="scope.row.weight" clearable size="mini">
191
- <template slot="append">MT</template>
192
- </el-input>
193
- </template>
194
- </el-table-column>
195
- <el-table-column
196
- v-if="form.quoteType == 'FIXED'"
197
- label="Unit Price/MT"
198
- align="center"
199
- width="180px"
200
- >
201
- <template slot-scope="scope">
202
- <el-input
203
- v-if="form.contractType == 'sale'"
204
- v-model="scope.row.quotePrice"
205
- clearable
206
- size="mini"
207
- >
208
- <template slot="prepend">$</template>
209
- </el-input>
210
- <el-input
211
- v-else
212
- v-model="scope.row.sllerPrice"
213
- clearable
214
- size="mini"
215
- >
216
- <template slot="prepend">$</template>
217
- </el-input>
218
- </template>
219
- </el-table-column>
220
-
221
- <!-- CMX 都显示 -->
222
- <el-table-column
223
- v-if="form.quoteType == 'CMX'"
224
- label="Unit Price/MT"
225
- align="center"
226
- width="250"
227
- >
228
- <template slot-scope="scope">
229
- <el-input
230
- v-if="form.contractType == 'sale'"
231
- v-model="scope.row.quotePrice"
232
- size="mini"
233
- >
234
- <template slot="prepend">$(CMX-</template>
235
- <template slot="append">*2204.62</template>
236
- </el-input>
237
- <el-input v-else v-model="scope.row.sllerPrice" size="small">
238
- <template slot="prepend">$(CMX-</template>
239
- <template slot="append">*2204.62</template>
240
- </el-input>
241
- </template>
242
- </el-table-column>
243
- <!-- LME -->
244
- <el-table-column
245
- v-if="form.quoteType == 'LME'"
246
- label="Unit Price/MT"
247
- align="center"
248
- width="300"
249
- >
250
- <template slot-scope="scope">
251
- <el-input
252
- v-if="form.contractType == 'sale'"
253
- v-model="scope.row.quotePrice"
254
- clearable
255
- size="mini"
256
- >
257
- <template slot="prepend">$(LME 3M *</template>
258
- <template slot="append">%</template>
259
- </el-input>
260
- <el-input
261
- v-else
262
- v-model="scope.row.sllerPrice"
263
- clearable
264
- size="mini"
265
- >
266
- <template slot="prepend">$(LME 3M *</template>
267
- <template slot="append">%</template>
268
- </el-input>
269
- </template>
270
- </el-table-column>
271
-
272
- <!-- CMX 都显示 CMX Month-->
273
- <el-table-column
274
- v-if="form.quoteType == 'CMX'"
275
- label="CMX Month"
276
- align="center"
277
- width="180px"
278
- >
279
- <template slot-scope="scope">
280
- <el-select
281
- v-model="scope.row.cmxMonth"
282
- placeholder="Please select cmxMonth"
283
- clearable
284
- size="mini"
285
- >
286
- <el-option
287
- v-for="dict in dict.type.cmx_month"
288
- :key="dict.value"
289
- :label="dict.label"
290
- :value="dict.value"
291
- />
292
- </el-select>
293
- </template>
294
- </el-table-column>
295
- <el-table-column label="Service fee/MT" align="center" width="180px">
296
- <template slot-scope="scope">
297
- <el-input v-model="scope.row.serviceFee" clearable size="small">
298
- <template slot="prepend">$</template>
299
- </el-input>
300
- </template>
301
- </el-table-column>
302
-
303
- <!-- 采购合同 FIXED -->
304
- <el-table-column label="Net Unit Price/MT" align="center" width="180px">
305
- <template slot-scope="scope">
306
- <span
307
- v-if="
308
- form.quoteType == 'FIXED' && form.contractType == 'purchase'
309
- "
310
- >
311
- {{ "$" + (scope.row.sllerPrice - Number(scope.row.serviceFee)) }}
312
- </span>
313
- <span
314
- v-else-if="
315
- form.quoteType == 'FIXED' && form.contractType == 'sale'
316
- "
317
- >
318
- {{
319
- "$" +
320
- (Number(scope.row.quotePrice) + Number(scope.row.serviceFee))
321
- }}
322
- </span>
323
- <span
324
- v-else-if="
325
- form.quoteType == 'LME' && form.contractType == 'purchase'
326
- "
327
- >
328
- {{
329
- "$(LME 3M * " +
330
- scope.row.sllerPrice +
331
- "%) - $" +
332
- Number(scope.row.serviceFee)
333
- }}
334
- </span>
335
- <span
336
- v-else-if="form.quoteType == 'LME' && form.contractType == 'sale'"
337
- >
338
- {{
339
- "$(LME 3M * " +
340
- scope.row.quotePrice +
341
- "%) + $" +
342
- Number(scope.row.serviceFee)
343
- }}
344
- </span>
345
- <span
346
- v-else-if="
347
- form.quoteType == 'CMX' && form.contractType == 'purchase'
348
- "
349
- >
350
- {{
351
- "${(CMX-" +
352
- scope.row.sllerPrice +
353
- ")*2204.62} - $" +
354
- Number(scope.row.serviceFee)
355
- }}
356
- </span>
357
- <span v-else>
358
- {{
359
- "${(CMX-" +
360
- scope.row.quotePrice +
361
- ")*2204.62} + $" +
362
- Number(scope.row.serviceFee)
363
- }}
364
- </span>
365
- </template>
366
- </el-table-column>
367
-
368
- <!-- <el-table-column width="100" align="center">
369
- <el-popconfirm
370
- title="确定删除吗?"
371
- @onConfirm="deleteTableRow(scope.row)"
372
- >
373
- <el-button
374
- type="danger"
375
- slot="reference"
376
- style="min-width: 60px"
377
- size="mini"
378
- >删除</el-button
379
- >
380
- </el-popconfirm>
381
- </el-table-column> -->
382
- </el-table>
383
-
384
- <el-button
385
- type="success"
386
- icon="el-icon-plus"
387
- @click="addDetails"
388
- size="mini"
389
- >Add</el-button
390
- >
391
- <el-row></el-row>
392
- <el-row>
393
- <div class="grid-content bg-purple-light">
394
- <span class="text item">
395
- {{ "Trade information" }}
396
- </span>
397
- </div>
398
- </el-row>
399
-
400
- <el-form-item label="Service Fee" label-width="100px">
401
- <el-radio-group v-model="form.serviceFeeSwitch">
402
- <el-radio :label="false">Close</el-radio>
403
- <el-radio :label="true">open</el-radio>
404
- </el-radio-group>
405
- </el-form-item>
406
- <el-form-item label-width="100px">
407
- <el-input
408
- v-model="form.serviceFee"
409
- placeholder="Please enter serviceFee"
410
- clearable
411
- size="small"
412
- />
413
- </el-form-item>
414
- <el-form-item label="Freight Terms">
415
- <el-select
416
- v-model="form.freightTerms"
417
- placeholder="请选择交易条款"
418
- size="small"
419
- clearable
420
- >
421
- <el-option
422
- v-for="dict in dict.type.freight_terms"
423
- :key="dict.value"
424
- :label="dict.label"
425
- :value="dict.value"
426
- />
427
- </el-select>
428
- </el-form-item>
429
- <el-form-item label="Payment Terms" label-width="120px">
430
- <el-input
431
- v-model="form.deposit"
432
- size="mini"
433
- clearable
434
- style="width: 200px"
435
- >
436
- <template slot="prepend">Deposit</template>
437
- <template slot="append">%</template>
438
- </el-input>
439
- <el-input
440
- v-model="form.depositDays"
441
- size="mini"
442
- clearable
443
- style="width: 130px"
444
- >
445
- <template slot="append">Days</template>
446
- </el-input>
447
- <el-input
448
- v-model="form.depositPaymentForm"
449
- size="mini"
450
- clearable
451
- placeholder="提示输入:after booking"
452
- style="width: 170px"
453
- >
454
- </el-input>
455
- </el-form-item>
456
- <el-form-item label="" label-width="120px">
457
- <el-input
458
- v-model="form.balance"
459
- size="mini"
460
- clearable
461
- style="width: 200px"
462
- >
463
- <template slot="prepend">Balance</template>
464
- <template slot="append">%</template>
465
- </el-input>
466
-
467
- <el-input
468
- v-model="form.balanceDays"
469
- size="mini"
470
- clearable
471
- style="width: 130px"
472
- >
473
- <template slot="append">Days</template>
474
- </el-input>
475
-
476
- <el-select v-model="form.balancePaymentForm" clearable>
477
- <el-option label="Before arrive" value="Before arrive"></el-option>
478
- <el-option label="After arrival" value="After arrival"></el-option>
479
- </el-select>
480
-
481
- <el-row>
482
- <el-input
483
- style="width: 150px; margin-top: 15px"
484
- v-model="form.balancePaymentType"
485
- size="mini"
486
- clearable
487
- >
488
- <template slot="append">paid</template>
489
- </el-input>
490
- </el-row>
491
- <el-row>
492
- <el-input v-model="form.otherPaymentTerm" size="mini" clearable>
493
- </el-input>
494
- </el-row>
495
- </el-form-item>
496
-
497
- <el-form-item label="Loading Country/Region">
498
- <el-select
499
- v-model="form.loadingCountry"
500
- filterable
501
- placeholder="Please select loadingCountry"
502
- >
503
- <el-option
504
- v-for="item in countryDictList"
505
- :key="item.dictDataId"
506
- :label="item.dictValue"
507
- :value="item.dictValue"
508
- >
509
- </el-option>
510
- </el-select>
511
- </el-form-item>
512
-
513
- <el-form-item label="Origin Country/Region">
514
- <el-select
515
- v-model="form.originCountry"
516
- filterable
517
- placeholder="Please select originCountry"
518
- >
519
- <el-option
520
- v-for="item in countryDictList"
521
- :key="item.dictDataId"
522
- :label="item.dictValue"
523
- :value="item.dictValue"
524
- >
525
- </el-option>
526
- </el-select>
527
- </el-form-item>
528
-
529
- <el-form-item label="Destination">
530
- <el-select
531
- v-model="form.destination"
532
- filterable
533
- placeholder="Please select destination"
534
- >
535
- <el-option
536
- v-for="item in portDictList"
537
- :key="item.dictDataId"
538
- :label="item.dictValue"
539
- :value="item.dictValue"
540
- >
541
- </el-option>
542
- </el-select>
543
- </el-form-item>
544
-
545
- <el-form-item label="Number of Containers"> </el-form-item>
546
- <el-row>
547
- <el-col :span="8">
548
- <el-form-item label="20'">
549
- <el-input-number
550
- v-model="form.numberOfContainersForTwenty"
551
- :min="0"
552
- >
553
- </el-input-number>
554
- </el-form-item>
555
- </el-col>
556
- <el-col :span="8">
557
- <el-form-item label="40'">
558
- <el-input-number v-model="form.numberOfContainersForForty" :min="0">
559
- </el-input-number>
560
- </el-form-item>
561
- </el-col>
562
-
563
- <el-col :span="8">
564
- <el-form-item label="20'/40'" label-width="60px">
565
- <el-input-number
566
- v-model="form.numberOfContainersForTwentyOrForty"
567
- :min="0"
568
- >
569
- </el-input-number>
570
- </el-form-item>
571
- </el-col>
572
- </el-row>
573
-
574
- <el-row>
575
- <el-col :span="12">
576
- <el-form-item label="More or less<" label-width="110px">
577
- <el-input v-model="form.toleranceFloat">
578
- <template slot="append">x100%</template>
579
- </el-input>
580
- </el-form-item></el-col
581
- >
582
- <el-col :span="12">
583
- <el-form-item label="Weight Tolerance" label-width="130px">
584
- <el-input v-model="form.weightTolerance">
585
- <template slot="append">%</template>
586
- </el-input>
587
- </el-form-item>
588
- </el-col>
589
- </el-row>
590
-
591
- <el-form-item label="Latest shipment" label-width="120px">
592
- <el-input v-model="form.latestShipment">
593
- <template slot="prepend">within</template>
594
- <template slot="append">Days of the contract signed date</template>
595
- </el-input>
596
- </el-form-item>
597
-
598
- <el-form-item label="Price Fixing Option">
599
- <el-radio-group v-model="form.livePriceSwitch">
600
- <el-radio :label="false">Close</el-radio>
601
- <el-radio :label="true">open</el-radio>
602
- </el-radio-group>
603
- </el-form-item>
604
-
605
- <el-row :gutter="5">
606
- <el-col :span="6">
607
- <el-form-item>
608
- <el-input v-model="form.livePriceDays">
609
- <template slot="append">Days</template>
610
- </el-input>
611
- </el-form-item>
612
- </el-col>
613
- <el-col :span="6">
614
- <el-radio-group v-model="form.livePriceForm">
615
- <el-radio :label="'before'">Before arrive</el-radio>
616
- <el-radio :label="'after'">After arrival</el-radio>
617
- </el-radio-group>
618
- </el-col>
619
- <el-col :span="10">
620
- <el-form-item label="By" label-width="30px">
621
- <el-radio-group v-model="form.livePriceUsertype">
622
- <el-radio :label="'Buyer'">Buyer</el-radio>
623
- <el-radio :label="'Seller'">Seller</el-radio>
624
- </el-radio-group>
625
- </el-form-item>
626
- </el-col>
627
- </el-row>
628
-
629
- <el-form-item label="Required documents">
630
- <el-tag
631
- :key="tag"
632
- v-for="tag in dynamicTags"
633
- closable
634
- :disable-transitions="false"
635
- @close="handleClose(tag)"
636
- size="mini"
637
- >
638
- {{ tag }}
639
- </el-tag>
640
- <el-input
641
- class="input-new-tag"
642
- v-if="inputVisible"
643
- v-model="inputValue"
644
- ref="saveTagInput"
645
- @keyup.enter.native="handleInputConfirm"
646
- @blur="handleInputConfirm"
647
- >
648
- </el-input>
649
- <el-button v-else class="button-new-tag" @click="showInput">
650
- + New Tag
651
- </el-button>
652
- </el-form-item>
653
- <el-form-item label="Quality certificate">
654
- <el-radio-group v-model="form.qualityCertificateSwitch">
655
- <el-radio :label="false">Close</el-radio>
656
- <el-radio :label="true">open</el-radio>
657
- </el-radio-group>
658
- </el-form-item>
659
- <el-form-item>
660
- <el-input
661
- autosize
662
- type="textarea"
663
- placeholder="请输入内容"
664
- v-model="form.qualityCertificate"
665
- >
666
- </el-input>
667
- </el-form-item>
668
-
669
- <el-form-item label="Claim ">
670
- <el-radio-group v-model="form.claimSwitch">
671
- <el-radio :label="false">Close</el-radio>
672
- <el-radio :label="true">open</el-radio>
673
- </el-radio-group>
674
- </el-form-item>
675
- <el-form-item>
676
- <el-input
677
- type="textarea"
678
- autosize
679
- placeholder="请输入内容"
680
- v-model="form.claim"
681
- >
682
- </el-input>
683
- </el-form-item>
684
-
685
- <el-form-item label="Arbitration ">
686
- <el-radio-group v-model="form.arbitrationSwitch">
687
- <el-radio :label="false">Close</el-radio>
688
- <el-radio :label="true">open</el-radio>
689
- </el-radio-group>
690
- </el-form-item>
691
- <el-row>
692
- <el-col :span="15">
693
- <el-form-item>
694
- <el-input
695
- type="textarea"
696
- :autosize="{ minRows: 3, maxRows: 5 }"
697
- placeholder="请输入内容"
698
- v-model="form.arbitration"
699
- >
700
- </el-input>
701
- </el-form-item>
702
- </el-col>
703
- </el-row>
704
- <el-form-item label="Memo ">
705
- <el-radio-group v-model="form.memoSwitch">
706
- <el-radio :label="false">Close</el-radio>
707
- <el-radio :label="true">open</el-radio>
708
- </el-radio-group>
709
- </el-form-item>
710
- <el-form-item>
711
- <el-input
712
- type="textarea"
713
- autosize
714
- placeholder="请输入内容"
715
- v-model="form.memo"
716
- >
717
- </el-input>
718
- </el-form-item>
719
- <el-button type="text" @click="addCustomClause">新增条款</el-button>
720
- <el-button type="text" @click="deleteCustomClause">删除条款</el-button>
721
- <el-form-item v-for="(item, index) in customClause" :key="index">
722
- <el-input
723
- style="width: 25%"
724
- v-model="item.title"
725
- placeholder="请输入标题"
726
- ></el-input>
727
- <el-input
728
- type="textarea"
729
- autosize
730
- style="width: 75%"
731
- v-model="item.content"
732
- placeholder="请输入内容"
733
- ></el-input>
734
- </el-form-item>
735
- </el-form>
736
- <div style="text-align: center">
737
- <el-button type="primary" @click="submitForm">保 存</el-button>
738
- <el-button type="success" @click="updateAndDownload">下 载</el-button>
739
- <el-button
740
- type="primary"
741
- :disabled="isButtonDisabled"
742
- @click="sendDrafContractEmail"
743
- >完成并发送草稿合同</el-button
744
- >
745
- <el-button @click="returnTracing">返回</el-button>
746
- </div>
747
-
748
- <company-list ref="companyList" @confirmCompany="confirmCompany" />
749
-
750
- <contract-company-list
751
- ref="contractCompanyList"
752
- @confirmCompany="confirmCompany"
753
- ></contract-company-list>
754
-
755
- <send-draf-email ref="sendDrafEmail"></send-draf-email>
756
-
757
- <dispute-record ref="disputeRecord"></dispute-record>
758
- </div>
759
- </template>
760
-
761
- <script>
762
- import {
763
- getBizContract,
764
- updateBizContract,
765
- getBizContractByNo,
766
- } from "../../../api/biz/bizContract";
767
- import CompanyList from "../bizContract/companyList.vue";
768
- import { updateCompanyInfo } from "../../../api/biz/companyInfo";
769
- import { portDictList, listDictData } from "../../../api/biz/dictData";
770
- import ContractCompanyList from "../bizContract/contractCompanyList";
771
- import { listBizContractDispute } from "../../../api/biz/bizContractDispute";
772
- import { sendDrafEmail } from "../../../api/biz/bizContract";
773
-
774
- import SendDrafEmail from "./sendDrafEmail.vue";
775
- import DisputeRecord from "./disputeRecord.vue";
776
-
777
- export default {
778
- name: "ContractByNo",
779
- dicts: ["freight_terms", "cmx_month"],
780
- components: {
781
- CompanyList,
782
- ContractCompanyList,
783
- SendDrafEmail,
784
- DisputeRecord,
785
- },
786
- props: {
787
- contractNo: {
788
- type: String,
789
- default: "",
790
- },
791
- //港口数据列表
792
- portDictList: {
793
- type: Array,
794
- default: [],
795
- },
796
- //国家数据李北奥
797
- countryDictList: {
798
- type: Array,
799
- default: [],
800
- },
801
- },
802
- watch: {
803
- contractNo: {
804
- handler(val) {
805
- if (val) {
806
- this.getBizContractByNo(val);
807
- }
808
- },
809
- },
810
- },
811
- data() {
812
- return {
813
- // 遮罩层
814
- loading: true,
815
- // 弹出层标题
816
- title: "",
817
- // 是否显示弹出层
818
- open: false,
819
- // 表单参数
820
- form: {
821
- sellerCompanyInfo: {
822
- companyEnglishName: null,
823
- address: null,
824
- },
825
- buyerCompanyInfo: {
826
- companyEnglishName: null,
827
- address: null,
828
- },
829
- buyContractCompanyId: null,
830
- buyContractCompany: { companyEnglishName: null, address: null },
831
- supplierContractCompanyId: null,
832
- supplierContractCompany: {
833
- companyEnglishName: null,
834
- address: null,
835
- },
836
- contractDetailList: [],
837
- },
838
- dynamicTags: [],
839
- inputVisible: false,
840
- inputValue: "",
841
- //是否保存卖家地址
842
- saveSellerCompanyAddress: false,
843
- //是否保存买家地址
844
- saveBuyerCompanyAddress: false,
845
- //买家地址
846
- buyerCompanyAddress: null,
847
- //卖家地址
848
- sellerCompanyAddress: null,
849
- //
850
- isButtonDisabled: false,
851
- //自定义条款
852
- customClause: [],
853
- };
854
- },
855
- created() {
856
- if (this.contractNo) {
857
- this.getBizContractByNo(this.contractNo);
858
- }
859
- },
860
- methods: {
861
- addCustomClause() {
862
- this.customClause.push({
863
- title: "",
864
- content: "",
865
- });
866
- },
867
- deleteCustomClause() {
868
- this.customClause.pop();
869
- },
870
- //合同争议记录
871
- handleDisputeRecord() {
872
- this.$refs.disputeRecord.handleShow(this.form.contractId);
873
- },
874
- //返回合同追踪
875
- returnTracing() {
876
- this.$router.push({
877
- name: "ContractTracing",
878
- params: { askId: this.form.askId },
879
- });
880
- },
881
- //完成并发送草稿合同邮箱
882
- sendDrafContractEmail() {
883
- //合同未找到邮箱
884
- if (this.form.contractType == "sale") {
885
- this.findEmailTip(this.form.buyContractCompany);
886
- } else {
887
- this.findEmailTip(this.form.supplierContractCompany);
888
- }
889
-
890
- if (this.form.contractId) {
891
- listBizContractDispute({
892
- contractId: this.form.contractId,
893
- disputeType: "normal",
894
- disputeState: false,
895
- }).then((res) => {
896
- const list = res.rows;
897
- if (list.length > 0) {
898
- this.$refs.sendDrafEmail.handleSend(list, this.form);
899
- } else {
900
- if (this.form.contractType == "sale") {
901
- const contractCompany = this.form.buyContractCompany;
902
- if (contractCompany && contractCompany.email) {
903
- sendDrafEmail(this.form).then((response) => {
904
- this.$modal.msgSuccess("发送成功");
905
- this.getBizContractByNo(this.form.contractNo);
906
- });
907
- }
908
- } else {
909
- const contractCompany = this.form.supplierContractCompany;
910
- if (contractCompany && contractCompany.email) {
911
- sendDrafEmail(this.form).then((response) => {
912
- this.$modal.msgSuccess("发送成功");
913
- this.getBizContractByNo(this.form.contractNo);
914
- });
915
- }
916
- }
917
- }
918
- });
919
- }
920
- // 设置按钮为禁用状态
921
- this.isButtonDisabled = true;
922
- // 1秒后恢复按钮可用状态
923
- setTimeout(() => {
924
- this.isButtonDisabled = false;
925
- }, 1000);
926
- },
927
- findEmailTip(contractCompany) {
928
- if (!(contractCompany && contractCompany.email)) {
929
- this.$confirm("发送失败,请先补充合同公司的邮箱后再点击发送", "提示", {
930
- confirmButtonText: "补充邮箱",
931
- cancelButtonText: "取消发送",
932
- type: "warning",
933
- })
934
- .then(() => {
935
- this.$router.push({
936
- path: "/infomenu/companyInfo/edit/" + contractCompany.companyId,
937
- });
938
- })
939
- .catch(() => {
940
- this.$message({
941
- type: "info",
942
- message: "取消发送",
943
- });
944
- });
945
- }
946
- },
947
- //选择公司
948
- handleUserCompany(companyId, type) {
949
- this.$refs.contractCompanyList.handleShow(companyId, type);
950
- },
951
- //
952
- addDetails() {
953
- const detail = {
954
- contractId: this.form.contractId,
955
- askId: this.form.askId,
956
- askName: "",
957
- weight: "",
958
- cmxMonth: "",
959
- serviceFee: "",
960
- quotePrice: "",
961
- sllerPrice: "",
962
- };
963
- this.form.contractDetailList.push(detail);
964
- },
965
- //获取国家数据列表
966
- getCountryDictList() {
967
- const dictData = {
968
- dictType: "Country",
969
- pageNum: 1,
970
- pageSize: 999,
971
- orderByColumn: "dictValue",
972
- isAsc: "asc",
973
- };
974
- listDictData(dictData).then((response) => {
975
- this.countryDictList = response.rows;
976
- });
977
- },
978
- //获取港口数据列表
979
- getPortDictList() {
980
- portDictList().then((response) => {
981
- this.portDictList = response.rows;
982
- });
983
- },
984
- //买家公司保存地址
985
- handleBuyerCompanychange(buyerCompanyInfo, val) {
986
- if (
987
- val &&
988
- this.form.buyerCompanyInfo.address !== this.buyerCompanyAddress
989
- ) {
990
- this.$modal
991
- .confirm("该名下已有地址,是否更新覆盖")
992
- .then(function () {
993
- return updateCompanyInfo(buyerCompanyInfo);
994
- })
995
- .then(() => {
996
- this.$modal.msgSuccess("覆盖成功");
997
- })
998
- .catch(() => {});
999
- }
1000
- },
1001
- //卖家公司保存地址
1002
- handleSellerCompanychange(sellerCompanyInfo, val) {
1003
- if (
1004
- val &&
1005
- this.form.sellerCompanyInfo.address !== this.sellerCompanyAddress
1006
- ) {
1007
- this.$modal
1008
- .confirm("该名下已有地址,是否更新覆盖")
1009
- .then(function () {
1010
- return updateCompanyInfo(sellerCompanyInfo);
1011
- })
1012
- .then(() => {
1013
- this.$modal.msgSuccess("覆盖成功");
1014
- })
1015
- .catch(() => {});
1016
- }
1017
- },
1018
- //确认公司
1019
- confirmCompany(companyList, type) {
1020
- var company = companyList[0];
1021
- company.email =
1022
- company.email && company.email.length > 0
1023
- ? company.email.join(",")
1024
- : "";
1025
- company.phoneNumber =
1026
- company.phoneNumber && company.phoneNumber.length > 0
1027
- ? company.phoneNumber[0]
1028
- : "";
1029
- if (type == "seller") {
1030
- this.$set(this.form, "supplierContractCompany", company);
1031
- this.form.supplierContractCompanyId = company.contractCompanyId;
1032
- this.form.supplierCompanyId = company.companyId;
1033
- } else if (type == "buyer") {
1034
- this.$set(this.form, "buyContractCompany", company);
1035
- this.form.buyContractCompanyId = company.contractCompanyId;
1036
- this.form.buyCompanyId = company.companyId;
1037
- }
1038
- },
1039
- //选择卖家公司弹框
1040
- handleAllCompany(type) {
1041
- this.$refs.companyList.handleShow(type);
1042
- },
1043
- handleClose(tag) {
1044
- this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);
1045
- },
1046
-
1047
- showInput() {
1048
- this.inputVisible = true;
1049
- this.$nextTick((_) => {
1050
- this.$refs.saveTagInput.$refs.input.focus();
1051
- });
1052
- },
1053
-
1054
- handleInputConfirm() {
1055
- let inputValue = this.inputValue;
1056
- if (inputValue) {
1057
- this.dynamicTags.push(inputValue);
1058
- }
1059
- this.inputVisible = false;
1060
- this.inputValue = "";
1061
- },
1062
- // 表单重置
1063
- reset() {
1064
- this.form = {
1065
- contractId: null,
1066
- contractNo: null,
1067
- askId: null,
1068
- buyId: null,
1069
- supplierId: null,
1070
- buyCompanyId: null,
1071
- supplierCompanyId: null,
1072
- serviceFee: null,
1073
- serviceFeeSwitch: null,
1074
- freightTerms: null,
1075
- deposit: null,
1076
- depositDays: null,
1077
- balance: null,
1078
- balanceDays: null,
1079
- balancePaymentForm: null,
1080
- balancePaymentForm: null,
1081
- loadingCountry: null,
1082
- originCountry: null,
1083
- destination: null,
1084
- numberOfContainersForTwenty: null,
1085
- numberOfContainersForForty: null,
1086
- numberOfContainersForTwentyOrForty: null,
1087
- toleranceFloat: null,
1088
- weightTolerance: null,
1089
- latestShipment: null,
1090
- livePriceSwitch: null,
1091
- livePriceDays: null,
1092
- livePriceForm: null,
1093
- livePriceUsertype: null,
1094
- qualityCertificate: null,
1095
- qualityCertificateSwitch: null,
1096
- claim: null,
1097
- claimSwitch: null,
1098
- arbitration: null,
1099
- arbitrationSwitch: null,
1100
- memo: null,
1101
- memoSwitch: null,
1102
- contractStatus: "0",
1103
- createTime: null,
1104
- updateTime: null,
1105
- completionTime: null,
1106
- requiredDocuments: null,
1107
- supplierAccountId: null,
1108
- supplierCompanyId: null,
1109
- sellerCompanyInfo: {
1110
- companyEnglishName: null,
1111
- address: null,
1112
- },
1113
- buyerAccountId: null,
1114
- buyCompanyId: null,
1115
- buyerCompanyInfo: {
1116
- companyEnglishName: null,
1117
- address: null,
1118
- },
1119
- buyContractCompanyId: null,
1120
- buyContractCompany: { companyEnglishName: null, address: null },
1121
- supplierContractCompanyId: null,
1122
- supplierContractCompany: {
1123
- companyEnglishName: null,
1124
- address: null,
1125
- },
1126
- contractDetailList: [],
1127
- };
1128
- this.resetForm("form");
1129
- },
1130
- getBizContractByNo(contractNo) {
1131
- this.reset();
1132
- getBizContractByNo(contractNo).then((response) => {
1133
- this.form = response.data;
1134
- this.dynamicTags =
1135
- this.form.requiredDocuments && this.form.requiredDocuments != "null"
1136
- ? JSON.parse(this.form.requiredDocuments)
1137
- : [];
1138
- this.customClause = this.form.customClause
1139
- ? JSON.parse(this.form.customClause)
1140
- : [];
1141
- if (!this.form.contractDetailList) {
1142
- this.form.contractDetailList = [];
1143
- }
1144
- if (!this.form.supplierContractCompany) {
1145
- this.form.supplierContractCompany = {
1146
- companyEnglishName: "",
1147
- address: "",
1148
- };
1149
- }
1150
- if (!this.form.buyContractCompany) {
1151
- this.form.buyContractCompany = {
1152
- companyEnglishName: "",
1153
- address: "",
1154
- };
1155
- }
1156
- });
1157
- },
1158
- /** 提交按钮 */
1159
- submitForm() {
1160
- this.$refs["form"].validate((valid) => {
1161
- if (valid) {
1162
- if (this.form.contractId != null) {
1163
- this.form.requiredDocuments = JSON.stringify(this.dynamicTags);
1164
- this.form.customClause = JSON.stringify(this.customClause);
1165
- updateBizContract(this.form).then((response) => {
1166
- this.$modal.msgSuccess("保存成功");
1167
- // this.$router.push({
1168
- // name: "Contract",
1169
- // params: { askId: this.form.askId },
1170
- // });
1171
- });
1172
- }
1173
- }
1174
- });
1175
- },
1176
- /** 下载合同 */
1177
- handleDownLoadContract(row) {
1178
- if (row.contractType == "sale") {
1179
- this.download(
1180
- "biz/contract/exportTemplate",
1181
- {
1182
- contractId: row.contractId,
1183
- templateType: "EXCEL",
1184
- },
1185
- `${
1186
- row.contractNo + "-" + row.buyContractCompany.companyEnglishName
1187
- }.xlsx`
1188
- );
1189
- } else {
1190
- this.download(
1191
- "biz/contract/exportTemplate",
1192
- {
1193
- contractId: row.contractId,
1194
- templateType: "EXCEL",
1195
- },
1196
- `${
1197
- row.contractNo +
1198
- "-" +
1199
- row.supplierContractCompany.companyEnglishName
1200
- }.xlsx`
1201
- );
1202
- }
1203
- },
1204
- updateAndDownload() {
1205
- this.submitForm();
1206
- return new Promise((resolve, reject) => {
1207
- setTimeout(() => {
1208
- this.handleDownLoadContract(this.form);
1209
- }, 2000);
1210
- });
1211
- },
1212
- deleteTableRow(value) {
1213
- console.log(this.form.contractDetailList);
1214
- console.log(value);
1215
- },
1216
- },
1217
- };
1218
- </script>
1219
- <style lang="scss" scoped>
1220
- .text {
1221
- font-size: 16px;
1222
- font-weight: 700;
1223
- height: 35px;
1224
- line-height: 35px;
1225
- }
1226
- .item {
1227
- margin-bottom: 18px;
1228
- }
1229
- .text1 {
1230
- font-size: 15px;
1231
- text-align: center;
1232
- height: 35px;
1233
- line-height: 39px;
1234
- }
1235
- .bg-purple-dark {
1236
- background: #99a9bf;
1237
- }
1238
- .bg-purple {
1239
- background: #d3dce6;
1240
- }
1241
- .bg-purple-light {
1242
- background: #e5e9f2;
1243
- }
1244
- .grid-content {
1245
- border-radius: 4px;
1246
- min-height: 36px;
1247
- }
1248
- .el-row {
1249
- margin-bottom: 20px;
1250
- &:last-child {
1251
- margin-bottom: 0;
1252
- }
1253
- }
1254
- .el-col {
1255
- border-radius: 4px;
1256
- }
1257
- .row-bg {
1258
- padding: 10px 0;
1259
- background-color: #f9fafc;
1260
- }
1261
- .el-tag + .el-tag {
1262
- margin-left: 10px;
1263
- }
1264
- .button-new-tag {
1265
- margin-left: 10px;
1266
- height: 32px;
1267
- line-height: 30px;
1268
- padding-top: 0;
1269
- padding-bottom: 0;
1270
- }
1271
- .input-new-tag {
1272
- width: 90px;
1273
- margin-left: 10px;
1274
- vertical-align: bottom;
1275
- }
1276
- </style>