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

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