doctor-admin-components 1.0.13-beta.6 → 1.0.13-beta.60

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 (49) hide show
  1. package/README.md +18 -7
  2. package/package.json +1 -1
  3. package/packages/index.js +7 -0
  4. package/packages/src/api/biz/bizContract.js +980 -1
  5. package/packages/src/api/biz/bizContractCompany.js +1 -1
  6. package/packages/src/api/biz/bizFileInfo.js +16 -0
  7. package/packages/src/api/biz/bizInvoice.js +1 -1
  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/FileUpload/contract-drag-new.vue +99 -10
  12. package/packages/src/i18n/en/message.json +296 -0
  13. package/packages/src/i18n/index.js +38 -0
  14. package/packages/src/i18n/zh-CN/message.json +296 -0
  15. package/packages/src/index.js +6 -0
  16. package/packages/src/utils/index.js +35 -0
  17. package/packages/src/utils/request.js +120 -146
  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 +1678 -1003
  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 +280 -0
  24. package/packages/src/views/biz/bizFileInfo/contractFile/Progress.vue +85 -0
  25. package/packages/src/views/biz/bizFileInfo/contractFile/ProgressDetail.vue +122 -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 +131 -46
  30. package/packages/src/views/biz/bizFileInfo/fileShowClaim.vue +1 -1
  31. package/packages/src/views/biz/bizShipment/add.vue +119 -69
  32. package/packages/src/views/biz/contractTracing/addSubCompany.vue +106 -169
  33. package/packages/src/views/biz/contractTracing/billInfo.vue +150 -315
  34. package/packages/src/views/biz/contractTracing/companyBanks.vue +224 -0
  35. package/packages/src/views/biz/contractTracing/contractSummary.vue +286 -629
  36. package/packages/src/views/biz/contractTracing/contractTracingDetail copy.vue +107 -0
  37. package/packages/src/views/biz/contractTracing/contractTracingDetail.vue +200 -7
  38. package/packages/src/views/biz/contractTracing/editBill.vue +219 -359
  39. package/packages/src/views/biz/contractTracing/purchaseInvoiceUpload.vue +157 -7
  40. package/packages/src/views/biz/contractTracing/shipmentPurchaseAmount.vue +8 -2
  41. package/packages/src/views/biz/contractTracing/subCompanyDialog.vue +196 -176
  42. package/packages/src/views/test.vue +3 -3
  43. package/packages/src/views/biz/contractTracing/association.vue +0 -189
  44. package/packages/src/views/biz/contractTracing/chargingDialog.vue +0 -84
  45. package/packages/src/views/biz/contractTracing/contract.vue +0 -1276
  46. package/packages/src/views/biz/contractTracing/disputeRecord.vue +0 -311
  47. package/packages/src/views/biz/contractTracing/edit.vue +0 -205
  48. package/packages/src/views/biz/contractTracing/sendDrafEmail.vue +0 -120
  49. package/packages/src/views/biz/contractTracing/shipment.vue +0 -601
@@ -1,47 +1,28 @@
1
1
  <template>
2
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>
3
+ <!--合同 装运 收获 进度显示 -->
4
+ <div class="progress-root">
5
+ <Progress :infoPro="contractProgressInfo"></Progress>
6
+ <Progress :infoPro="shipProgressInfo"></Progress>
7
+ <Progress :infoPro="getGoodsProgressInfo"></Progress>
11
8
  </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>
9
+ <!-- 合同 -->
10
+ <div style="margin-top:30px">
11
+ <SectionSlot :infoPro="contractProgressInfo">
12
+ <template v-slot:header>
13
+ <div>
14
+ <ProgressDetail :infoPro="contractProgressInfo"></ProgressDetail>
15
+ </div>
16
+ </template>
17
+ <template v-slot:content>
18
+ <div class="content-root">
19
+ <!-- 提单指令 -->
20
+ <ContentTitle :contentTitleProp="{
21
+ bgButton: $t('contractDetail.blInfo'),
22
+ bgTime:contractFileInfo.personalBillFileInfo && timeFormate(contractFileInfo.personalBillFileInfo),
23
+ }"></ContentTitle>
24
+ <el-col :span="12">
25
+ <div v-if="getLastFileByList(contractFileInfo.latestBillFileInfo)">
45
26
  <div class="sub-title">{{ $t("contractDetail.blInfo") }}</div>
46
27
  <div class="file-list">
47
28
  <file-show
@@ -49,570 +30,817 @@
49
30
  @refresh="handleRefresh"
50
31
  @checked="handleChecked"
51
32
  @uncheck="handleUncheck"
33
+ :selectFileListProp="selectFileList"
52
34
  :fileInfo="
53
35
  getLastFileByList(contractFileInfo.latestBillFileInfo)
54
36
  "
55
37
  />
56
38
  </div>
57
39
  </div>
58
- </el-col>
59
- <el-col :span="6">
60
40
  <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
- />
41
+ <file-show
42
+ :hiddenOperation="channel == 'official-website'"
43
+ @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item"
44
+ v-for="(item, i) in contractFileInfo.personalBillFileInfo" :key="i" />
45
+ <contract-file-drag-upload
46
+ v-show="(!contractFileInfo.personalBillFileInfo || contractFileInfo.personalBillFileInfo.length == 0) && channel !== 'official-website'"
47
+ @upload="
48
+ handleUpload(
49
+ $event,
50
+ contract.dealId,
51
+ 'dealRecord',
52
+ 'personal_deal_bill'
53
+ )
54
+ ":isShowTip="false"
55
+ :uploadNameStr="$t('contractDetail.blInfo')" />
82
56
  </div>
83
57
  </el-col>
84
- <el-col :span="9">
85
- <div>
86
- <div v-if="channel !== 'official-website'" class="sub-title">
58
+ <el-col :span="12">
59
+
60
+ </el-col>
61
+ <el-col :span="12" v-if="contractFileInfo.bliConfirmFlag" class="center-status">
62
+ <i class="el-icon-success success"></i>
63
+ {{ $t('contractDetail.bl_confirm_true') }}
64
+ </el-col>
65
+ <el-col :span="12" v-else class="center-status">
66
+ <i class="el-icon-time"></i>
67
+ {{ $t('contractDetail.blInfo_unconfirm') }}
68
+ </el-col>
69
+ <!-- 销售合同-回签合同 -->
70
+ <el-col :span="24">
71
+ <div class="hr-class"></div>
72
+ </el-col>
73
+ <el-col :span="24">
74
+ <el-col :span="12">
75
+ <div class="content-root-row">
76
+ <ContentTitle :contentTitleProp="{
77
+ bgButton: contract.contractType == 'sale'
78
+ ? $t('contractDetail.saleContract')
79
+ : $t('contractDetail.purchaseContract'),
80
+ bgTime:contractFileInfo.latestContractFileInfo && timeFormate(contractFileInfo.latestContractFileInfo)
81
+ }"></ContentTitle>
82
+ <span class="bg-history" @click="handleHistory('contract_formal')">{{ $t('contractDetail.view_history') }}</span>
83
+ </div>
84
+ </el-col>
85
+ <el-col :span="12" v-if="contractFileInfo.signContractFileInfo && contractFileInfo.signContractFileInfo.length">
86
+ <ContentTitle :contentTitleProp="{
87
+ bgButton: $t('contractDetail.signContract'),
88
+ bgTime:timeFormate(contractFileInfo.signContractFileInfo)
89
+ }"
90
+ :successFlag="true"
91
+ ></ContentTitle>
92
+ </el-col>
93
+ </el-col>
94
+ <el-col :span="24">
95
+ <el-col :span="12">
96
+ <div class="file-list" v-if="getLastFileByList(contractFileInfo.latestContractFileInfo)">
97
+ <file-show :hiddenOperation="channel == 'official-website'" @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :fileInfo="getLastFileByList(contractFileInfo.latestContractFileInfo)" />
98
+ </div>
99
+ <div v-else>
100
+ {{ $t('contractDetail.no_files') }}
101
+ </div>
102
+ </el-col>
103
+ <!-- 回签合同 -->
104
+ <el-col :span="12">
105
+ <!-- <div v-if="channel !== 'official-website'" class="sub-title">
87
106
  {{ $t("contractDetail.signContract") }}
88
107
  <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
108
+ </div> -->
109
+ <div class="file-list">
110
+ <file-show @refresh="handleRefresh"
111
+ @checked="handleChecked" @uncheck="handleUncheck" :file-info="item"
112
+ :selectFileListProp="selectFileList"
113
+ type="signContract"
114
+ @signContract="counterSign"
115
+ v-for="(item, i) in contractFileInfo.signContractFileInfo" :key="i" />
116
+ <contract-file-drag-upload
117
+ v-show="!contractFileInfo.signContractFileInfo || contractFileInfo.signContractFileInfo && contractFileInfo.signContractFileInfo.length == 0"
103
118
  @upload="
119
+ handleUpload(
120
+ $event,
121
+ contract.contractId,
122
+ 'contract',
123
+ 'contract_sign'
124
+ )
125
+ " :isShowTip="false" :uploadNameStr="$t('contractDetail.signContract')" />
126
+ </div>
127
+ </el-col>
128
+ </el-col>
129
+ <!-- 定金发票-支付凭证 -->
130
+ <el-col :span="24" v-if="contract.deposit > 0">
131
+ <div class="hr-class"></div>
132
+ </el-col>
133
+ <div v-if="contract.deposit > 0">
134
+ <el-col :span="12">
135
+ <div style="display:flex;align-items:center">
136
+ <ContentTitle :contentTitleProp="{
137
+ bgButton: $t('contractDetail.depositInvoice'),
138
+ bgTime:contractFileInfo.proformaInvoiceFileInfo && timeFormate(contractFileInfo.proformaInvoiceFileInfo) || contractFileInfo.personalProformaInvoiceFileInfo && timeFormate(contractFileInfo.personalProformaInvoiceFileInfo)
139
+ }">
140
+ </ContentTitle>
141
+ <span class="bg-history" v-if="channel !== 'official-website'" @click="skipInvoiceList">{{ $t('contractDetail.invoice_list') }}</span>
142
+ </div>
143
+ </el-col>
144
+ <!-- 支付凭证 -->
145
+ <el-col :span="12" v-if="contractFileInfo.proformaInvoiceWaterBillFileInfo && contractFileInfo.proformaInvoiceWaterBillFileInfo.length">
146
+ <ContentTitle :contentTitleProp="{
147
+ bgButton: $t('contractDetail.Payment_voucher'),
148
+ bgTime: contractFileInfo.proformaInvoiceWaterBillFileInfo && timeFormate(contractFileInfo.proformaInvoiceWaterBillFileInfo)
149
+ }"
150
+ :successFlag="true"
151
+ >
152
+ </ContentTitle>
153
+ <!-- <div v-if="!contractFileInfo.depositInvoicePayFlag">
154
+ 有回签合同文件
155
+ </div> -->
156
+ <div>
157
+ </div>
158
+ </el-col>
159
+ </div>
160
+ <!-- 数据 -->
161
+ <el-col :span="24" v-if="contract.deposit > 0">
162
+ <el-col :span="12">
163
+ <div style="margin-bottom:20px" v-if="contract.contractType == 'purchase'">
164
+ <el-button type="primary" size="mini" v-if="channel !== 'official-website'" @click.stop="getDepositInvoice">
165
+ {{ contract.contractType == "sale" ? $t('contractDetail.Generate_deposit_invoice') : "上传定金发票" }}
166
+ </el-button>
167
+ </div>
168
+ <!-- 系统生成定金发票 -->
169
+ <div class="file-list">
170
+ <file-show
171
+ :hiddenOperation="channel == 'official-website'"
172
+ @refresh="handleRefresh"
173
+ @checked="handleChecked"
174
+ @uncheck="handleUncheck"
175
+ :selectFileListProp="selectFileList"
176
+ v-for="(
177
+ item, i
178
+ ) in contractFileInfo.proformaInvoiceFileInfo"
179
+ :key="i"
180
+ :fileInfo="item"
181
+ />
182
+ </div>
183
+ <!-- 手动上传定金发票 -->
184
+ <div class="file-list">
185
+ <file-show :hiddenOperation="channel == 'official-website'" @refresh="handleRefresh"
186
+ @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item" v-for="(
187
+ item, i
188
+ ) in contractFileInfo.personalProformaInvoiceFileInfo" :key="i" />
189
+ <contract-file-drag-upload v-show="contract.contractType == 'sale' && ((!contractFileInfo.personalProformaInvoiceFileInfo || contractFileInfo.personalProformaInvoiceFileInfo.length == 0) && (!contractFileInfo.proformaInvoiceFileInfo || contractFileInfo.proformaInvoiceFileInfo.length == 0))" @upload="
104
190
  handleUpload(
105
191
  $event,
106
- contract.contractId,
107
- 'contract',
108
- 'contract_sign'
192
+ contractFileInfo.proformaInvoice.id,
193
+ 'invoice',
194
+ 'personal_proforma_invoice'
109
195
  )
110
- "
111
- :isShowTip="false"
112
- />
113
- </div>
196
+ ":isShowTip="false"
197
+ :uploadNameStr="$t('contractDetail.depositInvoice')" />
198
+ <div v-if="channel == 'official-website'" class="center-status">
199
+ <i class="el-icon-time"></i>
200
+ <span>{{ $t('contractDetail.Deposit_invoice_to_be_uploaded') }}</span>
201
+ </div>
202
+ </div>
203
+ </el-col>
204
+ <!-- 定金 -->
205
+ <!-- <div>contractFileInfo.depositInvoicePayFlag{{ contractFileInfo.depositInvoicePayFlag }}</div> -->
206
+ <!-- <div class="file-list" v-if="contractFileInfo.depositInvoicePayFlag">
207
+ <file-show @refresh="handleRefresh"
208
+ @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item"
209
+ v-for="(item, i) in contractFileInfo.proformaInvoiceWaterBillFileInfo" :key="i" />
210
+ <contract-file-drag-upload
211
+ @upload="
212
+ handleUpload(
213
+ $event,
214
+ contract.contractId,
215
+ 'contract',
216
+ 'contract_sign'
217
+ )
218
+ " :isShowTip="false" uploadNameStr="支付凭证" />
219
+ </div> -->
220
+ <el-col :span="12" class="center-status">
221
+ <div>
222
+ <!-- <div>
223
+ <i class="el-icon-time"></i>
224
+ <span style="color:#f00" v-if="!contractFileInfo.depositInvoicePayFlag">定金待付</span>
225
+ </div> -->
226
+ <el-row v-if="contract.contractType == 'sale'">
227
+ <el-col :span="16">
228
+ <div
229
+ v-if="contractFileInfo.depositInvoicePayFlag"
230
+ :class="['el-icon-success','customer-icon-success-color', 'success']"
231
+ style="width:max-content;margin-bottom:20px"
232
+ >
233
+ {{
234
+ channel !== "official-website"
235
+ ? $t('contractDetail.Deposit_received')
236
+ : $t("contractDetail.Deposit_Paid")
237
+ }}
238
+ </div>
239
+ <div v-else style="width:max-content">
240
+ <i class="el-icon-time"></i>
241
+ <span style="color: red">
242
+ {{
243
+ channel !== "official-website"
244
+ ? $t('contractDetail.deposit_unpaid')
245
+ : $t("contractDetail.Deposit_Unpaid")
246
+ }}
247
+ </span>
248
+ </div>
249
+ </el-col>
250
+ </el-row>
251
+ <el-row v-else>
252
+ <!-- <el-col :span="4">
253
+ <div style="color: #1890ff">{{ $t("contractDetail.deposit") }}</div>
254
+ </el-col> -->
255
+ <el-col :span="12">
256
+ <div
257
+ v-if="contractFileInfo.depositInvoicePayFlag"
258
+ style="width:max-content"
259
+ >
260
+ <i class="el-icon-success success"></i>
261
+ {{ $t('contractDetail.Deposit_Paid') }}</div>
262
+ <div v-else style="width:max-content">
263
+ <i class="el-icon-time"></i>
264
+ <span style="color: red">{{ $t('contractDetail.deposit_unpaid') }}</span>
265
+ </div>
266
+ </el-col>
267
+ </el-row>
268
+ <div v-if="!contractFileInfo.proformaInvoiceWaterBillFileInfo || contractFileInfo.proformaInvoiceWaterBillFileInfo.length == 0">
269
+ <!-- <i class="el-icon-time"></i> -->
270
+ {{ $t('contractDetail.deposit_unreceipt') }}
271
+ </div>
272
+ <div v-else style="color:#000">
273
+ <file-show @refresh="handleRefresh"
274
+ :hiddenOperation="channel == 'official-website'"
275
+ @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item"
276
+ v-for="(item, i) in contractFileInfo.proformaInvoiceWaterBillFileInfo" :key="i" />
277
+ </div>
278
+ </div>
279
+ </el-col>
114
280
  </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="
281
+ <!-- 其他文件 -->
282
+ <el-col :span="24">
283
+ <div class="hr-class"></div>
284
+ </el-col>
285
+ <el-col :span="24">
286
+ <ContentTitle :contentTitleProp="{
287
+ bgButton: $t('contractDetail.otherFile'),
288
+ bgTime: contract.contractType == 'sale' ? contractFileInfo.saleContractOtherFile && timeFormate(contractFileInfo.saleContractOtherFile) : contractFileInfo.purchaseContractOtherFile && timeFormate(contractFileInfo.purchaseContractOtherFile)
289
+ }"></ContentTitle>
290
+ </el-col>
291
+ <el-col :span="24">
292
+ <!-- 销售-其他文件 -->
293
+ <div class="file-list" v-if="contract.contractType == 'sale'">
294
+ <file-show @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item"
295
+ v-for="(item, i) in contractFileInfo.saleContractOtherFile" :key="i" />
296
+ <contract-file-drag-upload @upload="
131
297
  handleUpload(
132
298
  $event,
133
299
  contract.contractId,
134
300
  'contract',
135
301
  'sale_contract_other_file'
136
302
  )
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="
303
+ " :isShowTip="false" :uploadNameStr="$t('contractDetail.otherFile')" />
304
+ </div>
305
+ <!-- 销售-采购文件 -->
306
+ <div class="file-list" v-else>
307
+ <file-show @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck" :file-info="item"
308
+ v-for="(item, i) in contractFileInfo.purchaseContractOtherFile" :key="i" />
309
+ <contract-file-drag-upload @upload="
153
310
  handleUpload(
154
311
  $event,
155
312
  contract.contractId,
156
313
  'contract',
157
314
  'purchase_contract_other_file'
158
315
  )
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
316
+ "
317
+ :isShowTip="false"
318
+ :uploadNameStr="$t('contractDetail.otherFile')"
319
+ />
320
+ </div>
321
+ </el-col>
322
+ </div>
323
+ </template>
324
+ </SectionSlot>
325
+ </div>
326
+ <!-- 装运 -->
327
+ <div>
328
+ <BillOfLadingNoTab
329
+ :contractFileInfo="contractFileInfo"
330
+ @changeShipBillNo="changeShipBillNo"
331
+ :progressInfo="shipProgressInfo"
332
+ :shipBillNoProp="shipBillNo"
333
+ ></BillOfLadingNoTab>
334
+ <!-- 生成装运 -->
335
+ <SectionSlot :infoPro="shipProgressInfo" v-if="contractFileInfo && !contractFileInfo.shipmentFileInfoList">
336
+ <template v-slot:header>
337
+ <div style="position:relative">
338
+ <ProgressDetail :infoPro="shipProgressInfo"></ProgressDetail>
339
+ <!-- <div class="addshipment" @click.stop="handleGenerate"
340
+ v-if="
341
+ channel !== 'official-website' && contract.contractType == 'sale'
182
342
  "
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
343
+ >生成装运</div> -->
344
+ <div class="addshipment" @click.stop="handleGeneratePurchase"
345
+ v-if="
346
+ channel !== 'official-website' && contract.contractType == 'purchase'
210
347
  "
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>
348
+ >{{ $t("contractDetail.Generate_shipment") }}</div>
349
+ </div>
350
+ </template>
351
+ <template v-slot:content>
352
+ <div class="ship-empty" style="background-color:#fff">
353
+ <div>
354
+ <b>{{ $t('contractDetail.packingList') }}</b>{{ $t('contractDetail.update_after_shipping') }}
235
355
  </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
- />
356
+ <div>
357
+ <b>{{ $t('contractDetail.packingPhoto') }}</b>{{ $t('contractDetail.update_after_shipping') }}
246
358
  </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
- />
359
+ <div>
360
+ <b>{{ $t('contractDetail.draftBillOfLading') }}</b>{{ $t('contractDetail.update_after_shipping') }}
274
361
  </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
362
  </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
- )
363
+ </template>
364
+ </SectionSlot>
365
+ <div v-else>
366
+ <SectionSlot :infoPro="shipProgressInfo" v-for="(
367
+ shipmentFileInfo, shipmentIndex
368
+ ) in contractFileInfo.shipmentFileInfoList" :key="shipmentIndex" v-if="shipmentIndex == shipBillNo">
369
+ <template v-slot:header>
370
+ <div style="position:relative">
371
+ <ProgressDetail :infoPro="shipProgressInfo"></ProgressDetail>
372
+ <!-- <div class="addshipment" @click.stop="handleGenerate"
373
+ v-if="
374
+ channel !== 'official-website' && contract.contractType == 'sale'
375
+ "
376
+ >增加装运</div> -->
377
+ <div class="addshipment" @click.stop="handleGeneratePurchase"
378
+ v-if="
379
+ channel !== 'official-website' && contract.contractType == 'purchase'
348
380
  "
349
- >识别汇总</el-button>
350
- <el-button type="primary" size="mini" @click="editShipment(shipmentFileInfo)">编辑船运</el-button>
381
+ >{{ $t('contractDetail.add_shipment') }}</div>
351
382
  </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
- )
383
+ </template>
384
+ <template v-slot:content>
385
+ <!-- <div class="content-root" v-if="shipProgressInfo.rate > 0"> -->
386
+ <div class="content-root" v-if="true">
387
+ <div
388
+ v-if="
389
+ channel !== 'official-website' &&
390
+ contractFileInfo.shipmentFileInfoList && contractFileInfo.shipmentFileInfoList.length > 0 &&
391
+ contract.contractType == 'purchase'
380
392
  "
381
- :isShowTip="false"
382
- />
383
- </div>
393
+ style="margin-bottom: 20px"
394
+ class="preview-download-root"
395
+ >
396
+ <div
397
+ v-if="shipmentItemData && shipmentItemData.shipmentId"
398
+ @click="
399
+ identifyPage(
400
+ '',
401
+ shipmentItemData && shipmentItemData.shipmentId,
402
+ 'summary'
403
+ )
404
+ "
405
+ class="preview-download"
406
+ >{{ $t('contractDetail.identification_summary') }}</div>
407
+ <div class="preview-download" @click="editShipment(shipmentItemData)">{{ $t('contractDetail.edit_shipment') }}</div>
384
408
  </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>
409
+ <!-- 订舱资料 -->
410
+ <ContentTitle :contentTitleProp="{
411
+ bgButton: $t('contractDetail.bookingConfirmation'),
412
+ bgTime: shipmentFileInfo.bookingConfirmation && timeFormate(shipmentFileInfo.bookingConfirmation),
413
+ bgcolor: shipProgressInfo.bgcolor
414
+
415
+ }">
416
+ </ContentTitle>
417
+ <div>
418
+ </div>
419
+ <el-col :span="24">
420
+ <div class="file-list">
421
+ <el-col v-if=" contract.contractType == 'sale' && (!shipmentFileInfo.bookingConfirmation || shipmentFileInfo.bookingConfirmation && shipmentFileInfo.bookingConfirmation.length == 0)" :span="12" class="center-status">
422
+ <i class="el-icon-time"></i>
423
+ {{ $t('contractDetail.Booking_information_to_be_updated') }}
402
424
  </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
-
425
+ <file-show @refresh="handleRefresh" @checked="handleChecked" :hiddenOperation="channel == 'official-website'" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item"
426
+ v-for="(item, i) in shipmentFileInfo.bookingConfirmation" :key="i" />
427
+ <!-- 6. 销售去掉订舱资料上传功能 https://udswem7m8c.feishu.cn/wiki/Tm4SwKcqviRkTUkKNCxc2bnBnVb -->
428
+ <contract-file-drag-upload
429
+ v-if="channel !== 'official-website' && contract.contractType == 'purchase'"
430
+ @upload="
431
+ handleUpload(
432
+ $event,
433
+ shipmentFileInfo.shipmentId,
434
+ 'shipment',
435
+ 'shipment_booking_confirmation'
436
+ )
437
+ " :isShowTip="false" :uploadNameStr="$t('contractDetail.bookingConfirmation')" />
438
+ </div>
439
+ </el-col>
440
+ <el-col :span="24">
441
+ <div class="hr-class"></div>
442
+ </el-col>
443
+ <!-- 装箱单 -->
444
+ <ContentTitle :contentTitleProp="{
445
+ bgButton: $t('contractDetail.packingList'),
446
+ bgTime: contract.contractType == 'purchase' ? shipmentFileInfo.purchasePersonalPackingList && timeFormate(shipmentFileInfo.purchasePersonalPackingList) : shipmentFileInfo.packingList && timeFormate(shipmentFileInfo.packingList),
447
+ bgcolor: shipProgressInfo.bgcolor
448
+ }"></ContentTitle>
449
+ <el-row v-if="contract.contractType == 'purchase'">
450
+ <div>
451
+ <div class="sub-title">
452
+ <span style="color: #1890ff; cursor: pointer" v-if="shipmentFileInfo &&
453
+ shipmentFileInfo.purchasePersonalPackingList &&
454
+ shipmentFileInfo.purchasePersonalPackingList[0] &&
455
+ shipmentFileInfo.purchasePersonalPackingList[0]
456
+ .url
457
+ " @click="
458
+ identifyPage(
459
+ shipmentFileInfo &&
460
+ shipmentFileInfo.purchasePersonalPackingList &&
461
+ shipmentFileInfo
462
+ .purchasePersonalPackingList[0] &&
463
+ shipmentFileInfo
464
+ .purchasePersonalPackingList[0].url,
465
+ shipmentFileInfo && shipmentFileInfo.shipmentId,
466
+ 'packing'
467
+ )
468
+ ">{{ identify }}
469
+ </span>
470
+ </div>
471
+ <ShowAndHide :dataInfoArr="shipmentFileInfo.purchasePersonalPackingList" heightStr="100px" :HideAmount="2">
472
+ <template>
473
+ <el-col :span="24">
462
474
  <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
- />
475
+ <!-- <el-col :span="12" v-if="!shipmentFileInfo.purchasePersonalPackingList || shipmentFileInfo.purchasePersonalPackingList.length == 0" class="center-status">
476
+ <i class="el-icon-time"></i>
477
+ 装箱单待更新
478
+ </el-col> -->
479
+ <file-show :hiddenOperation="channel == 'official-website'" @refresh="handleRefresh"
480
+ @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item" v-for="(
481
+ item, i
482
+ ) in shipmentFileInfo.purchasePersonalPackingList" :key="i" />
483
+
474
484
  <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
+ @upload="handleUpload(
486
+ $event,
487
+ shipmentFileInfo.shipmentId,
488
+ 'shipment',
489
+ 'purchase_personal_shipment_packing_list'
490
+ )"
491
+ :isShowTip="false"
492
+ :uploadNameStr="$t('contractDetail.packingList')"
485
493
  />
486
494
  </div>
487
- </div>
488
- </el-row>
489
- </el-col>
490
- </el-row>
491
- <el-divider></el-divider>
495
+ </el-col>
496
+ </template>
497
+ </ShowAndHide>
498
+ </div>
499
+ </el-row>
500
+ <el-row v-if="contract.contractType == 'sale'">
492
501
  <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>
502
+ <ShowAndHide :dataInfoArr="shipmentFileInfo.packingList || []" heightStr="100px" :HideAmount="2">
503
+ <el-col :span="24">
524
504
  <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
- />
505
+ <el-col :span="12" v-if="!shipmentFileInfo.packingList || shipmentFileInfo.packingList.length == 0" class="center-status">
506
+ <i class="el-icon-time"></i>
507
+ {{ $t('contractDetail.Packing_list_to_be_updated') }}
508
+ </el-col>
509
+ <file-show :hiddenOperation="channel == 'official-website'" @refresh="handleRefresh"
510
+ @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item" v-for="(
511
+ item, i
512
+ ) in shipmentFileInfo.packingList || []" :key="i" />
513
+ <!-- sale 只做展示 -->
514
+ <!-- <contract-file-drag-upload v-if="channel !== 'official-website'" @upload="
515
+ handleUpload(
516
+ $event,
517
+ shipmentFileInfo.shipmentId,
518
+ 'shipment',
519
+ 'sale_personal_shipment_packing_list'
520
+ )
521
+ "
522
+ :isShowTip="false"
523
+ uploadNameStr="装箱单"
524
+ /> -->
525
+ </div>
526
+ </el-col>
527
+ </ShowAndHide>
528
+ </div>
529
+ </el-row>
530
+
531
+ <!-- 装箱照片 -->
532
+ <el-col :span="24">
533
+ <div class="hr-class"></div>
534
+ </el-col>
535
+ <div v-for="(
536
+ containerFile, i
537
+ ) in shipmentFileInfo.containerFileInfoRespList" :key="i">
538
+ <el-col :span="24">
539
+ <div class="content-root-row">
540
+ <ContentTitle :contentTitleProp="{
541
+ bgButton: $t('contractDetail.packingPhoto')+ ' ' + containerFile.containerNo,
542
+ bgTime: containerFile.packingPhoto && timeFormate(containerFile.packingPhoto),
543
+ bgcolor: shipProgressInfo.bgcolor
544
+ }"></ContentTitle>
545
+ <div v-if="containerFile && containerFile.packingPhoto.length" style="display:flex">
546
+ <!-- <div style="display:flex"> -->
547
+ <div class="border-button" @click.stop="allSelectContainerPackingPhoto(containerFile.containerId)">
548
+ {{ $t('contractDetail.select_all') }} </div>
549
+ <div class="border-button" @click.stop="cancelContainerPackingPhoto(containerFile.containerId)">{{ $t('contractDetail.Deselect') }}
549
550
  </div>
550
-
551
- <contract-file-drag-upload
552
- v-if="channel !== 'official-website'"
553
- @upload="
551
+ <div class="border-button border-button-share"
552
+ @click.stop="shareContainerUrl(containerFile.containerId)">{{ $t('contractDetail.share') }}</div>
553
+ </div>
554
+ </div>
555
+ </el-col>
556
+ <el-col :span="24">
557
+ <div style="display:flex">
558
+ <!-- 文件预览 -->
559
+ <IMGPreviewCheckBox :ref="`container_packing_photo_${containerFile.containerId}`"
560
+ :imgArr="containerFile.packingPhoto"
561
+ :info="containerFile"
562
+ >
563
+ <template>
564
+ <contract-file-drag-upload v-show="channel !== 'official-website'" @upload="
554
565
  handleUpload(
555
566
  $event,
556
567
  containerFile.containerId,
557
568
  'container',
558
569
  'container_packing_photo'
559
570
  )
560
- "
561
- :isShowTip="false"
571
+ " :isShowTip="false" photos
572
+ style="margin-top:0px"
573
+ />
574
+ </template>
575
+ </IMGPreviewCheckBox>
576
+ </div>
577
+ <!-- <el-col :span="12" v-if="containerFile.packingPhoto && containerFile.packingPhoto.length == 0" class="center-status">
578
+ <i class="el-icon-time"></i>
579
+ 装箱照片待更新
580
+ </el-col> -->
581
+ </el-col>
582
+ </div>
583
+
584
+ <el-col :span="24">
585
+ <div class="hr-class"></div>
586
+ </el-col>
587
+ <el-col :span="24" style="display:flex;align-items:center">
588
+ <ContentTitle :contentTitleProp="{
589
+ bgButton: $t('contractDetail.draftBillOfLading'),
590
+ bgTime: shipmentFileInfo.draftBillOfLading && timeFormate(shipmentFileInfo.draftBillOfLading),
591
+ bgcolor: shipProgressInfo.bgcolor
592
+ }"></ContentTitle>
593
+ <span
594
+ style="color: #1890ff; cursor: pointer;font-size:14px"
595
+ v-if="
596
+ shipmentFileInfo &&
597
+ shipmentFileInfo.draftBillOfLading &&
598
+ shipmentFileInfo.draftBillOfLading[0] &&
599
+ shipmentFileInfo.draftBillOfLading[0].url
600
+ "
601
+ @click="
602
+ identifyPage(
603
+ shipmentFileInfo &&
604
+ shipmentFileInfo.draftBillOfLading &&
605
+ shipmentFileInfo.draftBillOfLading[0] &&
606
+ shipmentFileInfo.draftBillOfLading[0].url,
607
+ shipmentFileInfo && shipmentFileInfo.shipmentId,
608
+ 'draft_bill'
609
+ )
610
+ "
611
+ >{{ identify }}</span>
612
+ </el-col>
613
+ <el-col :span="24">
614
+ <el-col :span="12">
615
+ <div class="file-list">
616
+ <file-show @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item"
617
+ :hiddenOperation="channel == 'official-website'"
618
+ v-for="(
619
+ item, i
620
+ ) in shipmentFileInfo.draftBillOfLading" :key="i" />
621
+
622
+ <contract-file-drag-upload v-show="channel !== 'official-website' && (!shipmentFileInfo.draftBillOfLading || shipmentFileInfo.draftBillOfLading.length == 0)" @upload="
623
+ handleUpload(
624
+ $event,
625
+ shipmentFileInfo.shipmentId,
626
+ 'shipment',
627
+ 'draft_bill_of_lading'
628
+ )
629
+ " :isShowTip="false"
630
+ :uploadNameStr="$t('contractDetail.draftBillOfLading')"
562
631
  />
563
- </div>
564
- </el-row>
632
+ </div>
633
+ </el-col>
634
+ <el-col :span="12" class="center-status" v-if="channel != 'official-website'">
635
+ <div v-if="shipmentItemData.confirmDraftBlFlag">
636
+ <i class="el-icon-success success"></i> {{ $t('contractDetail.BL_info_confirmed') }}
637
+ </div>
638
+ <div v-else-if="contract.contractType == 'sale' && shipmentFileInfo.draftBillOfLading.length" class="confirm-draft-bl" @click.stop="shipmentConfirmDraftBlFun">{{ $t('contractDetail.bl_draft_confirm') }}</div>
639
+ <el-col :span="24" v-else class="center-status">
640
+ <i class="el-icon-time"></i>
641
+ {{ $t('contractDetail.Draft_bill_to_be_confirmed') }}
642
+ </el-col>
643
+
644
+ </el-col>
645
+ <el-col :span="24">
646
+ <el-col :span="12" v-if="(shipmentFileInfo.draftBillOfLading == null || shipmentFileInfo.draftBillOfLading && shipmentFileInfo.draftBillOfLading.length == 0) && channel == 'official-website'" class="center-status">
647
+ <i class="el-icon-time"></i>
648
+ {{ $t('contractDetail.Draft_bill_of_lading_to_be_updated') }}
649
+ </el-col>
650
+ <el-col :span="12" v-if="!shipmentItemData.confirmDraftBlFlag && channel == 'official-website'" class="center-status">
651
+ <i class="el-icon-time"></i>
652
+ {{ $t('contractDetail.Draft_bill_to_be_confirmed') }}
653
+ </el-col>
654
+ </el-col>
655
+ </el-col>
656
+
657
+ <el-col :span="24">
658
+ <div class="hr-class"></div>
659
+ </el-col>
660
+ <el-col :span="24">
661
+ <ContentTitle :contentTitleProp="{
662
+ bgButton: $t('contractDetail.Copy_of_formal_bill_of_lading'),
663
+ bgTime: shipmentFileInfo.originalBillOfLadingCopy && timeFormate(shipmentFileInfo.originalBillOfLadingCopy),
664
+ bgcolor: shipProgressInfo.bgcolor
665
+ }"></ContentTitle>
666
+ </el-col>
667
+ <el-col :span="24">
668
+ <div class="file-list">
669
+ <file-show @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item"
670
+ :hiddenOperation="channel == 'official-website'"
671
+ v-for="(
672
+ item, i
673
+ ) in shipmentFileInfo.originalBillOfLadingCopy" :key="i" />
674
+ <contract-file-drag-upload v-show="(!shipmentFileInfo.originalBillOfLadingCopy || shipmentFileInfo.originalBillOfLadingCopy.length == 0) && channel !== 'official-website'" @upload="
675
+ handleUpload(
676
+ $event,
677
+ shipmentFileInfo.shipmentId,
678
+ 'shipment',
679
+ 'original_bill_of_lading_copy'
680
+ )
681
+ " :isShowTip="false"
682
+ :uploadNameStr="$t('contractDetail.Copy_of_formal_bill_of_lading')"
683
+ />
565
684
  </div>
566
- <el-divider></el-divider>
685
+ <el-col :span="12" v-if="(shipmentFileInfo.originalBillOfLadingCopy == null || shipmentFileInfo.originalBillOfLadingCopy && shipmentFileInfo.originalBillOfLadingCopy.length == 0) && channel == 'official-website'" class="center-status">
686
+ <i class="el-icon-time"></i>
687
+ {{ $t('contractDetail.Formal_bill_of_lading_copy_to_be_updated') }}
688
+ </el-col>
689
+ </el-col>
690
+ <!-- 临时尾款发票 -->
691
+ <el-col :span="24" v-if="contract.quoteType != 'FIXED'">
692
+ <div class="hr-class"></div>
693
+ </el-col>
694
+ <el-col :span="24" v-if="contract.quoteType != 'FIXED'">
695
+ <ContentTitle :contentTitleProp="{
696
+ bgButton: $t('contractDetail.saleTemporaryFinallyInvoice'),
697
+ bgTime: shipmentFileInfo.salePersonalTemporaryFinallyInvoice && timeFormate(shipmentFileInfo.salePersonalTemporaryFinallyInvoice),
698
+ bgcolor: shipProgressInfo.bgcolor
699
+ }"></ContentTitle>
567
700
  <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>
701
+ <span
702
+ v-if="
703
+ channel !== 'official-website' &&
704
+ contract.contractType == 'purchase'
705
+ "
706
+ style="color: #1890ff; cursor: pointer; margin-left: 10px"
707
+ @click.stop="identifyPageBoth(shipmentFileInfo, 1)"
708
+ >{{ identify }}</span>
709
+ </div>
710
+ <el-col :span="12" v-if="channel == 'official-website' && shipmentFileInfo.salePersonalTemporaryFinallyInvoice && shipmentFileInfo.salePersonalTemporaryFinallyInvoice.length == 0" class="center-status">
711
+ <i class="el-icon-time"></i>
712
+ {{ $t('contractDetail.Temporary_final_payment_invoice_to_be_updated') }}
713
+ </el-col>
714
+ <div>
715
+ <div class="file-list" v-if="contract.contractType == 'sale'">
716
+ <div class="file-list">
717
+ <file-show
718
+ :hiddenOperation="channel == 'official-website'"
719
+ @refresh="handleRefresh"
720
+ @checked="handleChecked"
721
+ @uncheck="handleUncheck"
722
+ :file-info="
723
+ getLastFileByList(
724
+ shipmentFileInfo.saleTemporaryFinallyInvoice
725
+ )
726
+ "
727
+ />
728
+ </div>
729
+ <file-show :hiddenOperation="channel == 'official-website'" @refresh="handleRefresh"
730
+ @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item" v-for="(
731
+ item, i
732
+ ) in shipmentFileInfo.salePersonalTemporaryFinallyInvoice" :key="i" />
733
+
734
+ <contract-file-drag-upload v-show="(!shipmentFileInfo.salePersonalTemporaryFinallyInvoice || shipmentFileInfo.salePersonalTemporaryFinallyInvoice.length == 0) && channel !== 'official-website'" @upload="
735
+ handleUpload(
736
+ $event,
737
+ shipmentFileInfo.shipmentId,
738
+ 'shipment',
739
+ 'sale_personal_temporary_finally_invoice'
740
+ )
741
+ ":isShowTip="false" :uploadNameStr="$t('contractDetail.saleTemporaryFinallyInvoice')" />
592
742
  </div>
593
- <el-row v-if="contract.quoteType != 'FIXED'">
743
+ <div class="file-list" v-else>
744
+ <file-show :hiddenOperation="channel == 'official-website'" @refresh="handleRefresh"
745
+ @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item" v-for="(
746
+ item, i
747
+ ) in shipmentFileInfo.purchaseTemporaryFinallyInvoice" :key="i" />
748
+
749
+ <contract-file-drag-upload v-show="(!shipmentFileInfo.purchaseTemporaryFinallyInvoice || shipmentFileInfo.purchaseTemporaryFinallyInvoice.length == 0) && channel !== 'official-website'" @upload="
750
+ handleUpload(
751
+ $event,
752
+ shipmentFileInfo.shipmentId,
753
+ 'shipment',
754
+ 'purchase_temporary_finally_invoice'
755
+ )
756
+ ":isShowTip="false" :uploadNameStr="$t('contractDetail.saleTemporaryFinallyInvoice')" />
757
+ </div>
758
+ </div>
759
+ </el-col>
760
+
761
+ <el-col :span="24">
762
+ <div class="hr-class"></div>
763
+ </el-col>
764
+ <el-col :span="24">
765
+ <el-col :span="24">
766
+ <div style="margin-bottom:-20px">
767
+ <span
768
+ v-if="channel !== 'official-website' &&
769
+ contract.contractType == 'purchase' "
770
+ style="color: #1890ff; margin-left: 100px;cursor:pointer"
771
+ @click.stop="getShipmentPurchase(shipmentFileInfo)"
772
+ >
773
+ {{
774
+ shipmentPurchaseAmountMessage}}
775
+ </span>
776
+ <el-popover
777
+ v-if="channel !== 'official-website' &&
778
+ contract.contractType == 'purchase' "
779
+ placement="top-start"
780
+ title=""
781
+ width="380"
782
+ trigger="hover"
783
+ :content="$t('contractDetail.final_payment_warning')">
784
+ <i class="el-icon-question" slot="reference" style="color:#c2c4c5;"/>
785
+ </el-popover>
786
+ </div>
787
+ <el-col :span="12" :getNewInfo="getNewInfo">
788
+ <div style="display:flex;align-items:center">
789
+ <ContentTitle :contentTitleProp="{
790
+ bgButton: $t('contractDetail.finallyInvoice'),
791
+ bgTime: contract.contractType == 'sale' ? getNewInfo && timeFormate(getNewInfo) : shipmentFileInfo.purchaseFinallyInvoice && timeFormate(shipmentFileInfo.purchaseFinallyInvoice),
792
+ bgcolor: shipProgressInfo.bgcolor
793
+ }"></ContentTitle>
794
+ <span
795
+ v-if="
796
+ channel !== 'official-website' && contract.contractType == 'purchase' && shipmentFileInfo.purchaseFinallyInvoice && shipmentFileInfo.purchaseFinallyInvoice.length > 0"
797
+ style="color: #1890ff; cursor: pointer; margin-left: 10px;font-size:14px;"
798
+ @click.stop="identifyPageBoth(shipmentFileInfo, 2)"
799
+ >{{ identify }}
800
+ </span>
801
+ </div>
802
+ <!-- <div class="sub-title"> -->
803
+ <!-- {{ $t("contractDetail.finallyInvoice") }}
804
+ <el-button
805
+ v-if="channel !== 'official-website'"
806
+ type="text"
807
+ size="small"
808
+ @click="skipInvoiceList"
809
+ >发票列表</el-button> -->
810
+ <!-- <el-button
811
+ style="color: #1890ff; cursor: pointer; margin-left: 10px"
812
+ v-if="channel !== 'official-website' &&
813
+ contract.contractType == 'purchase'"
814
+ type="text"
815
+ size="small"
816
+ @click="getShipmentPurchase(shipmentFileInfo)"
817
+ >
818
+ 点击可查看明细
819
+ </el-button> -->
820
+ <!-- </div> -->
821
+ <!-- 管理台 -->
822
+ <div v-if="channel != 'official-website'">
594
823
  <div v-if="contract.contractType == 'sale'">
595
- <el-col :span="6">
824
+ <!-- <el-col :span="12">
596
825
  <div style="margin-left: 60px">
597
- <div
598
- class="sub-title"
599
- >{{ $t("contractDetail.saleTemporaryFinallyInvoice") }}</div>
600
826
  <div class="file-list">
601
827
  <file-show
602
828
  :hiddenOperation="channel == 'official-website'"
603
829
  @refresh="handleRefresh"
604
830
  @checked="handleChecked"
605
831
  @uncheck="handleUncheck"
832
+ :selectFileListProp="selectFileList"
606
833
  :file-info="
607
834
  getLastFileByList(
608
- shipmentFileInfo.saleTemporaryFinallyInvoice
835
+ shipmentFileInfo.saleFinallyInvoice
609
836
  )
610
837
  "
611
838
  />
612
839
  </div>
613
840
  </div>
614
- </el-col>
615
- <el-col :span="18">
841
+ </el-col> -->
842
+ <!-- 尾款发票 -->
843
+ <el-col :span="12">
616
844
  <div>
617
845
  <div class="file-list">
618
846
  <file-show
@@ -620,312 +848,110 @@
620
848
  @refresh="handleRefresh"
621
849
  @checked="handleChecked"
622
850
  @uncheck="handleUncheck"
851
+ :selectFileListProp="selectFileList"
623
852
  :file-info="item"
624
853
  v-for="(
625
854
  item, i
626
- ) in shipmentFileInfo.salePersonalTemporaryFinallyInvoice"
855
+ ) in getNewInfo"
627
856
  :key="i"
628
857
  />
629
858
  <contract-file-drag-upload
630
- v-if="channel !== 'official-website'"
859
+ v-show="(!getNewInfo) && channel !== 'official-website'"
631
860
  @upload="
632
861
  handleUpload(
633
862
  $event,
634
863
  shipmentFileInfo.shipmentId,
635
864
  'shipment',
636
- 'sale_personal_temporary_finally_invoice'
865
+ 'sale_personal_finally_invoice'
637
866
  )
638
867
  "
639
868
  :isShowTip="false"
869
+ :uploadNameStr="$t('contractDetail.finallyInvoice')"
640
870
  />
641
871
  </div>
642
872
  </div>
643
873
  </el-col>
644
874
  </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>
875
+ <!-- purchase -->
876
+ <div v-else>
877
+ <el-col :span="12">
878
+ <div style="margin-left: 60px">
879
+ <div class="file-list">
880
+ <file-show
881
+ :hiddenOperation="channel == 'official-website'"
882
+ @refresh="handleRefresh"
883
+ @checked="handleChecked"
884
+ @uncheck="handleUncheck"
885
+ :selectFileListProp="selectFileList"
886
+ :file-info="item"
887
+ v-for="(
888
+ item, i
889
+ ) in shipmentFileInfo.purchaseFinallyInvoice"
890
+ :key="i"
891
+ />
892
+ <div>
893
+ <el-button
894
+ style="margin-top: 10px"
895
+ type="primary"
896
+ size="mini"
897
+ @click="
898
+ uploadFinalInvoice(
899
+ 'finally',
900
+ shipmentFileInfo.shipmentId
901
+ )
902
+ "
903
+ >{{ $t('contractDetail.uploadPurchaseInvoice') }}</el-button>
904
+ </div>
905
+ </div>
772
906
  </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
- />
907
+ </el-col>
909
908
  </div>
910
909
  </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
- }}
910
+ <div v-else>
911
+ <!-- 买家端 -->
912
+ <el-col>
913
+ <div class="file-list">
914
+ <file-show
915
+ :hiddenOperation="channel == 'official-website'"
916
+ @refresh="handleRefresh"
917
+ @checked="handleChecked"
918
+ @uncheck="handleUncheck"
919
+ :selectFileListProp="selectFileList"
920
+ :file-info="item"
921
+ v-for="(
922
+ item, i
923
+ ) in shipmentFileInfo.saleFinallyInvoice"
924
+ :key="i"
925
+ />
926
+ </div>
927
+ </el-col>
928
+ <!-- <el-col :span="12" class="center-status">
929
+ <div>
930
+ <div v-if="!shipmentItemData.balanceInvoiceFullyPaidFlag">
931
+ <i class="el-icon-time"></i>
932
+ <span style="color:#f00">{{ $t('contractDetail.Final_payment_unpaid') }}</span>
933
+ </div>
934
+ <div v-if="!shipmentFileInfo.waterBill || shipmentFileInfo.waterBill && shipmentFileInfo.waterBill.length == 0">支付凭证待提供</div>
935
+ </div>
936
+ </el-col> -->
923
937
  </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>
938
+ </el-col>
939
+ <el-col :span="12">
940
+ <!-- 支付凭证 -->
941
+ <ContentTitle :contentTitleProp="{
942
+ bgButton: $t('contractDetail.Final_payment_voucher'),
943
+ bgTime: shipmentFileInfo.waterBill && timeFormate(shipmentFileInfo.waterBill),
944
+ bgcolor: getGoodsProgressInfo.bgcolor,
945
+ successFlag: true
946
+ }"></ContentTitle>
947
+ <div v-if="shipmentFileInfo.balanceInvoiceFullyPaidFlag">
948
+ <i class="el-icon-success success"></i>
949
+ <span style="color:#67C23A">{{ $t('contractDetail.balancePaid_true') }}</span>
950
+ </div>
951
+ <div v-else>
952
+ <i class="el-icon-time"></i>
953
+ <span style="color:#f00">{{ $t('contractDetail.Final_payment_unpaid') }}</span>
954
+ </div>
929
955
 
930
956
  <div class="file-list">
931
957
  <file-show
@@ -938,67 +964,132 @@
938
964
  :key="i"
939
965
  />
940
966
  </div>
941
- </div>
967
+ <div v-if="!shipmentFileInfo.waterBill || shipmentFileInfo.waterBill.length == 0" class="center-status-block" style="align-items: flex-start">
968
+ <div>
969
+ <i class="el-icon-time"></i>
970
+ {{ $t('contractDetail.deposit_unreceipt') }}
971
+ </div>
972
+ </div>
942
973
  </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="(
974
+ </el-col>
975
+ <div>
976
+ </div>
977
+ </el-col>
978
+ <el-col :span="24">
979
+ <div class="hr-class"></div>
980
+ </el-col>
981
+
982
+ <el-col :span="24">
983
+ <ContentTitle :contentTitleProp="{
984
+ bgButton: $t('contractDetail.otherFile'),
985
+ bgTime: contract.contractType == 'sale' ? shipmentFileInfo.saleShipmentOther && timeFormate(shipmentFileInfo.saleShipmentOther) : shipmentFileInfo.purchaseShipmentOther && timeFormate(shipmentFileInfo.purchaseShipmentOther),
986
+ bgcolor: shipProgressInfo.bgcolor
987
+ }"></ContentTitle>
988
+ </el-col>
989
+ <el-col :span="24" v-if="contract.contractType == 'sale'">
990
+ <div class="file-list">
991
+ <file-show @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item"
992
+ v-for="(item, i) in shipmentFileInfo.saleShipmentOther" :key="i" />
993
+ <contract-file-drag-upload @upload="
994
+ handleUpload(
995
+ $event,
996
+ shipmentFileInfo.shipmentId,
997
+ 'shipment',
998
+ 'sale_shipment_other'
999
+ )
1000
+ " :isShowTip="false" :uploadNameStr="$t('contractDetail.otherFile')" />
1001
+ </div>
1002
+ </el-col>
1003
+ <el-col :span="24" v-else>
1004
+ <div class="file-list">
1005
+ <file-show @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item"
1006
+ :hiddenOperation="channel == 'official-website'"
1007
+ v-for="(
953
1008
  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">
1009
+ ) in shipmentFileInfo.purchaseShipmentOther" :key="i" />
1010
+ <contract-file-drag-upload @upload="
1011
+ handleUpload(
1012
+ $event,
1013
+ shipmentFileInfo.shipmentId,
1014
+ 'shipment',
1015
+ 'purchase_shipment_other'
1016
+ )"
1017
+ :isShowTip="false"
1018
+ :uploadNameStr="$t('contractDetail.otherFile')" />
1019
+ </div>
1020
+ </el-col>
1021
+ </div>
1022
+ </template>
1023
+ </SectionSlot>
1024
+ </div>
1025
+ </div>
1026
+
1027
+ <!-- 收货 -->
1028
+ <div>
1029
+ <BillOfLadingNoTab
1030
+ :contractFileInfo="contractFileInfo"
1031
+ @changeShipBillNo="changeShipBillNo"
1032
+ :progressInfo="getGoodsProgressInfo"
1033
+ :shipBillNoProp="shipBillNo"
1034
+ ></BillOfLadingNoTab>
1035
+ <SectionSlot
1036
+ :infoPro="getGoodsProgressInfo" v-for="(
1037
+ shipmentFileInfo, shipmentIndex
1038
+ ) in contractFileInfo.shipmentFileInfoList" :key="shipmentIndex" v-if="shipmentIndex == shipBillNo"
1039
+ >
1040
+ <template v-slot:header>
1041
+ <div>
1042
+ <ProgressDetail :infoPro="getGoodsProgressInfo"></ProgressDetail>
1043
+ </div>
1044
+ </template>
1045
+ <template v-slot:content>
1046
+ <div class="content-root">
1047
+ <div>
1048
+ <!-- <div v-if="channel !== 'official-website'" style="color: #1890ff">
1049
+ {{
1050
+ contract.contractType == "sale"
1051
+ ? "尾款收款"
1052
+ : $t("contractDetail.Final_payment")
1053
+ }}
1054
+ </div>
1055
+ <div v-else class="sub-title">{{ $t("contractDetail.Final_payment") }}</div> -->
1056
+ <!-- 尾款水单 -->
1057
+ <!-- <el-row>
1058
+ <el-col :span="24">
1059
+ <div>
1060
+ <ContentTitle :contentTitleProp="{
1061
+ bgButton: $t('contractDetail.finalPaymentMemo'),
1062
+ bgTime: shipmentFileInfo.waterBill && timeFormate(shipmentFileInfo.waterBill),
1063
+ bgcolor: getGoodsProgressInfo.bgcolor
1064
+ }"></ContentTitle>
1065
+
1066
+ <div class="file-list" v-if="shipmentFileInfo.waterBill && shipmentFileInfo.waterBill.length">
972
1067
  <file-show
973
1068
  :hiddenOperation="channel == 'official-website'"
974
1069
  @refresh="handleRefresh"
975
1070
  @checked="handleChecked"
976
1071
  @uncheck="handleUncheck"
977
1072
  :file-info="item"
978
- v-for="(
979
- item, i
980
- ) in shipmentFileInfo.purchasePersonalWaterBill"
1073
+ v-for="(item, i) in shipmentFileInfo.waterBill"
981
1074
  :key="i"
982
1075
  />
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
- />
1076
+ </div>
1077
+ <div v-else class="center-status">
1078
+ <i class="el-icon-time"></i>
1079
+ 暂无文件
994
1080
  </div>
995
1081
  </div>
996
- </el-col>-->
997
- </el-row>
998
- <el-row>
1082
+ </el-col>
1083
+ </el-row> -->
1084
+ <!-- 汇款凭证 -->
1085
+ <!-- <el-row>
999
1086
  <div>
1000
- <div class="sub-title">{{ $t("contractDetail.swift") }}</div>
1001
- <div class="file-list">
1087
+ <ContentTitle :contentTitleProp="{
1088
+ bgButton: $t('contractDetail.swift'),
1089
+ bgTime: shipmentFileInfo.voucher && timeFormate(shipmentFileInfo.voucher),
1090
+ bgcolor: getGoodsProgressInfo.bgcolor
1091
+ }"></ContentTitle>
1092
+ <div class="file-list" v-if="shipmentFileInfo.voucher && shipmentFileInfo.voucher.length">
1002
1093
  <file-show
1003
1094
  :hiddenOperation="channel == 'official-website'"
1004
1095
  @refresh="handleRefresh"
@@ -1009,39 +1100,86 @@
1009
1100
  :key="i"
1010
1101
  />
1011
1102
  </div>
1103
+ <div v-else class="center-status">
1104
+ <i class="el-icon-time"></i>
1105
+ 暂无文件
1106
+ </div>
1012
1107
  </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
-
1108
+ </el-row> -->
1109
+ <!-- 提货凭证 -->
1110
+ <ContentTitle :contentTitleProp="{
1111
+ bgButton: $t('contractDetail.tip7'),
1112
+ bgTime: shipmentFileInfo.deliveryReceipt && timeFormate(shipmentFileInfo.deliveryReceipt),
1113
+ bgcolor: getGoodsProgressInfo.bgcolor
1114
+ }"></ContentTitle>
1115
+ <el-col :span="24">
1033
1116
  <div class="file-list">
1034
- <file-show
1117
+ <file-show @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck"
1035
1118
  :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
- />
1119
+ :selectFileListProp="selectFileList"
1120
+ :file-info="item" v-for="(item, i) in shipmentFileInfo.deliveryReceipt" :key="i" />
1121
+ <!-- v-if="shipmentItemData.shipmentPercentage > 0" -->
1122
+ <!-- todo: 上传提货凭证 -->
1123
+ <contract-file-drag-upload
1124
+ v-show="(!shipmentFileInfo.deliveryReceipt || shipmentFileInfo.deliveryReceipt.length == 0) && channel !== 'official-website'"
1125
+ @upload="
1126
+ handleUpload(
1127
+ $event,
1128
+ shipmentFileInfo.shipmentId,
1129
+ 'shipment',
1130
+ 'shipment_delivery_receipt'
1131
+ )
1132
+ " :isShowTip="false"
1133
+ :uploadNameStr="$t('contractDetail.tip7')"
1134
+ />
1135
+ </div>
1136
+ <div v-if="!shipmentFileInfo.deliveryReceipt || shipmentFileInfo.deliveryReceipt.length == 0 && channel == 'official-website'" class="center-status">
1137
+ <i class="el-icon-time"></i>
1138
+ {{$t('contractDetail.no_files')}}
1139
+ </div>
1140
+ </el-col>
1141
+ </div>
1142
+ </div>
1143
+ </template>
1144
+ </SectionSlot>
1145
+ </div>
1146
+ <!-- 索赔 -->
1147
+ <div v-if="contractFileInfo.claimCreateFlag">
1148
+ <BillOfLadingNoTab
1149
+ :contractFileInfo="contractFileInfo"
1150
+ @changeShipBillNo="changeShipBillNo"
1151
+ :progressInfo="shipProgressInfo"
1152
+ :shipBillNoProp="shipBillNo"
1153
+ ></BillOfLadingNoTab>
1154
+ <SectionSlot
1155
+ :infoPro="claimProgressInfo"
1156
+ v-for="(
1157
+ shipmentFileInfo, shipmentIndex
1158
+ ) in contractFileInfo.shipmentFileInfoList" :key="shipmentIndex"
1159
+ v-if="shipmentIndex == shipBillNo"
1160
+ >
1161
+ <template v-slot:header>
1162
+ <div>
1163
+ <ProgressDetail :infoPro="claimProgressInfo"></ProgressDetail>
1164
+ </div>
1165
+ </template>
1166
+ <template v-slot:content>
1167
+ <div class="content-root">
1168
+ <div>
1169
+ <ContentTitle :contentTitleProp="{
1170
+ bgButton: !buyerFlag
1171
+ ? $t('contractDetail.Credit_Note')
1172
+ : $t('contractDetail.Debit_Note'),
1173
+ bgTime: claimFileInfoCom && timeFormate(claimFileInfoCom),
1174
+ bgcolor: claimProgressInfo.bgcolor
1175
+ }"></ContentTitle>
1176
+ <el-col :span="24">
1177
+ <div class="file-list" v-if="claimFileInfoCom">
1178
+ <file-show @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck"
1179
+ :selectFileListProp="selectFileList"
1180
+ :hiddenOperation="channel == 'official-website'"
1181
+ :file-info="item" v-for="(item, i) in claimFileInfoCom" :key="i" />
1043
1182
  <!-- <contract-file-drag-upload
1044
- v-if="channel !== 'official-website'"
1045
1183
  @upload="
1046
1184
  handleUpload(
1047
1185
  $event,
@@ -1051,80 +1189,54 @@
1051
1189
  )
1052
1190
  "
1053
1191
  :isShowTip="false"
1054
- />-->
1192
+ /> -->
1055
1193
  </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>
1194
+ <div v-else class="center-status">
1195
+ <i class="el-icon-time"></i>
1196
+ {{ $t('contractDetail.no_files') }}
1197
+ </div>
1198
+ </el-col>
1199
+ </div>
1200
+ </div>
1201
+ </template>
1202
+ </SectionSlot>
1203
+ </div>
1088
1204
 
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
1205
  <deposit-invoice ref="depositInvoice"></deposit-invoice>
1098
1206
 
1099
1207
  <gen-shipment ref="genShipment" @refresh="handleRefresh" />
1100
1208
 
1101
- <purchase-invoice-upload ref="purchaseInvoice" @refresh="handleRefresh"></purchase-invoice-upload>
1209
+ <purchase-invoice-upload ref="purchaseInvoice"
1210
+ :companyId="contract.contractId"
1211
+ @refresh="handleRefresh"
1212
+ :purchaseBalanceMoneyProp="purchaseBalanceMoney"
1213
+ :getShipmentPurchaseFun="getShipmentPurchase"
1214
+ ></purchase-invoice-upload>
1102
1215
  <!-- 多个买家弹窗 -->
1103
- <el-dialog title="请先选择收货买家" :visible.sync="dialogVisible" width="30%">
1104
- <div>请在下方选择一个您需要发货的买家</div>
1216
+ <el-dialog :title="$t('contractDetail.Please_select_the_receiving_buyer_first')" :visible.sync="dialogVisible" width="30%">
1217
+ <div>{{ $t('contractDetail.Please_select_a_buyer_below_who_you_need_to_ship_to') }}</div>
1105
1218
  <div>
1106
1219
  <el-radio-group v-model="selectRadio">
1107
- <el-radio
1108
- :label="key"
1109
- v-for="(purchaseBuyerListItem, key) in purchaseBuyerList"
1110
- :key="key"
1111
- >
1220
+ <el-radio :label="key" v-for="(purchaseBuyerListItem, key) in purchaseBuyerList" :key="key">
1112
1221
  {{ purchaseBuyerListItem.buyerUserInfo.companyName }} ({{
1113
- purchaseBuyerListItem.contractNo
1114
- }}) {{ purchaseBuyerListItem.buyerUserInfo.firstName }}
1222
+ purchaseBuyerListItem.contractNo
1223
+ }}) {{ purchaseBuyerListItem.buyerUserInfo.firstName }}
1115
1224
  {{ purchaseBuyerListItem.buyerUserInfo.lastName }}
1116
1225
  </el-radio>
1117
1226
  </el-radio-group>
1118
1227
  </div>
1119
1228
 
1120
1229
  <span slot="footer" class="dialog-footer">
1121
- <el-button @click="dialogVisible = false">取 消</el-button>
1122
- <el-button type="primary" @click="addShipment">确 定</el-button>
1230
+ <el-button @click="dialogVisible = false">{{ $t('contractDetail.cancel') }}</el-button>
1231
+ <el-button type="primary" @click="addShipment">{{ $t('contractDetail.confirm') }}</el-button>
1123
1232
  </span>
1124
1233
  </el-dialog>
1125
1234
  <shipment-add ref="shipmentGen" @refresh="handleRefresh" />
1126
1235
 
1127
- <shipment-purchase-amount ref="shipmentPurchaseAmount"></shipment-purchase-amount>
1236
+ <shipment-purchase-amount
1237
+ ref="shipmentPurchaseAmount"
1238
+ :getContractFileInfoCallback="getContractFileInfoCallback"
1239
+ ></shipment-purchase-amount>
1128
1240
  </div>
1129
1241
  </template>
1130
1242
 
@@ -1143,8 +1255,11 @@ import { batchAsZip } from '../../../utils/zip';
1143
1255
  import {
1144
1256
  getBizContract,
1145
1257
  updateBizContract,
1258
+ withdrawSignContract,
1146
1259
  signContract,
1260
+ shipmentConfirmDraftBl
1147
1261
  } from '../../../api/biz/bizContract';
1262
+
1148
1263
  import DepositInvoice from '../bizContract/depositInvoice.vue';
1149
1264
  import { getDepositInvoice, listBizInvoice } from '../../../api/biz/bizInvoice';
1150
1265
  import GenShipment from '../bizShipment/add.vue';
@@ -1159,6 +1274,16 @@ import ShipmentAdd from '../bizShipment/add.vue';
1159
1274
  import ShipmentPurchaseAmount from '../contractTracing/shipmentPurchaseAmount.vue';
1160
1275
  import { encryptId } from '../../../utils/index.js';
1161
1276
  import { Loading } from 'element-ui';
1277
+ import Progress from "./contractFile/Progress.vue";
1278
+ import ProgressDetail from "./contractFile/ProgressDetail.vue";
1279
+ import SectionSlot from "./contractFile/SectionSlot.vue";
1280
+ import ContentTitle from './contractFile/ContentTitle.vue';
1281
+ import IMGPreviewCheckBox from './contractFile/IMGPreviewCheckBox.vue'
1282
+ import BillOfLadingNoTab from './contractFile/BillOfLadingNoTab.vue'
1283
+ import ShowAndHide from './contractFile/ShowAndHide.vue'
1284
+
1285
+ let handleGenerateflag = false;
1286
+ let handleGenerateflag1 = false;
1162
1287
 
1163
1288
  export default {
1164
1289
  name: 'ContractFile',
@@ -1172,6 +1297,13 @@ export default {
1172
1297
  FileShowClaim,
1173
1298
  ShipmentAdd,
1174
1299
  ShipmentPurchaseAmount,
1300
+ Progress,
1301
+ SectionSlot,
1302
+ ProgressDetail,
1303
+ ContentTitle,
1304
+ IMGPreviewCheckBox,
1305
+ BillOfLadingNoTab,
1306
+ ShowAndHide
1175
1307
  },
1176
1308
  props: {
1177
1309
  // 文件信息
@@ -1183,16 +1315,54 @@ export default {
1183
1315
  },
1184
1316
  channel: {
1185
1317
  type: String,
1186
- default: '',
1318
+ default: 'official-website123',
1187
1319
  },
1188
1320
  buyerFlag: {
1189
1321
  type: Boolean,
1190
1322
  default: true,
1191
1323
  },
1324
+ selectFileListProp: {
1325
+ type: Array,
1326
+ default: () => {
1327
+ return [];
1328
+ },
1329
+ },
1192
1330
  },
1193
1331
  data() {
1194
1332
  return {
1195
- identify: '识别',
1333
+ shipmentItemData: {},
1334
+ shipBillNo: 0,
1335
+ goodsBillNo: 0,
1336
+ claimBillNo: 0,
1337
+ contractProgressInfo: {
1338
+ text: this.$t('contractDetail.contract'),
1339
+ rate: 0,
1340
+ img: 'https://s3.cdn.doctorscrap.com/dev/user/image_9/805524d45f964ad0b3f51437d3b5750e.png',
1341
+ bgcolor: '#FBB040',
1342
+ textArr:[]
1343
+ },
1344
+ shipProgressInfo: {
1345
+ text: this.$t('contractDetail.shipment'),
1346
+ rate: 0,
1347
+ img: 'https://s3.cdn.doctorscrap.com/dev/user/image_9/8517dbf0444542d5bf100279231c9597.png',
1348
+ bgcolor: '#54B8FF',
1349
+ textArr:[this.$t('contractDetail.Waiting_for_the_seller_to_ship')]
1350
+ },
1351
+ getGoodsProgressInfo: {
1352
+ text: this.$t('contractDetail.receiving'),
1353
+ rate: 0,
1354
+ img: 'https://s3.cdn.doctorscrap.com/dev/user/image_9/a43ef25e953747efa9b88d3d9bbe674f.png',
1355
+ bgcolor: '#7CCF48',
1356
+ textArr:[]
1357
+ },
1358
+ claimProgressInfo: {
1359
+ text: this.$t('contractDetail.claim'),
1360
+ rate: 0,
1361
+ img: 'https://s3.cdn.doctorscrap.com/dev/user/image_9/b427331405604eeb8ec368130f00c5e6.png',
1362
+ bgcolor: '#adadad',
1363
+ textArr:[]
1364
+ },
1365
+ identify: this.$t('contractDetail.identify'),
1196
1366
  selectRadio: 0,
1197
1367
  purchaseBuyerList: [],
1198
1368
  // purchaseBuyerList1: [
@@ -1260,7 +1430,6 @@ export default {
1260
1430
  // 表单校验
1261
1431
  rules: {},
1262
1432
  lintId: null,
1263
- selectFileList: [],
1264
1433
  contractId: null,
1265
1434
  //合同文件
1266
1435
  contractFileInfo: {
@@ -1268,9 +1437,17 @@ export default {
1268
1437
  },
1269
1438
  //参考采购价
1270
1439
  shipmentPurchaseAmountMessage: '',
1440
+ loadingInstance: null,
1441
+ purchaseBalanceMoney: null
1271
1442
  };
1272
1443
  },
1273
1444
  created() {
1445
+ this.loadingInstance = Loading.service({
1446
+ text: this.$t('contractDetail.loading'),
1447
+ spinner: 'el-icon-loading',
1448
+ background: 'rgba(0, 0, 0, 0.7)',
1449
+ });
1450
+
1274
1451
  const contractId = this.$route.params && this.$route.params.contractId;
1275
1452
  if (contractId) {
1276
1453
  this.linkId = contractId;
@@ -1279,31 +1456,53 @@ export default {
1279
1456
  this.queryParams.linkId = contractId;
1280
1457
  }
1281
1458
  },
1282
- mounted() {},
1459
+ mounted() { },
1283
1460
  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
- });
1461
+ /**
1462
+ * @description:
1463
+ * @param {*} info
1464
+ * @return {*}
1465
+ */
1466
+ timeFormate(info) {
1467
+ if(info.length > 0 && info && info[0].createTime) {
1468
+ return this.$moment.utc(info[0].createTime).local().format('YYYY-MM-DD HH:mm');
1469
+ } else {
1470
+ return '';
1293
1471
  }
1294
1472
  },
1473
+
1474
+ allSelectContainerPackingPhoto(containerId) {
1475
+ this.$refs['container_packing_photo_' + containerId][0].checkAll1()
1476
+ },
1477
+ cancelContainerPackingPhoto(containerId) {
1478
+ this.$refs['container_packing_photo_' + containerId][0].cancelAll1()
1479
+ },
1480
+
1481
+ changeShipBillNo(index) {
1482
+ this.shipBillNo = index
1483
+ this.activeName = index
1484
+ this.setRate(index)
1485
+ },
1486
+ changeGoodsBillNo(index) {
1487
+ this.goodsBillNo = index
1488
+ },
1489
+ changeClaimBillNo(index) {
1490
+ this.claimBillNo = index
1491
+ },
1295
1492
  getShipmentPurchase(shipmentFileInfo) {
1296
1493
  this.$refs.shipmentPurchaseAmount.handleShow(shipmentFileInfo.shipmentId);
1297
1494
  },
1298
1495
  identifyPageBoth(shipmentFileInfo, type) {
1299
1496
  // 正式 purchaseFinallyInvoice
1300
1497
  if (type == 2) {
1301
- if (shipmentFileInfo?.purchaseFinallyInvoice[0]?.url) {
1498
+ if (shipmentFileInfo?.purchaseFinallyInvoice && shipmentFileInfo?.purchaseFinallyInvoice[0]?.url) {
1302
1499
  this.identifyPage(
1303
1500
  shipmentFileInfo?.purchaseFinallyInvoice[0]?.url,
1304
1501
  shipmentFileInfo && shipmentFileInfo.shipmentId,
1305
1502
  'final_invoice'
1306
1503
  );
1504
+ } else {
1505
+ return this.$message.warning(this.$t('contractDetail.no_files'));
1307
1506
  }
1308
1507
  } else {
1309
1508
  // 临时 purchaseTemporaryFinallyInvoice
@@ -1333,7 +1532,7 @@ export default {
1333
1532
  }
1334
1533
 
1335
1534
  if (!url) {
1336
- return this.$message.error('暂无文件');
1535
+ return this.$message.error(this.$t('contractDetail.no_files'));
1337
1536
  }
1338
1537
 
1339
1538
  if (type == 'draft_bill') {
@@ -1386,23 +1585,23 @@ export default {
1386
1585
  },
1387
1586
 
1388
1587
  /**
1389
- * @description: 添加货运
1588
+ * @description: 添加货运todo
1390
1589
  * @return {*}
1391
1590
  */
1392
1591
  addShipment() {
1393
1592
  const purchaseBuyerInfo = this.purchaseBuyerList[this.selectRadio];
1394
1593
  let timer = Date.now();
1395
1594
  addBizShipmentPurchase({
1396
- bookingNo: 'bookingNo-'+ timer,
1595
+ bookingNo: 'bookingNo-' + timer,
1397
1596
  billOfLadingNo: 'billOfLadingNo-' + timer,
1398
1597
  saleContractId: purchaseBuyerInfo.contractId,
1399
1598
  purchaseContractId: this.contract.contractId,
1400
- containerList:[{
1401
- containerNo:'containerNo-1'
1599
+ containerList: [{
1600
+ containerNo: 'containerNo-1'
1402
1601
  }]
1403
1602
  }).then((res) => {
1404
1603
  if (res.code === 200) {
1405
- this.$modal.msgSuccess('添加成功');
1604
+ this.$modal.msgSuccess(this.$t('contractDetail.add_success'));
1406
1605
  this.handleRefresh();
1407
1606
  }
1408
1607
  });
@@ -1453,21 +1652,41 @@ export default {
1453
1652
 
1454
1653
  // 将 <textarea> 元素删除
1455
1654
  document.body.removeChild(textArea);
1456
- this.$modal.msgSuccess('已复制到剪切板');
1655
+ this.$modal.msgSuccess(this.$t('contractDetail.has_copy'));
1457
1656
  },
1458
1657
  //撤回回签
1459
1658
  counterSign() {
1460
1659
  //如果是回签合同 保留原合同状态
1461
- updateBizContract({
1660
+ withdrawSignContract({
1462
1661
  contractId: this.contractId,
1463
- contractStatus:
1464
- this.contract.beforeContractStatus || this.contract.contractStatus,
1662
+ // contractStatus:
1663
+ // this.contract.beforeContractStatus || this.contract.contractStatus,
1664
+ }).then((res) => {
1665
+ if(res.code == 200) {
1666
+ this.$modal.msgSuccess(this.$t('contractDetail.withdraw_sign_success'));
1667
+ this.handleRefresh();
1668
+ }
1669
+ });
1670
+ },
1671
+
1672
+ //确认提单草稿成功
1673
+ shipmentConfirmDraftBlFun() {
1674
+ shipmentConfirmDraftBl({
1675
+ shipmentId: this.shipmentItemData.shipmentId,
1465
1676
  }).then((res) => {
1466
- this.$modal.msgSuccess('撤回回签成功');
1677
+ if(res.code == 200) {
1678
+ this.$modal.msgSuccess(this.$t('contractDetail.draftBillOfLading_confirm_success'));
1679
+ this.handleRefresh();
1680
+ }
1467
1681
  });
1468
1682
  },
1469
1683
  //生船运按钮操作
1470
1684
  handleGenerate() {
1685
+ if(handleGenerateflag) {
1686
+ return;
1687
+ }
1688
+ handleGenerateflag = true;
1689
+
1471
1690
  listBizInvoice({
1472
1691
  contractId: this.contractId,
1473
1692
  invoiceType: 'sale',
@@ -1478,11 +1697,11 @@ export default {
1478
1697
  res.rows[0].amount == res.rows[0].remainingAmount
1479
1698
  ) {
1480
1699
  this.$confirm(
1481
- '是否确认直接生成装运?请注意,此合同的定金发票尚未生成或已生成但未收款,请先确认相关情况。',
1482
- '提示',
1700
+ this.$t('contractDetail.ship_create_tips'),
1701
+ this.$t('contractDetail.tip'),
1483
1702
  {
1484
- confirmButtonText: '确定',
1485
- cancelButtonText: '取消',
1703
+ confirmButtonText: this.$t('contractDetail.confirm'),
1704
+ cancelButtonText: this.$t('contractDetail.cancel'),
1486
1705
  type: 'warning',
1487
1706
  }
1488
1707
  )
@@ -1498,7 +1717,11 @@ export default {
1498
1717
  );
1499
1718
  });
1500
1719
  })
1501
- .catch(() => {});
1720
+ .catch(() => { }).finally(() => {
1721
+ this.timer = setTimeout(() => {
1722
+ handleGenerateflag = false;
1723
+ },3000);
1724
+ });
1502
1725
  } else {
1503
1726
  listWithContractInfo({
1504
1727
  contractIds: [this.contractId],
@@ -1509,11 +1732,20 @@ export default {
1509
1732
  this.contract.destination,
1510
1733
  this.contract
1511
1734
  );
1735
+ }).finally(() => {
1736
+ this.timer = setTimeout(() => {
1737
+ handleGenerateflag = false;
1738
+ },3000);
1512
1739
  });
1513
1740
  }
1514
1741
  });
1515
1742
  },
1516
1743
  handleGeneratePurchase() {
1744
+ if(handleGenerateflag1) {
1745
+ return;
1746
+ }
1747
+ handleGenerateflag1 = true;
1748
+
1517
1749
  listSaleContracts({ purchaseContractNo: this.contract.contractNo }).then(
1518
1750
  (res) => {
1519
1751
  this.purchaseBuyerList = res.rows;
@@ -1523,29 +1755,269 @@ export default {
1523
1755
  this.addShipment();
1524
1756
  }
1525
1757
  }
1526
- );
1758
+ ).finally(() => {
1759
+ this.timer = setTimeout(() => {
1760
+ handleGenerateflag1 = false;
1761
+ },3000);
1762
+ });
1527
1763
  },
1528
1764
  handleRefresh() {
1529
1765
  this.getContractFileInfo(this.contractId);
1530
1766
  },
1531
1767
  //定金发票
1532
1768
  getDepositInvoice() {
1769
+ console.log('contract:', this.contract)
1533
1770
  if (this.contract.contractType == 'sale') {
1771
+ // 生成定金发票(销售)
1772
+ console.log('生成定金发票')
1534
1773
  getDepositInvoice(this.contract).then((response) => {
1535
1774
  const data = response.data;
1536
1775
  this.$refs.depositInvoice.handleShow(data);
1537
1776
  });
1538
1777
  } else {
1778
+ // 上传定金发票(采购)
1779
+ console.log('上传定金发票')
1539
1780
  this.$refs.purchaseInvoice.handleUpload(this.contract, 'deposit');
1540
1781
  }
1541
1782
  },
1542
1783
  //上传尾款发票
1543
1784
  uploadFinalInvoice(type, shipmentId) {
1785
+ console.log('上传尾款发票')
1544
1786
  this.$refs.purchaseInvoice.handleUpload(this.contract, type, shipmentId);
1545
1787
  },
1788
+ //设置进度
1789
+ setRate(index) {
1790
+ this.contractProgressInfo.rate = this.contractFileInfo.contractPercentage || 0
1791
+ let textArr = []
1792
+ console.log('===this.contract.contractType==', this.contract.contractType);
1793
+ // 销售
1794
+ if(this.contract.contractType == 'sale') {
1795
+ // 无定金
1796
+ //发送草稿合同标记
1797
+ if(!this.contractFileInfo.sendDraftContractFlag) {
1798
+ // 草稿合同待发出(英文:Draft contract to be sent out)
1799
+ textArr.push(this.$t('contractDetail.draftContract_unsend'))
1800
+ }
1801
+
1802
+ // 点击合同确认标记
1803
+ if(this.contractFileInfo.confirmContractFlag) {
1804
+ // 正式合同已发出(英文:Formal Contract have been sent out)
1805
+ // textArr.push('正式合同已发出')
1806
+ } else {
1807
+ // 正式合同待发出(英文:Formal contract to be sent out)
1808
+ textArr.push(this.$t('contractDetail.contract_send_false'))
1809
+ }
1810
+
1811
+ // BLI确认标记
1812
+ if(this.contractFileInfo.bliConfirmFlag) {
1813
+ // 提单指令已确认(英文:BL Instruction confirmed)
1814
+ // textArr.push('提单指令已确认')
1815
+ } else {
1816
+ // 提单指令待买家确认(英文: BL Instruction to be confirmed
1817
+ textArr.push(this.$t('contractDetail.bl_confirm_false'))
1818
+ }
1819
+
1820
+ // 合同回签标记
1821
+ if(this.contractFileInfo.contractSignFlag) {
1822
+ // 回签合同已上传(英文:Signed Contract has been signed back)
1823
+ // textArr.push('回签合同已上传')
1824
+ } else {
1825
+ // 回签合同待上传(英文:Formal contract to be signed back
1826
+ textArr.push(this.$t('contractDetail.contract_signback_false'))
1827
+ }
1828
+
1829
+ if(this.contract.deposit != null && this.contract.deposit > 0) {
1830
+ // 定金支付标记
1831
+ if(this.contractFileInfo.depositInvoicePayFlag) {
1832
+ // 定金已支付(英文:Deposit paid)
1833
+ // textArr.push('定金已支付')
1834
+ } else {
1835
+ // 定金待支付(英文:Deposit to be paid)
1836
+ textArr.push(this.$t('contractDetail.depositPaid_false'))
1837
+ }
1838
+ }
1839
+ }
1840
+
1841
+ if(this.contract.contractType == 'purchase') {
1842
+ // 无定金
1843
+ //发送草稿合同标记
1844
+ if(!this.contractFileInfo.sendDraftContractFlag) {
1845
+ // 草稿合同待发出(英文:Draft contract to be sent out)
1846
+ textArr.push(this.$t('contractDetail.draftContract_unsend'))
1847
+ }
1848
+
1849
+ // 点击合同确认标记
1850
+ if(this.contractFileInfo.confirmContractFlag) {
1851
+ // 正式合同已发出(英文:Formal Contract have been sent out)
1852
+ // textArr.push('正式合同已发出')
1853
+ } else {
1854
+ // 正式合同待发出(英文:Formal contract to be sent out)
1855
+ textArr.push(this.$t('contractDetail.contract_send_false'))
1856
+ }
1857
+
1858
+ // BLI确认标记
1859
+ if(this.contractFileInfo.bliConfirmFlag) {
1860
+ // 提单指令已确认(英文:BL Instruction confirmed)
1861
+ // textArr.push('提单指令已确认')
1862
+ } else {
1863
+ // 提单指令待买家确认(英文: BL Instruction to be confirmed
1864
+ textArr.push(this.$t('contractDetail.bl_confirm_false'))
1865
+ }
1866
+
1867
+ // 合同回签标记
1868
+ if(this.contractFileInfo.contractSignFlag) {
1869
+ // 回签合同已上传(英文:Signed Contract has been signed back)
1870
+ // textArr.push('回签合同已上传')
1871
+ } else {
1872
+ // 回签合同待上传(英文:Formal contract to be signed back
1873
+ textArr.push(this.$t('contractDetail.contract_signback_false'))
1874
+ }
1875
+
1876
+ if(this.contract.deposit != null && this.contract.deposit > 0) {
1877
+ if(!this.contractFileInfo.existDepositInvoiceFlag) {
1878
+ // 定金发票待提供(英文:Deposit Invoice to be uploaded)
1879
+ textArr.push(this.$t('contractDetail.Deposit_invoice_to_be_provided'))
1880
+ }
1881
+
1882
+ // 定金支付标记
1883
+ if(!this.contractFileInfo.depositInvoicePayFlag) {
1884
+ // 定金待支付(英文:Deposit to be paid)
1885
+ textArr.push(this.$t('contractDetail.depositPaid_false'))
1886
+ }
1887
+ }
1888
+ }
1889
+
1890
+ this.contractProgressInfo.textArr = textArr
1891
+
1892
+
1893
+ let shipmentFileInfoList = this.contractFileInfo.shipmentFileInfoList;
1894
+
1895
+ let shipTextArr = []
1896
+
1897
+ if(shipmentFileInfoList && shipmentFileInfoList.length > 0) {
1898
+ let shipmentItem = shipmentFileInfoList[index]
1899
+ this.shipmentItemData = shipmentItem
1900
+ this.shipProgressInfo.rate = shipmentItem?.shipmentPercentage || 0
1901
+ this.getGoodsProgressInfo.rate = shipmentItem?.telexReleasePercentage || 0
1902
+ this.claimProgressInfo.rate = this.contractFileInfo?.claimPercentage || 0
1903
+
1904
+ // 装运进度
1905
+ // 装箱单
1906
+ if(shipmentItem.generatePackingFlag) {
1907
+ // 装箱单已上传(英文:Packing List updated)
1908
+ // shipTextArr.push('装箱单已上传')
1909
+ } else {
1910
+ // 装箱单待上传(英文:Shipping docs-Packing list to be updated)
1911
+ shipTextArr.push(this.$t('contractDetail.packinglist_false'))
1912
+ }
1913
+
1914
+ // 是否已支付尾款
1915
+ if(!shipmentItem.generateInvoiceFlag && this.contract.contractType == 'purchase') {
1916
+ // 尾款发票待上传(英文:Balance Invoice to be updated)
1917
+ shipTextArr.push(this.$t('contractDetail.balance_invoice_false'))
1918
+ }
1919
+
1920
+ // 上传装箱照片
1921
+ if(shipmentItem.uploadContainerPhotoFlag) {
1922
+ // 装箱照片已上传(Packing photos updated)
1923
+ // shipTextArr.push('装箱照片已上传')
1924
+ } else {
1925
+ // 装箱照片待上传(英文:Shipping docs-Shipping photos to be updated)
1926
+ shipTextArr.push(this.$t('contractDetail.container_photos_false'))
1927
+ }
1928
+
1929
+
1930
+ // 是否上传草稿提单
1931
+ if(shipmentItem.uploadDraftBlFlag) {
1932
+ // 草稿提单已上传(Draft BL updated)
1933
+ // shipTextArr.push('草稿提单已上传')
1934
+ } else {
1935
+ // 草稿提单待上传(英文:Shipping docs-Draft BL to be updated)
1936
+ shipTextArr.push(this.$t('contractDetail.draftBl_false'))
1937
+ }
1938
+
1939
+ // 是否确认草稿提单
1940
+ if(!shipmentItem.confirmDraftBlFlag) {
1941
+ // 草稿提单待买家确认(英文:Draft BL to be confirmed )
1942
+ shipTextArr.push(this.$t('contractDetail.draftBl_buyer_confirm_false'))
1943
+ } else {
1944
+ // 草稿提单已确认(英文:Draft BL confirmed)
1945
+ // shipTextArr.push('草稿提单已确认')
1946
+ }
1947
+
1948
+ // 尾款部分支付标记
1949
+
1950
+ // 尾款部分支付标记
1951
+ if(shipmentItem.balanceInvoiceFullyPaidFlag) {
1952
+ // 尾款已支付(英文:Final Payment paid)
1953
+ // shipTextArr.push('尾款已支付')
1954
+ } else {
1955
+ if(shipmentItem.balanceInvoicePartiallyPaidFlag) {
1956
+ // 尾款已部分支付(英文:Final Payment partially paid)
1957
+ shipTextArr.push(this.$t('contractDetail.Balance_Invoice_to_be_paid'))
1958
+ } else {
1959
+ // 尾款待买家支付(英文:Balance Invoice to be paid)
1960
+ shipTextArr.push(this.$t('contractDetail.Balance_Invoice_to_be_paid'))
1961
+ }
1962
+ }
1963
+
1964
+ this.shipProgressInfo.textArr = shipTextArr
1965
+
1966
+
1967
+ // 收货进度
1968
+ let goodsTextArr = []
1969
+ // 装运百分比
1970
+ if(shipmentItem.telexReleasePercentage > 0) {
1971
+ // 提货凭证已提供(英文:Released/ Telxed the BL)
1972
+ // goodsTextArr.push('提货凭证已提供')
1973
+ } else {
1974
+ // 提货凭证待提供(英文:Release /Telxed BL to be done)
1975
+ goodsTextArr.push(this.$t('contractDetail.releasedTelex_false'))
1976
+ }
1977
+
1978
+ this.getGoodsProgressInfo.textArr = goodsTextArr
1979
+
1980
+ // 索赔进度
1981
+ let claimTextArr = []
1982
+ if(this.contractFileInfo.claimCreateFlag && !this.contractFileInfo.claimProcessFlag && !this.contractFileInfo.claimCloseFlag) {
1983
+ // 索赔中(英文:Claiming)
1984
+ claimTextArr.push(this.$t('contractDetail.claiming'))
1985
+ }
1986
+
1987
+ if(this.contractFileInfo.claimCreateFlag && this.contractFileInfo.claimProcessFlag && !this.contractFileInfo.claimCloseFlag) {
1988
+ // 文件已更新(英文:Claiming-CN/DN issued
1989
+ claimTextArr.push(this.$t('contractDetail.claiming_update'))
1990
+ }
1991
+
1992
+ if(this.contractFileInfo.claimCreateFlag && this.contractFileInfo.claimProcessFlag && this.contractFileInfo.claimCloseFlag) {
1993
+ // 索赔已关闭(英文:Claim closed)
1994
+ claimTextArr.push(this.$t('contractDetail.claiming_closed'))
1995
+ }
1996
+
1997
+ this.claimProgressInfo.textArr = claimTextArr
1998
+ } else {
1999
+ shipTextArr.push(this.$t('contractDetail.Waiting_for_the_seller_to_ship'))
2000
+ this.claimProgressInfo.textArr = shipTextArr
2001
+ }
2002
+ this.getShipmentPurchaseAmount()
2003
+ this.loadingInstance.close();
2004
+ },
2005
+ //获取合同文件信息
1546
2006
  getContractFileInfo(contractId) {
1547
2007
  getBizContractFileInfo(contractId).then((res) => {
1548
2008
  this.contractFileInfo = res.data;
2009
+ this.setRate(this.shipBillNo || 0)
2010
+ });
2011
+ },
2012
+
2013
+ /**
2014
+ * @description: 修改正式尾款发票金额重新获取合同文件信息
2015
+ * @return {*}
2016
+ */
2017
+ getContractFileInfoCallback() {
2018
+ getBizContractFileInfo(this.contractId).then((res) => {
2019
+ this.contractFileInfo = res.data;
2020
+ this.setRate(this.shipBillNo)
1549
2021
  });
1550
2022
  },
1551
2023
  handleHistory(fileType) {
@@ -1568,13 +2040,26 @@ export default {
1568
2040
  console.log(this.selectFileList);
1569
2041
  },
1570
2042
  handleUncheck(val) {
1571
- let index = this.selectFileList.findIndex((item) => item.fileId === val);
1572
- if (index > -1) this.selectFileList.splice(index, 1);
2043
+ let index = this.selectFileList.findIndex((item) => {
2044
+ console.log('====handleUncheck==', item.fileId, val);
2045
+ return item.fileId === val
2046
+ });
2047
+ console.log('====handleUncheck==', index);
2048
+ if (index > -1) {
2049
+ this.selectFileList.splice(index, 1);
2050
+ }
1573
2051
  console.log(this.selectFileList);
1574
2052
  },
2053
+ cancelAllSelectFileList () {
2054
+ this.selectFileList.forEach((item) => {
2055
+ setTimeout(() => {
2056
+ this.handleUncheck(item.fileId)
2057
+ }, 10);
2058
+ });
2059
+ },
1575
2060
  handleUpload(e, linkId, linkType, fileType) {
1576
2061
  let loadingInstance = Loading.service({
1577
- text: '请稍候',
2062
+ text: this.$t('contractDetail.loading'),
1578
2063
  spinner: 'el-icon-loading',
1579
2064
  background: 'rgba(0, 0, 0, 0.7)',
1580
2065
  });
@@ -1590,7 +2075,7 @@ export default {
1590
2075
  //如果是回签合同 保留原合同状态
1591
2076
  if (fileType == 'contract_sign') {
1592
2077
  let loading = Loading.service({
1593
- text: '请稍候',
2078
+ text: this.$t('contractDetail.loading'),
1594
2079
  spinner: 'el-icon-loading',
1595
2080
  background: 'rgba(0, 0, 0, 0.7)',
1596
2081
  });
@@ -1604,23 +2089,25 @@ export default {
1604
2089
  contractSignTime: new Date(),
1605
2090
  }).then((res) => {
1606
2091
  loading.close();
1607
- this.$modal.msgSuccess('回签成功');
2092
+ this.$modal.msgSuccess(this.$t('contractDetail.signContract_success'));
2093
+ this.getContractFileInfo(this.contractId);
1608
2094
  });
1609
2095
  });
2096
+ } else if (fileType == 'shipment_delivery_receipt') {
2097
+ //如果是上传电放
2098
+ let loading1 = Loading.service({
2099
+ text: this.$t('contractDetail.loading'),
2100
+ spinner: 'el-icon-loading',
2101
+ background: 'rgba(0, 0, 0, 0.7)',
2102
+ });
2103
+ chargedShipment({ shipmentId: linkId }).then((response) => {
2104
+ loading1.close();
2105
+ this.$modal.msgSuccess(this.$t('contractDetail.release_success'));
2106
+ this.getContractFileInfo(this.contractId);
2107
+ });
2108
+ } {
2109
+ this.getContractFileInfo(this.contractId);
1610
2110
  }
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
2111
  });
1625
2112
  },
1626
2113
 
@@ -1663,8 +2150,43 @@ export default {
1663
2150
  this.loading = false;
1664
2151
  });
1665
2152
  },
2153
+ getShipmentPurchaseAmount() {
2154
+ let shipmentFileInfo = this.shipmentItemData
2155
+ getPurchaseAmount(shipmentFileInfo.shipmentId).then((res) => {
2156
+ this.purchaseBalanceMoney = (res.data?.totalPurchaseAmount - res.data?.purchaseDepositAmount).toFixed(2)
2157
+ this.shipmentPurchaseAmountMessage =
2158
+ `${this.$t('contractDetail.reference_invince')}$` + this.purchaseBalanceMoney
2159
+ ;
2160
+ return this.shipmentPurchaseAmountMessage;
2161
+ });
2162
+ },
1666
2163
  },
1667
2164
  computed: {
2165
+ // 销售获取最新的尾款发票
2166
+ getNewInfo() {
2167
+ // 时间比较
2168
+ let shipmentFileInfo = this.shipmentItemData && this.shipmentItemData
2169
+ if((shipmentFileInfo.saleFinallyInvoice && shipmentFileInfo.saleFinallyInvoice.length > 0) && (shipmentFileInfo.salePersonalFinallyInvoice && shipmentFileInfo.salePersonalFinallyInvoice.length > 0)) {
2170
+ if((shipmentFileInfo.saleFinallyInvoice && shipmentFileInfo.saleFinallyInvoice[0]?.createTime) > (shipmentFileInfo.salePersonalFinallyInvoice && shipmentFileInfo.salePersonalFinallyInvoice[0]?.createTime)) {
2171
+ return [shipmentFileInfo.saleFinallyInvoice[0]]
2172
+ } else {
2173
+ return [shipmentFileInfo.salePersonalFinallyInvoice[0]]
2174
+ }
2175
+ } else {
2176
+ // 展示存在的其中一个 saleFinallyInvoice
2177
+ if(shipmentFileInfo.saleFinallyInvoice && shipmentFileInfo.saleFinallyInvoice.length && (!shipmentFileInfo.salePersonalFinallyInvoice || shipmentFileInfo.salePersonalFinallyInvoice.length == 0)) {
2178
+ return [shipmentFileInfo.saleFinallyInvoice[0]]
2179
+ }
2180
+
2181
+ // 展示存在的其中一个 salePersonalFinallyInvoice
2182
+ if((!shipmentFileInfo.saleFinallyInvoice || shipmentFileInfo.saleFinallyInvoice.length == 0) && (shipmentFileInfo.salePersonalFinallyInvoice && shipmentFileInfo.salePersonalFinallyInvoice.length)) {
2183
+ return [shipmentFileInfo.salePersonalFinallyInvoice[0]]
2184
+ }
2185
+
2186
+ return ''
2187
+ }
2188
+
2189
+ },
1668
2190
  claimFileInfoCom() {
1669
2191
  if (
1670
2192
  (this.contractFileInfo &&
@@ -1674,38 +2196,191 @@ export default {
1674
2196
  this.contractFileInfo.claimDebitNoteFileList &&
1675
2197
  this.contractFileInfo.claimDebitNoteFileList[0])
1676
2198
  ) {
1677
- return this.buyerFlag
2199
+ return !this.buyerFlag
1678
2200
  ? this.contractFileInfo &&
1679
- this.contractFileInfo.claimCreditNoteFileList &&
1680
- this.contractFileInfo.claimCreditNoteFileList
2201
+ this.contractFileInfo.claimCreditNoteFileList &&
2202
+ this.contractFileInfo.claimCreditNoteFileList
1681
2203
  : this.contractFileInfo &&
1682
- this.contractFileInfo.claimDebitNoteFileList &&
1683
- this.contractFileInfo.claimDebitNoteFileList;
2204
+ this.contractFileInfo.claimDebitNoteFileList &&
2205
+ this.contractFileInfo.claimDebitNoteFileList;
1684
2206
  } else {
1685
2207
  false;
1686
2208
  }
1687
2209
  },
1688
2210
  },
2211
+ watch: {
2212
+ selectFileListProp: {
2213
+ handler(val) {
2214
+ this.selectFileList = val
2215
+ },
2216
+ immediate: true,
2217
+ deep: true
2218
+ },
2219
+ },
2220
+ destroyed() {
2221
+ clearTimeout(this.timer);
2222
+ },
1689
2223
  };
1690
2224
  </script>
1691
2225
  <style lang="scss" scoped>
2226
+
2227
+ .bg-history {
2228
+ color: #1C75BC;
2229
+ line-height: 12px;
2230
+ font-size: 14px;
2231
+ cursor: pointer;
2232
+ }
2233
+
2234
+ .progress-root {
2235
+ display: flex;
2236
+ }
2237
+
2238
+ .selection-root {
2239
+ display: flex;
2240
+ margin-top: 26px;
2241
+ justify-content: flex-start;
2242
+ align-items: center;
2243
+ margin-bottom: 20px;
2244
+ }
2245
+
2246
+ .border-button {
2247
+ margin-left: 8px;
2248
+ min-width: 45px;
2249
+ padding: 0 10px;
2250
+ width: max-content;
2251
+ height: 21px;
2252
+ text-align: center;
2253
+ line-height: 17px;
2254
+ background: #FFFFFF;
2255
+ border-radius: 11px;
2256
+ font-size: 12px;
2257
+ border: 2px solid #D1D3D4;
2258
+ cursor: pointer;
2259
+ }
2260
+
2261
+ .border-button-share {
2262
+ background: #84db4c;
2263
+ border: 2px solid transparent;
2264
+ }
2265
+
2266
+ .slot-content {
2267
+ margin-top: 8px;
2268
+ }
2269
+
1692
2270
  .box-card {
1693
2271
  width: 100%;
1694
2272
  }
2273
+
1695
2274
  .sub-title {
1696
2275
  font-size: 14px;
1697
2276
  font-weight: bold;
1698
2277
  margin-bottom: 10px;
1699
2278
  }
2279
+
1700
2280
  .file-list {
1701
2281
  display: flex;
1702
2282
  flex-wrap: wrap;
1703
-
2283
+ max-width:1000px;
1704
2284
  .file-info {
1705
2285
  margin-right: 10px;
1706
2286
  }
1707
2287
  }
2288
+
2289
+
2290
+ .content-root {
2291
+ overflow: hidden;
2292
+ background-color: #fff;
2293
+ padding: 10px 20px;
2294
+
2295
+ .content-root-row {
2296
+ display: flex;
2297
+ align-items: center;
2298
+ }
2299
+ }
2300
+
1708
2301
  ::v-deep .el-tabs--top .el-tabs__item.is-top:last-child {
1709
2302
  font-weight: 900;
1710
2303
  }
2304
+
2305
+ .success {
2306
+ color: #67C23A;
2307
+ }
2308
+
2309
+ .confirm-draft-bl {
2310
+ width:200px;
2311
+ height: 30px;
2312
+ border-radius: 15px;
2313
+ line-height:30px;
2314
+ text-align: center;
2315
+ background-color: #189048;
2316
+ color:#fff;
2317
+ cursor:pointer;
2318
+ }
2319
+
2320
+ .center-status {
2321
+ height: 85px;
2322
+ display: flex;
2323
+ align-items: center;
2324
+ justify-content: flex-start;
2325
+ color: #bbb
2326
+ }
2327
+ .center-status-block {
2328
+ height: 85px;
2329
+ display: flex;
2330
+ align-items: center;
2331
+ flex-direction: column;
2332
+ justify-content: center;
2333
+ color: #bbb
2334
+ }
2335
+ .ship-empty {
2336
+ line-height:60px;
2337
+ color: #bbb;
2338
+ text-align: center;
2339
+ padding:20px 0;
2340
+ }
2341
+
2342
+ .preview-download-root {
2343
+ display:flex;
2344
+ margin-top:5px;
2345
+
2346
+ .preview-download {
2347
+ cursor: pointer;
2348
+ margin-left:8px;
2349
+ min-width: 45px;
2350
+ width:max-content;
2351
+ padding: 0 10px;
2352
+ height: 21px;
2353
+ text-align: center;
2354
+ line-height: 17px;
2355
+ background: #FFFFFF;
2356
+ border-radius: 11px;
2357
+ font-size:12px;
2358
+ border: 2px solid #D1D3D4;
2359
+ }
2360
+ }
2361
+ .addshipment {
2362
+ position: absolute;
2363
+ left:100px;
2364
+ top:120px;
2365
+ background-color:#fff;
2366
+ height:30px;
2367
+ line-height:30px;
2368
+ text-align: center;
2369
+ color:#1C75BC;
2370
+ padding: 0 20px;
2371
+ width:max-content;
2372
+ border-radius:15px;
2373
+ cursor:pointer;
2374
+ }
2375
+ .hr-class {
2376
+ width: 100%;
2377
+ height: 1px;
2378
+ background-color: #ddd;
2379
+ margin: 20px 0 ;
2380
+ }
1711
2381
  </style>
2382
+ <style lang="scss">
2383
+ // .el-tooltip__popper {
2384
+ // max-width: 300px !important; /* 设置你希望的最大宽度 */
2385
+ // }
2386
+ </style>