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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +10 -2
  2. package/package.json +1 -1
  3. package/packages/index.js +16 -0
  4. package/packages/src/api/biz/bizContract.js +1005 -0
  5. package/packages/src/api/biz/bizFileInfo.js +16 -0
  6. package/packages/src/api/biz/bizInvoice.js +1 -1
  7. package/packages/src/api/biz/bizShipment.js +18 -0
  8. package/packages/src/assets/images/click-show-table.png +0 -0
  9. package/packages/src/assets/images/more.png +0 -0
  10. package/packages/src/assets/images/pdf-new.png +0 -0
  11. package/packages/src/components/DictTag/index.vue +12 -2
  12. package/packages/src/components/FileUpload/contract-drag-new.vue +100 -11
  13. package/packages/src/i18n/en/message.json +305 -0
  14. package/packages/src/i18n/index.js +38 -0
  15. package/packages/src/i18n/zh-CN/message.json +305 -0
  16. package/packages/src/index.js +24 -1
  17. package/packages/src/utils/index.js +35 -0
  18. package/packages/src/views/biz/bizFileInfo/PAYMENT_VOUCHER(/"payment_voucher/", /"/344/273/230/346/254/276/345/207/255/350/257/201.ini" +222 -0
  19. package/packages/src/views/biz/bizFileInfo/contract copy.vue +1711 -0
  20. package/packages/src/views/biz/bizFileInfo/contract.vue +1783 -986
  21. package/packages/src/views/biz/bizFileInfo/contractFile/BillOfLadingNoTab.vue +114 -0
  22. package/packages/src/views/biz/bizFileInfo/contractFile/ContentTitle.vue +102 -0
  23. package/packages/src/views/biz/bizFileInfo/contractFile/IMGPreviewCheckBox.vue +308 -0
  24. package/packages/src/views/biz/bizFileInfo/contractFile/Progress.vue +85 -0
  25. package/packages/src/views/biz/bizFileInfo/contractFile/ProgressDetail.vue +123 -0
  26. package/packages/src/views/biz/bizFileInfo/contractFile/SectionSlot.vue +83 -0
  27. package/packages/src/views/biz/bizFileInfo/contractFile/ShowAndHide.vue +178 -0
  28. package/packages/src/views/biz/bizFileInfo/fileShow copy.vue +321 -0
  29. package/packages/src/views/biz/bizFileInfo/fileShow.vue +143 -47
  30. package/packages/src/views/biz/bizFileInfo/fileShowClaim.vue +1 -1
  31. package/packages/src/views/biz/bizShipment/add.vue +134 -29
  32. package/packages/src/views/biz/bizShipment/referenceAlert.vue +168 -0
  33. package/packages/src/views/biz/contractTracing/billInfo.vue +64 -40
  34. package/packages/src/views/biz/contractTracing/companyBanks.vue +228 -0
  35. package/packages/src/views/biz/contractTracing/contractInfo.vue +1 -1
  36. package/packages/src/views/biz/contractTracing/contractPdf.vue +7 -4
  37. package/packages/src/views/biz/contractTracing/contractSummary.vue +24 -18
  38. package/packages/src/views/biz/contractTracing/contractTracingDetail copy.vue +107 -0
  39. package/packages/src/views/biz/contractTracing/contractTracingDetail.vue +281 -31
  40. package/packages/src/views/biz/contractTracing/editBill.vue +22 -9
  41. package/packages/src/views/biz/contractTracing/purchaseInvoiceUpload.vue +153 -7
  42. package/packages/src/views/biz/contractTracing/shipmentPurchaseAmount.vue +14 -0
  43. package/packages/src/views/biz/contractTracing/subCompanyDialog.vue +8 -2
  44. package/packages/src/views/components/RegionPicker/Distpicker.vue +459 -0
  45. package/packages/src/views/components/RegionPicker/districts.js +4641 -0
  46. package/packages/src/views/test.vue +3 -3
@@ -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,818 @@
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'
348
375
  "
349
- >识别汇总</el-button>
350
- <el-button type="primary" size="mini" @click="editShipment(shipmentFileInfo)">编辑船运</el-button>
376
+ >增加装运</div> -->
377
+ <!-- <div class="addshipment" @click.stop="handleGeneratePurchase"
378
+ v-if="
379
+ channel !== 'official-website' && contract.contractType == 'purchase'
380
+ "
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
+ @refresh="handleRefresh"
563
+ >
564
+ <template>
565
+ <contract-file-drag-upload v-show="channel !== 'official-website'" @upload="
554
566
  handleUpload(
555
567
  $event,
556
568
  containerFile.containerId,
557
569
  'container',
558
570
  'container_packing_photo'
559
571
  )
560
- "
561
- :isShowTip="false"
572
+ " :isShowTip="false" photos
573
+ style="margin-top:0px"
574
+ />
575
+ </template>
576
+ </IMGPreviewCheckBox>
577
+ </div>
578
+ <!-- <el-col :span="12" v-if="containerFile.packingPhoto && containerFile.packingPhoto.length == 0" class="center-status">
579
+ <i class="el-icon-time"></i>
580
+ 装箱照片待更新
581
+ </el-col> -->
582
+ </el-col>
583
+ </div>
584
+
585
+ <el-col :span="24">
586
+ <div class="hr-class"></div>
587
+ </el-col>
588
+ <el-col :span="24" style="display:flex;align-items:center">
589
+ <ContentTitle :contentTitleProp="{
590
+ bgButton: $t('contractDetail.draftBillOfLading'),
591
+ bgTime: shipmentFileInfo.draftBillOfLading && timeFormate(shipmentFileInfo.draftBillOfLading),
592
+ bgcolor: shipProgressInfo.bgcolor
593
+ }"></ContentTitle>
594
+ <span
595
+ style="color: #1890ff; cursor: pointer;font-size:14px"
596
+ v-if="
597
+ shipmentFileInfo &&
598
+ shipmentFileInfo.draftBillOfLading &&
599
+ shipmentFileInfo.draftBillOfLading[0] &&
600
+ shipmentFileInfo.draftBillOfLading[0].url
601
+ "
602
+ @click="
603
+ identifyPage(
604
+ shipmentFileInfo &&
605
+ shipmentFileInfo.draftBillOfLading &&
606
+ shipmentFileInfo.draftBillOfLading[0] &&
607
+ shipmentFileInfo.draftBillOfLading[0].url,
608
+ shipmentFileInfo && shipmentFileInfo.shipmentId,
609
+ 'draft_bill'
610
+ )
611
+ "
612
+ >{{ identify }}</span>
613
+ </el-col>
614
+ <el-col :span="24">
615
+ <el-col :span="12">
616
+ <div class="file-list">
617
+ <file-show @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item"
618
+ :hiddenOperation="channel == 'official-website'"
619
+ v-for="(
620
+ item, i
621
+ ) in shipmentFileInfo.draftBillOfLading" :key="i" />
622
+
623
+ <contract-file-drag-upload v-show="channel !== 'official-website' && (!shipmentFileInfo.draftBillOfLading || shipmentFileInfo.draftBillOfLading.length == 0)" @upload="
624
+ handleUpload(
625
+ $event,
626
+ shipmentFileInfo.shipmentId,
627
+ 'shipment',
628
+ 'draft_bill_of_lading'
629
+ )
630
+ " :isShowTip="false"
631
+ :uploadNameStr="$t('contractDetail.draftBillOfLading')"
562
632
  />
563
- </div>
564
- </el-row>
633
+ </div>
634
+ </el-col>
635
+ <el-col :span="12" class="center-status" v-if="channel != 'official-website'">
636
+ <div v-if="shipmentItemData.confirmDraftBlFlag">
637
+ <i class="el-icon-success success"></i> {{ $t('contractDetail.BL_info_confirmed') }}
638
+ </div>
639
+ <div v-else-if="contract.contractType == 'sale' && shipmentFileInfo.draftBillOfLading.length" class="confirm-draft-bl" @click.stop="shipmentConfirmDraftBlFun">{{ $t('contractDetail.bl_draft_confirm') }}</div>
640
+ <el-col :span="24" v-else class="center-status">
641
+ <i class="el-icon-time"></i>
642
+ {{ $t('contractDetail.Draft_bill_to_be_confirmed') }}
643
+ </el-col>
644
+
645
+ </el-col>
646
+ <el-col :span="24">
647
+ <el-col :span="12" v-if="(shipmentFileInfo.draftBillOfLading == null || shipmentFileInfo.draftBillOfLading && shipmentFileInfo.draftBillOfLading.length == 0) && channel == 'official-website'" class="center-status">
648
+ <i class="el-icon-time"></i>
649
+ {{ $t('contractDetail.Draft_bill_of_lading_to_be_updated') }}
650
+ </el-col>
651
+ <el-col :span="12" v-if="!shipmentItemData.confirmDraftBlFlag && channel == 'official-website'" class="center-status">
652
+ <i class="el-icon-time"></i>
653
+ {{ $t('contractDetail.Draft_bill_to_be_confirmed') }}
654
+ </el-col>
655
+ </el-col>
656
+ </el-col>
657
+
658
+ <el-col :span="24">
659
+ <div class="hr-class"></div>
660
+ </el-col>
661
+ <el-col :span="24">
662
+ <ContentTitle :contentTitleProp="{
663
+ bgButton: $t('contractDetail.Copy_of_formal_bill_of_lading'),
664
+ bgTime: shipmentFileInfo.originalBillOfLadingCopy && timeFormate(shipmentFileInfo.originalBillOfLadingCopy),
665
+ bgcolor: shipProgressInfo.bgcolor
666
+ }"></ContentTitle>
667
+ </el-col>
668
+ <el-col :span="24">
669
+ <div class="file-list">
670
+ <file-show @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item"
671
+ :hiddenOperation="channel == 'official-website'"
672
+ v-for="(
673
+ item, i
674
+ ) in shipmentFileInfo.originalBillOfLadingCopy" :key="i" />
675
+ <contract-file-drag-upload v-show="(!shipmentFileInfo.originalBillOfLadingCopy || shipmentFileInfo.originalBillOfLadingCopy.length == 0) && channel !== 'official-website'" @upload="
676
+ handleUpload(
677
+ $event,
678
+ shipmentFileInfo.shipmentId,
679
+ 'shipment',
680
+ 'original_bill_of_lading_copy'
681
+ )
682
+ " :isShowTip="false"
683
+ :uploadNameStr="$t('contractDetail.Copy_of_formal_bill_of_lading')"
684
+ />
565
685
  </div>
566
- <el-divider></el-divider>
686
+ <el-col :span="12" v-if="(shipmentFileInfo.originalBillOfLadingCopy == null || shipmentFileInfo.originalBillOfLadingCopy && shipmentFileInfo.originalBillOfLadingCopy.length == 0) && channel == 'official-website'" class="center-status">
687
+ <i class="el-icon-time"></i>
688
+ {{ $t('contractDetail.Formal_bill_of_lading_copy_to_be_updated') }}
689
+ </el-col>
690
+ </el-col>
691
+ <!-- 临时尾款发票 -->
692
+ <el-col :span="24" v-if="contract.quoteType != 'FIXED'">
693
+ <div class="hr-class"></div>
694
+ </el-col>
695
+ <el-col :span="24" v-if="contract.quoteType != 'FIXED'">
696
+ <ContentTitle :contentTitleProp="{
697
+ bgButton: $t('contractDetail.saleTemporaryFinallyInvoice'),
698
+ bgTime: shipmentFileInfo.salePersonalTemporaryFinallyInvoice && timeFormate(shipmentFileInfo.salePersonalTemporaryFinallyInvoice),
699
+ bgcolor: shipProgressInfo.bgcolor
700
+ }"></ContentTitle>
567
701
  <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>
702
+ <span
703
+ v-if="
704
+ channel !== 'official-website' &&
705
+ contract.contractType == 'purchase'
706
+ "
707
+ style="color: #1890ff; cursor: pointer; margin-left: 10px"
708
+ @click.stop="identifyPageBoth(shipmentFileInfo, 1)"
709
+ >{{ identify }}</span>
710
+ </div>
711
+ <el-col :span="12" v-if="channel == 'official-website' && shipmentFileInfo.salePersonalTemporaryFinallyInvoice && shipmentFileInfo.salePersonalTemporaryFinallyInvoice.length == 0" class="center-status">
712
+ <i class="el-icon-time"></i>
713
+ {{ $t('contractDetail.Temporary_final_payment_invoice_to_be_updated') }}
714
+ </el-col>
715
+ <div>
716
+ <div class="file-list" v-if="contract.contractType == 'sale'">
717
+ <div class="file-list">
718
+ <file-show
719
+ :hiddenOperation="channel == 'official-website'"
720
+ @refresh="handleRefresh"
721
+ @checked="handleChecked"
722
+ @uncheck="handleUncheck"
723
+ :file-info="
724
+ getLastFileByList(
725
+ shipmentFileInfo.saleTemporaryFinallyInvoice
726
+ )
727
+ "
728
+ />
729
+ </div>
730
+ <file-show :hiddenOperation="channel == 'official-website'" @refresh="handleRefresh"
731
+ @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item" v-for="(
732
+ item, i
733
+ ) in shipmentFileInfo.salePersonalTemporaryFinallyInvoice" :key="i" />
734
+
735
+ <contract-file-drag-upload v-show="(!shipmentFileInfo.salePersonalTemporaryFinallyInvoice || shipmentFileInfo.salePersonalTemporaryFinallyInvoice.length == 0) && channel !== 'official-website'" @upload="
736
+ handleUpload(
737
+ $event,
738
+ shipmentFileInfo.shipmentId,
739
+ 'shipment',
740
+ 'sale_personal_temporary_finally_invoice'
741
+ )
742
+ ":isShowTip="false" :uploadNameStr="$t('contractDetail.saleTemporaryFinallyInvoice')" />
592
743
  </div>
593
- <el-row v-if="contract.quoteType != 'FIXED'">
744
+ <div class="file-list" v-else>
745
+ <file-show :hiddenOperation="channel == 'official-website'" @refresh="handleRefresh"
746
+ @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item" v-for="(
747
+ item, i
748
+ ) in shipmentFileInfo.purchaseTemporaryFinallyInvoice" :key="i" />
749
+
750
+ <contract-file-drag-upload v-show="(!shipmentFileInfo.purchaseTemporaryFinallyInvoice || shipmentFileInfo.purchaseTemporaryFinallyInvoice.length == 0) && channel !== 'official-website'" @upload="
751
+ handleUpload(
752
+ $event,
753
+ shipmentFileInfo.shipmentId,
754
+ 'shipment',
755
+ 'purchase_temporary_finally_invoice'
756
+ )
757
+ ":isShowTip="false" :uploadNameStr="$t('contractDetail.saleTemporaryFinallyInvoice')" />
758
+ </div>
759
+ </div>
760
+ </el-col>
761
+
762
+ <el-col :span="24">
763
+ <div class="hr-class"></div>
764
+ </el-col>
765
+ <el-col :span="24">
766
+ <el-col :span="24">
767
+ <div style="margin-bottom:-20px">
768
+ <span
769
+ v-if="channel !== 'official-website' &&
770
+ contract.contractType == 'purchase' "
771
+ style="color: #1890ff; margin-left: 100px;cursor:pointer"
772
+ @click.stop="getShipmentPurchase(shipmentFileInfo)"
773
+ >
774
+ {{
775
+ shipmentPurchaseAmountMessage}}
776
+ </span>
777
+ <el-popover
778
+ v-if="channel !== 'official-website' &&
779
+ contract.contractType == 'purchase' "
780
+ placement="top-start"
781
+ title=""
782
+ width="380"
783
+ trigger="hover"
784
+ :content="$t('contractDetail.final_payment_warning')">
785
+ <i class="el-icon-question" slot="reference" style="color:#c2c4c5;"/>
786
+ </el-popover>
787
+ </div>
788
+ <el-col :span="12" :getNewInfo="getNewInfo">
789
+ <div style="display:flex;align-items:center">
790
+ <ContentTitle :contentTitleProp="{
791
+ bgButton: $t('contractDetail.finallyInvoice'),
792
+ bgTime: contract.contractType == 'sale' ? getNewInfo && timeFormate(getNewInfo) : shipmentFileInfo.purchaseFinallyInvoice && timeFormate(shipmentFileInfo.purchaseFinallyInvoice),
793
+ bgcolor: shipProgressInfo.bgcolor
794
+ }"></ContentTitle>
795
+ <span
796
+ v-if="
797
+ channel !== 'official-website' && contract.contractType == 'purchase' && shipmentFileInfo.purchaseFinallyInvoice && shipmentFileInfo.purchaseFinallyInvoice.length > 0"
798
+ style="color: #1890ff; cursor: pointer; margin-left: 10px;font-size:14px;"
799
+ @click.stop="identifyPageBoth(shipmentFileInfo, 2)"
800
+ >{{ identify }}
801
+ </span>
802
+ </div>
803
+ <!-- <div class="sub-title"> -->
804
+ <!-- {{ $t("contractDetail.finallyInvoice") }}
805
+ <el-button
806
+ v-if="channel !== 'official-website'"
807
+ type="text"
808
+ size="small"
809
+ @click="skipInvoiceList"
810
+ >发票列表</el-button> -->
811
+ <!-- <el-button
812
+ style="color: #1890ff; cursor: pointer; margin-left: 10px"
813
+ v-if="channel !== 'official-website' &&
814
+ contract.contractType == 'purchase'"
815
+ type="text"
816
+ size="small"
817
+ @click="getShipmentPurchase(shipmentFileInfo)"
818
+ >
819
+ 点击可查看明细
820
+ </el-button> -->
821
+ <!-- </div> -->
822
+ <!-- 管理台 -->
823
+ <div v-if="channel != 'official-website'">
594
824
  <div v-if="contract.contractType == 'sale'">
595
- <el-col :span="6">
825
+ <!-- <el-col :span="12">
596
826
  <div style="margin-left: 60px">
597
- <div
598
- class="sub-title"
599
- >{{ $t("contractDetail.saleTemporaryFinallyInvoice") }}</div>
600
827
  <div class="file-list">
601
828
  <file-show
602
829
  :hiddenOperation="channel == 'official-website'"
603
830
  @refresh="handleRefresh"
604
831
  @checked="handleChecked"
605
832
  @uncheck="handleUncheck"
833
+ :selectFileListProp="selectFileList"
606
834
  :file-info="
607
835
  getLastFileByList(
608
- shipmentFileInfo.saleTemporaryFinallyInvoice
836
+ shipmentFileInfo.saleFinallyInvoice
609
837
  )
610
838
  "
611
839
  />
612
840
  </div>
613
841
  </div>
614
- </el-col>
615
- <el-col :span="18">
842
+ </el-col> -->
843
+ <!-- 尾款发票 -->
844
+ <el-col :span="12">
616
845
  <div>
617
846
  <div class="file-list">
618
847
  <file-show
@@ -620,91 +849,111 @@
620
849
  @refresh="handleRefresh"
621
850
  @checked="handleChecked"
622
851
  @uncheck="handleUncheck"
852
+ :selectFileListProp="selectFileList"
623
853
  :file-info="item"
624
854
  v-for="(
625
855
  item, i
626
- ) in shipmentFileInfo.salePersonalTemporaryFinallyInvoice"
856
+ ) in getNewInfo"
627
857
  :key="i"
628
858
  />
629
859
  <contract-file-drag-upload
630
- v-if="channel !== 'official-website'"
860
+ v-show="(!getNewInfo) && channel !== 'official-website'"
631
861
  @upload="
632
862
  handleUpload(
633
863
  $event,
634
864
  shipmentFileInfo.shipmentId,
635
865
  'shipment',
636
- 'sale_personal_temporary_finally_invoice'
866
+ 'sale_personal_finally_invoice'
637
867
  )
638
868
  "
639
869
  :isShowTip="false"
870
+ :uploadNameStr="$t('contractDetail.finallyInvoice')"
640
871
  />
641
872
  </div>
642
873
  </div>
643
874
  </el-col>
644
875
  </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>
876
+ <!-- purchase -->
877
+ <div v-else>
878
+ <el-col :span="12">
879
+ <div style="margin-left: 60px">
880
+ <div class="file-list">
881
+ <file-show
882
+ :hiddenOperation="channel == 'official-website'"
883
+ @refresh="handleRefresh"
884
+ @checked="handleChecked"
885
+ @uncheck="handleUncheck"
886
+ :selectFileListProp="selectFileList"
887
+ :file-info="item"
888
+ v-for="(
889
+ item, i
890
+ ) in shipmentFileInfo.purchaseFinallyInvoice"
891
+ :key="i"
892
+ />
893
+ <div>
894
+ <el-button
895
+ style="margin-top: 10px"
896
+ type="primary"
897
+ size="mini"
898
+ @click="
899
+ uploadFinalInvoice(
900
+ 'finally',
901
+ shipmentFileInfo.shipmentId
902
+ )
903
+ "
904
+ >{{ $t('contractDetail.uploadPurchaseInvoice') }}</el-button>
905
+ </div>
906
+ </div>
907
+ </div>
908
+ </el-col>
909
+ </div>
910
+ </div>
911
+ <div v-else>
912
+ <!-- 买家端 -->
913
+ <el-col>
657
914
  <div class="file-list">
658
915
  <file-show
659
916
  :hiddenOperation="channel == 'official-website'"
660
917
  @refresh="handleRefresh"
661
918
  @checked="handleChecked"
662
919
  @uncheck="handleUncheck"
920
+ :selectFileListProp="selectFileList"
663
921
  :file-info="item"
664
922
  v-for="(
665
923
  item, i
666
- ) in shipmentFileInfo.purchaseTemporaryFinallyInvoice"
924
+ ) in shipmentFileInfo.saleFinallyInvoice"
667
925
  :key="i"
668
926
  />
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
927
  </div>
705
928
  </el-col>
706
- <el-col :span="18">
707
- <div>
929
+ <!-- <el-col :span="12" class="center-status">
930
+ <div>
931
+ <div v-if="!shipmentItemData.balanceInvoiceFullyPaidFlag">
932
+ <i class="el-icon-time"></i>
933
+ <span style="color:#f00">{{ $t('contractDetail.Final_payment_unpaid') }}</span>
934
+ </div>
935
+ <div v-if="!shipmentFileInfo.waterBill || shipmentFileInfo.waterBill && shipmentFileInfo.waterBill.length == 0">支付凭证待提供</div>
936
+ </div>
937
+ </el-col> -->
938
+ </div>
939
+ </el-col>
940
+ <el-col :span="12">
941
+ <!-- 支付凭证 -->
942
+ <ContentTitle :contentTitleProp="{
943
+ bgButton: $t('contractDetail.Final_payment_voucher'),
944
+ bgTime: shipmentFileInfo.waterBill && timeFormate(shipmentFileInfo.waterBill),
945
+ bgcolor: getGoodsProgressInfo.bgcolor,
946
+ successFlag: true
947
+ }"></ContentTitle>
948
+ <div v-if="shipmentFileInfo.balanceInvoiceFullyPaidFlag">
949
+ <i class="el-icon-success success"></i>
950
+ <span style="color:#67C23A">{{ $t('contractDetail.balancePaid_true') }}</span>
951
+ </div>
952
+ <div v-else>
953
+ <i class="el-icon-time"></i>
954
+ <span style="color:#f00">{{ $t('contractDetail.Final_payment_unpaid') }}</span>
955
+ </div>
956
+
708
957
  <div class="file-list">
709
958
  <file-show
710
959
  :hiddenOperation="channel == 'official-website'"
@@ -712,222 +961,110 @@
712
961
  @checked="handleChecked"
713
962
  @uncheck="handleUncheck"
714
963
  :file-info="item"
715
- v-for="(
716
- item, i
717
- ) in shipmentFileInfo.salePersonalFinallyInvoice"
964
+ v-for="(item, i) in shipmentFileInfo.waterBill"
718
965
  :key="i"
719
966
  />
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
967
  </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>
968
+ <div v-if="!shipmentFileInfo.waterBill || shipmentFileInfo.waterBill.length == 0" class="center-status-block" style="align-items: flex-start">
969
+ <div>
970
+ <i class="el-icon-time"></i>
971
+ {{ $t('contractDetail.deposit_unreceipt') }}
972
+ </div>
772
973
  </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>
974
+ </el-col>
975
+ </el-col>
860
976
  <div>
861
- <div class="sub-title">{{ $t("contractDetail.otherShipmentFile") }}</div>
862
- <div class="file-list" v-if="contract.contractType == 'sale'">
863
- <file-show
864
- :hiddenOperation="channel == 'official-website'"
865
- @refresh="handleRefresh"
866
- @checked="handleChecked"
867
- @uncheck="handleUncheck"
868
- :file-info="item"
869
- v-for="(item, i) in shipmentFileInfo.saleShipmentOther"
870
- :key="i"
871
- />
872
- <contract-file-drag-upload
873
- v-if="channel !== 'official-website'"
874
- @upload="
875
- handleUpload(
876
- $event,
877
- shipmentFileInfo.shipmentId,
878
- 'shipment',
879
- 'sale_shipment_other'
880
- )
881
- "
882
- :isShowTip="false"
883
- />
884
- </div>
885
- <div v-else class="file-list">
886
- <file-show
887
- :hiddenOperation="channel == 'official-website'"
888
- @refresh="handleRefresh"
889
- @checked="handleChecked"
890
- @uncheck="handleUncheck"
891
- :file-info="item"
892
- v-for="(
893
- item, i
894
- ) in shipmentFileInfo.purchaseShipmentOther"
895
- :key="i"
896
- />
897
- <contract-file-drag-upload
898
- v-if="channel !== 'official-website'"
899
- @upload="
900
- handleUpload(
901
- $event,
902
- shipmentFileInfo.shipmentId,
903
- 'shipment',
904
- 'purchase_shipment_other'
905
- )
906
- "
907
- :isShowTip="false"
908
- />
909
- </div>
910
977
  </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">
978
+ </el-col>
979
+ <el-col :span="24">
980
+ <div class="hr-class"></div>
981
+ </el-col>
982
+
983
+ <el-col :span="24">
984
+ <ContentTitle :contentTitleProp="{
985
+ bgButton: $t('contractDetail.otherFile'),
986
+ bgTime: contract.contractType == 'sale' ? shipmentFileInfo.saleShipmentOther && timeFormate(shipmentFileInfo.saleShipmentOther) : shipmentFileInfo.purchaseShipmentOther && timeFormate(shipmentFileInfo.purchaseShipmentOther),
987
+ bgcolor: shipProgressInfo.bgcolor
988
+ }"></ContentTitle>
989
+ </el-col>
990
+ <el-col :span="24" v-if="contract.contractType == 'sale'">
991
+ <div class="file-list">
992
+ <file-show @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item"
993
+ v-for="(item, i) in shipmentFileInfo.saleShipmentOther" :key="i" />
994
+ <contract-file-drag-upload @upload="
995
+ handleUpload(
996
+ $event,
997
+ shipmentFileInfo.shipmentId,
998
+ 'shipment',
999
+ 'sale_shipment_other'
1000
+ )
1001
+ " :isShowTip="false" :uploadNameStr="$t('contractDetail.otherFile')" />
1002
+ </div>
1003
+ </el-col>
1004
+ <el-col :span="24" v-else>
1005
+ <div class="file-list">
1006
+ <file-show @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item"
1007
+ :hiddenOperation="channel == 'official-website'"
1008
+ v-for="(
1009
+ item, i
1010
+ ) in shipmentFileInfo.purchaseShipmentOther" :key="i" />
1011
+ <contract-file-drag-upload @upload="
1012
+ handleUpload(
1013
+ $event,
1014
+ shipmentFileInfo.shipmentId,
1015
+ 'shipment',
1016
+ 'purchase_shipment_other'
1017
+ )"
1018
+ :isShowTip="false"
1019
+ :uploadNameStr="$t('contractDetail.otherFile')" />
1020
+ </div>
1021
+ </el-col>
1022
+ </div>
1023
+ </template>
1024
+ </SectionSlot>
1025
+ </div>
1026
+ </div>
1027
+
1028
+ <!-- 收货 -->
1029
+ <div>
1030
+ <BillOfLadingNoTab
1031
+ :contractFileInfo="contractFileInfo"
1032
+ @changeShipBillNo="changeShipBillNo"
1033
+ :progressInfo="getGoodsProgressInfo"
1034
+ :shipBillNoProp="shipBillNo"
1035
+ ></BillOfLadingNoTab>
1036
+ <SectionSlot
1037
+ :infoPro="getGoodsProgressInfo" v-for="(
1038
+ shipmentFileInfo, shipmentIndex
1039
+ ) in contractFileInfo.shipmentFileInfoList" :key="shipmentIndex" v-if="shipmentIndex == shipBillNo"
1040
+ >
1041
+ <template v-slot:header>
1042
+ <div>
1043
+ <ProgressDetail :infoPro="getGoodsProgressInfo"></ProgressDetail>
1044
+ </div>
1045
+ </template>
1046
+ <template v-slot:content>
1047
+ <div class="content-root">
1048
+ <div>
1049
+ <!-- <div v-if="channel !== 'official-website'" style="color: #1890ff">
918
1050
  {{
919
1051
  contract.contractType == "sale"
920
1052
  ? "尾款收款"
921
1053
  : $t("contractDetail.Final_payment")
922
1054
  }}
923
1055
  </div>
924
- <div v-else class="sub-title">{{ $t("contractDetail.Final_payment") }}</div>
925
- <el-row>
926
- <el-col :span="8">
1056
+ <div v-else class="sub-title">{{ $t("contractDetail.Final_payment") }}</div> -->
1057
+ <!-- 尾款水单 -->
1058
+ <!-- <el-row>
1059
+ <el-col :span="24">
927
1060
  <div>
928
- <div class="sub-title">{{ $t("contractDetail.finalPaymentMemo") }}</div>
1061
+ <ContentTitle :contentTitleProp="{
1062
+ bgButton: $t('contractDetail.finalPaymentMemo'),
1063
+ bgTime: shipmentFileInfo.waterBill && timeFormate(shipmentFileInfo.waterBill),
1064
+ bgcolor: getGoodsProgressInfo.bgcolor
1065
+ }"></ContentTitle>
929
1066
 
930
- <div class="file-list">
1067
+ <div class="file-list" v-if="shipmentFileInfo.waterBill && shipmentFileInfo.waterBill.length">
931
1068
  <file-show
932
1069
  :hiddenOperation="channel == 'official-website'"
933
1070
  @refresh="handleRefresh"
@@ -938,67 +1075,22 @@
938
1075
  :key="i"
939
1076
  />
940
1077
  </div>
941
- </div>
942
- </el-col>
943
- <!-- <el-col :span="16">
944
- <div v-if="contract.contractType == 'sale'">
945
- <div class="file-list">
946
- <file-show
947
- :hiddenOperation="channel == 'official-website'"
948
- @refresh="handleRefresh"
949
- @checked="handleChecked"
950
- @uncheck="handleUncheck"
951
- :file-info="item"
952
- v-for="(
953
- item, i
954
- ) in shipmentFileInfo.salePersonalWaterBill"
955
- :key="i"
956
- />
957
- <contract-file-drag-upload
958
- @upload="
959
- handleUpload(
960
- $event,
961
- shipmentFileInfo.shipmentId,
962
- 'shipment',
963
- 'sale_personal_waterBill'
964
- )
965
- "
966
- :isShowTip="false"
967
- />
968
- </div>
969
- </div>
970
- <div v-else>
971
- <div class="file-list">
972
- <file-show
973
- :hiddenOperation="channel == 'official-website'"
974
- @refresh="handleRefresh"
975
- @checked="handleChecked"
976
- @uncheck="handleUncheck"
977
- :file-info="item"
978
- v-for="(
979
- item, i
980
- ) in shipmentFileInfo.purchasePersonalWaterBill"
981
- :key="i"
982
- />
983
- <contract-file-drag-upload
984
- @upload="
985
- handleUpload(
986
- $event,
987
- shipmentFileInfo.shipmentId,
988
- 'shipment',
989
- 'purchase_personal_waterBill'
990
- )
991
- "
992
- :isShowTip="false"
993
- />
1078
+ <div v-else class="center-status">
1079
+ <i class="el-icon-time"></i>
1080
+ 暂无文件
994
1081
  </div>
995
1082
  </div>
996
- </el-col>-->
997
- </el-row>
998
- <el-row>
1083
+ </el-col>
1084
+ </el-row> -->
1085
+ <!-- 汇款凭证 -->
1086
+ <!-- <el-row>
999
1087
  <div>
1000
- <div class="sub-title">{{ $t("contractDetail.swift") }}</div>
1001
- <div class="file-list">
1088
+ <ContentTitle :contentTitleProp="{
1089
+ bgButton: $t('contractDetail.swift'),
1090
+ bgTime: shipmentFileInfo.voucher && timeFormate(shipmentFileInfo.voucher),
1091
+ bgcolor: getGoodsProgressInfo.bgcolor
1092
+ }"></ContentTitle>
1093
+ <div class="file-list" v-if="shipmentFileInfo.voucher && shipmentFileInfo.voucher.length">
1002
1094
  <file-show
1003
1095
  :hiddenOperation="channel == 'official-website'"
1004
1096
  @refresh="handleRefresh"
@@ -1009,39 +1101,86 @@
1009
1101
  :key="i"
1010
1102
  />
1011
1103
  </div>
1104
+ <div v-else class="center-status">
1105
+ <i class="el-icon-time"></i>
1106
+ 暂无文件
1107
+ </div>
1012
1108
  </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
-
1109
+ </el-row> -->
1110
+ <!-- 提货凭证 -->
1111
+ <ContentTitle :contentTitleProp="{
1112
+ bgButton: $t('contractDetail.tip7'),
1113
+ bgTime: shipmentFileInfo.deliveryReceipt && timeFormate(shipmentFileInfo.deliveryReceipt),
1114
+ bgcolor: getGoodsProgressInfo.bgcolor
1115
+ }"></ContentTitle>
1116
+ <el-col :span="24">
1033
1117
  <div class="file-list">
1034
- <file-show
1118
+ <file-show @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck"
1035
1119
  :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
- />
1120
+ :selectFileListProp="selectFileList"
1121
+ :file-info="item" v-for="(item, i) in shipmentFileInfo.deliveryReceipt" :key="i" />
1122
+ <!-- v-if="shipmentItemData.shipmentPercentage > 0" -->
1123
+ <!-- todo: 上传提货凭证 -->
1124
+ <contract-file-drag-upload
1125
+ v-show="(!shipmentFileInfo.deliveryReceipt || shipmentFileInfo.deliveryReceipt.length == 0) && channel !== 'official-website'"
1126
+ @upload="
1127
+ handleUpload(
1128
+ $event,
1129
+ shipmentFileInfo.shipmentId,
1130
+ 'shipment',
1131
+ 'shipment_delivery_receipt'
1132
+ )
1133
+ " :isShowTip="false"
1134
+ :uploadNameStr="$t('contractDetail.tip7')"
1135
+ />
1136
+ </div>
1137
+ <div v-if="!shipmentFileInfo.deliveryReceipt || shipmentFileInfo.deliveryReceipt.length == 0 && channel == 'official-website'" class="center-status">
1138
+ <i class="el-icon-time"></i>
1139
+ {{$t('contractDetail.no_files')}}
1140
+ </div>
1141
+ </el-col>
1142
+ </div>
1143
+ </div>
1144
+ </template>
1145
+ </SectionSlot>
1146
+ </div>
1147
+ <!-- 索赔 -->
1148
+ <div v-if="contractFileInfo.claimCreateFlag">
1149
+ <BillOfLadingNoTab
1150
+ :contractFileInfo="contractFileInfo"
1151
+ @changeShipBillNo="changeShipBillNo"
1152
+ :progressInfo="shipProgressInfo"
1153
+ :shipBillNoProp="shipBillNo"
1154
+ ></BillOfLadingNoTab>
1155
+ <SectionSlot
1156
+ :infoPro="claimProgressInfo"
1157
+ v-for="(
1158
+ shipmentFileInfo, shipmentIndex
1159
+ ) in contractFileInfo.shipmentFileInfoList" :key="shipmentIndex"
1160
+ v-if="shipmentIndex == shipBillNo"
1161
+ >
1162
+ <template v-slot:header>
1163
+ <div>
1164
+ <ProgressDetail :infoPro="claimProgressInfo"></ProgressDetail>
1165
+ </div>
1166
+ </template>
1167
+ <template v-slot:content>
1168
+ <div class="content-root">
1169
+ <div>
1170
+ <ContentTitle :contentTitleProp="{
1171
+ bgButton: !buyerFlag
1172
+ ? $t('contractDetail.Credit_Note')
1173
+ : $t('contractDetail.Debit_Note'),
1174
+ bgTime: claimFileInfoCom && timeFormate(claimFileInfoCom),
1175
+ bgcolor: claimProgressInfo.bgcolor
1176
+ }"></ContentTitle>
1177
+ <el-col :span="24">
1178
+ <div class="file-list" v-if="claimFileInfoCom">
1179
+ <file-show @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck"
1180
+ :selectFileListProp="selectFileList"
1181
+ :hiddenOperation="channel == 'official-website'"
1182
+ :file-info="item" v-for="(item, i) in claimFileInfoCom" :key="i" />
1043
1183
  <!-- <contract-file-drag-upload
1044
- v-if="channel !== 'official-website'"
1045
1184
  @upload="
1046
1185
  handleUpload(
1047
1186
  $event,
@@ -1051,80 +1190,132 @@
1051
1190
  )
1052
1191
  "
1053
1192
  :isShowTip="false"
1054
- />-->
1193
+ /> -->
1055
1194
  </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>
1195
+ <div v-else class="center-status">
1196
+ <i class="el-icon-time"></i>
1197
+ {{ $t('contractDetail.no_files') }}
1198
+ </div>
1199
+ </el-col>
1200
+ </div>
1201
+ </div>
1202
+ </template>
1203
+ </SectionSlot>
1204
+ </div>
1205
+ <!-- cndn -->
1206
+ <div style="margin-top:50px" v-if="CNbillsCom.length || DNbillsCom.length">
1207
+ <SectionSlot
1208
+ :infoPro="cndnProgressInfo"
1209
+ >
1210
+ <template v-slot:header>
1211
+ <div>
1212
+ <ProgressDetail :infoPro="cndnProgressInfo"></ProgressDetail>
1213
+ </div>
1214
+ </template>
1215
+ <template v-slot:content>
1216
+ <div class="content-root">
1217
+ <div v-if="DNbillsCom.length">
1218
+ <ContentTitle
1219
+ :contentTitleProp="{
1220
+ bgButton: $t('contractDetail.Debit_Note'),
1221
+ bgTime: DNbillsCom.length && timeFormate(DNbillsCom),
1222
+ bgcolor: cndnProgressInfo.bgcolor
1223
+ }"></ContentTitle>
1224
+ <el-col :span="24">
1225
+ <div class="file-list" v-if="DNbillsCom.length">
1226
+ <file-show @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck"
1227
+ :selectFileListProp="selectFileList"
1228
+ :hiddenOperation="true"
1229
+ :file-info="item" v-for="(item, i) in DNbillsCom" :key="i" />
1230
+ <!-- <contract-file-drag-upload
1231
+ @upload="
1232
+ handleUpload(
1233
+ $event,
1234
+ shipmentFileInfo.shipmentId,
1235
+ 'shipment',
1236
+ 'shipment_delivery_receipt'
1237
+ )
1238
+ "
1239
+ :isShowTip="false"
1240
+ /> -->
1241
+ </div>
1242
+ <!-- <div v-else class="center-status">
1243
+ <i class="el-icon-time"></i>
1244
+ {{ $t('contractDetail.no_files') }}
1245
+ </div> -->
1246
+ </el-col>
1247
+ </div>
1248
+ <div v-if="CNbillsCom.length">
1249
+ <ContentTitle
1250
+ :contentTitleProp="{
1251
+ bgButton: $t('contractDetail.Credit_Note'),
1252
+ bgTime: CNbillsCom.length && timeFormate(CNbillsCom),
1253
+ bgcolor: cndnProgressInfo.bgcolor
1254
+ }"></ContentTitle>
1255
+ <el-col :span="24">
1256
+ <div class="file-list" v-if="CNbillsCom.length">
1257
+ <file-show @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck"
1258
+ :selectFileListProp="selectFileList"
1259
+ :hiddenOperation="true"
1260
+ :file-info="item" v-for="(item, i) in CNbillsCom" :key="i" />
1261
+ <!-- <contract-file-drag-upload
1262
+ @upload="
1263
+ handleUpload(
1264
+ $event,
1265
+ shipmentFileInfo.shipmentId,
1266
+ 'shipment',
1267
+ 'shipment_delivery_receipt'
1268
+ )
1269
+ "
1270
+ :isShowTip="false"
1271
+ /> -->
1272
+ </div>
1273
+ <!-- <div v-else class="center-status">
1274
+ <i class="el-icon-time"></i>
1275
+ {{ $t('contractDetail.no_files') }}
1276
+ </div> -->
1277
+ </el-col>
1278
+ </div>
1279
+ </div>
1280
+ </template>
1281
+ </SectionSlot>
1282
+ </div>
1088
1283
 
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
1284
  <deposit-invoice ref="depositInvoice"></deposit-invoice>
1098
1285
 
1099
1286
  <gen-shipment ref="genShipment" @refresh="handleRefresh" />
1100
1287
 
1101
- <purchase-invoice-upload ref="purchaseInvoice" @refresh="handleRefresh"></purchase-invoice-upload>
1288
+ <purchase-invoice-upload ref="purchaseInvoice"
1289
+ :companyId="contract.contractId"
1290
+ @refresh="handleRefresh"
1291
+ :purchaseBalanceMoneyProp="purchaseBalanceMoney"
1292
+ :getShipmentPurchaseFun="getShipmentPurchase"
1293
+ ></purchase-invoice-upload>
1102
1294
  <!-- 多个买家弹窗 -->
1103
- <el-dialog title="请先选择收货买家" :visible.sync="dialogVisible" width="30%">
1104
- <div>请在下方选择一个您需要发货的买家</div>
1295
+ <el-dialog :title="$t('contractDetail.Please_select_the_receiving_buyer_first')" :visible.sync="dialogVisible" width="30%">
1296
+ <div>{{ $t('contractDetail.Please_select_a_buyer_below_who_you_need_to_ship_to') }}</div>
1105
1297
  <div>
1106
1298
  <el-radio-group v-model="selectRadio">
1107
- <el-radio
1108
- :label="key"
1109
- v-for="(purchaseBuyerListItem, key) in purchaseBuyerList"
1110
- :key="key"
1111
- >
1299
+ <el-radio :label="key" v-for="(purchaseBuyerListItem, key) in purchaseBuyerList" :key="key">
1112
1300
  {{ purchaseBuyerListItem.buyerUserInfo.companyName }} ({{
1113
- purchaseBuyerListItem.contractNo
1114
- }}) {{ purchaseBuyerListItem.buyerUserInfo.firstName }}
1301
+ purchaseBuyerListItem.contractNo
1302
+ }}) {{ purchaseBuyerListItem.buyerUserInfo.firstName }}
1115
1303
  {{ purchaseBuyerListItem.buyerUserInfo.lastName }}
1116
1304
  </el-radio>
1117
1305
  </el-radio-group>
1118
1306
  </div>
1119
1307
 
1120
1308
  <span slot="footer" class="dialog-footer">
1121
- <el-button @click="dialogVisible = false">取 消</el-button>
1122
- <el-button type="primary" @click="addShipment">确 定</el-button>
1309
+ <el-button @click="dialogVisible = false">{{ $t('contractDetail.cancel') }}</el-button>
1310
+ <el-button type="primary" @click="addShipment">{{ $t('contractDetail.confirm') }}</el-button>
1123
1311
  </span>
1124
1312
  </el-dialog>
1125
1313
  <shipment-add ref="shipmentGen" @refresh="handleRefresh" />
1126
1314
 
1127
- <shipment-purchase-amount ref="shipmentPurchaseAmount"></shipment-purchase-amount>
1315
+ <shipment-purchase-amount
1316
+ ref="shipmentPurchaseAmount"
1317
+ :getContractFileInfoCallback="getContractFileInfoCallback"
1318
+ ></shipment-purchase-amount>
1128
1319
  </div>
1129
1320
  </template>
1130
1321
 
@@ -1143,8 +1334,11 @@ import { batchAsZip } from '../../../utils/zip';
1143
1334
  import {
1144
1335
  getBizContract,
1145
1336
  updateBizContract,
1337
+ withdrawSignContract,
1146
1338
  signContract,
1339
+ shipmentConfirmDraftBl
1147
1340
  } from '../../../api/biz/bizContract';
1341
+
1148
1342
  import DepositInvoice from '../bizContract/depositInvoice.vue';
1149
1343
  import { getDepositInvoice, listBizInvoice } from '../../../api/biz/bizInvoice';
1150
1344
  import GenShipment from '../bizShipment/add.vue';
@@ -1159,6 +1353,16 @@ import ShipmentAdd from '../bizShipment/add.vue';
1159
1353
  import ShipmentPurchaseAmount from '../contractTracing/shipmentPurchaseAmount.vue';
1160
1354
  import { encryptId } from '../../../utils/index.js';
1161
1355
  import { Loading } from 'element-ui';
1356
+ import Progress from "./contractFile/Progress.vue";
1357
+ import ProgressDetail from "./contractFile/ProgressDetail.vue";
1358
+ import SectionSlot from "./contractFile/SectionSlot.vue";
1359
+ import ContentTitle from './contractFile/ContentTitle.vue';
1360
+ import IMGPreviewCheckBox from './contractFile/IMGPreviewCheckBox.vue'
1361
+ import BillOfLadingNoTab from './contractFile/BillOfLadingNoTab.vue'
1362
+ import ShowAndHide from './contractFile/ShowAndHide.vue'
1363
+
1364
+ let handleGenerateflag = false;
1365
+ let handleGenerateflag1 = false;
1162
1366
 
1163
1367
  export default {
1164
1368
  name: 'ContractFile',
@@ -1172,6 +1376,13 @@ export default {
1172
1376
  FileShowClaim,
1173
1377
  ShipmentAdd,
1174
1378
  ShipmentPurchaseAmount,
1379
+ Progress,
1380
+ SectionSlot,
1381
+ ProgressDetail,
1382
+ ContentTitle,
1383
+ IMGPreviewCheckBox,
1384
+ BillOfLadingNoTab,
1385
+ ShowAndHide
1175
1386
  },
1176
1387
  props: {
1177
1388
  // 文件信息
@@ -1183,16 +1394,66 @@ export default {
1183
1394
  },
1184
1395
  channel: {
1185
1396
  type: String,
1186
- default: '',
1397
+ default: 'official-website123',
1187
1398
  },
1188
1399
  buyerFlag: {
1189
1400
  type: Boolean,
1190
1401
  default: true,
1191
1402
  },
1403
+ selectFileListProp: {
1404
+ type: Array,
1405
+ default: () => {
1406
+ return [];
1407
+ },
1408
+ },
1192
1409
  },
1193
1410
  data() {
1194
1411
  return {
1195
- identify: '识别',
1412
+ shipmentItemData: {},
1413
+ shipBillNo: 0,
1414
+ goodsBillNo: 0,
1415
+ claimBillNo: 0,
1416
+ contractProgressInfo: {
1417
+ text: this.$t('contractDetail.contract'),
1418
+ rate: 0,
1419
+ img: 'https://s3.cdn.doctorscrap.com/dev/user/image_9/805524d45f964ad0b3f51437d3b5750e.png',
1420
+ bgcolor: '#FBB040',
1421
+ textArr:[],
1422
+ hidden: false
1423
+ },
1424
+ shipProgressInfo: {
1425
+ text: this.$t('contractDetail.shipment'),
1426
+ rate: 0,
1427
+ img: 'https://s3.cdn.doctorscrap.com/dev/user/image_9/8517dbf0444542d5bf100279231c9597.png',
1428
+ bgcolor: '#54B8FF',
1429
+ textArr:[this.$t('contractDetail.Waiting_for_the_seller_to_ship')],
1430
+ hidden: false
1431
+ },
1432
+ getGoodsProgressInfo: {
1433
+ text: this.$t('contractDetail.receiving'),
1434
+ rate: 0,
1435
+ img: 'https://s3.cdn.doctorscrap.com/dev/user/image_9/a43ef25e953747efa9b88d3d9bbe674f.png',
1436
+ bgcolor: '#7CCF48',
1437
+ textArr:[],
1438
+ hidden: false
1439
+ },
1440
+ claimProgressInfo: {
1441
+ text: this.$t('contractDetail.claim'),
1442
+ rate: 0,
1443
+ img: 'https://s3.cdn.doctorscrap.com/dev/user/image_9/b427331405604eeb8ec368130f00c5e6.png',
1444
+ bgcolor: '#adadad',
1445
+ textArr:[],
1446
+ hidden: false
1447
+ },
1448
+ cndnProgressInfo: {
1449
+ text: this.$t('contractDetail.cndn'),
1450
+ rate: 100,
1451
+ img: 'https://s3.cdn.doctorscrap.com/dev/user/image_9/b427331405604eeb8ec368130f00c5e6.png',
1452
+ bgcolor: '#c47afc',
1453
+ textArr:[],
1454
+ hidden: true
1455
+ },
1456
+ identify: this.$t('contractDetail.identify'),
1196
1457
  selectRadio: 0,
1197
1458
  purchaseBuyerList: [],
1198
1459
  // purchaseBuyerList1: [
@@ -1260,7 +1521,6 @@ export default {
1260
1521
  // 表单校验
1261
1522
  rules: {},
1262
1523
  lintId: null,
1263
- selectFileList: [],
1264
1524
  contractId: null,
1265
1525
  //合同文件
1266
1526
  contractFileInfo: {
@@ -1268,9 +1528,17 @@ export default {
1268
1528
  },
1269
1529
  //参考采购价
1270
1530
  shipmentPurchaseAmountMessage: '',
1531
+ loadingInstance: null,
1532
+ purchaseBalanceMoney: null
1271
1533
  };
1272
1534
  },
1273
1535
  created() {
1536
+ this.loadingInstance = Loading.service({
1537
+ text: this.$t('contractDetail.loading'),
1538
+ spinner: 'el-icon-loading',
1539
+ background: 'rgba(0, 0, 0, 0.7)',
1540
+ });
1541
+
1274
1542
  const contractId = this.$route.params && this.$route.params.contractId;
1275
1543
  if (contractId) {
1276
1544
  this.linkId = contractId;
@@ -1279,31 +1547,53 @@ export default {
1279
1547
  this.queryParams.linkId = contractId;
1280
1548
  }
1281
1549
  },
1282
- mounted() {},
1550
+ mounted() { },
1283
1551
  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
- });
1552
+ /**
1553
+ * @description:
1554
+ * @param {*} info
1555
+ * @return {*}
1556
+ */
1557
+ timeFormate(info) {
1558
+ if(info.length > 0 && info && info[0].createTime) {
1559
+ return this.$moment.utc(info[0].createTime).local().format('YYYY-MM-DD HH:mm');
1560
+ } else {
1561
+ return '';
1293
1562
  }
1294
1563
  },
1564
+
1565
+ allSelectContainerPackingPhoto(containerId) {
1566
+ this.$refs['container_packing_photo_' + containerId][0].checkAll1()
1567
+ },
1568
+ cancelContainerPackingPhoto(containerId) {
1569
+ this.$refs['container_packing_photo_' + containerId][0].cancelAll1()
1570
+ },
1571
+
1572
+ changeShipBillNo(index) {
1573
+ this.shipBillNo = index
1574
+ this.activeName = index
1575
+ this.setRate(index)
1576
+ },
1577
+ changeGoodsBillNo(index) {
1578
+ this.goodsBillNo = index
1579
+ },
1580
+ changeClaimBillNo(index) {
1581
+ this.claimBillNo = index
1582
+ },
1295
1583
  getShipmentPurchase(shipmentFileInfo) {
1296
1584
  this.$refs.shipmentPurchaseAmount.handleShow(shipmentFileInfo.shipmentId);
1297
1585
  },
1298
1586
  identifyPageBoth(shipmentFileInfo, type) {
1299
1587
  // 正式 purchaseFinallyInvoice
1300
1588
  if (type == 2) {
1301
- if (shipmentFileInfo?.purchaseFinallyInvoice[0]?.url) {
1589
+ if (shipmentFileInfo?.purchaseFinallyInvoice && shipmentFileInfo?.purchaseFinallyInvoice[0]?.url) {
1302
1590
  this.identifyPage(
1303
1591
  shipmentFileInfo?.purchaseFinallyInvoice[0]?.url,
1304
1592
  shipmentFileInfo && shipmentFileInfo.shipmentId,
1305
1593
  'final_invoice'
1306
1594
  );
1595
+ } else {
1596
+ return this.$message.warning(this.$t('contractDetail.no_files'));
1307
1597
  }
1308
1598
  } else {
1309
1599
  // 临时 purchaseTemporaryFinallyInvoice
@@ -1333,7 +1623,7 @@ export default {
1333
1623
  }
1334
1624
 
1335
1625
  if (!url) {
1336
- return this.$message.error('暂无文件');
1626
+ return this.$message.error(this.$t('contractDetail.no_files'));
1337
1627
  }
1338
1628
 
1339
1629
  if (type == 'draft_bill') {
@@ -1386,23 +1676,23 @@ export default {
1386
1676
  },
1387
1677
 
1388
1678
  /**
1389
- * @description: 添加货运
1679
+ * @description: 添加货运todo
1390
1680
  * @return {*}
1391
1681
  */
1392
1682
  addShipment() {
1393
1683
  const purchaseBuyerInfo = this.purchaseBuyerList[this.selectRadio];
1394
1684
  let timer = Date.now();
1395
1685
  addBizShipmentPurchase({
1396
- bookingNo: 'bookingNo-'+ timer,
1397
- billOfLadingNo: 'billOfLadingNo-' + timer,
1686
+ bookingNo: 'bookingNo-' + timer,
1687
+ billOfLadingNo: `Refer BL ${this.contract.contractNo}-${(this.contractFileInfo?.shipmentFileInfoList?.length || 0) + 1}`,
1398
1688
  saleContractId: purchaseBuyerInfo.contractId,
1399
1689
  purchaseContractId: this.contract.contractId,
1400
- containerList:[{
1401
- containerNo:'containerNo-1'
1690
+ containerList: [{
1691
+ containerNo: 'containerNo-1'
1402
1692
  }]
1403
1693
  }).then((res) => {
1404
1694
  if (res.code === 200) {
1405
- this.$modal.msgSuccess('添加成功');
1695
+ this.$modal.msgSuccess(this.$t('contractDetail.add_success'));
1406
1696
  this.handleRefresh();
1407
1697
  }
1408
1698
  });
@@ -1453,21 +1743,41 @@ export default {
1453
1743
 
1454
1744
  // 将 <textarea> 元素删除
1455
1745
  document.body.removeChild(textArea);
1456
- this.$modal.msgSuccess('已复制到剪切板');
1746
+ this.$modal.msgSuccess(this.$t('contractDetail.has_copy'));
1457
1747
  },
1458
1748
  //撤回回签
1459
1749
  counterSign() {
1460
1750
  //如果是回签合同 保留原合同状态
1461
- updateBizContract({
1751
+ withdrawSignContract({
1462
1752
  contractId: this.contractId,
1463
- contractStatus:
1464
- this.contract.beforeContractStatus || this.contract.contractStatus,
1753
+ // contractStatus:
1754
+ // this.contract.beforeContractStatus || this.contract.contractStatus,
1755
+ }).then((res) => {
1756
+ if(res.code == 200) {
1757
+ this.$modal.msgSuccess(this.$t('contractDetail.withdraw_sign_success'));
1758
+ this.handleRefresh();
1759
+ }
1760
+ });
1761
+ },
1762
+
1763
+ //确认提单草稿成功
1764
+ shipmentConfirmDraftBlFun() {
1765
+ shipmentConfirmDraftBl({
1766
+ shipmentId: this.shipmentItemData.shipmentId,
1465
1767
  }).then((res) => {
1466
- this.$modal.msgSuccess('撤回回签成功');
1768
+ if(res.code == 200) {
1769
+ this.$modal.msgSuccess(this.$t('contractDetail.draftBillOfLading_confirm_success'));
1770
+ this.handleRefresh();
1771
+ }
1467
1772
  });
1468
1773
  },
1469
1774
  //生船运按钮操作
1470
1775
  handleGenerate() {
1776
+ if(handleGenerateflag) {
1777
+ return;
1778
+ }
1779
+ handleGenerateflag = true;
1780
+
1471
1781
  listBizInvoice({
1472
1782
  contractId: this.contractId,
1473
1783
  invoiceType: 'sale',
@@ -1478,11 +1788,11 @@ export default {
1478
1788
  res.rows[0].amount == res.rows[0].remainingAmount
1479
1789
  ) {
1480
1790
  this.$confirm(
1481
- '是否确认直接生成装运?请注意,此合同的定金发票尚未生成或已生成但未收款,请先确认相关情况。',
1482
- '提示',
1791
+ this.$t('contractDetail.ship_create_tips'),
1792
+ this.$t('contractDetail.tip'),
1483
1793
  {
1484
- confirmButtonText: '确定',
1485
- cancelButtonText: '取消',
1794
+ confirmButtonText: this.$t('contractDetail.confirm'),
1795
+ cancelButtonText: this.$t('contractDetail.cancel'),
1486
1796
  type: 'warning',
1487
1797
  }
1488
1798
  )
@@ -1498,7 +1808,11 @@ export default {
1498
1808
  );
1499
1809
  });
1500
1810
  })
1501
- .catch(() => {});
1811
+ .catch(() => { }).finally(() => {
1812
+ this.timer = setTimeout(() => {
1813
+ handleGenerateflag = false;
1814
+ },3000);
1815
+ });
1502
1816
  } else {
1503
1817
  listWithContractInfo({
1504
1818
  contractIds: [this.contractId],
@@ -1509,11 +1823,20 @@ export default {
1509
1823
  this.contract.destination,
1510
1824
  this.contract
1511
1825
  );
1826
+ }).finally(() => {
1827
+ this.timer = setTimeout(() => {
1828
+ handleGenerateflag = false;
1829
+ },3000);
1512
1830
  });
1513
1831
  }
1514
1832
  });
1515
1833
  },
1516
1834
  handleGeneratePurchase() {
1835
+ if(handleGenerateflag1) {
1836
+ return;
1837
+ }
1838
+ handleGenerateflag1 = true;
1839
+
1517
1840
  listSaleContracts({ purchaseContractNo: this.contract.contractNo }).then(
1518
1841
  (res) => {
1519
1842
  this.purchaseBuyerList = res.rows;
@@ -1523,29 +1846,269 @@ export default {
1523
1846
  this.addShipment();
1524
1847
  }
1525
1848
  }
1526
- );
1849
+ ).finally(() => {
1850
+ this.timer = setTimeout(() => {
1851
+ handleGenerateflag1 = false;
1852
+ },3000);
1853
+ });
1527
1854
  },
1528
1855
  handleRefresh() {
1529
1856
  this.getContractFileInfo(this.contractId);
1530
1857
  },
1531
1858
  //定金发票
1532
1859
  getDepositInvoice() {
1860
+ console.log('contract:', this.contract)
1533
1861
  if (this.contract.contractType == 'sale') {
1862
+ // 生成定金发票(销售)
1863
+ console.log('生成定金发票')
1534
1864
  getDepositInvoice(this.contract).then((response) => {
1535
1865
  const data = response.data;
1536
1866
  this.$refs.depositInvoice.handleShow(data);
1537
1867
  });
1538
1868
  } else {
1869
+ // 上传定金发票(采购)
1870
+ console.log('上传定金发票')
1539
1871
  this.$refs.purchaseInvoice.handleUpload(this.contract, 'deposit');
1540
1872
  }
1541
1873
  },
1542
1874
  //上传尾款发票
1543
1875
  uploadFinalInvoice(type, shipmentId) {
1876
+ console.log('上传尾款发票')
1544
1877
  this.$refs.purchaseInvoice.handleUpload(this.contract, type, shipmentId);
1545
1878
  },
1879
+ //设置进度
1880
+ setRate(index) {
1881
+ this.contractProgressInfo.rate = this.contractFileInfo.contractPercentage || 0
1882
+ let textArr = []
1883
+ console.log('===this.contract.contractType==', this.contract.contractType);
1884
+ // 销售
1885
+ if(this.contract.contractType == 'sale') {
1886
+ // 无定金
1887
+ //发送草稿合同标记
1888
+ if(!this.contractFileInfo.sendDraftContractFlag) {
1889
+ // 草稿合同待发出(英文:Draft contract to be sent out)
1890
+ textArr.push(this.$t('contractDetail.draftContract_unsend'))
1891
+ }
1892
+
1893
+ // 点击合同确认标记
1894
+ if(this.contractFileInfo.confirmContractFlag) {
1895
+ // 正式合同已发出(英文:Formal Contract have been sent out)
1896
+ // textArr.push('正式合同已发出')
1897
+ } else {
1898
+ // 正式合同待发出(英文:Formal contract to be sent out)
1899
+ textArr.push(this.$t('contractDetail.contract_send_false'))
1900
+ }
1901
+
1902
+ // BLI确认标记
1903
+ if(this.contractFileInfo.bliConfirmFlag) {
1904
+ // 提单指令已确认(英文:BL Instruction confirmed)
1905
+ // textArr.push('提单指令已确认')
1906
+ } else {
1907
+ // 提单指令待买家确认(英文: BL Instruction to be confirmed
1908
+ textArr.push(this.$t('contractDetail.bl_confirm_false'))
1909
+ }
1910
+
1911
+ // 合同回签标记
1912
+ if(this.contractFileInfo.contractSignFlag) {
1913
+ // 回签合同已上传(英文:Signed Contract has been signed back)
1914
+ // textArr.push('回签合同已上传')
1915
+ } else {
1916
+ // 回签合同待上传(英文:Formal contract to be signed back
1917
+ textArr.push(this.$t('contractDetail.contract_signback_false'))
1918
+ }
1919
+
1920
+ if(this.contract.deposit != null && this.contract.deposit > 0) {
1921
+ // 定金支付标记
1922
+ if(this.contractFileInfo.depositInvoicePayFlag) {
1923
+ // 定金已支付(英文:Deposit paid)
1924
+ // textArr.push('定金已支付')
1925
+ } else {
1926
+ // 定金待支付(英文:Deposit to be paid)
1927
+ textArr.push(this.$t('contractDetail.depositPaid_false'))
1928
+ }
1929
+ }
1930
+ }
1931
+
1932
+ if(this.contract.contractType == 'purchase') {
1933
+ // 无定金
1934
+ //发送草稿合同标记
1935
+ if(!this.contractFileInfo.sendDraftContractFlag) {
1936
+ // 草稿合同待发出(英文:Draft contract to be sent out)
1937
+ textArr.push(this.$t('contractDetail.draftContract_unsend'))
1938
+ }
1939
+
1940
+ // 点击合同确认标记
1941
+ if(this.contractFileInfo.confirmContractFlag) {
1942
+ // 正式合同已发出(英文:Formal Contract have been sent out)
1943
+ // textArr.push('正式合同已发出')
1944
+ } else {
1945
+ // 正式合同待发出(英文:Formal contract to be sent out)
1946
+ textArr.push(this.$t('contractDetail.contract_send_false'))
1947
+ }
1948
+
1949
+ // BLI确认标记
1950
+ if(this.contractFileInfo.bliConfirmFlag) {
1951
+ // 提单指令已确认(英文:BL Instruction confirmed)
1952
+ // textArr.push('提单指令已确认')
1953
+ } else {
1954
+ // 提单指令待买家确认(英文: BL Instruction to be confirmed
1955
+ textArr.push(this.$t('contractDetail.bl_confirm_false'))
1956
+ }
1957
+
1958
+ // 合同回签标记
1959
+ if(this.contractFileInfo.contractSignFlag) {
1960
+ // 回签合同已上传(英文:Signed Contract has been signed back)
1961
+ // textArr.push('回签合同已上传')
1962
+ } else {
1963
+ // 回签合同待上传(英文:Formal contract to be signed back
1964
+ textArr.push(this.$t('contractDetail.contract_signback_false'))
1965
+ }
1966
+
1967
+ if(this.contract.deposit != null && this.contract.deposit > 0) {
1968
+ if(!this.contractFileInfo.existDepositInvoiceFlag) {
1969
+ // 定金发票待提供(英文:Deposit Invoice to be uploaded)
1970
+ textArr.push(this.$t('contractDetail.Deposit_invoice_to_be_provided'))
1971
+ }
1972
+
1973
+ // 定金支付标记
1974
+ if(!this.contractFileInfo.depositInvoicePayFlag) {
1975
+ // 定金待支付(英文:Deposit to be paid)
1976
+ textArr.push(this.$t('contractDetail.depositPaid_false'))
1977
+ }
1978
+ }
1979
+ }
1980
+
1981
+ this.contractProgressInfo.textArr = textArr
1982
+
1983
+
1984
+ let shipmentFileInfoList = this.contractFileInfo.shipmentFileInfoList;
1985
+
1986
+ let shipTextArr = []
1987
+
1988
+ if(shipmentFileInfoList && shipmentFileInfoList.length > 0) {
1989
+ let shipmentItem = shipmentFileInfoList[index]
1990
+ this.shipmentItemData = shipmentItem
1991
+ this.shipProgressInfo.rate = shipmentItem?.shipmentPercentage || 0
1992
+ this.getGoodsProgressInfo.rate = shipmentItem?.telexReleasePercentage || 0
1993
+ this.claimProgressInfo.rate = this.contractFileInfo?.claimPercentage || 0
1994
+
1995
+ // 装运进度
1996
+ // 装箱单
1997
+ if(shipmentItem.generatePackingFlag) {
1998
+ // 装箱单已上传(英文:Packing List updated)
1999
+ // shipTextArr.push('装箱单已上传')
2000
+ } else {
2001
+ // 装箱单待上传(英文:Shipping docs-Packing list to be updated)
2002
+ shipTextArr.push(this.$t('contractDetail.packinglist_false'))
2003
+ }
2004
+
2005
+ // 是否已支付尾款
2006
+ if(!shipmentItem.generateInvoiceFlag && this.contract.contractType == 'purchase') {
2007
+ // 尾款发票待上传(英文:Balance Invoice to be updated)
2008
+ shipTextArr.push(this.$t('contractDetail.balance_invoice_false'))
2009
+ }
2010
+
2011
+ // 上传装箱照片
2012
+ if(shipmentItem.uploadContainerPhotoFlag) {
2013
+ // 装箱照片已上传(Packing photos updated)
2014
+ // shipTextArr.push('装箱照片已上传')
2015
+ } else {
2016
+ // 装箱照片待上传(英文:Shipping docs-Shipping photos to be updated)
2017
+ shipTextArr.push(this.$t('contractDetail.container_photos_false'))
2018
+ }
2019
+
2020
+
2021
+ // 是否上传草稿提单
2022
+ if(shipmentItem.uploadDraftBlFlag) {
2023
+ // 草稿提单已上传(Draft BL updated)
2024
+ // shipTextArr.push('草稿提单已上传')
2025
+ } else {
2026
+ // 草稿提单待上传(英文:Shipping docs-Draft BL to be updated)
2027
+ shipTextArr.push(this.$t('contractDetail.draftBl_false'))
2028
+ }
2029
+
2030
+ // 是否确认草稿提单
2031
+ if(!shipmentItem.confirmDraftBlFlag) {
2032
+ // 草稿提单待买家确认(英文:Draft BL to be confirmed )
2033
+ shipTextArr.push(this.$t('contractDetail.draftBl_buyer_confirm_false'))
2034
+ } else {
2035
+ // 草稿提单已确认(英文:Draft BL confirmed)
2036
+ // shipTextArr.push('草稿提单已确认')
2037
+ }
2038
+
2039
+ // 尾款部分支付标记
2040
+
2041
+ // 尾款部分支付标记
2042
+ if(shipmentItem.balanceInvoiceFullyPaidFlag) {
2043
+ // 尾款已支付(英文:Final Payment paid)
2044
+ // shipTextArr.push('尾款已支付')
2045
+ } else {
2046
+ if(shipmentItem.balanceInvoicePartiallyPaidFlag) {
2047
+ // 尾款已部分支付(英文:Final Payment partially paid)
2048
+ shipTextArr.push(this.$t('contractDetail.Balance_Invoice_to_be_paid'))
2049
+ } else {
2050
+ // 尾款待买家支付(英文:Balance Invoice to be paid)
2051
+ shipTextArr.push(this.$t('contractDetail.Balance_Invoice_to_be_paid'))
2052
+ }
2053
+ }
2054
+
2055
+ this.shipProgressInfo.textArr = shipTextArr
2056
+
2057
+
2058
+ // 收货进度
2059
+ let goodsTextArr = []
2060
+ // 装运百分比
2061
+ if(shipmentItem.telexReleasePercentage > 0) {
2062
+ // 提货凭证已提供(英文:Released/ Telxed the BL)
2063
+ // goodsTextArr.push('提货凭证已提供')
2064
+ } else {
2065
+ // 提货凭证待提供(英文:Release /Telxed BL to be done)
2066
+ goodsTextArr.push(this.$t('contractDetail.releasedTelex_false'))
2067
+ }
2068
+
2069
+ this.getGoodsProgressInfo.textArr = goodsTextArr
2070
+
2071
+ // 索赔进度
2072
+ let claimTextArr = []
2073
+ if(this.contractFileInfo.claimCreateFlag && !this.contractFileInfo.claimProcessFlag && !this.contractFileInfo.claimCloseFlag) {
2074
+ // 索赔中(英文:Claiming)
2075
+ claimTextArr.push(this.$t('contractDetail.claiming'))
2076
+ }
2077
+
2078
+ if(this.contractFileInfo.claimCreateFlag && this.contractFileInfo.claimProcessFlag && !this.contractFileInfo.claimCloseFlag) {
2079
+ // 文件已更新(英文:Claiming-CN/DN issued
2080
+ claimTextArr.push(this.$t('contractDetail.claiming_update'))
2081
+ }
2082
+
2083
+ if(this.contractFileInfo.claimCreateFlag && this.contractFileInfo.claimProcessFlag && this.contractFileInfo.claimCloseFlag) {
2084
+ // 索赔已关闭(英文:Claim closed)
2085
+ claimTextArr.push(this.$t('contractDetail.claiming_closed'))
2086
+ }
2087
+
2088
+ this.claimProgressInfo.textArr = claimTextArr
2089
+ } else {
2090
+ shipTextArr.push(this.$t('contractDetail.Waiting_for_the_seller_to_ship'))
2091
+ this.claimProgressInfo.textArr = shipTextArr
2092
+ }
2093
+ this.getShipmentPurchaseAmount()
2094
+ this.loadingInstance.close();
2095
+ },
2096
+ //获取合同文件信息
1546
2097
  getContractFileInfo(contractId) {
1547
2098
  getBizContractFileInfo(contractId).then((res) => {
1548
2099
  this.contractFileInfo = res.data;
2100
+ this.setRate(this.shipBillNo || 0)
2101
+ });
2102
+ },
2103
+
2104
+ /**
2105
+ * @description: 修改正式尾款发票金额重新获取合同文件信息
2106
+ * @return {*}
2107
+ */
2108
+ getContractFileInfoCallback() {
2109
+ getBizContractFileInfo(this.contractId).then((res) => {
2110
+ this.contractFileInfo = res.data;
2111
+ this.setRate(this.shipBillNo)
1549
2112
  });
1550
2113
  },
1551
2114
  handleHistory(fileType) {
@@ -1568,13 +2131,26 @@ export default {
1568
2131
  console.log(this.selectFileList);
1569
2132
  },
1570
2133
  handleUncheck(val) {
1571
- let index = this.selectFileList.findIndex((item) => item.fileId === val);
1572
- if (index > -1) this.selectFileList.splice(index, 1);
2134
+ let index = this.selectFileList.findIndex((item) => {
2135
+ console.log('====handleUncheck==', item.fileId, val);
2136
+ return item.fileId === val
2137
+ });
2138
+ console.log('====handleUncheck==', index);
2139
+ if (index > -1) {
2140
+ this.selectFileList.splice(index, 1);
2141
+ }
1573
2142
  console.log(this.selectFileList);
1574
2143
  },
2144
+ cancelAllSelectFileList () {
2145
+ this.selectFileList.forEach((item) => {
2146
+ setTimeout(() => {
2147
+ this.handleUncheck(item.fileId)
2148
+ }, 10);
2149
+ });
2150
+ },
1575
2151
  handleUpload(e, linkId, linkType, fileType) {
1576
2152
  let loadingInstance = Loading.service({
1577
- text: '请稍候',
2153
+ text: this.$t('contractDetail.loading'),
1578
2154
  spinner: 'el-icon-loading',
1579
2155
  background: 'rgba(0, 0, 0, 0.7)',
1580
2156
  });
@@ -1590,7 +2166,7 @@ export default {
1590
2166
  //如果是回签合同 保留原合同状态
1591
2167
  if (fileType == 'contract_sign') {
1592
2168
  let loading = Loading.service({
1593
- text: '请稍候',
2169
+ text: this.$t('contractDetail.loading'),
1594
2170
  spinner: 'el-icon-loading',
1595
2171
  background: 'rgba(0, 0, 0, 0.7)',
1596
2172
  });
@@ -1604,23 +2180,25 @@ export default {
1604
2180
  contractSignTime: new Date(),
1605
2181
  }).then((res) => {
1606
2182
  loading.close();
1607
- this.$modal.msgSuccess('回签成功');
2183
+ this.$modal.msgSuccess(this.$t('contractDetail.signContract_success'));
2184
+ this.getContractFileInfo(this.contractId);
1608
2185
  });
1609
2186
  });
2187
+ } else if (fileType == 'shipment_delivery_receipt') {
2188
+ //如果是上传电放
2189
+ let loading1 = Loading.service({
2190
+ text: this.$t('contractDetail.loading'),
2191
+ spinner: 'el-icon-loading',
2192
+ background: 'rgba(0, 0, 0, 0.7)',
2193
+ });
2194
+ chargedShipment({ shipmentId: linkId }).then((response) => {
2195
+ loading1.close();
2196
+ this.$modal.msgSuccess(this.$t('contractDetail.release_success'));
2197
+ this.getContractFileInfo(this.contractId);
2198
+ });
2199
+ } {
2200
+ this.getContractFileInfo(this.contractId);
1610
2201
  }
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
2202
  });
1625
2203
  },
1626
2204
 
@@ -1663,8 +2241,45 @@ export default {
1663
2241
  this.loading = false;
1664
2242
  });
1665
2243
  },
2244
+ getShipmentPurchaseAmount() {
2245
+ let shipmentFileInfo = this.shipmentItemData
2246
+ if(shipmentFileInfo?.shipmentId) {
2247
+ getPurchaseAmount(shipmentFileInfo.shipmentId).then((res) => {
2248
+ this.purchaseBalanceMoney = (res.data?.totalPurchaseAmount - res.data?.purchaseDepositAmount).toFixed(2)
2249
+ this.shipmentPurchaseAmountMessage =
2250
+ `${this.$t('contractDetail.reference_invince')}$` + this.purchaseBalanceMoney
2251
+ ;
2252
+ return this.shipmentPurchaseAmountMessage;
2253
+ });
2254
+ }
2255
+ },
1666
2256
  },
1667
2257
  computed: {
2258
+ // 销售获取最新的尾款发票
2259
+ getNewInfo() {
2260
+ // 时间比较
2261
+ let shipmentFileInfo = this.shipmentItemData && this.shipmentItemData
2262
+ if((shipmentFileInfo.saleFinallyInvoice && shipmentFileInfo.saleFinallyInvoice.length > 0) && (shipmentFileInfo.salePersonalFinallyInvoice && shipmentFileInfo.salePersonalFinallyInvoice.length > 0)) {
2263
+ if((shipmentFileInfo.saleFinallyInvoice && shipmentFileInfo.saleFinallyInvoice[0]?.createTime) > (shipmentFileInfo.salePersonalFinallyInvoice && shipmentFileInfo.salePersonalFinallyInvoice[0]?.createTime)) {
2264
+ return [shipmentFileInfo.saleFinallyInvoice[0]]
2265
+ } else {
2266
+ return [shipmentFileInfo.salePersonalFinallyInvoice[0]]
2267
+ }
2268
+ } else {
2269
+ // 展示存在的其中一个 saleFinallyInvoice
2270
+ if(shipmentFileInfo.saleFinallyInvoice && shipmentFileInfo.saleFinallyInvoice.length && (!shipmentFileInfo.salePersonalFinallyInvoice || shipmentFileInfo.salePersonalFinallyInvoice.length == 0)) {
2271
+ return [shipmentFileInfo.saleFinallyInvoice[0]]
2272
+ }
2273
+
2274
+ // 展示存在的其中一个 salePersonalFinallyInvoice
2275
+ if((!shipmentFileInfo.saleFinallyInvoice || shipmentFileInfo.saleFinallyInvoice.length == 0) && (shipmentFileInfo.salePersonalFinallyInvoice && shipmentFileInfo.salePersonalFinallyInvoice.length)) {
2276
+ return [shipmentFileInfo.salePersonalFinallyInvoice[0]]
2277
+ }
2278
+
2279
+ return ''
2280
+ }
2281
+
2282
+ },
1668
2283
  claimFileInfoCom() {
1669
2284
  if (
1670
2285
  (this.contractFileInfo &&
@@ -1674,38 +2289,220 @@ export default {
1674
2289
  this.contractFileInfo.claimDebitNoteFileList &&
1675
2290
  this.contractFileInfo.claimDebitNoteFileList[0])
1676
2291
  ) {
1677
- return this.buyerFlag
2292
+ return !this.buyerFlag
1678
2293
  ? this.contractFileInfo &&
1679
- this.contractFileInfo.claimCreditNoteFileList &&
1680
- this.contractFileInfo.claimCreditNoteFileList
2294
+ this.contractFileInfo.claimCreditNoteFileList &&
2295
+ this.contractFileInfo.claimCreditNoteFileList
1681
2296
  : this.contractFileInfo &&
1682
- this.contractFileInfo.claimDebitNoteFileList &&
1683
- this.contractFileInfo.claimDebitNoteFileList;
2297
+ this.contractFileInfo.claimDebitNoteFileList &&
2298
+ this.contractFileInfo.claimDebitNoteFileList;
1684
2299
  } else {
1685
2300
  false;
1686
2301
  }
1687
2302
  },
2303
+ // 采购获取最新的尾款发票
2304
+ DNbillsCom() {
2305
+ if(this.contractFileInfo?.bills) {
2306
+ return this.contractFileInfo.bills.filter(item => {
2307
+ if(item.billType == 'receipt') {
2308
+ item.url = item.billNo + '.pdf'
2309
+ item.fileName = 'DebitNote' + item.billNo + '.pdf'
2310
+ item.downloadUrl = '/bill/download?id=' + item.id
2311
+ return item
2312
+ }
2313
+ })
2314
+ } else {
2315
+ return false
2316
+ }
2317
+ },
2318
+ CNbillsCom() {
2319
+ if(this.contractFileInfo?.bills) {
2320
+ return this.contractFileInfo.bills.filter(item => {
2321
+ if(item.billType == 'payment') {
2322
+ item.url = item.billNo + '.pdf'
2323
+ item.fileName = 'CreditNote' + item.billNo + '.pdf'
2324
+ item.downloadUrl = '/bill/download?id=' + item.id
2325
+ return item
2326
+ }
2327
+ })
2328
+ } else {
2329
+ return false
2330
+ }
2331
+ },
2332
+ },
2333
+ watch: {
2334
+ selectFileListProp: {
2335
+ handler(val) {
2336
+ this.selectFileList = val
2337
+ },
2338
+ immediate: true,
2339
+ deep: true
2340
+ },
2341
+ },
2342
+ destroyed() {
2343
+ clearTimeout(this.timer);
1688
2344
  },
1689
2345
  };
1690
2346
  </script>
1691
2347
  <style lang="scss" scoped>
2348
+
2349
+ .bg-history {
2350
+ color: #1C75BC;
2351
+ line-height: 12px;
2352
+ font-size: 14px;
2353
+ cursor: pointer;
2354
+ }
2355
+
2356
+ .progress-root {
2357
+ display: flex;
2358
+ }
2359
+
2360
+ .selection-root {
2361
+ display: flex;
2362
+ margin-top: 26px;
2363
+ justify-content: flex-start;
2364
+ align-items: center;
2365
+ margin-bottom: 20px;
2366
+ }
2367
+
2368
+ .border-button {
2369
+ margin-left: 8px;
2370
+ min-width: 45px;
2371
+ padding: 0 10px;
2372
+ width: max-content;
2373
+ height: 21px;
2374
+ text-align: center;
2375
+ line-height: 17px;
2376
+ background: #FFFFFF;
2377
+ border-radius: 11px;
2378
+ font-size: 12px;
2379
+ border: 2px solid #D1D3D4;
2380
+ cursor: pointer;
2381
+ }
2382
+
2383
+ .border-button-share {
2384
+ background: #84db4c;
2385
+ border: 2px solid transparent;
2386
+ }
2387
+
2388
+ .slot-content {
2389
+ margin-top: 8px;
2390
+ }
2391
+
1692
2392
  .box-card {
1693
2393
  width: 100%;
1694
2394
  }
2395
+
1695
2396
  .sub-title {
1696
2397
  font-size: 14px;
1697
2398
  font-weight: bold;
1698
2399
  margin-bottom: 10px;
1699
2400
  }
2401
+
1700
2402
  .file-list {
1701
2403
  display: flex;
1702
2404
  flex-wrap: wrap;
1703
-
2405
+ max-width:1000px;
1704
2406
  .file-info {
1705
2407
  margin-right: 10px;
1706
2408
  }
1707
2409
  }
2410
+
2411
+
2412
+ .content-root {
2413
+ overflow: hidden;
2414
+ background-color: #fff;
2415
+ padding: 10px 20px;
2416
+
2417
+ .content-root-row {
2418
+ display: flex;
2419
+ align-items: center;
2420
+ }
2421
+ }
2422
+
1708
2423
  ::v-deep .el-tabs--top .el-tabs__item.is-top:last-child {
1709
2424
  font-weight: 900;
1710
2425
  }
2426
+
2427
+ .success {
2428
+ color: #67C23A;
2429
+ }
2430
+
2431
+ .confirm-draft-bl {
2432
+ width:200px;
2433
+ height: 30px;
2434
+ border-radius: 15px;
2435
+ line-height:30px;
2436
+ text-align: center;
2437
+ background-color: #189048;
2438
+ color:#fff;
2439
+ cursor:pointer;
2440
+ }
2441
+
2442
+ .center-status {
2443
+ height: 85px;
2444
+ display: flex;
2445
+ align-items: center;
2446
+ justify-content: flex-start;
2447
+ color: #bbb
2448
+ }
2449
+ .center-status-block {
2450
+ height: 85px;
2451
+ display: flex;
2452
+ align-items: center;
2453
+ flex-direction: column;
2454
+ justify-content: center;
2455
+ color: #bbb
2456
+ }
2457
+ .ship-empty {
2458
+ line-height:60px;
2459
+ color: #bbb;
2460
+ text-align: center;
2461
+ padding:20px 0;
2462
+ }
2463
+
2464
+ .preview-download-root {
2465
+ display:flex;
2466
+ margin-top:5px;
2467
+
2468
+ .preview-download {
2469
+ cursor: pointer;
2470
+ margin-left:8px;
2471
+ min-width: 45px;
2472
+ width:max-content;
2473
+ padding: 0 10px;
2474
+ height: 21px;
2475
+ text-align: center;
2476
+ line-height: 17px;
2477
+ background: #FFFFFF;
2478
+ border-radius: 11px;
2479
+ font-size:12px;
2480
+ border: 2px solid #D1D3D4;
2481
+ }
2482
+ }
2483
+ .addshipment {
2484
+ position: absolute;
2485
+ left:140px;
2486
+ top:120px;
2487
+ background-color:#fff;
2488
+ height:30px;
2489
+ line-height:30px;
2490
+ text-align: center;
2491
+ color:#1C75BC;
2492
+ padding: 0 20px;
2493
+ width:max-content;
2494
+ border-radius:15px;
2495
+ cursor:pointer;
2496
+ }
2497
+ .hr-class {
2498
+ width: 100%;
2499
+ height: 1px;
2500
+ background-color: #ddd;
2501
+ margin: 20px 0 ;
2502
+ }
1711
2503
  </style>
2504
+ <style lang="scss">
2505
+ // .el-tooltip__popper {
2506
+ // max-width: 300px !important; /* 设置你希望的最大宽度 */
2507
+ // }
2508
+ </style>