doctor-admin-components 1.0.13-beta.5 → 1.0.13-beta.51

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