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

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 (47) hide show
  1. package/README.md +15 -2
  2. package/package.json +1 -1
  3. package/packages/index.js +16 -1
  4. package/packages/src/api/biz/bizContract.js +1005 -0
  5. package/packages/src/api/biz/bizFileInfo.js +16 -0
  6. package/packages/src/api/biz/bizInvoice.js +1 -1
  7. package/packages/src/api/biz/bizShipment.js +38 -0
  8. package/packages/src/assets/images/click-show-table.png +0 -0
  9. package/packages/src/assets/images/more.png +0 -0
  10. package/packages/src/assets/images/pdf-new.png +0 -0
  11. package/packages/src/components/DictTag/index.vue +12 -2
  12. package/packages/src/components/FileUpload/contract-drag-new.vue +100 -11
  13. package/packages/src/i18n/en/message.json +305 -0
  14. package/packages/src/i18n/index.js +38 -0
  15. package/packages/src/i18n/zh-CN/message.json +305 -0
  16. package/packages/src/index.js +24 -1
  17. package/packages/src/utils/MycommonUtil.js +12 -0
  18. package/packages/src/utils/index.js +35 -0
  19. 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
  20. package/packages/src/views/biz/bizFileInfo/contract copy.vue +1711 -0
  21. package/packages/src/views/biz/bizFileInfo/contract.vue +1925 -1019
  22. package/packages/src/views/biz/bizFileInfo/contractFile/BillOfLadingNoTab.vue +116 -0
  23. package/packages/src/views/biz/bizFileInfo/contractFile/ContentTitle.vue +102 -0
  24. package/packages/src/views/biz/bizFileInfo/contractFile/IMGPreviewCheckBox.vue +324 -0
  25. package/packages/src/views/biz/bizFileInfo/contractFile/Progress.vue +85 -0
  26. package/packages/src/views/biz/bizFileInfo/contractFile/ProgressDetail.vue +123 -0
  27. package/packages/src/views/biz/bizFileInfo/contractFile/SectionSlot.vue +91 -0
  28. package/packages/src/views/biz/bizFileInfo/contractFile/ShowAndHide.vue +178 -0
  29. package/packages/src/views/biz/bizFileInfo/fileShow copy.vue +321 -0
  30. package/packages/src/views/biz/bizFileInfo/fileShow.vue +152 -48
  31. package/packages/src/views/biz/bizFileInfo/fileShowClaim.vue +1 -1
  32. package/packages/src/views/biz/bizShipment/add.vue +178 -29
  33. package/packages/src/views/biz/bizShipment/referenceAlert.vue +168 -0
  34. package/packages/src/views/biz/contractTracing/billInfo.vue +64 -40
  35. package/packages/src/views/biz/contractTracing/companyBanks.vue +228 -0
  36. package/packages/src/views/biz/contractTracing/contractInfo.vue +1 -1
  37. package/packages/src/views/biz/contractTracing/contractPdf.vue +10 -5
  38. package/packages/src/views/biz/contractTracing/contractSummary.vue +31 -19
  39. package/packages/src/views/biz/contractTracing/contractTracingDetail copy.vue +107 -0
  40. package/packages/src/views/biz/contractTracing/contractTracingDetail.vue +209 -31
  41. package/packages/src/views/biz/contractTracing/editBill.vue +22 -9
  42. package/packages/src/views/biz/contractTracing/purchaseInvoiceUpload.vue +153 -7
  43. package/packages/src/views/biz/contractTracing/shipmentPurchaseAmount.vue +14 -0
  44. package/packages/src/views/biz/contractTracing/subCompanyDialog.vue +8 -2
  45. package/packages/src/views/components/RegionPicker/Distpicker.vue +459 -0
  46. package/packages/src/views/components/RegionPicker/districts.js +4641 -0
  47. package/packages/src/views/test.vue +3 -3
@@ -1,618 +1,933 @@
1
1
  <template>
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>
2
+ <div style="height: 100%;width: 100%;overflow: hidden;">
3
+ <!--合同 装运 收获 进度显示 -->
4
+ <div class="progress-root">
5
+ <div @click="handleScroll('contract_top_id')">
6
+ <Progress :infoPro="contractProgressInfo"></Progress>
11
7
  </div>
12
- <el-timeline>
13
- <el-timeline-item icon="el-icon-success" type="primary" size="large">
14
- <div style="color: #1890ff">{{ $t("contractDetail.contractInfoConfirm") }}</div>
15
- <div>
16
- <el-row>
17
- <el-col :span="5">
18
- <div class="sub-title">
19
- {{
20
- contract.contractType == "sale"
21
- ? $t("contractDetail.saleContract")
22
- : $t("contractDetail.purchaseContract")
23
- }}
24
- <el-button
25
- v-if="channel !== 'official-website'"
26
- type="text"
27
- size="mini"
28
- @click="handleHistory('contract_formal')"
29
- >历史合同文件</el-button>
30
- </div>
31
- <div class="file-list">
32
- <file-show
33
- :hiddenOperation="channel == 'official-website'"
34
- @refresh="handleRefresh"
35
- @checked="handleChecked"
36
- @uncheck="handleUncheck"
37
- :fileInfo="
38
- getLastFileByList(contractFileInfo.latestContractFileInfo)
39
- "
40
- />
41
- </div>
42
- </el-col>
43
- <el-col :span="4">
44
- <div>
45
- <div class="sub-title">{{ $t("contractDetail.blInfo") }}</div>
46
- <div class="file-list">
47
- <file-show
48
- :hiddenOperation="channel == 'official-website'"
49
- @refresh="handleRefresh"
50
- @checked="handleChecked"
51
- @uncheck="handleUncheck"
52
- :fileInfo="
53
- getLastFileByList(contractFileInfo.latestBillFileInfo)
54
- "
55
- />
8
+ <div @click="handleScroll('contract_shipping_id')">
9
+ <Progress :infoPro="shipProgressInfo"></Progress>
10
+ </div>
11
+ <div @click="handleScroll('contract_receiving_id')">
12
+ <Progress :infoPro="getGoodsProgressInfo"></Progress>
13
+ </div>
14
+ <!-- 选择项 -->
15
+ <div class="selection-root" v-if="selectFileList.length > 0" style="background-color: rgb(237, 247, 255); border-radius: 18px;padding: 5px 12px;">
16
+ <span style="color: #54B8FF; font-weight: bold;">{{ $t('contractDetail.Selected') }} {{ selectFileList.length }} {{ $t('contractDetail.item') }}</span>
17
+ <div class="border-button border-button-blue" @click.stop="cancelAll">{{ $t('contractDetail.Deselect') }}</div>
18
+ <div class="border-button border-button-blue" @click.stop="downLoadAll">{{ $t('contractDetail.Download_All') }}</div>
19
+ <div class="border-button border-button-blue" @click.stop="deleteAll">{{ $t('contractDetail.Delete_All') }}</div>
20
+ </div>
21
+ </div>
22
+ <div class="app-container-file" style="padding: 0 20px;overflow-y: scroll;height: calc(100% - 60px)" v-if="linkId">
23
+ <!-- 合同 -->
24
+ <div id="contract_top_id">
25
+ <SectionSlot :infoPro="contractProgressInfo">
26
+ <template v-slot:header>
27
+ <div>
28
+ <ProgressDetail :infoPro="contractProgressInfo"></ProgressDetail>
29
+ </div>
30
+ </template>
31
+ <template v-slot:content>
32
+ <div class="content-root">
33
+ <!-- 提单指令 -->
34
+ <div class="content-root-row">
35
+ <ContentTitle :contentTitleProp="{
36
+ bgButton: $t('contractDetail.blInfo'),
37
+ bgTime: personalBillFileInfo && timeFormate(personalBillFileInfo),
38
+ }"></ContentTitle>
39
+ <span v-if="contract.dealId" class="bg-history" @click="handleHistory('deal_bill,personal_deal_bill', contract.dealId, false)">{{ $t('contractDetail.view_history') }}</span>
40
+ </div>
41
+ <!-- 一个采购合同关联多个销售合 -->
42
+ <div v-for="(fileInfo, index) in contractFileInfo.bliFileInfoList" :key="'contract_'+index">
43
+ <el-col :span="24">
44
+ <div class="sub-title">{{ $t("contractDetail.blInfo") }}_{{ fileInfo.buyerContractCompanyName }}</div>
45
+ </el-col>
46
+ <el-col :span="12">
47
+ <div class="file-list" v-if="getLastFileByList(fileInfo.latestBillFileInfo)">
48
+ <file-show
49
+ :hiddenOperation="channel == 'official-website'"
50
+ @refresh="handleRefresh"
51
+ @checked="handleChecked"
52
+ @uncheck="handleUncheck"
53
+ :selectFileListProp="selectFileList"
54
+ :fileInfo="
55
+ getLastFileByList(fileInfo.latestBillFileInfo)
56
+ "
57
+ />
56
58
  </div>
57
- </div>
58
- </el-col>
59
- <el-col :span="6">
60
- <div class="file-list">
61
- <file-show
59
+ <div class="file-list">
60
+ <file-show
62
61
  :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'"
62
+ @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item"
63
+ v-for="(item, i) in fileInfo.personalBillFileInfo" :key="i" />
64
+ <contract-file-drag-upload
65
+ v-show="(!fileInfo.personalBillFileInfo || fileInfo.personalBillFileInfo.length == 0) && channel !== 'official-website'"
72
66
  @upload="
73
67
  handleUpload(
74
68
  $event,
75
69
  contract.dealId,
76
70
  'dealRecord',
77
71
  'personal_deal_bill'
78
- )
79
- "
80
- :isShowTip="false"
81
- />
82
- </div>
72
+ )"
73
+ :isShowTip="false"
74
+ :uploadNameStr="$t('contractDetail.blInfo')" />
75
+ </div>
76
+ </el-col>
77
+ <el-col :span="12" class="center-status">
78
+ <i :class="fileInfo.blConfirmFlag ? 'el-icon-success success' : 'el-icon-time'"></i>
79
+ {{ fileInfo.blConfirmFlag ? $t('contractDetail.bl_confirm_true') : $t('contractDetail.blInfo_unconfirm') }}
80
+ </el-col>
81
+ </div>
82
+
83
+ <!-- 销售合同-回签合同 -->
84
+ <el-col :span="24">
85
+ <div class="hr-class"></div>
86
+ </el-col>
87
+ <el-col :span="24">
88
+ <el-col :span="12">
89
+ <div class="content-root-row">
90
+ <ContentTitle :contentTitleProp="{
91
+ bgButton: contract.contractType == 'sale'
92
+ ? $t('contractDetail.saleContract')
93
+ : $t('contractDetail.purchaseContract'),
94
+ bgTime:contractFileInfo.latestContractFileInfo && timeFormate(contractFileInfo.latestContractFileInfo)
95
+ }"></ContentTitle>
96
+ <span class="bg-history" @click="handleHistory('contract_draft,contract_formal,contract_sign', linkId)">{{ $t('contractDetail.view_history') }}</span>
97
+ </div>
98
+ </el-col>
99
+ <el-col :span="12" v-if="contractFileInfo.signContractFileInfo && contractFileInfo.signContractFileInfo.length">
100
+ <ContentTitle :contentTitleProp="{
101
+ bgButton: $t('contractDetail.signContract'),
102
+ bgTime:timeFormate(contractFileInfo.signContractFileInfo)
103
+ }"
104
+ :successFlag="true"
105
+ ></ContentTitle>
106
+ </el-col>
83
107
  </el-col>
84
- <el-col :span="9">
85
- <div>
86
- <div v-if="channel !== 'official-website'" class="sub-title">
108
+ <el-col :span="24">
109
+ <el-col :span="12">
110
+ <div class="file-list" v-if="getLastFileByList(contractFileInfo.latestContractFileInfo)">
111
+ <file-show :hiddenOperation="channel == 'official-website'" @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :fileInfo="getLastFileByList(contractFileInfo.latestContractFileInfo)" />
112
+ </div>
113
+ <div v-else>
114
+ {{ $t('contractDetail.no_files') }}
115
+ </div>
116
+ </el-col>
117
+ <!-- 回签合同 -->
118
+ <el-col :span="12">
119
+ <!-- <div v-if="channel !== 'official-website'" class="sub-title">
87
120
  {{ $t("contractDetail.signContract") }}
88
121
  <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
122
+ </div> -->
123
+ <div class="file-list">
124
+ <file-show @refresh="handleRefresh"
125
+ @checked="handleChecked" @uncheck="handleUncheck" :file-info="item"
126
+ :selectFileListProp="selectFileList"
127
+ type="signContract"
128
+ @signContract="counterSign"
129
+ v-for="(item, i) in contractFileInfo.signContractFileInfo" :key="i" />
130
+ <contract-file-drag-upload
131
+ v-show="!contractFileInfo.signContractFileInfo || contractFileInfo.signContractFileInfo && contractFileInfo.signContractFileInfo.length == 0"
103
132
  @upload="
133
+ handleUpload(
134
+ $event,
135
+ contract.contractId,
136
+ 'contract',
137
+ 'contract_sign'
138
+ )
139
+ " :isShowTip="false" :uploadNameStr="$t('contractDetail.signContract')" />
140
+ </div>
141
+ </el-col>
142
+ </el-col>
143
+ <!-- 定金发票-支付凭证 -->
144
+ <el-col :span="24" v-if="contract.deposit > 0">
145
+ <div class="hr-class"></div>
146
+ </el-col>
147
+ <div v-if="contract.deposit > 0">
148
+ <el-col :span="12">
149
+ <div style="display:flex;align-items:center">
150
+ <ContentTitle :contentTitleProp="{
151
+ bgButton: $t('contractDetail.depositInvoice'),
152
+ bgTime:contractFileInfo.proformaInvoiceFileInfo && timeFormate(contractFileInfo.proformaInvoiceFileInfo) || contractFileInfo.personalProformaInvoiceFileInfo && timeFormate(contractFileInfo.personalProformaInvoiceFileInfo)
153
+ }">
154
+ </ContentTitle>
155
+ <span class="bg-history" @click="handleHistory('personal_proforma_invoice,proforma_invoice', contractFileInfo.proformaInvoice.id)">{{ $t('contractDetail.view_history') }}</span>
156
+ <span class="bg-history" style="padding-left: 20px;" v-if="channel !== 'official-website'" @click="skipInvoiceList">{{ $t('contractDetail.invoice_list') }}</span>
157
+ </div>
158
+ </el-col>
159
+ <!-- 支付凭证 -->
160
+ <el-col :span="12" v-if="contractFileInfo.proformaInvoiceWaterBillFileInfo && contractFileInfo.proformaInvoiceWaterBillFileInfo.length">
161
+ <ContentTitle :contentTitleProp="{
162
+ bgButton: $t('contractDetail.Payment_voucher'),
163
+ bgTime: contractFileInfo.proformaInvoiceWaterBillFileInfo && timeFormate(contractFileInfo.proformaInvoiceWaterBillFileInfo)
164
+ }"
165
+ :successFlag="true"
166
+ >
167
+ </ContentTitle>
168
+ <!-- <div v-if="!contractFileInfo.depositInvoicePayFlag">
169
+ 有回签合同文件
170
+ </div> -->
171
+ <div>
172
+ </div>
173
+ </el-col>
174
+ </div>
175
+ <!-- 数据 -->
176
+ <el-col :span="24" v-if="contract.deposit > 0">
177
+ <el-col :span="12">
178
+ <div style="margin-bottom:20px" v-if="contract.contractType == 'purchase'">
179
+ <el-button type="primary" size="mini" v-if="channel !== 'official-website'" @click.stop="getDepositInvoice">
180
+ {{ contract.contractType == "sale" ? $t('contractDetail.Generate_deposit_invoice') : "上传定金发票" }}
181
+ </el-button>
182
+ </div>
183
+ <!-- 系统生成定金发票 -->
184
+ <div class="file-list">
185
+ <file-show
186
+ :hiddenOperation="channel == 'official-website'"
187
+ @refresh="handleRefresh"
188
+ @checked="handleChecked"
189
+ @uncheck="handleUncheck"
190
+ :selectFileListProp="selectFileList"
191
+ v-for="(
192
+ item, i
193
+ ) in contractFileInfo.proformaInvoiceFileInfo"
194
+ :key="i"
195
+ :fileInfo="item"
196
+ />
197
+ </div>
198
+ <!-- 手动上传定金发票 -->
199
+ <div class="file-list">
200
+ <file-show :hiddenOperation="channel == 'official-website'" @refresh="handleRefresh"
201
+ @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item" v-for="(
202
+ item, i
203
+ ) in contractFileInfo.personalProformaInvoiceFileInfo" :key="i" />
204
+ <contract-file-drag-upload v-show="contract.contractType == 'sale' && ((!contractFileInfo.personalProformaInvoiceFileInfo || contractFileInfo.personalProformaInvoiceFileInfo.length == 0) && (!contractFileInfo.proformaInvoiceFileInfo || contractFileInfo.proformaInvoiceFileInfo.length == 0))" @upload="
104
205
  handleUpload(
105
206
  $event,
106
- contract.contractId,
107
- 'contract',
108
- 'contract_sign'
207
+ contractFileInfo.proformaInvoice.id,
208
+ 'invoice',
209
+ 'personal_proforma_invoice'
109
210
  )
110
- "
111
- :isShowTip="false"
112
- />
211
+ ":isShowTip="false"
212
+ :uploadNameStr="$t('contractDetail.depositInvoice')" />
213
+ <div v-if="channel == 'official-website'" class="center-status">
214
+ <i class="el-icon-time"></i>
215
+ <span>{{ $t('contractDetail.Deposit_invoice_to_be_uploaded') }}</span>
216
+ </div>
217
+ </div>
218
+ </el-col>
219
+ <!-- 定金 -->
220
+ <!-- <div>contractFileInfo.depositInvoicePayFlag{{ contractFileInfo.depositInvoicePayFlag }}</div> -->
221
+ <!-- <div class="file-list" v-if="contractFileInfo.depositInvoicePayFlag">
222
+ <file-show @refresh="handleRefresh"
223
+ @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item"
224
+ v-for="(item, i) in contractFileInfo.proformaInvoiceWaterBillFileInfo" :key="i" />
225
+ <contract-file-drag-upload
226
+ @upload="
227
+ handleUpload(
228
+ $event,
229
+ contract.contractId,
230
+ 'contract',
231
+ 'contract_sign'
232
+ )
233
+ " :isShowTip="false" uploadNameStr="支付凭证" />
234
+ </div> -->
235
+ <el-col :span="12" class="center-status">
236
+ <div>
237
+ <!-- <div>
238
+ <i class="el-icon-time"></i>
239
+ <span style="color:#f00" v-if="!contractFileInfo.depositInvoicePayFlag">定金待付</span>
240
+ </div> -->
241
+ <el-row v-if="contract.contractType == 'sale'">
242
+ <el-col :span="16">
243
+ <div
244
+ v-if="contractFileInfo.depositInvoicePayFlag"
245
+ :class="['el-icon-success','customer-icon-success-color', 'success']"
246
+ style="width:max-content;margin-bottom:20px"
247
+ >
248
+ {{
249
+ channel !== "official-website"
250
+ ? $t('contractDetail.Deposit_received')
251
+ : $t("contractDetail.Deposit_Paid")
252
+ }}
253
+ </div>
254
+ <div v-else style="width:max-content">
255
+ <i class="el-icon-time"></i>
256
+ <span style="color: red">
257
+ {{
258
+ channel !== "official-website"
259
+ ? $t('contractDetail.deposit_unpaid')
260
+ : $t("contractDetail.Deposit_Unpaid")
261
+ }}
262
+ </span>
263
+ </div>
264
+ </el-col>
265
+ </el-row>
266
+ <el-row v-else>
267
+ <!-- <el-col :span="4">
268
+ <div style="color: #1890ff">{{ $t("contractDetail.deposit") }}</div>
269
+ </el-col> -->
270
+ <el-col :span="12">
271
+ <div
272
+ v-if="contractFileInfo.depositInvoicePayFlag"
273
+ style="width:max-content"
274
+ >
275
+ <i class="el-icon-success success"></i>
276
+ {{ $t('contractDetail.Deposit_Paid') }}</div>
277
+ <div v-else style="width:max-content">
278
+ <i class="el-icon-time"></i>
279
+ <span style="color: red">{{ $t('contractDetail.deposit_unpaid') }}</span>
280
+ </div>
281
+ </el-col>
282
+ </el-row>
283
+ <div v-if="!contractFileInfo.proformaInvoiceWaterBillFileInfo || contractFileInfo.proformaInvoiceWaterBillFileInfo.length == 0">
284
+ <!-- <i class="el-icon-time"></i> -->
285
+ {{ $t('contractDetail.deposit_unreceipt') }}
286
+ </div>
287
+ <div v-else style="color:#000">
288
+ <file-show @refresh="handleRefresh"
289
+ :hiddenOperation="channel == 'official-website'"
290
+ @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item"
291
+ v-for="(item, i) in contractFileInfo.proformaInvoiceWaterBillFileInfo" :key="i" />
292
+ </div>
293
+ </div>
294
+ </el-col>
295
+ </el-col>
296
+ <!-- 其他文件 -->
297
+ <el-col :span="24">
298
+ <div class="hr-class"></div>
299
+ </el-col>
300
+ <el-col :span="24">
301
+ <div class="content-root-row">
302
+ <ContentTitle :contentTitleProp="{
303
+ bgButton: $t('contractDetail.otherFile'),
304
+ bgTime: contract.contractType == 'sale' ? contractFileInfo.saleContractOtherFile && timeFormate(contractFileInfo.saleContractOtherFile) : contractFileInfo.purchaseContractOtherFile && timeFormate(contractFileInfo.purchaseContractOtherFile)
305
+ }"></ContentTitle>
306
+ <span class="bg-history" @click="handleHistory(contract.contractType == 'sale' ? 'sale_contract_other_file' : 'purchase_contract_other_file', linkId, false)">{{ $t('contractDetail.view_history') }}</span>
113
307
  </div>
114
308
  </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="
309
+ <el-col :span="24">
310
+ <!-- 销售-其他文件 -->
311
+ <div class="file-list" v-if="contract.contractType == 'sale'">
312
+ <file-show @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item"
313
+ v-for="(item, i) in contractFileInfo.saleContractOtherFile" :key="i" />
314
+ <contract-file-drag-upload @upload="
131
315
  handleUpload(
132
316
  $event,
133
317
  contract.contractId,
134
318
  'contract',
135
319
  'sale_contract_other_file'
136
320
  )
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="
321
+ " :isShowTip="false" :uploadNameStr="$t('contractDetail.otherFile')" />
322
+ </div>
323
+ <!-- 销售-采购文件 -->
324
+ <div class="file-list" v-else>
325
+ <file-show @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck" :file-info="item"
326
+ v-for="(item, i) in contractFileInfo.purchaseContractOtherFile" :key="i" />
327
+ <contract-file-drag-upload @upload="
153
328
  handleUpload(
154
329
  $event,
155
330
  contract.contractId,
156
331
  'contract',
157
332
  'purchase_contract_other_file'
158
333
  )
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
182
- "
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
210
- "
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>
334
+ "
335
+ :isShowTip="false"
336
+ :uploadNameStr="$t('contractDetail.otherFile')"
337
+ />
338
+ </div>
339
+ </el-col>
340
+ <el-col :span="24" v-if="channel !== 'official-website'" style="padding-top: 20px;">
341
+ <span>内部文件夹</span>
342
+ <div class="file-list">
343
+ <file-show @refresh="handleRefresh" @checked="handleChecked" :hiddenOperation="channel == 'official-website'" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item"
344
+ v-for="(item, i) in contractFileInfo.contractInternalFile" :key="i" />
345
+ <contract-file-drag-upload
346
+ @upload="
347
+ handleUpload(
348
+ $event,
349
+ contract.contractId,
350
+ 'contract',
351
+ 'contract_internal_file'
352
+ )"
353
+ :isShowTip="false" uploadNameStr="内部文件" />
354
+ </div>
355
+ </el-col>
356
+ </div>
357
+ </template>
358
+ </SectionSlot>
359
+ </div>
360
+ <!-- 提单号分栏 -->
361
+ <BillOfLadingNoTab
362
+ :contractFileInfo="contractFileInfo"
363
+ @changeShipBillNo="changeShipBillNo"
364
+ :progressInfo="shipProgressInfo"
365
+ :shipBillNoProp="shipBillNo"
366
+ ></BillOfLadingNoTab>
367
+ <!-- 装运 -->
368
+ <div id="contract_shipping_id">
369
+ <!-- 生成装运 -->
370
+ <SectionSlot @updateOpen="handleShippingUpdateOpen" :infoPro="shipProgressInfo" v-if="contractFileInfo && !contractFileInfo.shipmentFileInfoList">
371
+ <template v-slot:header>
372
+ <div style="position:relative">
373
+ <ProgressDetail :infoPro="shipProgressInfo"></ProgressDetail>
374
+ </div>
375
+ </template>
376
+ <template v-slot:content>
377
+ <div class="ship-empty" style="background-color:#fff">
378
+ <div>
379
+ <b>{{ $t('contractDetail.packingList') }}</b>{{ $t('contractDetail.update_after_shipping') }}
235
380
  </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
- />
381
+ <div>
382
+ <b>{{ $t('contractDetail.packingPhoto') }}</b>{{ $t('contractDetail.update_after_shipping') }}
246
383
  </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
- />
384
+ <div>
385
+ <b>{{ $t('contractDetail.draftBillOfLading') }}</b>{{ $t('contractDetail.update_after_shipping') }}
274
386
  </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
387
  </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
- )
348
- "
349
- >识别汇总</el-button>
350
- <el-button type="primary" size="mini" @click="editShipment(shipmentFileInfo)">编辑船运</el-button>
388
+ </template>
389
+ </SectionSlot>
390
+ <div v-else>
391
+ <SectionSlot @updateOpen="handleShippingUpdateOpen" :infoPro="shipProgressInfo" v-for="(
392
+ shipmentFileInfo, shipmentIndex
393
+ ) in contractFileInfo.shipmentFileInfoList" :key="shipmentIndex" v-if="shipmentIndex == shipBillNo">
394
+ <template v-slot:header>
395
+ <div style="position:relative">
396
+ <ProgressDetail :infoPro="shipProgressInfo"></ProgressDetail>
351
397
  </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>
398
+ </template>
399
+ <template v-slot:content>
400
+ <!-- <div class="content-root" v-if="shipProgressInfo.rate > 0"> -->
401
+ <div class="content-root" v-if="true">
402
+ <div
403
+ v-if="
404
+ channel !== 'official-website' &&
405
+ contractFileInfo.shipmentFileInfoList && contractFileInfo.shipmentFileInfoList.length > 0 &&
406
+ contract.contractType == 'purchase'
407
+ "
408
+ style="margin-bottom: 20px"
409
+ class="preview-download-root"
410
+ >
411
+ <div
412
+ v-if="shipmentItemData && shipmentItemData.shipmentId"
413
+ @click="
414
+ identifyPage(
415
+ '',
416
+ shipmentItemData && shipmentItemData.shipmentId,
417
+ 'summary'
418
+ )
419
+ "
420
+ class="preview-download"
421
+ >{{ $t('contractDetail.identification_summary') }}</div>
422
+ <div class="preview-download" @click="editShipment(shipmentItemData)">{{ $t('contractDetail.edit_shipment') }}</div>
423
+ </div>
424
+ <!-- 订舱资料 -->
425
+ <div class="content-root-row">
426
+ <ContentTitle :contentTitleProp="{
427
+ bgButton: $t('contractDetail.bookingConfirmation'),
428
+ bgTime: shipmentFileInfo.bookingConfirmation && timeFormate(shipmentFileInfo.bookingConfirmation),
429
+ bgcolor: shipProgressInfo.bgcolor
430
+ }">
431
+ </ContentTitle>
432
+ <span class="bg-history" v-if="channel !== 'official-website'" @click="handleHistory(contract.contractType == 'sale' ? 'shipment_booking_confirmation,sale_shipment_internal_file' : 'shipment_booking_confirmation,purchase_shipment_internal_file', shipmentFileInfo.shipmentId, false)">{{ $t('contractDetail.view_history') }}</span>
433
+ <span class="bg-history" v-else @click="handleHistory('shipment_booking_confirmation', shipmentFileInfo.shipmentId, false)">{{ $t('contractDetail.view_history') }}</span>
434
+ </div>
435
+ <el-row>
436
+ <el-col :span="24">
361
437
  <div class="file-list">
438
+ <el-col v-if=" contract.contractType == 'sale' && (!shipmentFileInfo.bookingConfirmation || shipmentFileInfo.bookingConfirmation && shipmentFileInfo.bookingConfirmation.length == 0)" :span="12" class="center-status">
439
+ <i class="el-icon-time"></i>
440
+ {{ $t('contractDetail.Booking_information_to_be_updated') }}
441
+ </el-col>
442
+ <file-show @refresh="handleRefresh" @checked="handleChecked" :hiddenOperation="channel == 'official-website'" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item"
443
+ v-for="(item, i) in shipmentFileInfo.bookingConfirmation" :key="i" />
444
+ <!-- 6. 销售去掉订舱资料上传功能 https://udswem7m8c.feishu.cn/wiki/Tm4SwKcqviRkTUkKNCxc2bnBnVb -->
445
+ <contract-file-drag-upload
446
+ v-if="channel !== 'official-website' && contract.contractType == 'purchase'"
447
+ @upload="
448
+ handleUpload(
449
+ $event,
450
+ shipmentFileInfo.shipmentId,
451
+ 'shipment',
452
+ 'shipment_booking_confirmation'
453
+ )
454
+ " :isShowTip="false" :uploadNameStr="$t('contractDetail.bookingConfirmation')" />
455
+ </div>
456
+ </el-col>
457
+ </el-row>
458
+
459
+ <el-row v-if="channel !== 'official-website'" style="padding-top: 20px;">
460
+ <el-col :span="24">
461
+ <span>内部文件夹</span>
462
+ <div class="file-list" v-if="contract.contractType == 'purchase'">
362
463
  <file-show
363
- :hiddenOperation="channel == 'official-website'"
364
- @refresh="handleRefresh"
365
- @checked="handleChecked"
366
- @uncheck="handleUncheck"
464
+ @refresh="handleRefresh"
465
+ @checked="handleChecked"
466
+ :hiddenOperation="channel == 'official-website'"
467
+ @uncheck="handleUncheck"
468
+ :selectFileListProp="selectFileList"
367
469
  :file-info="item"
368
- v-for="(item, i) in shipmentFileInfo.bookingConfirmation"
369
- :key="i"
370
- />
470
+ v-for="(item, i) in shipmentFileInfo.purchaseShipmentInternalFile" :key="i" />
371
471
  <contract-file-drag-upload
372
- v-if="channel !== 'official-website'"
373
472
  @upload="
374
473
  handleUpload(
375
474
  $event,
376
475
  shipmentFileInfo.shipmentId,
377
476
  'shipment',
378
- 'shipment_booking_confirmation'
379
- )
380
- "
381
- :isShowTip="false"
382
- />
477
+ 'purchase_shipment_internal_file'
478
+ )"
479
+ :isShowTip="false" uploadNameStr="内部文件" />
480
+ </div>
481
+
482
+ <div class="file-list" v-else>
483
+ <file-show
484
+ @refresh="handleRefresh"
485
+ @checked="handleChecked"
486
+ :hiddenOperation="channel == 'official-website'"
487
+ @uncheck="handleUncheck"
488
+ :selectFileListProp="selectFileList"
489
+ :file-info="item"
490
+ v-for="(item, i) in shipmentFileInfo.saleShipmentInternalFile" :key="i" />
491
+ <contract-file-drag-upload
492
+ @upload="
493
+ handleUpload(
494
+ $event,
495
+ shipmentFileInfo.shipmentId,
496
+ 'shipment',
497
+ 'sale_shipment_internal_file'
498
+ )"
499
+ :isShowTip="false" uploadNameStr="内部文件" />
500
+ </div>
501
+
502
+ </el-col>
503
+ </el-row>
504
+
505
+ <el-col :span="24">
506
+ <div class="hr-class"></div>
507
+ </el-col>
508
+
509
+ <!-- 装箱单 -->
510
+ <el-row>
511
+ <el-col :span="24">
512
+ <div class="content-root-row">
513
+ <ContentTitle :contentTitleProp="{
514
+ bgButton: $t('contractDetail.packingList'),
515
+ bgTime: contract.contractType == 'purchase' ? shipmentFileInfo.purchasePersonalPackingList && timeFormate(shipmentFileInfo.purchasePersonalPackingList) : shipmentFileInfo.packingList && timeFormate(shipmentFileInfo.packingList),
516
+ bgcolor: shipProgressInfo.bgcolor
517
+ }"></ContentTitle>
518
+ <span class="bg-history" @click="handleHistory('purchase_personal_shipment_packing_list', shipmentFileInfo.shipmentId)">{{ $t('contractDetail.view_history') }}</span>
519
+ <div class="sub-title" style="margin-bottom: 0;" v-if="contract.contractType == 'purchase'">
520
+ <span style="color: #1890ff; cursor: pointer" v-if="shipmentFileInfo &&
521
+ shipmentFileInfo.purchasePersonalPackingList &&
522
+ shipmentFileInfo.purchasePersonalPackingList[0] &&
523
+ shipmentFileInfo.purchasePersonalPackingList[0]
524
+ .url
525
+ " @click="
526
+ identifyPage(
527
+ shipmentFileInfo &&
528
+ shipmentFileInfo.purchasePersonalPackingList &&
529
+ shipmentFileInfo
530
+ .purchasePersonalPackingList[0] &&
531
+ shipmentFileInfo
532
+ .purchasePersonalPackingList[0].url,
533
+ shipmentFileInfo && shipmentFileInfo.shipmentId,
534
+ 'packing'
535
+ )
536
+ ">
537
+ <el-divider direction="vertical"></el-divider>
538
+ {{ identify }}
539
+ </span>
383
540
  </div>
384
541
  </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>
402
- </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="(
542
+ </el-col>
543
+ </el-row>
544
+ <el-row v-if="contract.contractType == 'purchase'">
545
+ <div>
546
+ <ShowAndHide :dataInfoArr="shipmentFileInfo.purchasePersonalPackingList" heightStr="94px" :HideAmount="2">
547
+ <template>
548
+ <div style="display: flex; justify-content: space-between;width: 100%;">
549
+ <el-col :span="12" v-if="shipmentFileInfo.purchasePersonalPackingList && shipmentFileInfo.purchasePersonalPackingList.length > 0">
550
+ <div class="file-list">
551
+ <file-show :hiddenOperation=" channel == 'official-website'" @refresh="handleRefresh"
552
+ @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item" v-for="(
439
553
  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(
554
+ ) in shipmentFileInfo.purchasePersonalPackingList" :key="i" />
555
+ </div>
556
+ </el-col>
557
+ <el-col :span="12">
558
+ <div class="file-list">
559
+ <contract-file-drag-upload
560
+ @upload="handleUpload(
447
561
  $event,
448
562
  shipmentFileInfo.shipmentId,
449
563
  'shipment',
450
564
  '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
-
462
- <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
- />
474
- <contract-file-drag-upload
475
- v-if="channel !== 'official-website'"
476
- @upload="
477
- handleUpload(
478
- $event,
479
- shipmentFileInfo.shipmentId,
480
- 'shipment',
481
- 'sale_personal_shipment_packing_list'
482
- )
483
- "
484
- :isShowTip="false"
485
- />
486
- </div>
565
+ )"
566
+ :isShowTip="false"
567
+ :uploadNameStr="$t('contractDetail.packingList')"
568
+ />
569
+ </div>
570
+ </el-col>
487
571
  </div>
488
- </el-row>
489
- </el-col>
490
- </el-row>
491
- <el-divider></el-divider>
572
+ </template>
573
+ </ShowAndHide>
574
+ </div>
575
+ </el-row>
576
+ <el-row v-if="contract.contractType == 'sale'">
492
577
  <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>
578
+ <ShowAndHide :dataInfoArr="shipmentFileInfo.packingList || []" heightStr="94px" :HideAmount="2">
579
+ <el-col :span="24">
524
580
  <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
- />
581
+ <el-col :span="12" v-if="!shipmentFileInfo.packingList || shipmentFileInfo.packingList.length == 0" class="center-status">
582
+ <i class="el-icon-time"></i>
583
+ {{ $t('contractDetail.Packing_list_to_be_updated') }}
584
+ </el-col>
585
+ <file-show :hiddenOperation="channel == 'official-website'" @refresh="handleRefresh"
586
+ @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item" v-for="(
587
+ item, i
588
+ ) in shipmentFileInfo.packingList || []" :key="i" />
589
+ <!-- sale 只做展示 -->
590
+ <!-- <contract-file-drag-upload v-if="channel !== 'official-website'" @upload="
591
+ handleUpload(
592
+ $event,
593
+ shipmentFileInfo.shipmentId,
594
+ 'shipment',
595
+ 'sale_personal_shipment_packing_list'
596
+ )
597
+ "
598
+ :isShowTip="false"
599
+ uploadNameStr="装箱单"
600
+ /> -->
601
+ </div>
602
+ </el-col>
603
+ </ShowAndHide>
604
+ </div>
605
+ </el-row>
606
+
607
+ <!-- 装箱照片 -->
608
+ <el-col :span="24">
609
+ <div class="hr-class"></div>
610
+ </el-col>
611
+ <div v-for="(
612
+ containerFile, i
613
+ ) in shipmentFileInfo.containerFileInfoRespList" :key="i">
614
+ <el-col :span="24">
615
+ <div class="content-root-row">
616
+ <ContentTitle :contentTitleProp="{
617
+ bgButton: $t('contractDetail.packingPhoto')+ ' ' + containerFile.containerNo,
618
+ bgTime: containerFile.packingPhoto && timeFormate(containerFile.packingPhoto),
619
+ bgcolor: shipProgressInfo.bgcolor
620
+ }"></ContentTitle>
621
+ <span class="bg-history" @click="handleHistory('container_packing_photo', containerFile.containerId, false)">{{ $t('contractDetail.view_history') }}</span>
622
+ <div v-if="containerFile && containerFile.packingPhoto.length" style="display:flex">
623
+ <div class="border-button border-button-share"
624
+ @click.stop="shareContainerUrl(containerFile.containerId)">{{ $t('contractDetail.share') }}
538
625
  </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
- />
626
+ <el-divider direction="vertical"></el-divider>
627
+ <div :class="hasSelectAllContainer(containerFile.containerId) ? 'border-button' : 'border-button border-button-blue'" @click.stop="clickSelectAllContainer(containerFile.containerId)">
628
+ {{ hasSelectAllContainer(containerFile.containerId) ? $t('contractDetail.select_all') : $t('contractDetail.Deselect') }}
549
629
  </div>
550
-
551
- <contract-file-drag-upload
552
- v-if="channel !== 'official-website'"
553
- @upload="
630
+ </div>
631
+ </div>
632
+ </el-col>
633
+ <el-col :span="24">
634
+ <div style="display:flex">
635
+ <!-- 文件预览 -->
636
+ <IMGPreviewCheckBox :ref="`container_packing_photo_${containerFile.containerId}`"
637
+ :imgArr="containerFile.packingPhoto"
638
+ :info="containerFile"
639
+ @refresh="handleRefresh"
640
+ >
641
+ <template>
642
+ <contract-file-drag-upload v-show="channel !== 'official-website'" @upload="
554
643
  handleUpload(
555
644
  $event,
556
645
  containerFile.containerId,
557
646
  'container',
558
647
  'container_packing_photo'
559
648
  )
560
- "
561
- :isShowTip="false"
649
+ " :isShowTip="false" photos
650
+ style="margin-top:0px"
651
+ />
652
+ </template>
653
+ </IMGPreviewCheckBox>
654
+ </div>
655
+ <!-- <el-col :span="12" v-if="containerFile.packingPhoto && containerFile.packingPhoto.length == 0" class="center-status">
656
+ <i class="el-icon-time"></i>
657
+ 装箱照片待更新
658
+ </el-col> -->
659
+ </el-col>
660
+ </div>
661
+
662
+ <el-col :span="24">
663
+ <div class="hr-class"></div>
664
+ </el-col>
665
+ <el-col :span="24" style="display:flex;align-items:center">
666
+ <div class="content-root-row">
667
+ <ContentTitle :contentTitleProp="{
668
+ bgButton: $t('contractDetail.draftBillOfLading'),
669
+ bgTime: shipmentFileInfo.draftBillOfLading && timeFormate(shipmentFileInfo.draftBillOfLading),
670
+ bgcolor: shipProgressInfo.bgcolor
671
+ }"></ContentTitle>
672
+ <span class="bg-history" @click="handleHistory('draft_bill_of_lading', shipmentFileInfo.shipmentId, false)">{{ $t('contractDetail.view_history') }}</span>
673
+ </div>
674
+
675
+ <span
676
+ style="color: #1890ff; cursor: pointer;font-size:14px"
677
+ v-if="draftBillOfLadingUrl(shipmentFileInfo)"
678
+ @click="
679
+ identifyPage(
680
+ draftBillOfLadingUrl(shipmentFileInfo),
681
+ shipmentFileInfo && shipmentFileInfo.shipmentId,
682
+ 'draft_bill'
683
+ )
684
+ "
685
+ >
686
+ <el-divider direction="vertical"></el-divider>
687
+ {{ identify }}</span>
688
+ </el-col>
689
+ <el-col :span="24">
690
+ <el-col :span="12">
691
+ <div class="file-list">
692
+ <file-show @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item"
693
+ :hiddenOperation="channel == 'official-website'"
694
+ v-for="(
695
+ item, i
696
+ ) in shipmentFileInfo.draftBillOfLading" :key="i" />
697
+
698
+ <contract-file-drag-upload v-show="channel !== 'official-website' && (!shipmentFileInfo.draftBillOfLading || shipmentFileInfo.draftBillOfLading.length == 0)" @upload="
699
+ handleUpload(
700
+ $event,
701
+ shipmentFileInfo.shipmentId,
702
+ 'shipment',
703
+ 'draft_bill_of_lading'
704
+ )
705
+ " :isShowTip="false"
706
+ :uploadNameStr="$t('contractDetail.draftBillOfLading')"
562
707
  />
563
- </div>
564
- </el-row>
708
+ </div>
709
+ </el-col>
710
+ <el-col :span="12" class="center-status" v-if="channel != 'official-website'">
711
+ <div v-if="shipmentItemData.confirmDraftBlFlag">
712
+ <i class="el-icon-success success"></i> {{ $t('contractDetail.BL_info_confirmed') }}
713
+ </div>
714
+ <div v-else-if="contract.contractType == 'sale' && shipmentFileInfo.draftBillOfLading.length" class="confirm-draft-bl" @click.stop="shipmentConfirmDraftBlFun">{{ $t('contractDetail.bl_draft_confirm') }}</div>
715
+ <el-col :span="24" v-else class="center-status">
716
+ <i class="el-icon-time"></i>
717
+ {{ $t('contractDetail.Draft_bill_to_be_confirmed') }}
718
+ </el-col>
719
+
720
+ </el-col>
721
+ <el-col :span="24">
722
+ <el-col :span="12" v-if="(shipmentFileInfo.draftBillOfLading == null || shipmentFileInfo.draftBillOfLading && shipmentFileInfo.draftBillOfLading.length == 0) && channel == 'official-website'" class="center-status">
723
+ <i class="el-icon-time"></i>
724
+ {{ $t('contractDetail.Draft_bill_of_lading_to_be_updated') }}
725
+ </el-col>
726
+ <el-col :span="12" v-if="!shipmentItemData.confirmDraftBlFlag && channel == 'official-website'" class="center-status">
727
+ <i class="el-icon-time"></i>
728
+ {{ $t('contractDetail.Draft_bill_to_be_confirmed') }}
729
+ </el-col>
730
+ </el-col>
731
+ </el-col>
732
+
733
+ <el-col :span="24">
734
+ <div class="hr-class"></div>
735
+ </el-col>
736
+ <el-col :span="24">
737
+ <div class="content-root-row">
738
+ <ContentTitle :contentTitleProp="{
739
+ bgButton: $t('contractDetail.Copy_of_formal_bill_of_lading'),
740
+ bgTime: shipmentFileInfo.originalBillOfLadingCopy && timeFormate(shipmentFileInfo.originalBillOfLadingCopy),
741
+ bgcolor: shipProgressInfo.bgcolor
742
+ }"></ContentTitle>
743
+ <span class="bg-history" @click="handleHistory('original_bill_of_lading_copy', shipmentFileInfo.shipmentId, false)">{{ $t('contractDetail.view_history') }}</span>
744
+ </div>
745
+ </el-col>
746
+ <el-col :span="24">
747
+ <div class="file-list">
748
+ <file-show @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item"
749
+ :hiddenOperation="channel == 'official-website'"
750
+ v-for="(
751
+ item, i
752
+ ) in shipmentFileInfo.originalBillOfLadingCopy" :key="i" />
753
+ <contract-file-drag-upload v-show="(!shipmentFileInfo.originalBillOfLadingCopy || shipmentFileInfo.originalBillOfLadingCopy.length == 0) && channel !== 'official-website'" @upload="
754
+ handleUpload(
755
+ $event,
756
+ shipmentFileInfo.shipmentId,
757
+ 'shipment',
758
+ 'original_bill_of_lading_copy'
759
+ )
760
+ " :isShowTip="false"
761
+ :uploadNameStr="$t('contractDetail.Copy_of_formal_bill_of_lading')"
762
+ />
763
+ </div>
764
+ <el-col :span="12" v-if="(shipmentFileInfo.originalBillOfLadingCopy == null || shipmentFileInfo.originalBillOfLadingCopy && shipmentFileInfo.originalBillOfLadingCopy.length == 0) && channel == 'official-website'" class="center-status">
765
+ <i class="el-icon-time"></i>
766
+ {{ $t('contractDetail.Formal_bill_of_lading_copy_to_be_updated') }}
767
+ </el-col>
768
+ </el-col>
769
+ <!-- 临时尾款发票 -->
770
+ <el-col :span="24" v-if="contract.quoteType != 'FIXED'">
771
+ <div class="hr-class"></div>
772
+ </el-col>
773
+ <el-col :span="24" v-if="contract.quoteType != 'FIXED'">
774
+ <div class="content-root-row">
775
+ <ContentTitle :contentTitleProp="{
776
+ bgButton: $t('contractDetail.saleTemporaryFinallyInvoice'),
777
+ bgTime: shipmentFileInfo.salePersonalTemporaryFinallyInvoice && timeFormate(shipmentFileInfo.salePersonalTemporaryFinallyInvoice),
778
+ bgcolor: shipProgressInfo.bgcolor
779
+ }"></ContentTitle>
780
+ <span class="bg-history" @click="handleHistory(contract.contractType == 'sale' ? 'sale_personal_temporary_finally_invoice' : 'purchase_temporary_finally_invoice', shipmentFileInfo.shipmentId)">{{ $t('contractDetail.view_history') }}</span>
565
781
  </div>
566
- <el-divider></el-divider>
567
782
  <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>
783
+ <span
784
+ v-if="
785
+ channel !== 'official-website' &&
786
+ contract.contractType == 'purchase'
787
+ "
788
+ style="color: #1890ff; cursor: pointer; margin-left: 10px"
789
+ @click.stop="identifyPageBoth(shipmentFileInfo, 1)"
790
+ >
791
+ <el-divider direction="vertical"></el-divider>
792
+ {{ identify }}</span>
793
+ </div>
794
+ <el-col :span="12" v-if="channel == 'official-website' && shipmentFileInfo.salePersonalTemporaryFinallyInvoice && shipmentFileInfo.salePersonalTemporaryFinallyInvoice.length == 0" class="center-status">
795
+ <i class="el-icon-time"></i>
796
+ {{ $t('contractDetail.Temporary_final_payment_invoice_to_be_updated') }}
797
+ </el-col>
798
+ <div>
799
+ <div class="file-list" v-if="contract.contractType == 'sale'">
800
+ <div class="file-list">
801
+ <file-show
802
+ :hiddenOperation="channel == 'official-website'"
803
+ @refresh="handleRefresh"
804
+ @checked="handleChecked"
805
+ @uncheck="handleUncheck"
806
+ :file-info="
807
+ getLastFileByList(
808
+ shipmentFileInfo.saleTemporaryFinallyInvoice
809
+ )
810
+ "
811
+ />
812
+ </div>
813
+ <file-show :hiddenOperation="channel == 'official-website'" @refresh="handleRefresh"
814
+ @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item" v-for="(
815
+ item, i
816
+ ) in shipmentFileInfo.salePersonalTemporaryFinallyInvoice" :key="i" />
817
+
818
+ <contract-file-drag-upload v-show="(!shipmentFileInfo.salePersonalTemporaryFinallyInvoice || shipmentFileInfo.salePersonalTemporaryFinallyInvoice.length == 0) && channel !== 'official-website'" @upload="
819
+ handleUpload(
820
+ $event,
821
+ shipmentFileInfo.shipmentId,
822
+ 'shipment',
823
+ 'sale_personal_temporary_finally_invoice'
824
+ )"
825
+ :isShowTip="false" :uploadNameStr="$t('contractDetail.saleTemporaryFinallyInvoice')" />
826
+ </div>
827
+ <div class="file-list" v-else>
828
+ <file-show :hiddenOperation="channel == 'official-website'" @refresh="handleRefresh"
829
+ @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item" v-for="(
830
+ item, i
831
+ ) in shipmentFileInfo.purchaseTemporaryFinallyInvoice" :key="i" />
832
+
833
+ <contract-file-drag-upload v-show="(!shipmentFileInfo.purchaseTemporaryFinallyInvoice || shipmentFileInfo.purchaseTemporaryFinallyInvoice.length == 0) && channel !== 'official-website'" @upload="
834
+ handleUpload(
835
+ $event,
836
+ shipmentFileInfo.shipmentId,
837
+ 'shipment',
838
+ 'purchase_temporary_finally_invoice'
839
+ )"
840
+ :isShowTip="false" :uploadNameStr="$t('contractDetail.saleTemporaryFinallyInvoice')" />
592
841
  </div>
593
- <el-row v-if="contract.quoteType != 'FIXED'">
842
+ </div>
843
+ </el-col>
844
+
845
+ <el-col :span="24">
846
+ <div class="hr-class"></div>
847
+ </el-col>
848
+ <el-col :span="24">
849
+ <el-col :span="24">
850
+ <div style="margin-bottom:-20px">
851
+ <span
852
+ v-if="channel !== 'official-website' &&
853
+ contract.contractType == 'purchase' "
854
+ style="color: #1890ff; margin-left: 100px;cursor:pointer"
855
+ @click.stop="getShipmentPurchase(shipmentFileInfo)"
856
+ >
857
+ {{
858
+ shipmentPurchaseAmountMessage}}
859
+ </span>
860
+ <el-popover
861
+ v-if="channel !== 'official-website' &&
862
+ contract.contractType == 'purchase' "
863
+ placement="top-start"
864
+ title=""
865
+ width="380"
866
+ trigger="hover"
867
+ :content="$t('contractDetail.final_payment_warning')">
868
+ <i class="el-icon-question" slot="reference" style="color:#c2c4c5;"/>
869
+ </el-popover>
870
+ </div>
871
+ <el-col :span="12" :getNewInfo="getNewInfo">
872
+ <div style="display:flex;align-items:center">
873
+ <ContentTitle :contentTitleProp="{
874
+ bgButton: $t('contractDetail.finallyInvoice'),
875
+ bgTime: contract.contractType == 'sale' ? getNewInfo && timeFormate(getNewInfo) : shipmentFileInfo.purchaseFinallyInvoice && timeFormate(shipmentFileInfo.purchaseFinallyInvoice),
876
+ bgcolor: shipProgressInfo.bgcolor
877
+ }"></ContentTitle>
878
+ <span class="bg-history" @click="handleHistory(contract.contractType == 'sale' ? 'sale_personal_finally_invoice,sale_finally_invoice' : 'purchase_finally_invoice', shipmentFileInfo.shipmentId)">{{ $t('contractDetail.view_history') }}</span>
879
+ <span
880
+ v-if="
881
+ channel !== 'official-website' && contract.contractType == 'purchase' && shipmentFileInfo.purchaseFinallyInvoice && shipmentFileInfo.purchaseFinallyInvoice.length > 0"
882
+ style="color: #1890ff; cursor: pointer; margin-left: 10px;font-size:14px;"
883
+ @click.stop="identifyPageBoth(shipmentFileInfo, 2)"
884
+ >
885
+ <el-divider direction="vertical"></el-divider>
886
+ {{ identify }}
887
+ </span>
888
+ </div>
889
+ <!-- <div class="sub-title"> -->
890
+ <!-- {{ $t("contractDetail.finallyInvoice") }}
891
+ <el-button
892
+ v-if="channel !== 'official-website'"
893
+ type="text"
894
+ size="small"
895
+ @click="skipInvoiceList"
896
+ >发票列表</el-button> -->
897
+ <!-- <el-button
898
+ style="color: #1890ff; cursor: pointer; margin-left: 10px"
899
+ v-if="channel !== 'official-website' &&
900
+ contract.contractType == 'purchase'"
901
+ type="text"
902
+ size="small"
903
+ @click="getShipmentPurchase(shipmentFileInfo)"
904
+ >
905
+ 点击可查看明细
906
+ </el-button> -->
907
+ <!-- </div> -->
908
+ <!-- 管理台 -->
909
+ <div v-if="channel != 'official-website'">
594
910
  <div v-if="contract.contractType == 'sale'">
595
- <el-col :span="6">
911
+ <!-- <el-col :span="12">
596
912
  <div style="margin-left: 60px">
597
- <div
598
- class="sub-title"
599
- >{{ $t("contractDetail.saleTemporaryFinallyInvoice") }}</div>
600
913
  <div class="file-list">
601
914
  <file-show
602
915
  :hiddenOperation="channel == 'official-website'"
603
916
  @refresh="handleRefresh"
604
917
  @checked="handleChecked"
605
918
  @uncheck="handleUncheck"
919
+ :selectFileListProp="selectFileList"
606
920
  :file-info="
607
921
  getLastFileByList(
608
- shipmentFileInfo.saleTemporaryFinallyInvoice
922
+ shipmentFileInfo.saleFinallyInvoice
609
923
  )
610
924
  "
611
925
  />
612
926
  </div>
613
927
  </div>
614
- </el-col>
615
- <el-col :span="18">
928
+ </el-col> -->
929
+ <!-- 尾款发票 -->
930
+ <el-col :span="12">
616
931
  <div>
617
932
  <div class="file-list">
618
933
  <file-show
@@ -620,312 +935,110 @@
620
935
  @refresh="handleRefresh"
621
936
  @checked="handleChecked"
622
937
  @uncheck="handleUncheck"
938
+ :selectFileListProp="selectFileList"
623
939
  :file-info="item"
624
940
  v-for="(
625
941
  item, i
626
- ) in shipmentFileInfo.salePersonalTemporaryFinallyInvoice"
942
+ ) in getNewInfo"
627
943
  :key="i"
628
944
  />
629
945
  <contract-file-drag-upload
630
- v-if="channel !== 'official-website'"
946
+ v-show="(!getNewInfo) && channel !== 'official-website'"
631
947
  @upload="
632
948
  handleUpload(
633
949
  $event,
634
950
  shipmentFileInfo.shipmentId,
635
951
  'shipment',
636
- 'sale_personal_temporary_finally_invoice'
952
+ 'sale_personal_finally_invoice'
637
953
  )
638
954
  "
639
955
  :isShowTip="false"
956
+ :uploadNameStr="$t('contractDetail.finallyInvoice')"
640
957
  />
641
958
  </div>
642
959
  </div>
643
960
  </el-col>
644
961
  </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>
962
+ <!-- purchase -->
963
+ <div v-else>
964
+ <el-col :span="12">
965
+ <div style="margin-left: 60px">
966
+ <div class="file-list">
967
+ <file-show
968
+ :hiddenOperation="channel == 'official-website'"
969
+ @refresh="handleRefresh"
970
+ @checked="handleChecked"
971
+ @uncheck="handleUncheck"
972
+ :selectFileListProp="selectFileList"
973
+ :file-info="item"
974
+ v-for="(
975
+ item, i
976
+ ) in shipmentFileInfo.purchaseFinallyInvoice"
977
+ :key="i"
978
+ />
979
+ <div>
980
+ <el-button
981
+ style="margin-top: 10px"
982
+ type="primary"
983
+ size="mini"
984
+ @click="
985
+ uploadFinalInvoice(
986
+ 'finally',
987
+ shipmentFileInfo.shipmentId
988
+ )
989
+ "
990
+ >{{ $t('contractDetail.uploadPurchaseInvoice') }}</el-button>
991
+ </div>
992
+ </div>
772
993
  </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>
994
+ </el-col>
825
995
  </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>
996
+ </div>
997
+ <div v-else>
998
+ <!-- 买家端 -->
999
+ <el-col>
832
1000
  <div class="file-list">
833
1001
  <file-show
834
1002
  :hiddenOperation="channel == 'official-website'"
835
1003
  @refresh="handleRefresh"
836
1004
  @checked="handleChecked"
837
1005
  @uncheck="handleUncheck"
1006
+ :selectFileListProp="selectFileList"
838
1007
  :file-info="item"
839
1008
  v-for="(
840
1009
  item, i
841
- ) in shipmentFileInfo.originalBillOfLadingCopy"
1010
+ ) in shipmentFileInfo.saleFinallyInvoice"
842
1011
  :key="i"
843
1012
  />
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
1013
  </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
- />
909
- </div>
910
- </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
- }}
1014
+ </el-col>
1015
+ <!-- <el-col :span="12" class="center-status">
1016
+ <div>
1017
+ <div v-if="!shipmentItemData.balanceInvoiceFullyPaidFlag">
1018
+ <i class="el-icon-time"></i>
1019
+ <span style="color:#f00">{{ $t('contractDetail.Final_payment_unpaid') }}</span>
1020
+ </div>
1021
+ <div v-if="!shipmentFileInfo.waterBill || shipmentFileInfo.waterBill && shipmentFileInfo.waterBill.length == 0">支付凭证待提供</div>
1022
+ </div>
1023
+ </el-col> -->
923
1024
  </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>
1025
+ </el-col>
1026
+ <el-col :span="12">
1027
+ <!-- 支付凭证 -->
1028
+ <ContentTitle :contentTitleProp="{
1029
+ bgButton: $t('contractDetail.Final_payment_voucher'),
1030
+ bgTime: shipmentFileInfo.waterBill && timeFormate(shipmentFileInfo.waterBill),
1031
+ bgcolor: getGoodsProgressInfo.bgcolor,
1032
+ successFlag: true
1033
+ }"></ContentTitle>
1034
+ <div v-if="shipmentFileInfo.balanceInvoiceFullyPaidFlag">
1035
+ <i class="el-icon-success success"></i>
1036
+ <span style="color:#67C23A">{{ $t('contractDetail.balancePaid_true') }}</span>
1037
+ </div>
1038
+ <div v-else>
1039
+ <i class="el-icon-time"></i>
1040
+ <span style="color:#f00">{{ $t('contractDetail.Final_payment_unpaid') }}</span>
1041
+ </div>
929
1042
 
930
1043
  <div class="file-list">
931
1044
  <file-show
@@ -938,194 +1051,264 @@
938
1051
  :key="i"
939
1052
  />
940
1053
  </div>
941
- </div>
942
- </el-col>
943
- <!-- <el-col :span="16">
944
- <div v-if="contract.contractType == 'sale'">
945
- <div class="file-list">
946
- <file-show
947
- :hiddenOperation="channel == 'official-website'"
948
- @refresh="handleRefresh"
949
- @checked="handleChecked"
950
- @uncheck="handleUncheck"
951
- :file-info="item"
952
- v-for="(
953
- item, i
954
- ) in shipmentFileInfo.salePersonalWaterBill"
955
- :key="i"
956
- />
957
- <contract-file-drag-upload
958
- @upload="
959
- handleUpload(
960
- $event,
961
- shipmentFileInfo.shipmentId,
962
- 'shipment',
963
- 'sale_personal_waterBill'
964
- )
965
- "
966
- :isShowTip="false"
967
- />
1054
+ <div v-if="!shipmentFileInfo.waterBill || shipmentFileInfo.waterBill.length == 0" class="center-status-block" style="align-items: flex-start">
1055
+ <div>
1056
+ <i class="el-icon-time"></i>
1057
+ {{ $t('contractDetail.deposit_unreceipt') }}
1058
+ </div>
968
1059
  </div>
969
- </div>
970
- <div v-else>
971
- <div class="file-list">
972
- <file-show
973
- :hiddenOperation="channel == 'official-website'"
974
- @refresh="handleRefresh"
975
- @checked="handleChecked"
976
- @uncheck="handleUncheck"
977
- :file-info="item"
978
- v-for="(
1060
+ </el-col>
1061
+ </el-col>
1062
+ <div>
1063
+ </div>
1064
+ </el-col>
1065
+ <el-col :span="24">
1066
+ <div class="hr-class"></div>
1067
+ </el-col>
1068
+
1069
+ <el-col :span="24">
1070
+ <div class="content-root-row">
1071
+ <ContentTitle :contentTitleProp="{
1072
+ bgButton: $t('contractDetail.otherFile'),
1073
+ bgTime: contract.contractType == 'sale' ? shipmentFileInfo.saleShipmentOther && timeFormate(shipmentFileInfo.saleShipmentOther) : shipmentFileInfo.purchaseShipmentOther && timeFormate(shipmentFileInfo.purchaseShipmentOther),
1074
+ bgcolor: shipProgressInfo.bgcolor
1075
+ }"></ContentTitle>
1076
+ <span class="bg-history" @click="handleHistory('sale_shipment_other', shipmentFileInfo.shipmentId, false)">{{ $t('contractDetail.view_history') }}</span>
1077
+ </div>
1078
+ </el-col>
1079
+ <el-col :span="24" v-if="contract.contractType == 'sale'">
1080
+ <div class="file-list">
1081
+ <file-show @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item"
1082
+ v-for="(item, i) in shipmentFileInfo.saleShipmentOther" :key="i" />
1083
+ <contract-file-drag-upload @upload="
1084
+ handleUpload(
1085
+ $event,
1086
+ shipmentFileInfo.shipmentId,
1087
+ 'shipment',
1088
+ 'sale_shipment_other'
1089
+ )
1090
+ " :isShowTip="false" :uploadNameStr="$t('contractDetail.otherFile')" />
1091
+ </div>
1092
+ </el-col>
1093
+ <el-col :span="24" v-else>
1094
+ <div class="file-list">
1095
+ <file-show @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck" :selectFileListProp="selectFileList" :file-info="item"
1096
+ :hiddenOperation="channel == 'official-website'"
1097
+ v-for="(
979
1098
  item, i
980
- ) in shipmentFileInfo.purchasePersonalWaterBill"
981
- :key="i"
982
- />
983
- <contract-file-drag-upload
984
- @upload="
985
- handleUpload(
986
- $event,
987
- shipmentFileInfo.shipmentId,
988
- 'shipment',
989
- 'purchase_personal_waterBill'
990
- )
991
- "
992
- :isShowTip="false"
993
- />
994
- </div>
995
- </div>
996
- </el-col>-->
997
- </el-row>
998
- <el-row>
999
- <div>
1000
- <div class="sub-title">{{ $t("contractDetail.swift") }}</div>
1001
- <div class="file-list">
1002
- <file-show
1003
- :hiddenOperation="channel == 'official-website'"
1004
- @refresh="handleRefresh"
1005
- @checked="handleChecked"
1006
- @uncheck="handleUncheck"
1007
- :file-info="item"
1008
- v-for="(item, i) in shipmentFileInfo.voucher"
1009
- :key="i"
1010
- />
1011
- </div>
1012
- </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>
1099
+ ) in shipmentFileInfo.purchaseShipmentOther" :key="i" />
1100
+ <contract-file-drag-upload @upload="
1101
+ handleUpload(
1102
+ $event,
1103
+ shipmentFileInfo.shipmentId,
1104
+ 'shipment',
1105
+ 'purchase_shipment_other'
1106
+ )"
1107
+ :isShowTip="false"
1108
+ :uploadNameStr="$t('contractDetail.otherFile')" />
1109
+ </div>
1110
+ </el-col>
1111
+ </div>
1112
+ </template>
1113
+ </SectionSlot>
1114
+ </div>
1115
+ </div>
1032
1116
 
1117
+ <!-- 收货 -->
1118
+ <div id="contract_receiving_id">
1119
+ <SectionSlot
1120
+ ref="SectionReceiving"
1121
+ :infoPro="getGoodsProgressInfo" v-for="(
1122
+ shipmentFileInfo, shipmentIndex
1123
+ ) in contractFileInfo.shipmentFileInfoList" :key="shipmentIndex" v-if="shipmentIndex == shipBillNo"
1124
+ >
1125
+ <template v-slot:header>
1126
+ <div>
1127
+ <ProgressDetail :infoPro="getGoodsProgressInfo"></ProgressDetail>
1128
+ </div>
1129
+ </template>
1130
+ <template v-slot:content>
1131
+ <div class="content-root">
1132
+ <div>
1133
+ <div class="content-root-row">
1134
+ <ContentTitle :contentTitleProp="{
1135
+ bgButton: $t('contractDetail.tip7'),
1136
+ bgTime: shipmentFileInfo.deliveryReceipt && timeFormate(shipmentFileInfo.deliveryReceipt),
1137
+ bgcolor: getGoodsProgressInfo.bgcolor
1138
+ }"></ContentTitle>
1139
+ <span class="bg-history" @click="handleHistory('shipment_delivery_receipt', shipmentFileInfo.shipmentId, false)">{{ $t('contractDetail.view_history') }}</span>
1140
+ </div>
1141
+ <el-col :span="24">
1033
1142
  <div class="file-list">
1034
- <file-show
1143
+ <file-show @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck"
1144
+ deleteTips="你确定要删除文件吗?删除后,电放状态将会回退到未电放?"
1035
1145
  :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
- />
1043
- <!-- <contract-file-drag-upload
1044
- v-if="channel !== 'official-website'"
1045
- @upload="
1146
+ :selectFileListProp="selectFileList"
1147
+ :file-info="item" v-for="(item, i) in shipmentFileInfo.deliveryReceipt" :key="i" />
1148
+ <!-- v-if="shipmentItemData.shipmentPercentage > 0" -->
1149
+ <!-- todo: 上传提货凭证 -->
1150
+ <contract-file-drag-upload
1151
+ v-show="(!shipmentFileInfo.deliveryReceipt || shipmentFileInfo.deliveryReceipt.length == 0) && channel !== 'official-website'"
1152
+ @upload="
1046
1153
  handleUpload(
1047
1154
  $event,
1048
1155
  shipmentFileInfo.shipmentId,
1049
1156
  'shipment',
1050
1157
  'shipment_delivery_receipt'
1051
1158
  )
1052
- "
1053
- :isShowTip="false"
1054
- />-->
1159
+ " :isShowTip="false"
1160
+ :uploadNameStr="$t('contractDetail.tip7')"
1161
+ />
1162
+ </div>
1163
+ <div v-if="!shipmentFileInfo.deliveryReceipt || shipmentFileInfo.deliveryReceipt.length == 0 && channel == 'official-website'" class="center-status">
1164
+ <i class="el-icon-time"></i>
1165
+ {{$t('contractDetail.no_files')}}
1055
1166
  </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>
1088
-
1089
- <el-timeline-item
1090
- icon="el-icon-success"
1091
- :type="claimFileInfoCom ? 'primary' : ''"
1092
- size="large"
1167
+ </el-col>
1168
+ </div>
1169
+ </div>
1170
+ </template>
1171
+ </SectionSlot>
1172
+ </div>
1173
+ <!-- 索赔 -->
1174
+ <div v-if="contractFileInfo.claimCreateFlag">
1175
+ <SectionSlot
1176
+ ref="SectionClaim"
1177
+ :infoPro="claimProgressInfo"
1178
+ v-for="(
1179
+ shipmentFileInfo, shipmentIndex
1180
+ ) in contractFileInfo.shipmentFileInfoList" :key="shipmentIndex"
1181
+ v-if="shipmentIndex == shipBillNo"
1093
1182
  >
1094
- <span style="color: #1890ff">{{ $t("contractDetail.Claim_completion") }}</span>
1095
- </el-timeline-item>
1096
- </el-timeline>
1183
+ <template v-slot:header>
1184
+ <div>
1185
+ <ProgressDetail :infoPro="claimProgressInfo"></ProgressDetail>
1186
+ </div>
1187
+ </template>
1188
+ <template v-slot:content>
1189
+ <div class="content-root">
1190
+ <div>
1191
+ <div class="content-root-row">
1192
+ <ContentTitle :contentTitleProp="{
1193
+ bgButton: !buyerFlag
1194
+ ? $t('contractDetail.Credit_Note')
1195
+ : $t('contractDetail.Debit_Note'),
1196
+ bgTime: claimFileInfoCom && timeFormate(claimFileInfoCom),
1197
+ bgcolor: claimProgressInfo.bgcolor
1198
+ }"></ContentTitle>
1199
+ </div>
1200
+ <el-col :span="24">
1201
+ <div class="file-list" v-if="claimFileInfoCom">
1202
+ <file-show @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck"
1203
+ :selectFileListProp="selectFileList"
1204
+ :hiddenOperation="true"
1205
+ :file-info="item" v-for="(item, i) in claimFileInfoCom" :key="i" />
1206
+ </div>
1207
+ <div v-else class="center-status">
1208
+ <i class="el-icon-time"></i>
1209
+ {{ $t('contractDetail.no_files') }}
1210
+ </div>
1211
+ </el-col>
1212
+ </div>
1213
+ </div>
1214
+ </template>
1215
+ </SectionSlot>
1216
+ </div>
1217
+ <!-- cndn -->
1218
+ <div style="margin-top:20px" v-if="CNbillsCom.length || DNbillsCom.length">
1219
+ <SectionSlot
1220
+ ref="SectionCNDN"
1221
+ :infoPro="cndnProgressInfo"
1222
+ >
1223
+ <template v-slot:header>
1224
+ <div>
1225
+ <ProgressDetail :infoPro="cndnProgressInfo"></ProgressDetail>
1226
+ </div>
1227
+ </template>
1228
+ <template v-slot:content>
1229
+ <div class="content-root">
1230
+ <div v-if="DNbillsCom.length">
1231
+ <ContentTitle
1232
+ :contentTitleProp="{
1233
+ bgButton: $t('contractDetail.Debit_Note'),
1234
+ bgTime: DNbillsCom.length && timeFormate(DNbillsCom),
1235
+ bgcolor: cndnProgressInfo.bgcolor
1236
+ }"></ContentTitle>
1237
+ <el-col :span="24">
1238
+ <div class="file-list" v-if="DNbillsCom.length">
1239
+ <file-show @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck"
1240
+ :selectFileListProp="selectFileList"
1241
+ :hiddenOperation="true"
1242
+ :file-info="item" v-for="(item, i) in DNbillsCom" :key="i" />
1243
+ </div>
1244
+ <!-- <div v-else class="center-status">
1245
+ <i class="el-icon-time"></i>
1246
+ {{ $t('contractDetail.no_files') }}
1247
+ </div> -->
1248
+ </el-col>
1249
+ </div>
1250
+ <div v-if="CNbillsCom.length">
1251
+ <ContentTitle
1252
+ :contentTitleProp="{
1253
+ bgButton: $t('contractDetail.Credit_Note'),
1254
+ bgTime: CNbillsCom.length && timeFormate(CNbillsCom),
1255
+ bgcolor: cndnProgressInfo.bgcolor
1256
+ }"></ContentTitle>
1257
+ <el-col :span="24">
1258
+ <div class="file-list" v-if="CNbillsCom.length">
1259
+ <file-show @refresh="handleRefresh" @checked="handleChecked" @uncheck="handleUncheck"
1260
+ :selectFileListProp="selectFileList"
1261
+ :hiddenOperation="true"
1262
+ :file-info="item" v-for="(item, i) in CNbillsCom" :key="i" />
1263
+ </div>
1264
+ <!-- <div v-else class="center-status">
1265
+ <i class="el-icon-time"></i>
1266
+ {{ $t('contractDetail.no_files') }}
1267
+ </div> -->
1268
+ </el-col>
1269
+ </div>
1270
+ </div>
1271
+ </template>
1272
+ </SectionSlot>
1273
+ </div>
1274
+
1097
1275
  <deposit-invoice ref="depositInvoice"></deposit-invoice>
1098
1276
 
1099
1277
  <gen-shipment ref="genShipment" @refresh="handleRefresh" />
1100
1278
 
1101
- <purchase-invoice-upload ref="purchaseInvoice" @refresh="handleRefresh"></purchase-invoice-upload>
1279
+ <purchase-invoice-upload ref="purchaseInvoice"
1280
+ :companyId="contract.contractId"
1281
+ @refresh="handleRefresh"
1282
+ :purchaseBalanceMoneyProp="purchaseBalanceMoney"
1283
+ :getShipmentPurchaseFun="getShipmentPurchase"
1284
+ ></purchase-invoice-upload>
1102
1285
  <!-- 多个买家弹窗 -->
1103
- <el-dialog title="请先选择收货买家" :visible.sync="dialogVisible" width="30%">
1104
- <div>请在下方选择一个您需要发货的买家</div>
1286
+ <el-dialog :title="$t('contractDetail.Please_select_the_receiving_buyer_first')" :visible.sync="dialogVisible" width="30%">
1287
+ <div>{{ $t('contractDetail.Please_select_a_buyer_below_who_you_need_to_ship_to') }}</div>
1105
1288
  <div>
1106
1289
  <el-radio-group v-model="selectRadio">
1107
- <el-radio
1108
- :label="key"
1109
- v-for="(purchaseBuyerListItem, key) in purchaseBuyerList"
1110
- :key="key"
1111
- >
1290
+ <el-radio :label="key" v-for="(purchaseBuyerListItem, key) in purchaseBuyerList" :key="key">
1112
1291
  {{ purchaseBuyerListItem.buyerUserInfo.companyName }} ({{
1113
- purchaseBuyerListItem.contractNo
1114
- }}) {{ purchaseBuyerListItem.buyerUserInfo.firstName }}
1292
+ purchaseBuyerListItem.contractNo
1293
+ }}) {{ purchaseBuyerListItem.buyerUserInfo.firstName }}
1115
1294
  {{ purchaseBuyerListItem.buyerUserInfo.lastName }}
1116
1295
  </el-radio>
1117
1296
  </el-radio-group>
1118
1297
  </div>
1119
1298
 
1120
1299
  <span slot="footer" class="dialog-footer">
1121
- <el-button @click="dialogVisible = false">取 消</el-button>
1122
- <el-button type="primary" @click="addShipment">确 定</el-button>
1300
+ <el-button @click="dialogVisible = false">{{ $t('contractDetail.cancel') }}</el-button>
1301
+ <el-button type="primary" @click="addShipment">{{ $t('contractDetail.confirm') }}</el-button>
1123
1302
  </span>
1124
1303
  </el-dialog>
1125
1304
  <shipment-add ref="shipmentGen" @refresh="handleRefresh" />
1126
1305
 
1127
- <shipment-purchase-amount ref="shipmentPurchaseAmount"></shipment-purchase-amount>
1306
+ <shipment-purchase-amount
1307
+ ref="shipmentPurchaseAmount"
1308
+ :getContractFileInfoCallback="getContractFileInfoCallback"
1309
+ ></shipment-purchase-amount>
1128
1310
  </div>
1311
+ </div>
1129
1312
  </template>
1130
1313
 
1131
1314
  <script>
@@ -1143,8 +1326,11 @@ import { batchAsZip } from '../../../utils/zip';
1143
1326
  import {
1144
1327
  getBizContract,
1145
1328
  updateBizContract,
1329
+ withdrawSignContract,
1146
1330
  signContract,
1331
+ shipmentConfirmDraftBl
1147
1332
  } from '../../../api/biz/bizContract';
1333
+
1148
1334
  import DepositInvoice from '../bizContract/depositInvoice.vue';
1149
1335
  import { getDepositInvoice, listBizInvoice } from '../../../api/biz/bizInvoice';
1150
1336
  import GenShipment from '../bizShipment/add.vue';
@@ -1159,6 +1345,17 @@ import ShipmentAdd from '../bizShipment/add.vue';
1159
1345
  import ShipmentPurchaseAmount from '../contractTracing/shipmentPurchaseAmount.vue';
1160
1346
  import { encryptId } from '../../../utils/index.js';
1161
1347
  import { Loading } from 'element-ui';
1348
+ import Progress from "./contractFile/Progress.vue";
1349
+ import ProgressDetail from "./contractFile/ProgressDetail.vue";
1350
+ import SectionSlot from "./contractFile/SectionSlot.vue";
1351
+ import ContentTitle from './contractFile/ContentTitle.vue';
1352
+ import IMGPreviewCheckBox from './contractFile/IMGPreviewCheckBox.vue'
1353
+ import BillOfLadingNoTab from './contractFile/BillOfLadingNoTab.vue'
1354
+ import ShowAndHide from './contractFile/ShowAndHide.vue'
1355
+ import { delBizFileInfo } from '../../../api/biz/bizFileInfo'
1356
+
1357
+ let handleGenerateflag = false;
1358
+ let handleGenerateflag1 = false;
1162
1359
 
1163
1360
  export default {
1164
1361
  name: 'ContractFile',
@@ -1172,6 +1369,13 @@ export default {
1172
1369
  FileShowClaim,
1173
1370
  ShipmentAdd,
1174
1371
  ShipmentPurchaseAmount,
1372
+ Progress,
1373
+ SectionSlot,
1374
+ ProgressDetail,
1375
+ ContentTitle,
1376
+ IMGPreviewCheckBox,
1377
+ BillOfLadingNoTab,
1378
+ ShowAndHide
1175
1379
  },
1176
1380
  props: {
1177
1381
  // 文件信息
@@ -1183,16 +1387,66 @@ export default {
1183
1387
  },
1184
1388
  channel: {
1185
1389
  type: String,
1186
- default: '',
1390
+ default: 'official-website123',
1187
1391
  },
1188
1392
  buyerFlag: {
1189
1393
  type: Boolean,
1190
1394
  default: true,
1191
1395
  },
1396
+ // selectFileListProp: {
1397
+ // type: Array,
1398
+ // default: () => {
1399
+ // return [];
1400
+ // },
1401
+ // },
1192
1402
  },
1193
1403
  data() {
1194
1404
  return {
1195
- identify: '识别',
1405
+ shipmentItemData: {},
1406
+ shipBillNo: 0,
1407
+ goodsBillNo: 0,
1408
+ claimBillNo: 0,
1409
+ contractProgressInfo: {
1410
+ text: this.$t('contractDetail.contract'),
1411
+ rate: 0,
1412
+ img: 'https://s3.cdn.doctorscrap.com/dev/user/image_9/805524d45f964ad0b3f51437d3b5750e.png',
1413
+ bgcolor: '#FBB040',
1414
+ textArr:[],
1415
+ hidden: false
1416
+ },
1417
+ shipProgressInfo: {
1418
+ text: this.$t('contractDetail.shipment'),
1419
+ rate: 0,
1420
+ img: 'https://s3.cdn.doctorscrap.com/dev/user/image_9/8517dbf0444542d5bf100279231c9597.png',
1421
+ bgcolor: '#54B8FF',
1422
+ textArr:[this.$t('contractDetail.Waiting_for_the_seller_to_ship')],
1423
+ hidden: false
1424
+ },
1425
+ getGoodsProgressInfo: {
1426
+ text: this.$t('contractDetail.receiving'),
1427
+ rate: 0,
1428
+ img: 'https://s3.cdn.doctorscrap.com/dev/user/image_9/a43ef25e953747efa9b88d3d9bbe674f.png',
1429
+ bgcolor: '#7CCF48',
1430
+ textArr:[],
1431
+ hidden: false
1432
+ },
1433
+ claimProgressInfo: {
1434
+ text: this.$t('contractDetail.claim'),
1435
+ rate: 0,
1436
+ img: 'https://s3.cdn.doctorscrap.com/dev/user/image_9/b427331405604eeb8ec368130f00c5e6.png',
1437
+ bgcolor: '#adadad',
1438
+ textArr:[],
1439
+ hidden: false
1440
+ },
1441
+ cndnProgressInfo: {
1442
+ text: this.$t('contractDetail.cndn'),
1443
+ rate: 100,
1444
+ img: 'https://s3.cdn.doctorscrap.com/dev/user/image_9/b427331405604eeb8ec368130f00c5e6.png',
1445
+ bgcolor: '#c47afc',
1446
+ textArr:[],
1447
+ hidden: true
1448
+ },
1449
+ identify: this.$t('contractDetail.identify'),
1196
1450
  selectRadio: 0,
1197
1451
  purchaseBuyerList: [],
1198
1452
  // purchaseBuyerList1: [
@@ -1253,6 +1507,7 @@ export default {
1253
1507
  url: null,
1254
1508
  ext: null,
1255
1509
  },
1510
+ selectFileList: [],
1256
1511
  // 表单参数
1257
1512
  form: {},
1258
1513
  //上传表单
@@ -1260,7 +1515,6 @@ export default {
1260
1515
  // 表单校验
1261
1516
  rules: {},
1262
1517
  lintId: null,
1263
- selectFileList: [],
1264
1518
  contractId: null,
1265
1519
  //合同文件
1266
1520
  contractFileInfo: {
@@ -1268,9 +1522,17 @@ export default {
1268
1522
  },
1269
1523
  //参考采购价
1270
1524
  shipmentPurchaseAmountMessage: '',
1525
+ loadingInstance: null,
1526
+ purchaseBalanceMoney: null
1271
1527
  };
1272
1528
  },
1273
1529
  created() {
1530
+ this.loadingInstance = Loading.service({
1531
+ text: this.$t('contractDetail.loading'),
1532
+ spinner: 'el-icon-loading',
1533
+ background: 'rgba(0, 0, 0, 0.7)',
1534
+ });
1535
+
1274
1536
  const contractId = this.$route.params && this.$route.params.contractId;
1275
1537
  if (contractId) {
1276
1538
  this.linkId = contractId;
@@ -1279,31 +1541,120 @@ export default {
1279
1541
  this.queryParams.linkId = contractId;
1280
1542
  }
1281
1543
  },
1282
- mounted() {},
1544
+ mounted() { },
1283
1545
  methods: {
1284
- getShipmentPurchaseAmount(shipmentFileInfo, shipmentIndex) {
1285
- if (shipmentIndex == this.activeName) {
1286
- getPurchaseAmount(shipmentFileInfo.shipmentId).then((res) => {
1287
- this.shipmentPurchaseAmountMessage =
1288
- '参考采购尾款$' +
1289
- (
1290
- res.data.totalPurchaseAmount - res.data.purchaseDepositAmount
1291
- ).toFixed(2);
1292
- });
1546
+ // 装运模块状态变化,需要同步关联模块
1547
+ handleShippingUpdateOpen(isOpen) {
1548
+ console.log(this.$refs.SectionReceiving)
1549
+ console.log(this.$refs.SectionClaim)
1550
+ console.log(this.$refs.SectionCNDN)
1551
+
1552
+ this.$refs.SectionReceiving[0]?.setOpen(isOpen)
1553
+ this.$refs.SectionClaim[0]?.setOpen(isOpen)
1554
+ this.$refs.SectionCNDN?.setOpen(isOpen)
1555
+ },
1556
+ handleScroll(elementId) {
1557
+ document.getElementById(elementId).scrollIntoView()
1558
+ },
1559
+ /**
1560
+ * @description: 取消全部选择
1561
+ * @return {*}
1562
+ */
1563
+ cancelAll() {
1564
+ this.cancelAllSelectFileList()
1565
+ },
1566
+
1567
+ /**
1568
+ * @description: 全部下载
1569
+ * @return {*}
1570
+ */
1571
+ downLoadAll() {
1572
+ if (this.selectFileList.length == 0) {
1573
+ return this.$message.warning(this.$t('contractDetail.please_select_file'))
1574
+ }
1575
+ this.downloadZip()
1576
+ },
1577
+
1578
+ deleteAll() {
1579
+ console.log('==delBizFileInfo==', this.selectFileList)
1580
+ if (this.selectFileList.length == 0) {
1581
+ return this.$message.warning(this.$t('contractDetail.please_select_file'))
1582
+ }
1583
+
1584
+ this.$confirm('是否删除选中文件', '提示', {
1585
+ confirmButtonText: '确定',
1586
+ cancelButtonText: '取消',
1587
+ type: 'warning'
1588
+ })
1589
+ .then(() => {
1590
+ const ids = this.selectFileList.map((item) => item.fileId)
1591
+ delBizFileInfo(ids).then(() => {
1592
+ this.$message.success('删除成功')
1593
+ this.handleRefresh()
1594
+ })
1595
+ })
1596
+ .catch(() => {
1597
+ this.$message.info('已取消删除')
1598
+ })
1599
+ },
1600
+
1601
+ draftBillOfLadingUrl(shipmentFileInfo) {
1602
+ return shipmentFileInfo && shipmentFileInfo.draftBillOfLading && shipmentFileInfo.draftBillOfLading[0] && shipmentFileInfo.draftBillOfLading[0].url
1603
+ },
1604
+
1605
+ /**
1606
+ * @description:
1607
+ * @param {*} info
1608
+ * @return {*}
1609
+ */
1610
+ timeFormate(info) {
1611
+ if(info.length > 0 && info && info[0].createTime) {
1612
+ return this.$moment.utc(info[0].createTime).local().format('YYYY-MM-DD HH:mm');
1613
+ } else {
1614
+ return '';
1293
1615
  }
1294
1616
  },
1617
+
1618
+ // allSelectContainerPackingPhoto(containerId) {
1619
+ // this.$refs['container_packing_photo_' + containerId][0].checkAll1()
1620
+ // },
1621
+ // cancelContainerPackingPhoto(containerId) {
1622
+ // this.$refs['container_packing_photo_' + containerId][0].cancelAll1()
1623
+ // },
1624
+
1625
+ clickSelectAllContainer(containerId) {
1626
+ return this.$refs['container_packing_photo_' + containerId][0].clickSelectAll()
1627
+ },
1628
+
1629
+ hasSelectAllContainer(containerId) {
1630
+ return this.$refs['container_packing_photo_' + containerId] && this.$refs['container_packing_photo_' + containerId][0].hasSelectAll()
1631
+ },
1632
+
1633
+ changeShipBillNo(index) {
1634
+ this.shipBillNo = index
1635
+ this.activeName = index
1636
+ this.setRate(index)
1637
+ },
1638
+ changeGoodsBillNo(index) {
1639
+ this.goodsBillNo = index
1640
+ },
1641
+ changeClaimBillNo(index) {
1642
+ this.claimBillNo = index
1643
+ },
1295
1644
  getShipmentPurchase(shipmentFileInfo) {
1296
1645
  this.$refs.shipmentPurchaseAmount.handleShow(shipmentFileInfo.shipmentId);
1297
1646
  },
1298
1647
  identifyPageBoth(shipmentFileInfo, type) {
1299
1648
  // 正式 purchaseFinallyInvoice
1300
1649
  if (type == 2) {
1301
- if (shipmentFileInfo?.purchaseFinallyInvoice[0]?.url) {
1650
+ if (shipmentFileInfo?.purchaseFinallyInvoice && shipmentFileInfo?.purchaseFinallyInvoice[0]?.url) {
1302
1651
  this.identifyPage(
1303
1652
  shipmentFileInfo?.purchaseFinallyInvoice[0]?.url,
1304
1653
  shipmentFileInfo && shipmentFileInfo.shipmentId,
1305
1654
  'final_invoice'
1306
1655
  );
1656
+ } else {
1657
+ return this.$message.warning(this.$t('contractDetail.no_files'));
1307
1658
  }
1308
1659
  } else {
1309
1660
  // 临时 purchaseTemporaryFinallyInvoice
@@ -1333,7 +1684,7 @@ export default {
1333
1684
  }
1334
1685
 
1335
1686
  if (!url) {
1336
- return this.$message.error('暂无文件');
1687
+ return this.$message.error(this.$t('contractDetail.no_files'));
1337
1688
  }
1338
1689
 
1339
1690
  if (type == 'draft_bill') {
@@ -1386,23 +1737,23 @@ export default {
1386
1737
  },
1387
1738
 
1388
1739
  /**
1389
- * @description: 添加货运
1740
+ * @description: 添加货运todo
1390
1741
  * @return {*}
1391
1742
  */
1392
1743
  addShipment() {
1393
1744
  const purchaseBuyerInfo = this.purchaseBuyerList[this.selectRadio];
1394
1745
  let timer = Date.now();
1395
1746
  addBizShipmentPurchase({
1396
- bookingNo: 'bookingNo-'+ timer,
1397
- billOfLadingNo: 'billOfLadingNo-' + timer,
1747
+ bookingNo: 'bookingNo-' + timer,
1748
+ billOfLadingNo: `Refer BL ${this.contract.contractNo}-${(this.contractFileInfo?.shipmentFileInfoList?.length || 0) + 1}`,
1398
1749
  saleContractId: purchaseBuyerInfo.contractId,
1399
1750
  purchaseContractId: this.contract.contractId,
1400
- containerList:[{
1401
- containerNo:'containerNo-1'
1751
+ containerList: [{
1752
+ containerNo: 'containerNo-1'
1402
1753
  }]
1403
1754
  }).then((res) => {
1404
1755
  if (res.code === 200) {
1405
- this.$modal.msgSuccess('添加成功');
1756
+ this.$modal.msgSuccess(this.$t('contractDetail.add_success'));
1406
1757
  this.handleRefresh();
1407
1758
  }
1408
1759
  });
@@ -1453,21 +1804,41 @@ export default {
1453
1804
 
1454
1805
  // 将 <textarea> 元素删除
1455
1806
  document.body.removeChild(textArea);
1456
- this.$modal.msgSuccess('已复制到剪切板');
1807
+ this.$modal.msgSuccess(this.$t('contractDetail.has_copy'));
1457
1808
  },
1458
1809
  //撤回回签
1459
1810
  counterSign() {
1460
1811
  //如果是回签合同 保留原合同状态
1461
- updateBizContract({
1812
+ withdrawSignContract({
1462
1813
  contractId: this.contractId,
1463
- contractStatus:
1464
- this.contract.beforeContractStatus || this.contract.contractStatus,
1814
+ // contractStatus:
1815
+ // this.contract.beforeContractStatus || this.contract.contractStatus,
1816
+ }).then((res) => {
1817
+ if(res.code == 200) {
1818
+ this.$modal.msgSuccess(this.$t('contractDetail.withdraw_sign_success'));
1819
+ this.handleRefresh();
1820
+ }
1821
+ });
1822
+ },
1823
+
1824
+ //确认提单草稿成功
1825
+ shipmentConfirmDraftBlFun() {
1826
+ shipmentConfirmDraftBl({
1827
+ shipmentId: this.shipmentItemData.shipmentId,
1465
1828
  }).then((res) => {
1466
- this.$modal.msgSuccess('撤回回签成功');
1829
+ if(res.code == 200) {
1830
+ this.$modal.msgSuccess(this.$t('contractDetail.draftBillOfLading_confirm_success'));
1831
+ this.handleRefresh();
1832
+ }
1467
1833
  });
1468
1834
  },
1469
1835
  //生船运按钮操作
1470
1836
  handleGenerate() {
1837
+ if(handleGenerateflag) {
1838
+ return;
1839
+ }
1840
+ handleGenerateflag = true;
1841
+
1471
1842
  listBizInvoice({
1472
1843
  contractId: this.contractId,
1473
1844
  invoiceType: 'sale',
@@ -1478,11 +1849,11 @@ export default {
1478
1849
  res.rows[0].amount == res.rows[0].remainingAmount
1479
1850
  ) {
1480
1851
  this.$confirm(
1481
- '是否确认直接生成装运?请注意,此合同的定金发票尚未生成或已生成但未收款,请先确认相关情况。',
1482
- '提示',
1852
+ this.$t('contractDetail.ship_create_tips'),
1853
+ this.$t('contractDetail.tip'),
1483
1854
  {
1484
- confirmButtonText: '确定',
1485
- cancelButtonText: '取消',
1855
+ confirmButtonText: this.$t('contractDetail.confirm'),
1856
+ cancelButtonText: this.$t('contractDetail.cancel'),
1486
1857
  type: 'warning',
1487
1858
  }
1488
1859
  )
@@ -1498,7 +1869,11 @@ export default {
1498
1869
  );
1499
1870
  });
1500
1871
  })
1501
- .catch(() => {});
1872
+ .catch(() => { }).finally(() => {
1873
+ this.timer = setTimeout(() => {
1874
+ handleGenerateflag = false;
1875
+ },3000);
1876
+ });
1502
1877
  } else {
1503
1878
  listWithContractInfo({
1504
1879
  contractIds: [this.contractId],
@@ -1509,11 +1884,20 @@ export default {
1509
1884
  this.contract.destination,
1510
1885
  this.contract
1511
1886
  );
1887
+ }).finally(() => {
1888
+ this.timer = setTimeout(() => {
1889
+ handleGenerateflag = false;
1890
+ },3000);
1512
1891
  });
1513
1892
  }
1514
1893
  });
1515
1894
  },
1516
1895
  handleGeneratePurchase() {
1896
+ if(handleGenerateflag1) {
1897
+ return;
1898
+ }
1899
+ handleGenerateflag1 = true;
1900
+
1517
1901
  listSaleContracts({ purchaseContractNo: this.contract.contractNo }).then(
1518
1902
  (res) => {
1519
1903
  this.purchaseBuyerList = res.rows;
@@ -1523,37 +1907,280 @@ export default {
1523
1907
  this.addShipment();
1524
1908
  }
1525
1909
  }
1526
- );
1910
+ ).finally(() => {
1911
+ this.timer = setTimeout(() => {
1912
+ handleGenerateflag1 = false;
1913
+ },3000);
1914
+ });
1527
1915
  },
1528
1916
  handleRefresh() {
1529
1917
  this.getContractFileInfo(this.contractId);
1530
1918
  },
1531
1919
  //定金发票
1532
1920
  getDepositInvoice() {
1921
+ console.log('contract:', this.contract)
1533
1922
  if (this.contract.contractType == 'sale') {
1923
+ // 生成定金发票(销售)
1924
+ console.log('生成定金发票')
1534
1925
  getDepositInvoice(this.contract).then((response) => {
1535
1926
  const data = response.data;
1536
1927
  this.$refs.depositInvoice.handleShow(data);
1537
1928
  });
1538
1929
  } else {
1930
+ // 上传定金发票(采购)
1931
+ console.log('上传定金发票')
1539
1932
  this.$refs.purchaseInvoice.handleUpload(this.contract, 'deposit');
1540
1933
  }
1541
1934
  },
1542
1935
  //上传尾款发票
1543
1936
  uploadFinalInvoice(type, shipmentId) {
1937
+ console.log('上传尾款发票')
1544
1938
  this.$refs.purchaseInvoice.handleUpload(this.contract, type, shipmentId);
1545
1939
  },
1940
+ //设置进度
1941
+ setRate(index) {
1942
+ this.contractProgressInfo.rate = this.contractFileInfo.contractPercentage || 0
1943
+ let textArr = []
1944
+ console.log('===this.contract.contractType==', this.contract.contractType);
1945
+ // 销售
1946
+ if(this.contract.contractType == 'sale') {
1947
+ // 无定金
1948
+ //发送草稿合同标记
1949
+ if(!this.contractFileInfo.sendDraftContractFlag) {
1950
+ // 草稿合同待发出(英文:Draft contract to be sent out)
1951
+ textArr.push(this.$t('contractDetail.draftContract_unsend'))
1952
+ }
1953
+
1954
+ // 点击合同确认标记
1955
+ if(this.contractFileInfo.confirmContractFlag) {
1956
+ // 正式合同已发出(英文:Formal Contract have been sent out)
1957
+ // textArr.push('正式合同已发出')
1958
+ } else {
1959
+ // 正式合同待发出(英文:Formal contract to be sent out)
1960
+ textArr.push(this.$t('contractDetail.contract_send_false'))
1961
+ }
1962
+
1963
+ // BLI确认标记
1964
+ if(this.contractFileInfo.bliConfirmFlag) {
1965
+ // 提单指令已确认(英文:BL Instruction confirmed)
1966
+ // textArr.push('提单指令已确认')
1967
+ } else {
1968
+ // 提单指令待买家确认(英文: BL Instruction to be confirmed
1969
+ textArr.push(this.$t('contractDetail.bl_confirm_false'))
1970
+ }
1971
+
1972
+ // 合同回签标记
1973
+ if(this.contractFileInfo.contractSignFlag) {
1974
+ // 回签合同已上传(英文:Signed Contract has been signed back)
1975
+ // textArr.push('回签合同已上传')
1976
+ } else {
1977
+ // 回签合同待上传(英文:Formal contract to be signed back
1978
+ textArr.push(this.$t('contractDetail.contract_signback_false'))
1979
+ }
1980
+
1981
+ if(this.contract.deposit != null && this.contract.deposit > 0) {
1982
+ // 定金支付标记
1983
+ if(this.contractFileInfo.depositInvoicePayFlag) {
1984
+ // 定金已支付(英文:Deposit paid)
1985
+ // textArr.push('定金已支付')
1986
+ } else {
1987
+ // 定金待支付(英文:Deposit to be paid)
1988
+ textArr.push(this.$t('contractDetail.depositPaid_false'))
1989
+ }
1990
+ }
1991
+ }
1992
+
1993
+ if(this.contract.contractType == 'purchase') {
1994
+ // 无定金
1995
+ //发送草稿合同标记
1996
+ if(!this.contractFileInfo.sendDraftContractFlag) {
1997
+ // 草稿合同待发出(英文:Draft contract to be sent out)
1998
+ textArr.push(this.$t('contractDetail.draftContract_unsend'))
1999
+ }
2000
+
2001
+ // 点击合同确认标记
2002
+ if(this.contractFileInfo.confirmContractFlag) {
2003
+ // 正式合同已发出(英文:Formal Contract have been sent out)
2004
+ // textArr.push('正式合同已发出')
2005
+ } else {
2006
+ // 正式合同待发出(英文:Formal contract to be sent out)
2007
+ textArr.push(this.$t('contractDetail.contract_send_false'))
2008
+ }
2009
+
2010
+ // BLI确认标记
2011
+ if(this.contractFileInfo.bliConfirmFlag) {
2012
+ // 提单指令已确认(英文:BL Instruction confirmed)
2013
+ // textArr.push('提单指令已确认')
2014
+ } else {
2015
+ // 提单指令待买家确认(英文: BL Instruction to be confirmed
2016
+ textArr.push(this.$t('contractDetail.bl_confirm_false'))
2017
+ }
2018
+
2019
+ // 合同回签标记
2020
+ if(this.contractFileInfo.contractSignFlag) {
2021
+ // 回签合同已上传(英文:Signed Contract has been signed back)
2022
+ // textArr.push('回签合同已上传')
2023
+ } else {
2024
+ // 回签合同待上传(英文:Formal contract to be signed back
2025
+ textArr.push(this.$t('contractDetail.contract_signback_false'))
2026
+ }
2027
+
2028
+ if(this.contract.deposit != null && this.contract.deposit > 0) {
2029
+ if(!this.contractFileInfo.existDepositInvoiceFlag) {
2030
+ // 定金发票待提供(英文:Deposit Invoice to be uploaded)
2031
+ textArr.push(this.$t('contractDetail.Deposit_invoice_to_be_provided'))
2032
+ }
2033
+
2034
+ // 定金支付标记
2035
+ if(!this.contractFileInfo.depositInvoicePayFlag) {
2036
+ // 定金待支付(英文:Deposit to be paid)
2037
+ textArr.push(this.$t('contractDetail.depositPaid_false'))
2038
+ }
2039
+ }
2040
+ }
2041
+
2042
+ this.contractProgressInfo.textArr = textArr
2043
+
2044
+
2045
+ let shipmentFileInfoList = this.contractFileInfo.shipmentFileInfoList;
2046
+
2047
+ let shipTextArr = []
2048
+
2049
+ if(shipmentFileInfoList && shipmentFileInfoList.length > 0) {
2050
+ let shipmentItem = shipmentFileInfoList[index]
2051
+ this.shipmentItemData = shipmentItem
2052
+ this.shipProgressInfo.rate = shipmentItem?.shipmentPercentage || 0
2053
+ this.getGoodsProgressInfo.rate = shipmentItem?.telexReleasePercentage || 0
2054
+ this.claimProgressInfo.rate = this.contractFileInfo?.claimPercentage || 0
2055
+
2056
+ // 装运进度
2057
+ // 装箱单
2058
+ if(shipmentItem.generatePackingFlag) {
2059
+ // 装箱单已上传(英文:Packing List updated)
2060
+ // shipTextArr.push('装箱单已上传')
2061
+ } else {
2062
+ // 装箱单待上传(英文:Shipping docs-Packing list to be updated)
2063
+ shipTextArr.push(this.$t('contractDetail.packinglist_false'))
2064
+ }
2065
+
2066
+ // 是否已支付尾款
2067
+ if(!shipmentItem.generateInvoiceFlag && this.contract.contractType == 'purchase') {
2068
+ // 尾款发票待上传(英文:Balance Invoice to be updated)
2069
+ shipTextArr.push(this.$t('contractDetail.balance_invoice_false'))
2070
+ }
2071
+
2072
+ // 上传装箱照片
2073
+ if(shipmentItem.uploadContainerPhotoFlag) {
2074
+ // 装箱照片已上传(Packing photos updated)
2075
+ // shipTextArr.push('装箱照片已上传')
2076
+ } else {
2077
+ // 装箱照片待上传(英文:Shipping docs-Shipping photos to be updated)
2078
+ shipTextArr.push(this.$t('contractDetail.container_photos_false'))
2079
+ }
2080
+
2081
+
2082
+ // 是否上传草稿提单
2083
+ if(shipmentItem.uploadDraftBlFlag) {
2084
+ // 草稿提单已上传(Draft BL updated)
2085
+ // shipTextArr.push('草稿提单已上传')
2086
+ } else {
2087
+ // 草稿提单待上传(英文:Shipping docs-Draft BL to be updated)
2088
+ shipTextArr.push(this.$t('contractDetail.draftBl_false'))
2089
+ }
2090
+
2091
+ // 是否确认草稿提单
2092
+ if(!shipmentItem.confirmDraftBlFlag) {
2093
+ // 草稿提单待买家确认(英文:Draft BL to be confirmed )
2094
+ shipTextArr.push(this.$t('contractDetail.draftBl_buyer_confirm_false'))
2095
+ } else {
2096
+ // 草稿提单已确认(英文:Draft BL confirmed)
2097
+ // shipTextArr.push('草稿提单已确认')
2098
+ }
2099
+
2100
+ // 尾款部分支付标记
2101
+
2102
+ // 尾款部分支付标记
2103
+ if(shipmentItem.balanceInvoiceFullyPaidFlag) {
2104
+ // 尾款已支付(英文:Final Payment paid)
2105
+ // shipTextArr.push('尾款已支付')
2106
+ } else {
2107
+ if(shipmentItem.balanceInvoicePartiallyPaidFlag) {
2108
+ // 尾款已部分支付(英文:Final Payment partially paid)
2109
+ shipTextArr.push(this.$t('contractDetail.Balance_Invoice_to_be_paid'))
2110
+ } else {
2111
+ // 尾款待买家支付(英文:Balance Invoice to be paid)
2112
+ shipTextArr.push(this.$t('contractDetail.Balance_Invoice_to_be_paid'))
2113
+ }
2114
+ }
2115
+
2116
+ this.shipProgressInfo.textArr = shipTextArr
2117
+
2118
+
2119
+ // 收货进度
2120
+ let goodsTextArr = []
2121
+ // 装运百分比
2122
+ if(shipmentItem.telexReleasePercentage > 0) {
2123
+ // 提货凭证已提供(英文:Released/ Telxed the BL)
2124
+ // goodsTextArr.push('提货凭证已提供')
2125
+ } else {
2126
+ // 提货凭证待提供(英文:Release /Telxed BL to be done)
2127
+ goodsTextArr.push(this.$t('contractDetail.releasedTelex_false'))
2128
+ }
2129
+
2130
+ this.getGoodsProgressInfo.textArr = goodsTextArr
2131
+
2132
+ // 索赔进度
2133
+ let claimTextArr = []
2134
+ if(this.contractFileInfo.claimCreateFlag && !this.contractFileInfo.claimProcessFlag && !this.contractFileInfo.claimCloseFlag) {
2135
+ // 索赔中(英文:Claiming)
2136
+ claimTextArr.push(this.$t('contractDetail.claiming'))
2137
+ }
2138
+
2139
+ if(this.contractFileInfo.claimCreateFlag && this.contractFileInfo.claimProcessFlag && !this.contractFileInfo.claimCloseFlag) {
2140
+ // 文件已更新(英文:Claiming-CN/DN issued
2141
+ claimTextArr.push(this.$t('contractDetail.claiming_update'))
2142
+ }
2143
+
2144
+ if(this.contractFileInfo.claimCreateFlag && this.contractFileInfo.claimProcessFlag && this.contractFileInfo.claimCloseFlag) {
2145
+ // 索赔已关闭(英文:Claim closed)
2146
+ claimTextArr.push(this.$t('contractDetail.claiming_closed'))
2147
+ }
2148
+
2149
+ this.claimProgressInfo.textArr = claimTextArr
2150
+ } else {
2151
+ shipTextArr.push(this.$t('contractDetail.Waiting_for_the_seller_to_ship'))
2152
+ this.claimProgressInfo.textArr = shipTextArr
2153
+ }
2154
+ this.getShipmentPurchaseAmount()
2155
+ this.loadingInstance.close();
2156
+ },
2157
+ //获取合同文件信息
1546
2158
  getContractFileInfo(contractId) {
1547
2159
  getBizContractFileInfo(contractId).then((res) => {
1548
2160
  this.contractFileInfo = res.data;
2161
+ this.setRate(this.shipBillNo || 0)
2162
+ });
2163
+ },
2164
+
2165
+ /**
2166
+ * @description: 修改正式尾款发票金额重新获取合同文件信息
2167
+ * @return {*}
2168
+ */
2169
+ getContractFileInfoCallback() {
2170
+ getBizContractFileInfo(this.contractId).then((res) => {
2171
+ this.contractFileInfo = res.data;
2172
+ this.setRate(this.shipBillNo)
1549
2173
  });
1550
2174
  },
1551
- handleHistory(fileType) {
2175
+ // 合同 定金发票 尾款发票 装箱单 不需要传 visible=false,其余的均需要传
2176
+ handleHistory(fileType, linkId, visible) {
2177
+ console.log('handleHistory', fileType, linkId, visible)
1552
2178
  this.$router.push({
1553
2179
  path: '/contract/file/history',
1554
2180
  query: {
1555
- linkId: this.linkId,
2181
+ linkId: linkId,
1556
2182
  fileType: fileType,
2183
+ visible: visible === false ? "0" : null,
1557
2184
  },
1558
2185
  });
1559
2186
  },
@@ -1568,13 +2195,26 @@ export default {
1568
2195
  console.log(this.selectFileList);
1569
2196
  },
1570
2197
  handleUncheck(val) {
1571
- let index = this.selectFileList.findIndex((item) => item.fileId === val);
1572
- if (index > -1) this.selectFileList.splice(index, 1);
2198
+ let index = this.selectFileList.findIndex((item) => {
2199
+ console.log('====handleUncheck==', item.fileId, val);
2200
+ return item.fileId === val
2201
+ });
2202
+ console.log('====handleUncheck==', index);
2203
+ if (index > -1) {
2204
+ this.selectFileList.splice(index, 1);
2205
+ }
1573
2206
  console.log(this.selectFileList);
1574
2207
  },
2208
+ cancelAllSelectFileList () {
2209
+ this.selectFileList.forEach((item) => {
2210
+ setTimeout(() => {
2211
+ this.handleUncheck(item.fileId)
2212
+ }, 10);
2213
+ });
2214
+ },
1575
2215
  handleUpload(e, linkId, linkType, fileType) {
1576
2216
  let loadingInstance = Loading.service({
1577
- text: '请稍候',
2217
+ text: this.$t('contractDetail.loading'),
1578
2218
  spinner: 'el-icon-loading',
1579
2219
  background: 'rgba(0, 0, 0, 0.7)',
1580
2220
  });
@@ -1590,7 +2230,7 @@ export default {
1590
2230
  //如果是回签合同 保留原合同状态
1591
2231
  if (fileType == 'contract_sign') {
1592
2232
  let loading = Loading.service({
1593
- text: '请稍候',
2233
+ text: this.$t('contractDetail.loading'),
1594
2234
  spinner: 'el-icon-loading',
1595
2235
  background: 'rgba(0, 0, 0, 0.7)',
1596
2236
  });
@@ -1604,23 +2244,25 @@ export default {
1604
2244
  contractSignTime: new Date(),
1605
2245
  }).then((res) => {
1606
2246
  loading.close();
1607
- this.$modal.msgSuccess('回签成功');
2247
+ this.$modal.msgSuccess(this.$t('contractDetail.signContract_success'));
2248
+ this.getContractFileInfo(this.contractId);
1608
2249
  });
1609
2250
  });
2251
+ } else if (fileType == 'shipment_delivery_receipt') {
2252
+ //如果是上传电放
2253
+ let loading1 = Loading.service({
2254
+ text: this.$t('contractDetail.loading'),
2255
+ spinner: 'el-icon-loading',
2256
+ background: 'rgba(0, 0, 0, 0.7)',
2257
+ });
2258
+ chargedShipment({ shipmentId: linkId }).then((response) => {
2259
+ loading1.close();
2260
+ this.$modal.msgSuccess(this.$t('contractDetail.release_success'));
2261
+ this.getContractFileInfo(this.contractId);
2262
+ });
2263
+ } {
2264
+ this.getContractFileInfo(this.contractId);
1610
2265
  }
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
2266
  });
1625
2267
  },
1626
2268
 
@@ -1663,8 +2305,58 @@ export default {
1663
2305
  this.loading = false;
1664
2306
  });
1665
2307
  },
2308
+ getShipmentPurchaseAmount() {
2309
+ let shipmentFileInfo = this.shipmentItemData
2310
+ if(shipmentFileInfo?.shipmentId) {
2311
+ getPurchaseAmount(shipmentFileInfo.shipmentId).then((res) => {
2312
+ this.purchaseBalanceMoney = (res.data?.totalPurchaseAmount - res.data?.purchaseDepositAmount).toFixed(2)
2313
+ this.shipmentPurchaseAmountMessage =
2314
+ `${this.$t('contractDetail.reference_invince')}$` + this.purchaseBalanceMoney
2315
+ ;
2316
+ return this.shipmentPurchaseAmountMessage;
2317
+ });
2318
+ }
2319
+ },
1666
2320
  },
1667
2321
  computed: {
2322
+ personalBillFileInfo: function() {
2323
+ if (this.contractFileInfo.bliFileInfoList && this.contractFileInfo.bliFileInfoList.length > 0) {
2324
+ return this.contractFileInfo.bliFileInfoList[0].personalBillFileInfo
2325
+ }
2326
+ return null
2327
+ },
2328
+ latestBillFileInfo: function() {
2329
+ if (this.contractFileInfo.bliFileInfoList && this.contractFileInfo.bliFileInfoList.length > 0) {
2330
+ return this.contractFileInfo.bliFileInfoList[0].latestBillFileInfo
2331
+ }
2332
+ return null
2333
+ },
2334
+
2335
+ // 销售获取最新的尾款发票
2336
+ getNewInfo() {
2337
+ // 时间比较
2338
+ let shipmentFileInfo = this.shipmentItemData && this.shipmentItemData
2339
+ if((shipmentFileInfo.saleFinallyInvoice && shipmentFileInfo.saleFinallyInvoice.length > 0) && (shipmentFileInfo.salePersonalFinallyInvoice && shipmentFileInfo.salePersonalFinallyInvoice.length > 0)) {
2340
+ if((shipmentFileInfo.saleFinallyInvoice && shipmentFileInfo.saleFinallyInvoice[0]?.createTime) > (shipmentFileInfo.salePersonalFinallyInvoice && shipmentFileInfo.salePersonalFinallyInvoice[0]?.createTime)) {
2341
+ return [shipmentFileInfo.saleFinallyInvoice[0]]
2342
+ } else {
2343
+ return [shipmentFileInfo.salePersonalFinallyInvoice[0]]
2344
+ }
2345
+ } else {
2346
+ // 展示存在的其中一个 saleFinallyInvoice
2347
+ if(shipmentFileInfo.saleFinallyInvoice && shipmentFileInfo.saleFinallyInvoice.length && (!shipmentFileInfo.salePersonalFinallyInvoice || shipmentFileInfo.salePersonalFinallyInvoice.length == 0)) {
2348
+ return [shipmentFileInfo.saleFinallyInvoice[0]]
2349
+ }
2350
+
2351
+ // 展示存在的其中一个 salePersonalFinallyInvoice
2352
+ if((!shipmentFileInfo.saleFinallyInvoice || shipmentFileInfo.saleFinallyInvoice.length == 0) && (shipmentFileInfo.salePersonalFinallyInvoice && shipmentFileInfo.salePersonalFinallyInvoice.length)) {
2353
+ return [shipmentFileInfo.salePersonalFinallyInvoice[0]]
2354
+ }
2355
+
2356
+ return ''
2357
+ }
2358
+
2359
+ },
1668
2360
  claimFileInfoCom() {
1669
2361
  if (
1670
2362
  (this.contractFileInfo &&
@@ -1674,38 +2366,252 @@ export default {
1674
2366
  this.contractFileInfo.claimDebitNoteFileList &&
1675
2367
  this.contractFileInfo.claimDebitNoteFileList[0])
1676
2368
  ) {
1677
- return this.buyerFlag
2369
+ return !this.buyerFlag
1678
2370
  ? this.contractFileInfo &&
1679
- this.contractFileInfo.claimCreditNoteFileList &&
1680
- this.contractFileInfo.claimCreditNoteFileList
2371
+ this.contractFileInfo.claimCreditNoteFileList &&
2372
+ this.contractFileInfo.claimCreditNoteFileList
1681
2373
  : this.contractFileInfo &&
1682
- this.contractFileInfo.claimDebitNoteFileList &&
1683
- this.contractFileInfo.claimDebitNoteFileList;
2374
+ this.contractFileInfo.claimDebitNoteFileList &&
2375
+ this.contractFileInfo.claimDebitNoteFileList;
1684
2376
  } else {
1685
2377
  false;
1686
2378
  }
1687
2379
  },
2380
+ // 采购获取最新的尾款发票
2381
+ DNbillsCom() {
2382
+ if(this.contractFileInfo?.bills) {
2383
+ return this.contractFileInfo.bills.filter(item => {
2384
+ if(item.billType == 'receipt') {
2385
+ item.url = item.billNo + '.pdf'
2386
+ item.fileName = 'DebitNote' + item.billNo + '.pdf'
2387
+ item.downloadUrl = '/bill/download?id=' + item.id
2388
+ return item
2389
+ }
2390
+ })
2391
+ } else {
2392
+ return false
2393
+ }
2394
+ },
2395
+ CNbillsCom() {
2396
+ if(this.contractFileInfo?.bills) {
2397
+ return this.contractFileInfo.bills.filter(item => {
2398
+ if(item.billType == 'payment') {
2399
+ item.url = item.billNo + '.pdf'
2400
+ item.fileName = 'CreditNote' + item.billNo + '.pdf'
2401
+ item.downloadUrl = '/bill/download?id=' + item.id
2402
+ return item
2403
+ }
2404
+ })
2405
+ } else {
2406
+ return false
2407
+ }
2408
+ },
2409
+ },
2410
+ watch: {
2411
+ // selectFileListProp: {
2412
+ // handler(val) {
2413
+ // this.selectFileList = val
2414
+ // },
2415
+ // immediate: true,
2416
+ // deep: true
2417
+ // },
2418
+ },
2419
+ destroyed() {
2420
+ clearTimeout(this.timer);
1688
2421
  },
1689
2422
  };
1690
2423
  </script>
1691
2424
  <style lang="scss" scoped>
2425
+
2426
+ .bg-history {
2427
+ color: #1C75BC;
2428
+ line-height: 12px;
2429
+ font-size: 14px;
2430
+ cursor: pointer;
2431
+ }
2432
+
2433
+ .progress-root {
2434
+ padding: 0 20px;
2435
+ display: flex;
2436
+ height: 60px;
2437
+ background-color: white;
2438
+ width: 100%;
2439
+ align-items: center;
2440
+ }
2441
+
2442
+ .selection-root {
2443
+ display: flex;
2444
+ justify-content: flex-start;
2445
+ align-items: center;
2446
+ }
2447
+
2448
+ .border-button {
2449
+ margin-left: 8px;
2450
+ min-width: 45px;
2451
+ padding: 0 10px;
2452
+ width: max-content;
2453
+ height: 21px;
2454
+ text-align: center;
2455
+ line-height: 17px;
2456
+ background: #FFFFFF;
2457
+ border-radius: 11px;
2458
+ font-size: 12px;
2459
+ border: 2px solid #D1D3D4;
2460
+ cursor: pointer;
2461
+ }
2462
+
2463
+ .border-button-blue {
2464
+ background-color: #54B8FF;
2465
+ color: white;
2466
+ border: 0;
2467
+ line-height: 21px;
2468
+ }
2469
+
2470
+ .border-button-share {
2471
+ margin-right: 5px;
2472
+ background-color: #84db4c;
2473
+ border: 0;
2474
+ line-height: 21px;
2475
+ }
2476
+
2477
+ .slot-content {
2478
+ margin-top: 8px;
2479
+ }
2480
+
1692
2481
  .box-card {
1693
2482
  width: 100%;
1694
2483
  }
2484
+
1695
2485
  .sub-title {
1696
2486
  font-size: 14px;
1697
2487
  font-weight: bold;
1698
2488
  margin-bottom: 10px;
1699
2489
  }
2490
+
1700
2491
  .file-list {
1701
2492
  display: flex;
1702
2493
  flex-wrap: wrap;
1703
-
2494
+ max-width:1000px;
1704
2495
  .file-info {
1705
2496
  margin-right: 10px;
1706
2497
  }
1707
2498
  }
2499
+
2500
+ .selection-root {
2501
+ margin-left: 16px;
2502
+ display: flex;
2503
+ flex-direction: row;
2504
+ align-items: center;
2505
+ margin-right: 16px;
2506
+ }
2507
+
2508
+ // .border-button {
2509
+ // padding: 0 10px;
2510
+ // width: max-content;
2511
+ // height: 21px;
2512
+ // text-align: center;
2513
+ // line-height: 17px;
2514
+ // background: #ffffff;
2515
+ // border-radius: 11px;
2516
+ // font-size: 12px;
2517
+ // border: 2px solid #d1d3d4;
2518
+ // cursor: pointer;
2519
+ // }
2520
+
2521
+ .content-root {
2522
+ overflow: hidden;
2523
+ background-color: #fff;
2524
+ padding: 10px 20px;
2525
+
2526
+ .content-root-row {
2527
+ display: flex;
2528
+ align-items: center;
2529
+ }
2530
+ }
2531
+
1708
2532
  ::v-deep .el-tabs--top .el-tabs__item.is-top:last-child {
1709
2533
  font-weight: 900;
1710
2534
  }
2535
+
2536
+ .success {
2537
+ color: #67C23A;
2538
+ }
2539
+
2540
+ .confirm-draft-bl {
2541
+ width:200px;
2542
+ height: 30px;
2543
+ border-radius: 15px;
2544
+ line-height:30px;
2545
+ text-align: center;
2546
+ background-color: #189048;
2547
+ color:#fff;
2548
+ cursor:pointer;
2549
+ }
2550
+
2551
+ .center-status {
2552
+ height: 85px;
2553
+ display: flex;
2554
+ align-items: center;
2555
+ justify-content: flex-start;
2556
+ color: #bbb
2557
+ }
2558
+ .center-status-block {
2559
+ height: 85px;
2560
+ display: flex;
2561
+ align-items: center;
2562
+ flex-direction: column;
2563
+ justify-content: center;
2564
+ color: #bbb
2565
+ }
2566
+ .ship-empty {
2567
+ line-height:60px;
2568
+ color: #bbb;
2569
+ text-align: center;
2570
+ padding:20px 0;
2571
+ }
2572
+
2573
+ .preview-download-root {
2574
+ display:flex;
2575
+ margin-top:5px;
2576
+
2577
+ .preview-download {
2578
+ cursor: pointer;
2579
+ margin-left:8px;
2580
+ min-width: 45px;
2581
+ width:max-content;
2582
+ padding: 0 10px;
2583
+ height: 21px;
2584
+ text-align: center;
2585
+ line-height: 17px;
2586
+ background: #FFFFFF;
2587
+ border-radius: 11px;
2588
+ font-size:12px;
2589
+ border: 2px solid #D1D3D4;
2590
+ }
2591
+ }
2592
+ .addshipment {
2593
+ position: absolute;
2594
+ left:140px;
2595
+ top:120px;
2596
+ background-color:#fff;
2597
+ height:30px;
2598
+ line-height:30px;
2599
+ text-align: center;
2600
+ color:#1C75BC;
2601
+ padding: 0 20px;
2602
+ width:max-content;
2603
+ border-radius:15px;
2604
+ cursor:pointer;
2605
+ }
2606
+ .hr-class {
2607
+ width: 100%;
2608
+ height: 1px;
2609
+ background-color: #ddd;
2610
+ margin: 20px 0 ;
2611
+ }
1711
2612
  </style>
2613
+ <style lang="scss">
2614
+ // .el-tooltip__popper {
2615
+ // max-width: 300px !important; /* 设置你希望的最大宽度 */
2616
+ // }
2617
+ </style>