zhanbo.xu

feat: 新增法定单位

1 <template> 1 <template>
2 - <div class="entry" v-loading="loadings.entryLoading"> 2 + <div class="entry" v-loading="loadings.entryLoading">
3 - <div class="entryTitle"> 3 + <div class="entryTitle">
4 - <div>申报数据编辑</div> 4 + <div>申报数据编辑</div>
5 - <div> 5 + <div>
6 - <el-button class="entrySaveButton" @click="back">返 回</el-button> 6 + <el-button class="entrySaveButton" @click="back">返 回</el-button>
7 - </div>
8 </div> 7 </div>
9 - <section :class="{partsHidden:!isFold}"> 8 + </div>
10 - <el-form 9 + <section :class="{ partsHidden: !isFold }">
11 - class="fedexFormStyle fedexFormEditStyle" 10 + <el-form
12 - ref="editForm" 11 + class="fedexFormStyle fedexFormEditStyle"
13 - :model="formData" 12 + ref="editForm"
14 - :rules="formRules" 13 + :model="formData"
15 - label-position="top" 14 + :rules="formRules"
16 - size="small" 15 + label-position="top"
17 - > 16 + size="small"
18 - <el-row :gutter="5"> 17 + >
19 - <el-col :span="3"> 18 + <el-row :gutter="5">
20 - <Formitem label="电商企业名称" prop="ebccode"> 19 + <el-col :span="3">
21 - <el-select 20 + <Formitem label="电商企业名称" prop="ebccode">
22 - type="text" 21 + <el-select
23 - id="inputInner--ebccode" 22 + type="text"
24 - v-model="formData.ebccode" 23 + id="inputInner--ebccode"
25 - clearable 24 + v-model="formData.ebccode"
26 - filterable 25 + clearable
27 - placeholder="" 26 + filterable
28 - > 27 + placeholder=""
29 - <el-option 28 + >
30 - v-for="(item, index) in ebcDataList"
31 - :key="index"
32 - :label="item.ecomEntName"
33 - :value="item.ecomEntCode"
34 - ></el-option>
35 - </el-select>
36 - </Formitem>
37 - </el-col>
38 - <el-col :span="3">
39 - <Formitem label="物流企业" prop="logisticsCode">
40 - <el-input
41 - type="text"
42 - class="inputShadow"
43 - id="inputInner--logisticsCode"
44 - resize="none"
45 - v-model="formData.logisticsCode"
46 - disabled
47 - clearable
48 - placeholder=""
49 - ></el-input>
50 - </Formitem>
51 - </el-col>
52 - <!-- 订单编号 -->
53 - <el-col :span="3">
54 - <Formitem label="订单编号" prop="orderNo">
55 - <el-input
56 - type="text"
57 - class="inputShadow"
58 - id="inputInner--orderNo"
59 - resize="none"
60 - v-model="formData.orderNo"
61 - clearable
62 - placeholder=""
63 - ></el-input>
64 - </Formitem>
65 - </el-col>
66 - <!-- 电商平台名称 -->
67 - <el-col :span="3">
68 - <Formitem label="物流运单编号" prop="logisticsNo">
69 - <el-input
70 - type="text"
71 - class="inputShadow"
72 - id="inputInner--logisticsNo"
73 - resize="none"
74 - v-model="formData.logisticsNo"
75 - clearable
76 - placeholder=""
77 - ></el-input>
78 - </Formitem>
79 - </el-col>
80 - <!-- 电商企业代码 -->
81 - <el-col :span="6">
82 - <Formitem label="申报地海关" prop="declareCustomsCode">
83 - <el-select
84 - type="text"
85 - id="inputInner--declareCustomsCode"
86 - v-model="formData.declareCustomsCode"
87 - filterable
88 - clearable
89 - placeholder=""
90 - >
91 <el-option 29 <el-option
92 - v-for="(item, index) in declareCustomsDataList" 30 + v-for="(item, index) in ebcDataList"
93 - :key="index" 31 + :key="index"
94 - :label="item.declarationPortCode" 32 + :label="item.ecomEntName"
95 - :value="item.declarationPortCode" 33 + :value="item.ecomEntCode"
96 - ></el-option> 34 + ></el-option>
97 - </el-select> 35 + </el-select>
98 - </Formitem> 36 + </Formitem>
99 - </el-col> 37 + </el-col>
100 - <!-- 电商企业 -->
101 - <el-col :span="3">
102 - <Formitem label="出口日期" prop="exportDate">
103 - <el-date-picker
104 - class="inputInner--createTime"
105 - id="inputInner--exportDate"
106 - v-model="formData.exportDate"
107 - type="date"
108 - format="yyyy-MM-dd"
109 - prefix-icon="none"
110 - value-format="yyyy-MM-dd"
111 - />
112 - </Formitem>
113 - </el-col>
114 -
115 - <!-- 商品金额 -->
116 <el-col :span="3"> 38 <el-col :span="3">
117 - <Formitem label="商品金额" prop="goodsValue"> 39 + <Formitem label="物流企业" prop="logisticsCode">
118 - <el-input 40 + <el-input
119 - type="number" 41 + type="text"
120 - class="inputShadow" 42 + class="inputShadow"
121 - id="inputInner--goodsValue" 43 + id="inputInner--logisticsCode"
122 - resize="none" 44 + resize="none"
123 - v-model="formData.goodsValue" 45 + v-model="formData.logisticsCode"
124 - disabled 46 + disabled
125 - clearable 47 + clearable
126 - placeholder="" 48 + placeholder=""
127 - ></el-input> 49 + ></el-input>
128 - </Formitem> 50 + </Formitem>
129 - </el-col> 51 + </el-col>
130 - </el-row> 52 + <!-- 订单编号 -->
131 - <el-row :gutter="5"> 53 + <el-col :span="3">
132 - <!-- 运杂费 --> 54 + <Formitem label="订单编号" prop="orderNo">
133 - <el-col :span="3"> 55 + <el-input
134 - <Formitem label="运杂费" prop="miscellaneousFreight"> 56 + type="text"
135 - <el-input 57 + class="inputShadow"
136 - type="number" 58 + id="inputInner--orderNo"
137 - class="inputShadow" 59 + resize="none"
138 - id="inputInner--miscellaneousFreight" 60 + v-model="formData.orderNo"
139 - resize="none" 61 + clearable
140 - v-model="formData.miscellaneousFreight" 62 + placeholder=""
141 - clearable 63 + ></el-input>
142 - placeholder="" 64 + </Formitem>
143 - ></el-input> 65 + </el-col>
144 - </Formitem> 66 + <!-- 电商平台名称 -->
145 - </el-col> 67 + <el-col :span="3">
146 - <!-- 币制 --> 68 + <Formitem label="物流运单编号" prop="logisticsNo">
147 - <el-col :span="3"> 69 + <el-input
148 - <Formitem label="币制" prop="currency"> 70 + type="text"
149 - <el-select 71 + class="inputShadow"
150 - type="text" 72 + id="inputInner--logisticsNo"
151 - id="inputInner--currency" 73 + resize="none"
152 - v-model="formData.currency" 74 + v-model="formData.logisticsNo"
153 - filterable 75 + clearable
154 - clearable 76 + placeholder=""
155 - placeholder="" 77 + ></el-input>
156 - > 78 + </Formitem>
157 - <el-option 79 + </el-col>
158 - v-for="(item, index) in $store.getters.dict.CURRENCY" 80 + <!-- 电商企业代码 -->
159 - :key="index" 81 + <el-col :span="6">
160 - :label="item.itemChineseName" 82 + <Formitem label="申报地海关" prop="declareCustomsCode">
161 - :value="item.itemValue" 83 + <el-select
162 - ></el-option> 84 + type="text"
163 - </el-select> 85 + id="inputInner--declareCustomsCode"
164 - </Formitem> 86 + v-model="formData.declareCustomsCode"
165 - </el-col> 87 + filterable
166 - <!-- 申报状态 --> 88 + clearable
167 - <el-col :span="6"> 89 + placeholder=""
168 - <Formitem label="主要货物信息" prop="mainGoodsInfo"> 90 + >
169 - <el-input 91 + <el-option
170 - type="text" 92 + v-for="(item, index) in declareCustomsDataList"
171 - class="inputShadow" 93 + :key="index"
172 - id="inputInner--mainGoodsInfo" 94 + :label="item.declarationPortCode"
173 - resize="none" 95 + :value="item.declarationPortCode"
174 - v-model="formData.mainGoodsInfo" 96 + ></el-option>
175 - clearable 97 + </el-select>
176 - placeholder="" 98 + </Formitem>
177 - ></el-input> 99 + </el-col>
178 - </Formitem> 100 + <!-- 电商企业 -->
179 - </el-col> 101 + <el-col :span="3">
180 - <!-- 申报类型 --> 102 + <Formitem label="出口日期" prop="exportDate">
181 - <el-col :span="3"> 103 + <el-date-picker
182 - <Formitem label="贸易方式" prop="appType"> 104 + class="inputInner--createTime"
183 - <el-input 105 + id="inputInner--exportDate"
184 - type="text" 106 + v-model="formData.exportDate"
185 - class="inputShadow" 107 + type="date"
186 - id="inputInner--appType" 108 + format="yyyy-MM-dd"
187 - resize="none" 109 + prefix-icon="none"
188 - v-model="formData.appType" 110 + value-format="yyyy-MM-dd"
189 - disabled
190 - clearable
191 - placeholder=""
192 - ></el-input>
193 - </Formitem>
194 - </el-col>
195 - <!-- 申报日期 -->
196 - <el-col :span="3">
197 - <Formitem label="航班号" prop="flightNumber">
198 - <el-input
199 - type="text"
200 - class="inputShadow"
201 - id="inputInner--flightNumber"
202 - resize="none"
203 - v-model="formData.flightNumber"
204 - clearable
205 - placeholder=""
206 - ></el-input>
207 - </Formitem>
208 - </el-col>
209 - <!-- 备注 -->
210 - <el-col :span="3">
211 - <Formitem label="提运单号" prop="billno">
212 - <el-input
213 - type="text"
214 - class="inputShadow"
215 - id="inputInner--billno"
216 - resize="none"
217 - v-model="formData.billno"
218 - clearable
219 - placeholder=""
220 - ></el-input>
221 - </Formitem>
222 - </el-col>
223 - <el-col :span="3">
224 - <Formitem label="总包号" prop="totalPackageNo">
225 - <el-input
226 - type="text"
227 - class="inputShadow"
228 - id="inputInner--totalPackageNo"
229 - resize="none"
230 - v-model="formData.totalPackageNo"
231 - clearable
232 - placeholder=""
233 - ></el-input>
234 - </Formitem>
235 - </el-col>
236 -
237 - </el-row>
238 - <el-row :gutter="5">
239 - <el-col :span="3">
240 - <Formitem label="监管场所代码" prop="regulatoryVenueCode">
241 - <el-input
242 - type="text"
243 - class="inputShadow"
244 - id="inputInner--regulatoryVenueCode"
245 - resize="none"
246 - v-model="formData.regulatoryVenueCode"
247 - clearable
248 - placeholder=""
249 - ></el-input>
250 - </Formitem>
251 - </el-col>
252 - <el-col :span="3">
253 - <Formitem label="许可证号" prop="licenseKey">
254 - <el-input
255 - type="text"
256 - class="inputShadow"
257 - id="inputInner--licenseKey"
258 - resize="none"
259 - v-model="formData.licenseKey"
260 - clearable
261 - placeholder=""
262 - ></el-input>
263 - </Formitem>
264 - </el-col>
265 - <el-col :span="3">
266 - <Formitem label="运抵国(地区)" prop="destinationCountryRegion">
267 - <el-select
268 - type="text"
269 - id="inputInner--destinationCountryRegion"
270 - v-model="formData.destinationCountryRegion"
271 - clearable
272 - filterable
273 - placeholder=""
274 - >
275 - <el-option
276 - v-for="(item, index) in $store.getters.dict.COUNTRY_REGION_CODE"
277 - :key="index"
278 - :label="item.itemChineseName"
279 - :value="item.itemCode"
280 - ></el-option>
281 - </el-select>
282 - </Formitem>
283 - </el-col>
284 - <el-col :span="3">
285 - <Formitem label="指运港代码" prop="portCode">
286 - <el-select
287 - type="text"
288 - id="inputInner--portCode"
289 - v-model="formData.portCode"
290 - clearable
291 - filterable
292 - placeholder=""
293 - >
294 - <el-option
295 - v-for="(item, index) in $store.getters.dict.COUNTRY_REGION_CODE"
296 - :key="index"
297 - :label="item.itemChineseName"
298 - :value="item.itemCode"
299 - ></el-option>
300 - </el-select>
301 - </Formitem>
302 - </el-col>
303 - <el-col :span="3">
304 - <Formitem label="运费" prop="freight">
305 - <el-input
306 - type="number"
307 - class="inputShadow"
308 - id="inputInner--freight"
309 - resize="none"
310 - v-model="formData.freight"
311 - :min="0"
312 - clearable
313 - placeholder=""
314 - ></el-input>
315 - </Formitem>
316 - </el-col>
317 - <el-col :span="3">
318 - <Formitem label="运费币制" prop="freightCurrency">
319 - <el-select
320 - type="text"
321 - id="inputInner--freightCurrency"
322 - v-model="formData.freightCurrency"
323 - clearable
324 - filterable
325 - placeholder=""
326 - >
327 - <el-option
328 - v-for="(item, index) in $store.getters.dict.CURRENCY"
329 - :key="index"
330 - :label="item.itemChineseName"
331 - :value="item.itemValue"
332 - ></el-option>
333 - </el-select>
334 - </Formitem>
335 - </el-col>
336 - <el-col :span="3">
337 - <Formitem label="运费标志" prop="freightTag">
338 - <el-select
339 - type="text"
340 - id="inputInner--freightTag"
341 - v-model="formData.freightTag"
342 - clearable
343 - placeholder=""
344 - >
345 - <el-option
346 - v-for="(item, index) in $store.getters.dict.DECLARE_F_FLAG"
347 - :key="index"
348 - :label="item.itemChineseName"
349 - :value="item.itemValue"
350 - ></el-option>
351 - </el-select>
352 - </Formitem>
353 - </el-col>
354 - <el-col :span="3">
355 - <Formitem label="保费" prop="insuredfee">
356 - <el-input
357 - type="number"
358 - class="inputShadow"
359 - id="inputInner--insuredfee"
360 - resize="none"
361 - v-model="formData.insuredfee"
362 - clearable
363 - placeholder=""
364 - ></el-input>
365 - </Formitem>
366 - </el-col>
367 -
368 - </el-row>
369 - <el-row :gutter="5">
370 - <el-col :span="3">
371 - <Formitem label="保费币制" prop="insuredfeeCurrency">
372 - <el-select
373 - type="text"
374 - id="inputInner--insuredfeeCurrency"
375 - v-model="formData.insuredfeeCurrency"
376 - clearable
377 - filterable
378 - placeholder=""
379 - >
380 - <el-option
381 - v-for="(item, index) in $store.getters.dict.CURRENCY"
382 - :key="index"
383 - :label="item.itemChineseName"
384 - :value="item.itemValue"
385 - ></el-option>
386 - </el-select>
387 - </Formitem>
388 - </el-col>
389 - <el-col :span="3">
390 - <Formitem label="保费标志" prop="insuredfeeTag">
391 - <el-select
392 - type="text"
393 - id="inputInner--insuredfeeTag"
394 - v-model="formData.insuredfeeTag"
395 - clearable
396 - placeholder=""
397 - >
398 - <el-option
399 - v-for="(item, index) in $store.getters.dict.DECLARE_F_FLAG"
400 - :key="index"
401 - :label="item.itemChineseName"
402 - :value="item.itemValue"
403 - ></el-option>
404 - </el-select>
405 - </Formitem>
406 - </el-col>
407 - <el-col :span="3">
408 - <Formitem label="包装种类代码" prop="packageTypeCode">
409 - <el-select
410 - type="text"
411 - id="inputInner--packageTypeCode"
412 - v-model="formData.packageTypeCode"
413 - clearable
414 - placeholder=""
415 - >
416 - <el-option
417 - v-for="(item, index) in $store.getters.dict.PACKAGE_TYPE_CODE"
418 - :key="index"
419 - :label="item.itemChineseName"
420 - :value="item.itemCode"
421 - ></el-option>
422 - </el-select>
423 - </Formitem>
424 - </el-col>
425 - <el-col :span="3">
426 - <Formitem label="件数" prop="packNo">
427 - <el-input
428 - class="inputShadow"
429 - id="inputInner--packNo"
430 - resize="none"
431 - maxlength="9"
432 - v-model.number="formData.packNo"
433 - clearable
434 - placeholder=""
435 - ></el-input>
436 - </Formitem>
437 - </el-col>
438 - <el-col :span="3">
439 - <Formitem label="毛重(公斤)" prop="weight">
440 - <el-input
441 - type="number"
442 - class="inputShadow"
443 - id="inputInner--weight"
444 - resize="none"
445 - v-model="formData.weight"
446 - clearable
447 - placeholder=""
448 - ></el-input>
449 - </Formitem>
450 - </el-col>
451 - <el-col :span="3">
452 - <Formitem label="净重(公斤)" prop="netWeight">
453 - <el-input
454 - type="number"
455 - class="inputShadow"
456 - id="inputInner--netWeight"
457 - resize="none"
458 - v-model="formData.netWeight"
459 - disabled
460 - clearable
461 - placeholder=""
462 - ></el-input>
463 - </Formitem>
464 - </el-col>
465 - <el-col :span="6">
466 - <Formitem label="备注" prop="remark">
467 - <el-input
468 - type="text"
469 - class="inputShadow"
470 - id="inputInner--remark"
471 - resize="none"
472 - v-model="formData.remark"
473 - clearable
474 - placeholder=""
475 - ></el-input>
476 - </Formitem>
477 - </el-col>
478 - </el-row>
479 - </el-form>
480 - </section>
481 - <div class="fold-unfold">
482 - <img v-if="isFold" src="@/assets/images/fold.png" @click="()=>isFold = false" alt="">
483 - <img v-if="!isFold" src="@/assets/images/unfold.png" @click="()=>isFold = true" alt="">
484 - </div>
485 - <div class="entryTitle" style="margin-top: 10px">商品明细</div>
486 - <section style="position:relative">
487 - <Table
488 - class="fedexDetialTable fedexSreachTable editableTable"
489 - ref="entryTable"
490 - :pagination="false"
491 - :data="detailData"
492 - :headerData="detialHeaderData"
493 - :border="true"
494 - :order="true"
495 - :noWidth="0"
496 - :rowKey="'gnum'"
497 - :expandRowKeys="expandRowKeys"
498 - >
499 - <template slot="rowDataEdit" slot-scope="props">
500 - <RowDataEditForm
501 - ref="rowEditForm"
502 - :rowDatas="props"
503 - @cancelEditRowData="cancelEditRowData"
504 - @rowFormDataSave="rowFormDataSave"
505 - @updateLastItemValid="handleUpdateLastItemValid"
506 /> 111 />
112 + </Formitem>
113 + </el-col>
114 +
115 + <!-- 商品金额 -->
116 + <el-col :span="3">
117 + <Formitem label="商品金额" prop="goodsValue">
118 + <el-input
119 + type="number"
120 + class="inputShadow"
121 + id="inputInner--goodsValue"
122 + resize="none"
123 + v-model="formData.goodsValue"
124 + disabled
125 + clearable
126 + placeholder=""
127 + ></el-input>
128 + </Formitem>
129 + </el-col>
130 + </el-row>
131 + <el-row :gutter="5">
132 + <!-- 运杂费 -->
133 + <el-col :span="3">
134 + <Formitem label="运杂费" prop="miscellaneousFreight">
135 + <el-input
136 + type="number"
137 + class="inputShadow"
138 + id="inputInner--miscellaneousFreight"
139 + resize="none"
140 + v-model="formData.miscellaneousFreight"
141 + clearable
142 + placeholder=""
143 + ></el-input>
144 + </Formitem>
145 + </el-col>
146 + <!-- 币制 -->
147 + <el-col :span="3">
148 + <Formitem label="币制" prop="currency">
149 + <el-select
150 + type="text"
151 + id="inputInner--currency"
152 + v-model="formData.currency"
153 + filterable
154 + clearable
155 + placeholder=""
156 + >
157 + <el-option
158 + v-for="(item, index) in $store.getters.dict.CURRENCY"
159 + :key="index"
160 + :label="item.itemChineseName"
161 + :value="item.itemValue"
162 + ></el-option>
163 + </el-select>
164 + </Formitem>
165 + </el-col>
166 + <!-- 申报状态 -->
167 + <el-col :span="6">
168 + <Formitem label="主要货物信息" prop="mainGoodsInfo">
169 + <el-input
170 + type="text"
171 + class="inputShadow"
172 + id="inputInner--mainGoodsInfo"
173 + resize="none"
174 + v-model="formData.mainGoodsInfo"
175 + clearable
176 + placeholder=""
177 + ></el-input>
178 + </Formitem>
179 + </el-col>
180 + <!-- 申报类型 -->
181 + <el-col :span="3">
182 + <Formitem label="贸易方式" prop="appType">
183 + <el-input
184 + type="text"
185 + class="inputShadow"
186 + id="inputInner--appType"
187 + resize="none"
188 + v-model="formData.appType"
189 + disabled
190 + clearable
191 + placeholder=""
192 + ></el-input>
193 + </Formitem>
194 + </el-col>
195 + <!-- 申报日期 -->
196 + <el-col :span="3">
197 + <Formitem label="航班号" prop="flightNumber">
198 + <el-input
199 + type="text"
200 + class="inputShadow"
201 + id="inputInner--flightNumber"
202 + resize="none"
203 + v-model="formData.flightNumber"
204 + clearable
205 + placeholder=""
206 + ></el-input>
207 + </Formitem>
208 + </el-col>
209 + <!-- 备注 -->
210 + <el-col :span="3">
211 + <Formitem label="提运单号" prop="billno">
212 + <el-input
213 + type="text"
214 + class="inputShadow"
215 + id="inputInner--billno"
216 + resize="none"
217 + v-model="formData.billno"
218 + clearable
219 + placeholder=""
220 + ></el-input>
221 + </Formitem>
222 + </el-col>
223 + <el-col :span="3">
224 + <Formitem label="总包号" prop="totalPackageNo">
225 + <el-input
226 + type="text"
227 + class="inputShadow"
228 + id="inputInner--totalPackageNo"
229 + resize="none"
230 + v-model="formData.totalPackageNo"
231 + clearable
232 + placeholder=""
233 + ></el-input>
234 + </Formitem>
235 + </el-col>
236 + </el-row>
237 + <el-row :gutter="5">
238 + <el-col :span="3">
239 + <Formitem label="监管场所代码" prop="regulatoryVenueCode">
240 + <el-input
241 + type="text"
242 + class="inputShadow"
243 + id="inputInner--regulatoryVenueCode"
244 + resize="none"
245 + v-model="formData.regulatoryVenueCode"
246 + clearable
247 + placeholder=""
248 + ></el-input>
249 + </Formitem>
250 + </el-col>
251 + <el-col :span="3">
252 + <Formitem label="许可证号" prop="licenseKey">
253 + <el-input
254 + type="text"
255 + class="inputShadow"
256 + id="inputInner--licenseKey"
257 + resize="none"
258 + v-model="formData.licenseKey"
259 + clearable
260 + placeholder=""
261 + ></el-input>
262 + </Formitem>
263 + </el-col>
264 + <el-col :span="3">
265 + <Formitem label="运抵国(地区)" prop="destinationCountryRegion">
266 + <el-select
267 + type="text"
268 + id="inputInner--destinationCountryRegion"
269 + v-model="formData.destinationCountryRegion"
270 + clearable
271 + filterable
272 + placeholder=""
273 + >
274 + <el-option
275 + v-for="(item, index) in $store.getters.dict
276 + .COUNTRY_REGION_CODE"
277 + :key="index"
278 + :label="item.itemChineseName"
279 + :value="item.itemCode"
280 + ></el-option>
281 + </el-select>
282 + </Formitem>
283 + </el-col>
284 + <el-col :span="3">
285 + <Formitem label="指运港代码" prop="portCode">
286 + <el-select
287 + type="text"
288 + id="inputInner--portCode"
289 + v-model="formData.portCode"
290 + clearable
291 + filterable
292 + placeholder=""
293 + >
294 + <el-option
295 + v-for="(item, index) in $store.getters.dict
296 + .COUNTRY_REGION_CODE"
297 + :key="index"
298 + :label="item.itemChineseName"
299 + :value="item.itemCode"
300 + ></el-option>
301 + </el-select>
302 + </Formitem>
303 + </el-col>
304 + <el-col :span="3">
305 + <Formitem label="运费" prop="freight">
306 + <el-input
307 + type="number"
308 + class="inputShadow"
309 + id="inputInner--freight"
310 + resize="none"
311 + v-model="formData.freight"
312 + :min="0"
313 + clearable
314 + placeholder=""
315 + ></el-input>
316 + </Formitem>
317 + </el-col>
318 + <el-col :span="3">
319 + <Formitem label="运费币制" prop="freightCurrency">
320 + <el-select
321 + type="text"
322 + id="inputInner--freightCurrency"
323 + v-model="formData.freightCurrency"
324 + clearable
325 + filterable
326 + placeholder=""
327 + >
328 + <el-option
329 + v-for="(item, index) in $store.getters.dict.CURRENCY"
330 + :key="index"
331 + :label="item.itemChineseName"
332 + :value="item.itemValue"
333 + ></el-option>
334 + </el-select>
335 + </Formitem>
336 + </el-col>
337 + <el-col :span="3">
338 + <Formitem label="运费标志" prop="freightTag">
339 + <el-select
340 + type="text"
341 + id="inputInner--freightTag"
342 + v-model="formData.freightTag"
343 + clearable
344 + placeholder=""
345 + >
346 + <el-option
347 + v-for="(item, index) in $store.getters.dict.DECLARE_F_FLAG"
348 + :key="index"
349 + :label="item.itemChineseName"
350 + :value="item.itemValue"
351 + ></el-option>
352 + </el-select>
353 + </Formitem>
354 + </el-col>
355 + <el-col :span="3">
356 + <Formitem label="保费" prop="insuredfee">
357 + <el-input
358 + type="number"
359 + class="inputShadow"
360 + id="inputInner--insuredfee"
361 + resize="none"
362 + v-model="formData.insuredfee"
363 + clearable
364 + placeholder=""
365 + ></el-input>
366 + </Formitem>
367 + </el-col>
368 + </el-row>
369 + <el-row :gutter="5">
370 + <el-col :span="3">
371 + <Formitem label="保费币制" prop="insuredfeeCurrency">
372 + <el-select
373 + type="text"
374 + id="inputInner--insuredfeeCurrency"
375 + v-model="formData.insuredfeeCurrency"
376 + clearable
377 + filterable
378 + placeholder=""
379 + >
380 + <el-option
381 + v-for="(item, index) in $store.getters.dict.CURRENCY"
382 + :key="index"
383 + :label="item.itemChineseName"
384 + :value="item.itemValue"
385 + ></el-option>
386 + </el-select>
387 + </Formitem>
388 + </el-col>
389 + <el-col :span="3">
390 + <Formitem label="保费标志" prop="insuredfeeTag">
391 + <el-select
392 + type="text"
393 + id="inputInner--insuredfeeTag"
394 + v-model="formData.insuredfeeTag"
395 + clearable
396 + placeholder=""
397 + >
398 + <el-option
399 + v-for="(item, index) in $store.getters.dict.DECLARE_F_FLAG"
400 + :key="index"
401 + :label="item.itemChineseName"
402 + :value="item.itemValue"
403 + ></el-option>
404 + </el-select>
405 + </Formitem>
406 + </el-col>
407 + <el-col :span="3">
408 + <Formitem label="包装种类代码" prop="packageTypeCode">
409 + <el-select
410 + type="text"
411 + id="inputInner--packageTypeCode"
412 + v-model="formData.packageTypeCode"
413 + clearable
414 + placeholder=""
415 + >
416 + <el-option
417 + v-for="(item, index) in $store.getters.dict.PACKAGE_TYPE_CODE"
418 + :key="index"
419 + :label="item.itemChineseName"
420 + :value="item.itemCode"
421 + ></el-option>
422 + </el-select>
423 + </Formitem>
424 + </el-col>
425 + <el-col :span="3">
426 + <Formitem label="件数" prop="packNo">
427 + <el-input
428 + class="inputShadow"
429 + id="inputInner--packNo"
430 + resize="none"
431 + maxlength="9"
432 + v-model.number="formData.packNo"
433 + clearable
434 + placeholder=""
435 + ></el-input>
436 + </Formitem>
437 + </el-col>
438 + <el-col :span="3">
439 + <Formitem label="毛重(公斤)" prop="weight">
440 + <el-input
441 + type="number"
442 + class="inputShadow"
443 + id="inputInner--weight"
444 + resize="none"
445 + v-model="formData.weight"
446 + clearable
447 + placeholder=""
448 + ></el-input>
449 + </Formitem>
450 + </el-col>
451 + <el-col :span="3">
452 + <Formitem label="净重(公斤)" prop="netWeight">
453 + <el-input
454 + type="number"
455 + class="inputShadow"
456 + id="inputInner--netWeight"
457 + resize="none"
458 + v-model="formData.netWeight"
459 + disabled
460 + clearable
461 + placeholder=""
462 + ></el-input>
463 + </Formitem>
464 + </el-col>
465 + <el-col :span="6">
466 + <Formitem label="备注" prop="remark">
467 + <el-input
468 + type="text"
469 + class="inputShadow"
470 + id="inputInner--remark"
471 + resize="none"
472 + v-model="formData.remark"
473 + clearable
474 + placeholder=""
475 + ></el-input>
476 + </Formitem>
477 + </el-col>
478 + </el-row>
479 + </el-form>
480 + </section>
481 + <div class="fold-unfold">
482 + <img
483 + v-if="isFold"
484 + src="@/assets/images/fold.png"
485 + @click="() => (isFold = false)"
486 + alt=""
487 + />
488 + <img
489 + v-if="!isFold"
490 + src="@/assets/images/unfold.png"
491 + @click="() => (isFold = true)"
492 + alt=""
493 + />
494 + </div>
495 + <div class="entryTitle" style="margin-top: 10px">商品明细</div>
496 + <section style="position: relative">
497 + <Table
498 + class="fedexDetialTable fedexSreachTable editableTable"
499 + ref="entryTable"
500 + :pagination="false"
501 + :data="detailData"
502 + :headerData="detialHeaderData"
503 + :border="true"
504 + :order="true"
505 + :noWidth="0"
506 + :rowKey="'gnum'"
507 + :expandRowKeys="expandRowKeys"
508 + >
509 + <template slot="rowDataEdit" slot-scope="props">
510 + <RowDataEditForm
511 + ref="rowEditForm"
512 + :rowDatas="props"
513 + @cancelEditRowData="cancelEditRowData"
514 + @rowFormDataSave="rowFormDataSave"
515 + @updateLastItemValid="handleUpdateLastItemValid"
516 + />
517 + </template>
518 + <template v-slot:destinationCountryRegionCode="scope">
519 + <span>{{
520 + mapDicDatas(
521 + $store.getters.dict.COUNTRY_REGION_CODE,
522 + scope.row.destinationCountryRegionCode
523 + )
524 + }}</span>
525 + </template>
526 + <template v-slot:unit="scope">
527 + <span>{{
528 + mapDicDatas($store.getters.dict.MEASUREMENT_UNIT, scope.row.unit)
529 + }}</span>
530 + </template>
531 + <template v-slot:unitLegalFirstCode="scope">
532 + <span>{{
533 + mapDicDatas(
534 + $store.getters.dict.MEASUREMENT_UNIT,
535 + scope.row.unitLegalFirstCode
536 + )
537 + }}</span>
538 + </template>
539 + <template v-slot:currency="scope">
540 + <span>{{
541 + mapCurrencyDatas($store.getters.dict.CURRENCY, scope.row.currency)
542 + }}</span>
543 + </template>
544 + <template slot="optionColumn">
545 + <el-table-column align="left" label="操作" width="100">
546 + <template slot-scope="scope">
547 + <el-button type="text" @click="updateRow(scope.row)">
548 + 修改
549 + </el-button>
550 + <el-button type="text" @click="deleteRow(scope.row)">
551 + 删除
552 + </el-button>
507 </template> 553 </template>
508 - <template v-slot:destinationCountryRegionCode="scope"> 554 + </el-table-column>
509 - <span>{{ mapDicDatas($store.getters.dict.COUNTRY_REGION_CODE, scope.row.destinationCountryRegionCode) }}</span> 555 + </template>
510 - </template> 556 + </Table>
511 - <template v-slot:unit="scope"> 557 + </section>
512 - <span>{{ mapDicDatas($store.getters.dict.MEASUREMENT_UNIT, scope.row.unit) }}</span> 558 + <div class="addNewItem">
513 - </template> 559 + <i class="el-icon-circle-plus-outline" @click="addNewItem"></i>
514 - <template v-slot:currency="scope"> 560 + <span @click="addNewItem">添加新商品</span>
515 - <span>{{ mapCurrencyDatas($store.getters.dict.CURRENCY, scope.row.currency) }}</span> 561 + </div>
516 - </template> 562 + <div style="margin-top: 20px; text-align: center">
517 - <template slot="optionColumn"> 563 + <el-button
518 - <el-table-column align="left" label="操作" width="100">
519 - <template slot-scope="scope">
520 - <el-button type="text" @click="updateRow(scope.row)"> 修改 </el-button>
521 - <el-button type="text" @click="deleteRow(scope.row)"> 删除 </el-button>
522 - </template>
523 - </el-table-column>
524 - </template>
525 - </Table>
526 - </section>
527 - <div class="addNewItem">
528 - <i class="el-icon-circle-plus-outline" @click="addNewItem"></i>
529 - <span @click="addNewItem">添加新商品</span>
530 - </div>
531 - <div style="margin-top: 20px; text-align: center">
532 - <el-button
533 class="entrySaveButton entrySaveButton-background revokeSubmitBtn" 564 class="entrySaveButton entrySaveButton-background revokeSubmitBtn"
534 type="primary" 565 type="primary"
535 @click="submitEditedReportDatas" 566 @click="submitEditedReportDatas"
536 - >保存</el-button> 567 + >保存</el-button
537 - <el-button 568 + >
538 - class="entrySaveButton" 569 + <el-button class="entrySaveButton" @click="back">返回</el-button>
539 - @click="back"
540 - >返回</el-button>
541 - </div>
542 </div> 570 </div>
543 - </template> 571 + </div>
572 +</template>
544 573
545 - <script> 574 +<script>
546 - import RowDataEditForm from "./RowDataEditForm.vue"; 575 +import RowDataEditForm from "./RowDataEditForm.vue";
547 - import { getCustomerList, getPortList, getDeclareData, updateDeclareData } from "@/api/declareData-api.js"; 576 +import {
548 - import { getDictData } from '@/api/system/dict-api.js' 577 + getCustomerList,
549 - import item from "@/layout/components/Sidebar/Item.vue"; 578 + getPortList,
550 - export default { 579 + getDeclareData,
551 - name: "", 580 + updateDeclareData,
552 - components: { RowDataEditForm }, 581 +} from "@/api/declareData-api.js";
553 - data() { 582 +import { getDictData } from "@/api/system/dict-api.js";
554 - var checkNegativeNum = (rule, value, callback) => { 583 +import item from "@/layout/components/Sidebar/Item.vue";
555 - if (value < 0) { 584 +export default {
556 - callback(new Error('数值不能为负')); 585 + name: "",
557 - } else { 586 + components: { RowDataEditForm },
558 - callback(); 587 + data() {
559 - } 588 + var checkNegativeNum = (rule, value, callback) => {
560 - }; 589 + if (value < 0) {
561 - var checkInsuredFee = (rule, value, callback) => { 590 + callback(new Error("数值不能为负"));
562 - if (value < 0) { 591 + } else {
563 - callback(new Error('数值不能为负')); 592 + callback();
593 + }
594 + };
595 + var checkInsuredFee = (rule, value, callback) => {
596 + if (value < 0) {
597 + callback(new Error("数值不能为负"));
598 + }
599 + if (value !== "" && value !== undefined) {
600 + const regex = /^\d{0,14}(\.\d{1,5})?$/;
601 + if (!regex.test(value)) {
602 + callback(new Error("整数最多14位,小数最多5位"));
603 + } else {
604 + callback();
564 } 605 }
565 - if (value !== '' && value !== undefined) { 606 + } else {
566 - const regex = /^\d{0,14}(\.\d{1,5})?$/; 607 + callback();
567 - if (!regex.test(value)) { 608 + }
568 - callback(new Error('整数最多14位,小数最多5位')); 609 + };
569 - } else { 610 + var checkPackNo = (rule, value, callback) => {
570 - callback(); 611 + if (!Number.isInteger(value)) {
571 - } 612 + callback(new Error("请输入整数值"));
613 + } else {
614 + if (value < 0) {
615 + callback(new Error("数值不能为负"));
572 } else { 616 } else {
573 callback(); 617 callback();
574 } 618 }
575 - }; 619 + }
576 - var checkPackNo = (rule, value, callback) => { 620 + };
577 - if (!Number.isInteger(value)) { 621 + return {
578 - callback(new Error('请输入整数值')); 622 + ebcDataList: [],
579 - } else { 623 + declareCustomsDataList: [],
580 - if (value < 0) { 624 + declareId: null,
581 - callback(new Error('数值不能为负')); 625 + formData: {
582 - } else { 626 + appType: 9610,
583 - callback(); 627 + },
584 - } 628 + formRules: {
585 - } 629 + ebccode: [
586 - }; 630 + { required: true, message: "请选择电商企业", trigger: "change" },
587 - return { 631 + ],
588 - ebcDataList:[], 632 + logisticsCode: [
589 - declareCustomsDataList:[], 633 + { required: true, message: "请选择物流企业", trigger: "change" },
590 - declareId: null, 634 + ],
591 - formData: { 635 + orderNo: [
592 - appType:9610 636 + { required: true, message: "请输入订单编号", trigger: "blur" },
637 + { max: 60, message: "长度不能超过60个字符", trigger: "blur" },
638 + ],
639 + logisticsNo: [
640 + { required: true, message: "请输入物流运单编号", trigger: "blur" },
641 + { max: 80, message: "长度不能超过80个字符", trigger: "blur" },
642 + ],
643 + declareCustomsCode: [
644 + { required: true, message: "请选择申报地海关", trigger: "change" },
645 + ],
646 + exportDate: [{ message: "请选择出口日期", trigger: "change" }],
647 + goodsValue: [
648 + { required: true, message: "请输入商品金额", trigger: "blur" },
649 + ],
650 + miscellaneousFreight: [
651 + { validator: checkNegativeNum, trigger: "blur" },
652 + ],
653 + currency: [
654 + { required: true, message: "请选择币制", trigger: "change" },
655 + ],
656 + mainGoodsInfo: [
657 + { required: true, message: "请输入主要物品信息", trigger: "blur" },
658 + { max: 200, message: "长度不能超过200个字符", trigger: "blur" },
659 + ],
660 + flightNumber: [
661 + { required: true, message: "请输入航班号", trigger: "blur" },
662 + { max: 32, message: "长度不能超过32个字符", trigger: "blur" },
663 + ],
664 + billno: [
665 + { required: true, message: "请输入提运单号", trigger: "blur" },
666 + { max: 37, message: "长度不能超过37个字符", trigger: "blur" },
667 + ],
668 + totalPackageNo: [
669 + { max: 37, message: "长度不能超过37个字符", trigger: "blur" },
670 + ],
671 + regulatoryVenueCode: [
672 + { max: 10, message: "长度不能超过10个字符", trigger: "blur" },
673 + ],
674 + licenseKey: [
675 + { max: 19, message: "长度不能超过19个字符", trigger: "blur" },
676 + ],
677 + destinationCountryRegion: [
678 + { required: true, message: "请选择运抵国", trigger: "change" },
679 + ],
680 + portCode: [
681 + { required: true, message: "请选择运指运港代码", trigger: "change" },
682 + ],
683 + freight: [
684 + { required: true, message: "请输入运费", trigger: "blur" },
685 + { validator: checkNegativeNum, trigger: "blur" },
686 + ],
687 + freightCurrency: [
688 + { required: true, message: "请选择运费币制", trigger: "change" },
689 + ],
690 + freightTag: [
691 + { required: true, message: "请选择运费标志", trigger: "change" },
692 + ],
693 + insuredfee: [
694 + { required: true, message: "请输入保费", trigger: "blur" },
695 + { validator: checkInsuredFee, trigger: "blur" },
696 + ],
697 + insuredfeeCurrency: [
698 + { required: true, message: "请输入保费币制", trigger: "blur" },
699 + ],
700 + insuredfeeTag: [
701 + { required: true, message: "请输选择保费标志", trigger: "change" },
702 + ],
703 + packageTypeCode: [
704 + { required: true, message: "请选择包装种类代码", trigger: "change" },
705 + ],
706 + packNo: [
707 + { required: true, message: "请输入件数", trigger: "blur" },
708 + { validator: checkPackNo, trigger: "blur" },
709 + ],
710 + weight: [
711 + { required: true, message: "请输入毛重", trigger: "blur" },
712 + { validator: checkNegativeNum, trigger: "blur" },
713 + ],
714 + netWeight: [{ required: true, message: "请输入净重", trigger: "blur" }],
715 + remark: [
716 + { max: 1000, message: "长度不能超过1000个字符", trigger: "blur" },
717 + ],
718 + },
719 + detailData: [],
720 + detialHeaderData: [
721 + {
722 + value: "rowDataEdit",
723 + expand: true,
724 + width: 0,
593 }, 725 },
594 - formRules:{ 726 + {
595 - ebccode: [ 727 + name: "企业商品货号",
596 - { required: true, message: '请选择电商企业', trigger: 'change' }, 728 + value: "enterpriseProductCode",
597 - ], 729 + width: "",
598 - logisticsCode: [ 730 + align: "left",
599 - { required: true, message: '请选择物流企业', trigger: 'change' },
600 - ],
601 - orderNo: [
602 - { required: true, message: '请输入订单编号', trigger: 'blur' },
603 - { max: 60, message: '长度不能超过60个字符', trigger: 'blur' }
604 - ],
605 - logisticsNo: [
606 - { required: true, message: '请输入物流运单编号', trigger: 'blur' },
607 - { max: 80, message: '长度不能超过80个字符', trigger: 'blur' }
608 - ],
609 - declareCustomsCode: [
610 - { required: true, message: '请选择申报地海关', trigger: 'change' }
611 - ],
612 - exportDate: [
613 - { message: '请选择出口日期', trigger: 'change' }
614 - ],
615 - goodsValue: [
616 - { required: true, message: '请输入商品金额', trigger: 'blur' }
617 - ],
618 - miscellaneousFreight:[
619 - { validator: checkNegativeNum, trigger: 'blur' }
620 - ],
621 - currency: [
622 - { required: true, message: '请选择币制', trigger: 'change' }
623 - ],
624 - mainGoodsInfo: [
625 - { required: true, message: '请输入主要物品信息', trigger: 'blur' },
626 - { max: 200, message: '长度不能超过200个字符', trigger: 'blur' }
627 - ],
628 - flightNumber: [
629 - { required: true, message: '请输入航班号', trigger: 'blur' },
630 - { max: 32, message: '长度不能超过32个字符', trigger: 'blur' }
631 - ],
632 - billno: [
633 - { required: true, message: '请输入提运单号', trigger: 'blur' },
634 - { max: 37, message: '长度不能超过37个字符', trigger: 'blur' }
635 - ],
636 - totalPackageNo: [
637 - { max: 37, message: '长度不能超过37个字符', trigger: 'blur' }
638 - ],
639 - regulatoryVenueCode: [
640 - { max: 10, message: '长度不能超过10个字符', trigger: 'blur' }
641 - ],
642 - licenseKey: [
643 - { max: 19, message: '长度不能超过19个字符', trigger: 'blur' }
644 - ],
645 - destinationCountryRegion: [
646 - { required: true, message: '请选择运抵国', trigger: 'change' }
647 - ],
648 - portCode: [
649 - { required: true, message: '请选择运指运港代码', trigger: 'change' }
650 - ],
651 - freight: [
652 - { required: true, message: '请输入运费', trigger: 'blur' },
653 - { validator: checkNegativeNum, trigger: 'blur' }
654 - ],
655 - freightCurrency: [
656 - { required: true, message: '请选择运费币制', trigger: 'change' }
657 - ],
658 - freightTag: [
659 - { required: true, message: '请选择运费标志', trigger: 'change' }
660 - ],
661 - insuredfee: [
662 - { required: true, message: '请输入保费', trigger: 'blur' },
663 - { validator: checkInsuredFee, trigger: 'blur' }
664 - ],
665 - insuredfeeCurrency: [
666 - { required: true, message: '请输入保费币制', trigger: 'blur' }
667 - ],
668 - insuredfeeTag: [
669 - { required: true, message: '请输选择保费标志', trigger: 'change' }
670 - ],
671 - packageTypeCode: [
672 - { required: true, message: '请选择包装种类代码', trigger: 'change' }
673 - ],
674 - packNo: [
675 - { required: true, message: '请输入件数', trigger: 'blur' },
676 - { validator: checkPackNo, trigger: 'blur' }
677 - ],
678 - weight: [
679 - { required: true, message: '请输入毛重', trigger: 'blur' },
680 - { validator: checkNegativeNum, trigger: 'blur' }
681 - ],
682 - netWeight: [
683 - { required: true, message: '请输入净重', trigger: 'blur' }
684 - ],
685 - remark: [
686 - { max: 1000, message: '长度不能超过1000个字符', trigger: 'blur' }
687 - ]
688 }, 731 },
689 - detailData: [],
690 - detialHeaderData: [
691 { 732 {
692 - value: "rowDataEdit", 733 + name: "企业商品名称",
693 - expand:true, 734 + value: "enterpriseProductName",
694 - width:0, 735 + width: "",
695 - }, 736 + align: "left",
696 - {
697 - name: "企业商品货号",
698 - value: "enterpriseProductCode",
699 - width: "",
700 - align: "left",
701 - },
702 - {
703 - name: "企业商品名称",
704 - value: "enterpriseProductName",
705 - width: "",
706 - align: "left",
707 - },
708 - {
709 - name: "企业商品描述",
710 - value: "enterpriseProductDescribe",
711 - width: "",
712 - align: "left",
713 - },
714 - {
715 - name: "商品名称",
716 - value: "productName",
717 - width: "",
718 - align: "left",
719 - },
720 - {
721 - name: "商品编码",
722 - value: "productCode",
723 - width: "",
724 - align: "left",
725 -
726 - },
727 - {
728 - name: "规格型号",
729 - value: "model",
730 - width: "",
731 - align: "left",
732 -
733 - },
734 - {
735 - name: "账册备案料号",
736 - value: "accountBookMaterialNumber",
737 - width: "",
738 - align: "left",
739 - },
740 - {
741 - name: "条形码",
742 - value: "barCode",
743 - width: "",
744 - align: "left",
745 - },
746 - {
747 - name: "目的国(地区)代码",
748 - value: "destinationCountryRegionCode",
749 - width: "",
750 - align: "left",
751 - slot:true
752 - },
753 - {
754 - name: "计量单位",
755 - value: "unit",
756 - width: "",
757 - align: "left",
758 - slot:true
759 - },
760 - {
761 - name: "数量",
762 - value: "qty",
763 - width: "",
764 - align: "left",
765 - },
766 - {
767 - name: "法定数量",
768 - value: "legalQty",
769 - width: "",
770 - align: "left",
771 - },
772 - {
773 - name: "币制",
774 - value: "currency",
775 - width: "",
776 - align: "left",
777 - slot:true
778 - },
779 - {
780 - name: "单价",
781 - value: "price",
782 - width: "",
783 - align: "left",
784 - },
785 - {
786 - name: "总价",
787 - value: "totalPrice",
788 - width: "",
789 - align: "left",
790 - },
791 - {
792 - name: "净重",
793 - value: "netWeight",
794 - width: "",
795 - align: "left",
796 - },
797 - {
798 - name: "备注",
799 - value: "remark",
800 - width: "",
801 - align: "left",
802 - },
803 - ],
804 - loadings: {
805 - entryLoading: false,
806 }, 737 },
807 - logtableType: true, 738 + {
808 - expandRowKeys:[], 739 + name: "企业商品描述",
809 - isFold: false, 740 + value: "enterpriseProductDescribe",
810 - // 用于保存原始数据 741 + width: "",
811 - originalDetailData: {}, 742 + align: "left",
812 - // 当前编辑行的 gnum 743 + },
813 - currentRowKey: null, 744 + {
814 - lastItemValid: true, // 默认值为 true,表示没有新增项或上一次新增项通过了校验 745 + name: "商品名称",
815 - }; 746 + value: "productName",
816 - }, 747 + width: "",
817 - created() { 748 + align: "left",
818 - if (this.$route.params.data) { 749 + },
819 - this.declareId = this.$route.params.data.declareId; 750 + {
820 - this.queryDeclareData(this.declareId) 751 + name: "商品编码",
821 - this.queryCustomerList() 752 + value: "productCode",
822 - this.queryPortList() 753 + width: "",
754 + align: "left",
755 + },
756 + {
757 + name: "规格型号",
758 + value: "model",
759 + width: "",
760 + align: "left",
761 + },
762 + {
763 + name: "账册备案料号",
764 + value: "accountBookMaterialNumber",
765 + width: "",
766 + align: "left",
767 + },
768 + {
769 + name: "条形码",
770 + value: "barCode",
771 + width: "",
772 + align: "left",
773 + },
774 + {
775 + name: "目的国(地区)代码",
776 + value: "destinationCountryRegionCode",
777 + width: "",
778 + align: "left",
779 + slot: true,
780 + },
781 + {
782 + name: "计量单位",
783 + value: "unit",
784 + width: "",
785 + align: "left",
786 + slot: true,
787 + },
788 + {
789 + name: "数量",
790 + value: "qty",
791 + width: "",
792 + align: "left",
793 + },
794 + {
795 + name: "法定数量",
796 + value: "legalQty",
797 + width: "",
798 + align: "left",
799 + },
800 + {
801 + name: "法定单位",
802 + value: "unitLegalFirstCode",
803 + width: "",
804 + align: "left",
805 + slot: true,
806 + },
807 + {
808 + name: "币制",
809 + value: "currency",
810 + width: "",
811 + align: "left",
812 + slot: true,
813 + },
814 + {
815 + name: "单价",
816 + value: "price",
817 + width: "",
818 + align: "left",
819 + },
820 + {
821 + name: "总价",
822 + value: "totalPrice",
823 + width: "",
824 + align: "left",
825 + },
826 + {
827 + name: "净重",
828 + value: "netWeight",
829 + width: "",
830 + align: "left",
831 + },
832 + {
833 + name: "备注",
834 + value: "remark",
835 + width: "",
836 + align: "left",
837 + },
838 + ],
839 + loadings: {
840 + entryLoading: false,
841 + },
842 + logtableType: true,
843 + expandRowKeys: [],
844 + isFold: false,
845 + // 用于保存原始数据
846 + originalDetailData: {},
847 + // 当前编辑行的 gnum
848 + currentRowKey: null,
849 + lastItemValid: true, // 默认值为 true,表示没有新增项或上一次新增项通过了校验
850 + };
851 + },
852 + created() {
853 + if (this.$route.params.data) {
854 + this.declareId = this.$route.params.data.declareId;
855 + this.queryDeclareData(this.declareId);
856 + this.queryCustomerList();
857 + this.queryPortList();
858 + } else {
859 + this.back();
860 + }
861 + },
862 + beforeRouteLeave(to, from, next) {
863 + if (to.name === "ReportingData") {
864 + // 设置一个标志表示需要刷新数据
865 + to.meta.needsRefresh = true;
866 + }
867 + next();
868 + },
869 + methods: {
870 + mapDicDatas(dicArr, code) {
871 + if (code != "") {
872 + return dicArr.filter((item) => item.itemCode == code)[0]
873 + .itemChineseName;
823 } else { 874 } else {
824 - this.back(); 875 + return "";
825 } 876 }
826 }, 877 },
827 - beforeRouteLeave(to, from, next) { 878 + mapCurrencyDatas(dicArr, code) {
828 - if (to.name === 'ReportingData') { 879 + if (code != "") {
829 - // 设置一个标志表示需要刷新数据 880 + return dicArr.filter((item) => item.itemValue == code)[0]
830 - to.meta.needsRefresh = true; 881 + .itemChineseName;
882 + } else {
883 + return "";
831 } 884 }
832 - next();
833 }, 885 },
834 - methods: { 886 + //获取客户下拉列表数据
835 - mapDicDatas(dicArr, code){ 887 + queryCustomerList() {
836 - if (code != "") { 888 + getCustomerList()
837 - return dicArr.filter(item => item.itemCode == code)[0].itemChineseName 889 + .then((res) => {
890 + if (res.code == 200) {
891 + this.ebcDataList = res.data.value;
838 } else { 892 } else {
839 - return '' 893 + this.ebcDataList = [];
840 } 894 }
841 - 895 + })
842 - }, 896 + .catch((err) => {
843 - mapCurrencyDatas(dicArr, code){ 897 + console.log(err);
844 - if (code != "") { 898 + });
845 - return dicArr.filter(item => item.itemValue == code)[0].itemChineseName 899 + },
900 + //获取口岸表数据
901 + queryPortList() {
902 + getPortList()
903 + .then((res) => {
904 + if (res.code == 200) {
905 + this.declareCustomsDataList = res.data.value;
846 } else { 906 } else {
847 - return '' 907 + this.declareCustomsDataList = [];
848 } 908 }
909 + })
910 + .catch((err) => {
911 + console.log(err);
912 + });
913 + },
914 + //获取申报数据
915 + queryDeclareData(declareId) {
916 + getDeclareData({ declareId })
917 + .then((res) => {
918 + // console.log(1111, res)
919 + if (res.code == 200) {
920 + res.data.declare.orderNo = res.data.declare.orderno;
921 + this.formData = res.data.declare;
922 + this.formData.appType = 9610;
923 + this.detailData = res.data.product.length
924 + ? res.data.product.map((item, index) => {
925 + item.gnum = index + 1;
926 + return item;
927 + })
928 + : [];
929 + } else {
930 + this.detailData = [];
931 + this.formData = {};
932 + }
933 + })
934 + .catch((err) => {
935 + console.log(err);
936 + });
937 + },
849 938
850 - }, 939 + hiddenLogTable() {
851 - //获取客户下拉列表数据 940 + this.logtableType = !this.logtableType;
852 - queryCustomerList(){ 941 + },
853 - getCustomerList().then(res =>{ 942 + back() {
854 - if (res.code == 200) { 943 + this.$router.go(-1);
855 - this.ebcDataList = res.data.value 944 + },
856 - } else {
857 - this.ebcDataList = []
858 - }
859 -
860 - }).catch(err =>{
861 - console.log(err)
862 - })
863 - },
864 - //获取口岸表数据
865 - queryPortList(){
866 - getPortList().then(res =>{
867 - if (res.code == 200) {
868 - this.declareCustomsDataList = res.data.value
869 - } else {
870 - this.declareCustomsDataList = []
871 - }
872 -
873 - }).catch(err =>{
874 - console.log(err)
875 - })
876 - },
877 - //获取申报数据
878 - queryDeclareData(declareId) {
879 - getDeclareData({declareId}).then(res =>{
880 - // console.log(1111, res)
881 - if (res.code == 200) {
882 - res.data.declare.orderNo = res.data.declare.orderno
883 - this.formData = res.data.declare
884 - this.formData.appType=9610
885 - this.detailData = res.data.product.length ? res.data.product.map((item, index) =>{
886 - item.gnum = index+1
887 - return item
888 - }) : []
889 - } else {
890 - this.detailData = []
891 - this.formData = {}
892 - }
893 -
894 - }).catch(err =>{
895 - console.log(err)
896 - })
897 - },
898 -
899 - hiddenLogTable() {
900 - this.logtableType = !this.logtableType;
901 - },
902 - back() {
903 - this.$router.go(-1);
904 - },
905 945
906 - //添加新商品 946 + //添加新商品
907 - async addNewItem() { 947 + async addNewItem() {
908 - // 如果上一次新增的 item 没有通过校验,则不允许新增 948 + // 如果上一次新增的 item 没有通过校验,则不允许新增
909 - //console.log("this",this.lastItemValid) 949 + //console.log("this",this.lastItemValid)
910 - // if (!this.lastItemValid) { 950 + // if (!this.lastItemValid) {
911 - // console.log(11) 951 + // console.log(11)
912 - // this.$message.warning('请先完善新增的商品信息'); 952 + // this.$message.warning('请先完善新增的商品信息');
913 - // return; 953 + // return;
914 - // } 954 + // }
915 - // 获取最后一个 item 的引用 955 + // 获取最后一个 item 的引用
916 - const lastItem = this.detailData[this.detailData.length - 1]; 956 + const lastItem = this.detailData[this.detailData.length - 1];
917 - // 如果存在上一次新增的 item,则进行校验 957 + // 如果存在上一次新增的 item,则进行校验
918 - if (lastItem) { 958 + if (lastItem) {
919 - // 获取 RowDataEditForm 组件的引用 959 + // 获取 RowDataEditForm 组件的引用
920 - const rowEditForm = this.$refs.rowEditForm; 960 + const rowEditForm = this.$refs.rowEditForm;
921 - if (rowEditForm) { 961 + if (rowEditForm) {
922 - // 调用校验方法 962 + // 调用校验方法
923 - const isValid = await rowEditForm.validate(); 963 + const isValid = await rowEditForm.validate();
924 - // console.log("y:",this.lastItemValid) 964 + // console.log("y:",this.lastItemValid)
925 - // console.log("!",isValid) 965 + // console.log("!",isValid)
926 - if (!isValid) { 966 + if (!isValid) {
927 // console.log(22) 967 // console.log(22)
928 - this.lastItemValid = false; // 标记上一次新增的 item 未通过校验 968 + this.lastItemValid = false; // 标记上一次新增的 item 未通过校验
929 - this.$message.warning('请先完善新增的商品信息'); 969 + this.$message.warning("请先完善新增的商品信息");
930 - return; 970 + return;
931 - }
932 } 971 }
933 } 972 }
934 - // 校验通过,允许新增 item 973 + }
935 - let orderNum = this.detailData.at(-1) === undefined ? 1 : this.detailData.at(-1).gnum + 1; 974 + // 校验通过,允许新增 item
936 - this.detailData.push({ 975 + let orderNum =
937 - "gnum":orderNum, 976 + this.detailData.at(-1) === undefined
938 - "accountBookMaterialNumber": "", 977 + ? 1
939 - "barCode": "", 978 + : this.detailData.at(-1).gnum + 1;
940 - "currency": "", 979 + this.detailData.push({
941 - "destinationCountryRegionCode": "", 980 + gnum: orderNum,
942 - "enterpriseProductCode": "", 981 + accountBookMaterialNumber: "",
943 - "enterpriseProductDescribe": "", 982 + barCode: "",
944 - "enterpriseProductName": "", 983 + currency: "",
945 - "legalQty": 0, 984 + destinationCountryRegionCode: "",
946 - "model": "", 985 + enterpriseProductCode: "",
947 - "netWeight": 0, 986 + enterpriseProductDescribe: "",
948 - "price": 0, 987 + enterpriseProductName: "",
949 - "productCode": "", 988 + legalQty: 0,
950 - "productName": "", 989 + model: "",
951 - "qty": 0, 990 + netWeight: 0,
952 - "remark": "", 991 + price: 0,
953 - "totalPrice": 0, 992 + productCode: "",
954 - "unit": "", 993 + productName: "",
955 - "isNew": true // 添加 isNew 标志 994 + qty: 0,
956 - }); 995 + remark: "",
996 + totalPrice: 0,
997 + unit: "",
998 + isNew: true, // 添加 isNew 标志
999 + });
957 1000
958 - this.$nextTick(() => { 1001 + this.$nextTick(() => {
959 - this.expandRowKeys = [orderNum]; 1002 + this.expandRowKeys = [orderNum];
960 - this.lastItemValid = true; // 重置标志位 1003 + this.lastItemValid = true; // 重置标志位
961 - }); 1004 + });
962 - }, 1005 + },
963 - updateRow(row){ 1006 + updateRow(row) {
964 - if (this.expandRowKeys.length > 0) return 1007 + if (this.expandRowKeys.length > 0) return;
965 - this.expandRowKeys = [row.gnum] 1008 + this.expandRowKeys = [row.gnum];
966 - this.currentRowKey = row.gnum; // 设置当前行的 gnum 1009 + this.currentRowKey = row.gnum; // 设置当前行的 gnum
967 1010
968 - // 保存原始数据 1011 + // 保存原始数据
969 - this.originalDetailData[row.gnum] = { ...row }; 1012 + this.originalDetailData[row.gnum] = { ...row };
970 1013
971 - let obj = {} 1014 + let obj = {};
972 - for (let key in row) { 1015 + for (let key in row) {
973 - obj[key] = row[key] 1016 + obj[key] = row[key];
974 - } 1017 + }
975 1018
976 - this.$nextTick(()=>{ 1019 + this.$nextTick(() => {
977 - this.$refs.rowEditForm.tableRowformData = obj 1020 + this.$refs.rowEditForm.tableRowformData = obj;
978 - // const table = this.$refs.entryTable.$el.querySelector('.el-table__body-wrapper'); 1021 + // const table = this.$refs.entryTable.$el.querySelector('.el-table__body-wrapper');
979 - // table.scrollTop = row.gnum*51+10 1022 + // table.scrollTop = row.gnum*51+10
980 - }) 1023 + });
981 - }, 1024 + },
982 - getTotalNumber(){ 1025 + getTotalNumber() {
983 - let totalNetWeight = 0; 1026 + let totalNetWeight = 0;
984 - let totalGoodsValue = 0 1027 + let totalGoodsValue = 0;
985 - for (let i=0; i<this.detailData.length; i++) { 1028 + for (let i = 0; i < this.detailData.length; i++) {
986 - totalNetWeight += Number(this.detailData[i].netWeight) 1029 + totalNetWeight += Number(this.detailData[i].netWeight);
987 - totalGoodsValue += Number(this.detailData[i].totalPrice) 1030 + totalGoodsValue += Number(this.detailData[i].totalPrice);
988 - } 1031 + }
989 - this.formData.netWeight = totalNetWeight.toFixed(5) 1032 + this.formData.netWeight = totalNetWeight.toFixed(5);
990 - this.formData.goodsValue = totalGoodsValue.toFixed(5) 1033 + this.formData.goodsValue = totalGoodsValue.toFixed(5);
991 - }, 1034 + },
992 - deleteRow(row){ 1035 + deleteRow(row) {
993 - this.detailData = this.detailData.filter(item => item.gnum !=row.gnum).map((item, index) =>{ 1036 + this.detailData = this.detailData
994 - item.gnum = index+1 1037 + .filter((item) => item.gnum != row.gnum)
995 - return item 1038 + .map((item, index) => {
996 - }) 1039 + item.gnum = index + 1;
997 - this.$nextTick(()=>{ 1040 + return item;
998 - this.getTotalNumber() 1041 + });
999 - this.expandRowKeys = [] 1042 + this.$nextTick(() => {
1000 - this.detailData.length 1043 + this.getTotalNumber();
1001 - this.lastItemValid = this.detailData.length === row.index;
1002 - })
1003 - },
1004 - rowFormDataSave(props){
1005 - this.detailData.map(item =>{
1006 - if (item.gnum == props.gnum) {
1007 - item = Object.assign(item, props.tableRowformData)
1008 - return item
1009 - }
1010 - })
1011 - this.expandRowKeys = []
1012 - this.$nextTick(()=>{
1013 - this.lastItemValid = true;
1014 - this.getTotalNumber()
1015 - })
1016 - },
1017 - cancelEditRowData(index) {
1018 - this.lastItemValid = true; // 重置标志位
1019 this.expandRowKeys = []; 1044 this.expandRowKeys = [];
1020 - if (index !== undefined) { 1045 + this.detailData.length;
1021 - const gnum = this.detailData[index].gnum; 1046 + this.lastItemValid = this.detailData.length === row.index;
1022 - if (this.detailData[index].isNew) { 1047 + });
1023 - // 如果是新添加的项,则删除该项 1048 + },
1024 - this.detailData.splice(index, 1); 1049 + rowFormDataSave(props) {
1025 - } else { 1050 + this.detailData.map((item) => {
1026 - // 否则,恢复原始数据 1051 + if (item.gnum == props.gnum) {
1027 - if (this.originalDetailData[gnum]) { 1052 + item = Object.assign(item, props.tableRowformData);
1028 - this.detailData[index] = { ...this.originalDetailData[gnum] }; 1053 + return item;
1029 - delete this.originalDetailData[gnum]; // 删除保存的原始数据
1030 - }
1031 - }
1032 } 1054 }
1033 - }, 1055 + });
1034 - // 更新 lastItemValid 1056 + this.expandRowKeys = [];
1035 - handleUpdateLastItemValid(isValid) { 1057 + this.$nextTick(() => {
1036 - this.lastItemValid = isValid; 1058 + this.lastItemValid = true;
1037 - }, 1059 + this.getTotalNumber();
1038 - //提交更新数据 1060 + });
1039 - submitEditedReportDatas(){ 1061 + },
1040 - this.$refs.editForm.validate((valid) => { 1062 + cancelEditRowData(index) {
1041 - if (valid) { 1063 + this.lastItemValid = true; // 重置标志位
1042 - let data = { 1064 + this.expandRowKeys = [];
1043 - declare: this.formData, 1065 + if (index !== undefined) {
1044 - product: this.detailData 1066 + const gnum = this.detailData[index].gnum;
1045 - } 1067 + if (this.detailData[index].isNew) {
1046 - updateDeclareData(data).then(res =>{ 1068 + // 如果是新添加的项,则删除该项
1047 - if (res.code == 200) { 1069 + this.detailData.splice(index, 1);
1048 - this.msgSuccess("数据更新成功"); 1070 + } else {
1049 - this.queryDeclareData(this.declareId) 1071 + // 否则,恢复原始数据
1050 - this.lastItemValid = true; 1072 + if (this.originalDetailData[gnum]) {
1051 - } else { 1073 + this.detailData[index] = { ...this.originalDetailData[gnum] };
1052 - this.alertWarningMsg(res.message); 1074 + delete this.originalDetailData[gnum]; // 删除保存的原始数据
1053 - }
1054 -
1055 - }).catch(err =>{
1056 - console.log(err)
1057 - })
1058 - } else {
1059 - return false;
1060 } 1075 }
1061 - }); 1076 + }
1062 - },
1063 - //取消编辑
1064 - cancelEditedReportDatas(){
1065 -
1066 } 1077 }
1067 }, 1078 },
1068 - }; 1079 + // 更新 lastItemValid
1069 - </script> 1080 + handleUpdateLastItemValid(isValid) {
1081 + this.lastItemValid = isValid;
1082 + },
1083 + //提交更新数据
1084 + submitEditedReportDatas() {
1085 + this.$refs.editForm.validate((valid) => {
1086 + if (valid) {
1087 + let data = {
1088 + declare: this.formData,
1089 + product: this.detailData,
1090 + };
1091 + updateDeclareData(data)
1092 + .then((res) => {
1093 + if (res.code == 200) {
1094 + this.msgSuccess("数据更新成功");
1095 + this.queryDeclareData(this.declareId);
1096 + this.lastItemValid = true;
1097 + } else {
1098 + this.alertWarningMsg(res.message);
1099 + }
1100 + })
1101 + .catch((err) => {
1102 + console.log(err);
1103 + });
1104 + } else {
1105 + return false;
1106 + }
1107 + });
1108 + },
1109 + //取消编辑
1110 + cancelEditedReportDatas() {},
1111 + },
1112 +};
1113 +</script>
1070 1114
1071 - <style scoped lang="scss"> 1115 +<style scoped lang="scss">
1072 - .entry { 1116 +.entry {
1117 + width: 100%;
1118 + height: 100%;
1119 + padding: 10px;
1120 + background-color: #fff;
1121 + overflow: auto;
1122 +
1123 + .entryInformation {
1073 width: 100%; 1124 width: 100%;
1074 height: 100%; 1125 height: 100%;
1075 - padding: 10px;
1076 - background-color: #fff;
1077 - overflow: auto;
1078 -
1079 - .entryInformation {
1080 - width: 100%;
1081 - height: 100%;
1082 - }
1083 -
1084 - .entryTitle {
1085 - display: flex;
1086 - justify-content: space-between;
1087 - font-weight: 600;
1088 - font-weight: 16px;
1089 - color: #000;
1090 - margin-bottom: 10px;
1091 - }
1092 -
1093 - .titleBorder {
1094 - border-bottom: 1px solid #333;
1095 - }
1096 } 1126 }
1097 - .addNewItem{ 1127 +
1128 + .entryTitle {
1098 display: flex; 1129 display: flex;
1099 - justify-content: flex-start; 1130 + justify-content: space-between;
1100 - align-items: center; 1131 + font-weight: 600;
1101 - color:#007AB7; 1132 + font-weight: 16px;
1102 - line-height: 38px; 1133 + color: #000;
1103 - i{ 1134 + margin-bottom: 10px;
1104 - margin-right: 3px;
1105 - }
1106 - span{
1107 - font-size: 13px;
1108 - font-weight: 500;
1109 - cursor: pointer;
1110 - }
1111 } 1135 }
1112 - .formRowDataOperate{ 1136 +
1113 - text-align: right; 1137 + .titleBorder {
1114 - padding: 0 20px; 1138 + border-bottom: 1px solid #333;
1115 - a{
1116 - color: #007AB7;
1117 - font-weight: 600;
1118 - &:first-child{
1119 - margin-right: 5px;
1120 - }
1121 - }
1122 - }
1123 - .fedexFormEditStyle .el-form-item:has(.formError) {
1124 - margin-bottom: 30px !important;
1125 } 1139 }
1126 - .fedexFormEditStyle .el-form-item .formError{ 1140 +}
1127 - padding:0 0.9375rem !important; 1141 +.addNewItem {
1142 + display: flex;
1143 + justify-content: flex-start;
1144 + align-items: center;
1145 + color: #007ab7;
1146 + line-height: 38px;
1147 + i {
1148 + margin-right: 3px;
1128 } 1149 }
1129 - .partsHidden{ 1150 + span {
1130 - height: 164px; 1151 + font-size: 13px;
1131 - overflow: hidden; 1152 + font-weight: 500;
1153 + cursor: pointer;
1132 } 1154 }
1133 - .fold-unfold{ 1155 +}
1134 - display: flex; 1156 +.formRowDataOperate {
1135 - justify-content: center; 1157 + text-align: right;
1136 - padding-top:8px; 1158 + padding: 0 20px;
1137 - img{ 1159 + a {
1138 - width: 22px; 1160 + color: #007ab7;
1161 + font-weight: 600;
1162 + &:first-child {
1163 + margin-right: 5px;
1139 } 1164 }
1140 } 1165 }
1141 - </style> 1166 +}
1167 +.fedexFormEditStyle .el-form-item:has(.formError) {
1168 + margin-bottom: 30px !important;
1169 +}
1170 +.fedexFormEditStyle .el-form-item .formError {
1171 + padding: 0 0.9375rem !important;
1172 +}
1173 +.partsHidden {
1174 + height: 164px;
1175 + overflow: hidden;
1176 +}
1177 +.fold-unfold {
1178 + display: flex;
1179 + justify-content: center;
1180 + padding-top: 8px;
1181 + img {
1182 + width: 22px;
1183 + }
1184 +}
1185 +</style>
......