Commit 592d4b42a6dea52a5c9a75ebef33fa340f8ffcd5

Authored by 史婷婷
1 parent 980154b8

feat: 发货单-申请延期

@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 15
16 <!-- 产品 --> 16 <!-- 产品 -->
17 <view class="section2"> 17 <view class="section2">
18 - <Product mode="view" :status="form.status" :list="form.detailList" /> 18 + <Product mode="view" :status="form.status" :list="form.detailList" @applyDelay="applyDelayFun" />
19 </view> 19 </view>
20 <view class="section"> 20 <view class="section">
21 <view class="row"><text class="label">签收单据</text><text class="value act">{{ form.fileName }}</text></view> 21 <view class="row"><text class="label">签收单据</text><text class="value act">{{ form.fileName }}</text></view>
@@ -24,22 +24,83 @@ @@ -24,22 +24,83 @@
24 </scroll-view> 24 </scroll-view>
25 <detail-buttons :buttons="displayButtons" @click="handleButtonClick" /> 25 <detail-buttons :buttons="displayButtons" @click="handleButtonClick" />
26 <uni-popup ref="uploadPopup" type="bottom" :mask-click="false"> 26 <uni-popup ref="uploadPopup" type="bottom" :mask-click="false">
27 - <view class="dialog">  
28 - <view class="dialog_header">  
29 - <text>上传签收单据</text>  
30 - <view class="dialog_close" @click="closeUploadInfo">×</view>  
31 - </view>  
32 - <view class="dialog_body">  
33 - <view class="dialog_row">  
34 - <text class="dialog_label">签收单据</text>  
35 - <FileUpload v-model="uploadFile" />  
36 - </view>  
37 - </view>  
38 - <view class="dialog_footer">  
39 - <button class="btn confirm" type="primary" @click="onUploadSave">保存</button>  
40 - </view>  
41 - </view>  
42 - </uni-popup> 27 + <view class="dialog">
  28 + <view class="dialog_header">
  29 + <text>上传签收单据</text>
  30 + <view class="dialog_close" @click="closeUploadInfo">×</view>
  31 + </view>
  32 + <view class="dialog_body">
  33 + <view class="dialog_row">
  34 + <text class="dialog_label">签收单据</text>
  35 + <FileUpload v-model="uploadFile" />
  36 + </view>
  37 + </view>
  38 + <view class="dialog_footer">
  39 + <button class="btn confirm" type="primary" @click="onUploadSave">保存</button>
  40 + </view>
  41 + </view>
  42 + </uni-popup>
  43 + <!-- 申请延期 -->
  44 + <uni-popup ref="applyDelayPopup" type="bottom" :mask-click="false">
  45 + <view class="dialog">
  46 + <view class="dialog_header">
  47 + <text>申请延期</text>
  48 + <view class="dialog_close" @click="closeApplyDelay">×</view>
  49 + </view>
  50 + <view class="dialog_body">
  51 + <uni-list>
  52 + <uni-list-item title="订单编号">
  53 + <template v-slot:footer>
  54 + <view class="value">{{ applyDelayForm.orderNo }}</view>
  55 + </template>
  56 + </uni-list-item>
  57 + <uni-list-item title="原订单计划发货日期">
  58 + <template v-slot:footer>
  59 + <view class="value">{{ applyDelayForm.shipmentsDate }}</view>
  60 + </template>
  61 + </uni-list-item>
  62 + <uni-list-item title="现申请发货日期">
  63 + <template v-slot:footer>
  64 + <uni-datetime-picker type="date" v-model="applyDelayForm.applyShipmentDate" />
  65 + </template>
  66 + </uni-list-item>
  67 + <uni-list-item title="延期原因">
  68 + <template v-slot:footer>
  69 + <uni-easyinput v-model="applyDelayForm.delayReason" placeholder="请输入延期原因" :inputBorder="false" />
  70 + </template>
  71 + </uni-list-item>
  72 + <uni-list-item title="申请次数">
  73 + <template v-slot:footer>
  74 + <view class="value">{{ applyDelayForm.applyCount }}</view>
  75 + </template>
  76 + </uni-list-item>
  77 + <uni-list-item title="订单类型">
  78 + <template v-slot:footer>
  79 + <view class="value">{{ applyDelayForm.orderType }}</view>
  80 + </template>
  81 + </uni-list-item>
  82 + <uni-list-item title="所属分厂">
  83 + <template v-slot:footer>
  84 + <view class="value">{{ applyDelayForm.workshopName }}</view>
  85 + </template>
  86 + </uni-list-item>
  87 + <uni-list-item title="客户名称">
  88 + <template v-slot:footer>
  89 + <view class="value">{{ applyDelayForm.customerName }}</view>
  90 + </template>
  91 + </uni-list-item>
  92 + <uni-list-item title="发货数量">
  93 + <template v-slot:footer>
  94 + <view class="value">{{ applyDelayForm.quantity }}</view>
  95 + </template>
  96 + </uni-list-item>
  97 + </uni-list>
  98 + </view>
  99 + <view class="dialog_footer">
  100 + <button class="btn confirm" type="primary" @click="onApplyDelaySave">保存</button>
  101 + </view>
  102 + </view>
  103 + </uni-popup>
43 </view> 104 </view>
44 </template> 105 </template>
45 106
@@ -48,6 +109,7 @@ import { getDetailApi, saveSignInTicket, checkApi } from '@/api/invoice.js' @@ -48,6 +109,7 @@ import { getDetailApi, saveSignInTicket, checkApi } from '@/api/invoice.js'
48 import Product from './product.vue' 109 import Product from './product.vue'
49 import DetailButtons from '@/components/detail-buttons/index.vue' 110 import DetailButtons from '@/components/detail-buttons/index.vue'
50 import FileUpload from '@/components/file-upload/index.vue' 111 import FileUpload from '@/components/file-upload/index.vue'
  112 +import { getShipmentPlanDetailApi, createApi } from '@/api/delay_invoice.js'
51 113
52 export default { 114 export default {
53 name: 'InvoiceDetail', 115 name: 'InvoiceDetail',
@@ -61,7 +123,7 @@ export default { @@ -61,7 +123,7 @@ export default {
61 { text: '填写实发数', visible: true, variant: 'outline', event: 'fill' }, 123 { text: '填写实发数', visible: true, variant: 'outline', event: 'fill' },
62 { text: '上传签收单据', visible: true, variant: 'primary', event: 'upload' }, 124 { text: '上传签收单据', visible: true, variant: 'primary', event: 'upload' },
63 ], 125 ],
64 - uploadFile: { id: '', name: '' }, 126 + uploadFile: { id: '', name: '' },
65 } 127 }
66 }, 128 },
67 computed: { 129 computed: {
@@ -107,8 +169,8 @@ export default { @@ -107,8 +169,8 @@ export default {
107 if (typeof fn === 'function') fn() 169 if (typeof fn === 'function') fn()
108 }, 170 },
109 // onEdit() { 171 // onEdit() {
110 - // const id = this.form.id || this.form.code  
111 - // if (id) uni.navigateTo({ url: `/pages/invoice/modify?id=${id}` }) 172 + // const id = this.form.id || this.form.code
  173 + // if (id) uni.navigateTo({ url: `/pages/invoice/modify?id=${id}` })
112 // }, 174 // },
113 async onFill() { 175 async onFill() {
114 const id = this.form.id || this.form.code; 176 const id = this.form.id || this.form.code;
@@ -121,19 +183,19 @@ export default { @@ -121,19 +183,19 @@ export default {
121 if (id) uni.navigateTo({ url: `/pages/invoice/fill?id=${id}&customerName=${this.form.customerName}` }) 183 if (id) uni.navigateTo({ url: `/pages/invoice/fill?id=${id}&customerName=${this.form.customerName}` })
122 }, 184 },
123 onUpload() { 185 onUpload() {
124 - this.$refs.uploadPopup && this.$refs.uploadPopup.open() 186 + this.$refs.uploadPopup && this.$refs.uploadPopup.open()
125 }, 187 },
126 closeUploadInfo() { 188 closeUploadInfo() {
127 this.uploadFile = { id: '', name: '' }; 189 this.uploadFile = { id: '', name: '' };
128 - this.$refs.uploadPopup && this.$refs.uploadPopup.close()  
129 - }, 190 + this.$refs.uploadPopup && this.$refs.uploadPopup.close()
  191 + },
130 async onUploadSave() { 192 async onUploadSave() {
131 console.log('onUploadSave__this.uploadFile', this.uploadFile) 193 console.log('onUploadSave__this.uploadFile', this.uploadFile)
132 if (!this.uploadFile.id) { 194 if (!this.uploadFile.id) {
133 uni.showToast({ 195 uni.showToast({
134 - title: '请上传签收单据',  
135 - icon: 'none'  
136 - }) 196 + title: '请上传签收单据',
  197 + icon: 'none'
  198 + })
137 return 199 return
138 } 200 }
139 const params = { 201 const params = {
@@ -148,6 +210,50 @@ export default { @@ -148,6 +210,50 @@ export default {
148 } catch (e) { 210 } catch (e) {
149 uni.showToast({ title: (e && e.msg) || '保存失败', icon: 'none' }) 211 uni.showToast({ title: (e && e.msg) || '保存失败', icon: 'none' })
150 } 212 }
  213 + },
  214 + applyDelayFun(id) {
  215 + getShipmentPlanDetailApi(id).then(res => {
  216 + if (res && res.data) {
  217 + console.log('handleApplyDelay__res.data', res.data)
  218 + this.applyDelayForm = { ...res.data };
  219 + this.$refs.applyDelayPopup && this.$refs.applyDelayPopup.open();
  220 + }
  221 + })
  222 + },
  223 + closeApplyDelay() {
  224 + this.$refs.applyDelayPopup && this.$refs.applyDelayPopup.close();
  225 + },
  226 + async onApplyDelaySave() {
  227 + console.log('onApplyDelaySave__this.applyDelayForm', this.applyDelayForm)
  228 + if (!this.applyDelayForm.applyShipmentDate) {
  229 + uni.showToast({ title: '请选择现申请发货日期', icon: 'none' })
  230 + return
  231 + }
  232 + const delayedShipmentDetailList = [this.applyDelayForm].map((r) => {
  233 + return {
  234 + orderId: r.orderId,
  235 + shipmentsPlanDetailId: r.id,
  236 + orderSpecId: r.orderSpecId,
  237 + deliveryDate: r.shipmentsDate,
  238 + applyShipmentDate: r.applyShipmentDate,
  239 + applyCount: r.applyCount,
  240 + quantity: Number(r.quantity || 0),
  241 + delayReason: r.delayReason,
  242 + };
  243 + });
  244 + const params = {};
  245 + params.shipmentsOrderId = this.form.id || '';
  246 + params.delayedShipmentDetailList = delayedShipmentDetailList;
  247 + console.log('onApplyDelaySave__params', params)
  248 + try {
  249 + await createApi(params)
  250 + uni.showToast({ title: '保存成功', icon: 'success' })
  251 + // 刷新当前页
  252 + this.$refs.applyDelayPopup && this.$refs.applyDelayPopup.close();
  253 + this.loadDetail(this.form.id)
  254 + } catch (e) {
  255 + uni.showToast({ title: (e && e.msg) || '保存失败', icon: 'none' })
  256 + }
151 } 257 }
152 } 258 }
153 } 259 }
@@ -235,9 +341,10 @@ export default { @@ -235,9 +341,10 @@ export default {
235 color: rgba(0, 0, 0, 0.9); 341 color: rgba(0, 0, 0, 0.9);
236 text-align: right; 342 text-align: right;
237 word-break: break-all; 343 word-break: break-all;
  344 +
238 &.act { 345 &.act {
239 color: $theme-primary; 346 color: $theme-primary;
240 - } 347 + }
241 348
242 } 349 }
243 } 350 }
@@ -265,74 +372,213 @@ export default { @@ -265,74 +372,213 @@ export default {
265 372
266 373
267 .dialog { 374 .dialog {
268 - width: 100%;  
269 - max-height: 70vh;  
270 - overflow-y: auto;  
271 - padding: 32rpx 28rpx calc(20rpx + env(safe-area-inset-bottom));  
272 - background: #fff;  
273 - border-radius: 20rpx 20rpx 0 0;  
274 -  
275 - &_header {  
276 - position: relative;  
277 - text-align: center;  
278 - font-size: 34rpx;  
279 - font-weight: 600;  
280 - margin-bottom: 12rpx;  
281 - color: rgba(0, 0, 0, 0.9);  
282 - }  
283 -  
284 - &_body {  
285 - padding: 12rpx 4rpx 24rpx;  
286 - }  
287 -  
288 - &_footer {  
289 - padding-top: 12rpx;  
290 - display: flex;  
291 - justify-content: center;  
292 -  
293 - .btn {  
294 - width: 100%;  
295 - height: 80rpx;  
296 - line-height: 80rpx;  
297 - border-radius: 12rpx;  
298 - font-size: 32rpx;  
299 - background: $theme-primary;  
300 - color: #fff;  
301 -  
302 - &::after {  
303 - border: none;  
304 - }  
305 - }  
306 - } 375 + width: 100%;
  376 + overflow-y: auto;
  377 + padding: 32rpx 28rpx calc(20rpx + env(safe-area-inset-bottom));
  378 + background: #fff;
  379 + border-radius: 20rpx 20rpx 0 0;
  380 +
  381 + &_header {
  382 + position: relative;
  383 + text-align: center;
  384 + font-size: 34rpx;
  385 + font-weight: 600;
  386 + margin-bottom: 12rpx;
  387 + color: rgba(0, 0, 0, 0.9);
  388 + }
  389 +
  390 + &_body {
  391 + padding: 12rpx 4rpx 24rpx;
  392 + max-height: 70vh;
  393 + overflow-y: auto;
  394 + }
  395 +
  396 + &_footer {
  397 + padding-top: 12rpx;
  398 + display: flex;
  399 + justify-content: center;
  400 +
  401 + .btn {
  402 + width: 100%;
  403 + height: 80rpx;
  404 + line-height: 80rpx;
  405 + border-radius: 12rpx;
  406 + font-size: 32rpx;
  407 + background: $theme-primary;
  408 + color: #fff;
  409 +
  410 + &::after {
  411 + border: none;
  412 + }
  413 + }
  414 + }
307 } 415 }
308 416
309 .dialog_close { 417 .dialog_close {
310 - position: absolute;  
311 - right: 16rpx;  
312 - top: -14rpx;  
313 - width: 64rpx;  
314 - height: 64rpx;  
315 - line-height: 64rpx;  
316 - text-align: center;  
317 - font-size: 36rpx;  
318 - color: rgba(0, 0, 0, 0.6); 418 + position: absolute;
  419 + right: 16rpx;
  420 + top: -14rpx;
  421 + width: 64rpx;
  422 + height: 64rpx;
  423 + line-height: 64rpx;
  424 + text-align: center;
  425 + font-size: 36rpx;
  426 + color: rgba(0, 0, 0, 0.6);
319 } 427 }
320 428
321 .dialog_row { 429 .dialog_row {
322 - margin-bottom: 24rpx; 430 + margin-bottom: 24rpx;
323 } 431 }
324 432
325 .dialog_label { 433 .dialog_label {
326 - display: block;  
327 - margin-bottom: 12rpx;  
328 - font-size: 28rpx;  
329 - color: rgba(0, 0, 0, 0.9); 434 + display: block;
  435 + margin-bottom: 12rpx;
  436 + font-size: 28rpx;
  437 + color: rgba(0, 0, 0, 0.9);
330 } 438 }
331 439
332 .upload-show { 440 .upload-show {
333 - margin-top: 8rpx;  
334 - font-size: 26rpx;  
335 - color: rgba(0, 0, 0, 0.6); 441 + margin-top: 8rpx;
  442 + font-size: 26rpx;
  443 + color: rgba(0, 0, 0, 0.6);
  444 +}
  445 +
  446 +
  447 +::v-deep .uni-list {
  448 + background: transparent;
  449 +
  450 + .uni-list--border-top {
  451 + background-color: transparent !important;
  452 + }
  453 +
  454 + &-item {
  455 + &__extra-text {
  456 + font-size: 32rpx;
  457 + }
  458 +
  459 + &__content-title {
  460 + font-size: 32rpx;
  461 + color: rgba(0, 0, 0, 0.9);
  462 + }
  463 +
  464 + &__container {
  465 + padding: 32rpx;
  466 +
  467 + .uni-easyinput {
  468 +
  469 + .is-disabled {
  470 + background-color: transparent !important;
  471 + }
  472 +
  473 + &__placeholder-class {
  474 + font-size: 32rpx;
  475 + color: rgba(0, 0, 0, 0.4);
  476 + }
  477 +
  478 + &__content {
  479 + border: none;
  480 +
  481 + &-input {
  482 + padding-left: 0 !important;
  483 + height: 48rpx;
  484 + line-height: 48rpx;
  485 + font-size: 32rpx;
  486 + }
  487 +
  488 + .content-clear-icon {
  489 + font-size: 44rpx !important;
  490 + }
  491 + }
  492 + }
  493 +
  494 + .amount-row {
  495 + flex: 1;
  496 + display: flex;
  497 + align-items: center;
  498 +
  499 + .uni-easyinput {
  500 + flex: 1;
  501 + }
  502 +
  503 + .unit {
  504 + margin-left: 16rpx;
  505 + color: rgba(0, 0, 0, 0.9);
  506 + }
  507 + }
  508 +
  509 + .item-title,
  510 + .uni-list-item__content {
  511 + flex: none;
  512 + min-height: 48rpx;
  513 + line-height: 48rpx;
  514 + font-size: 32rpx;
  515 + position: relative;
  516 + width: 200rpx;
  517 + margin-right: 32rpx;
  518 + color: rgba(0, 0, 0, 0.9);
  519 + padding-right: 0;
  520 +
  521 +
  522 + .required {
  523 + color: red;
  524 + position: absolute;
  525 + top: 50%;
  526 + transform: translateY(-50%);
  527 + left: -16rpx;
  528 + }
  529 + }
  530 +
  531 + }
  532 +
  533 + &.select-item {
  534 + &.is-empty {
  535 + .uni-list-item__extra-text {
  536 + color: rgba(0, 0, 0, 0.4) !important;
  537 + }
  538 + }
  539 +
  540 + &.is-filled {
  541 + .uni-list-item__extra-text {
  542 + color: rgba(0, 0, 0, 0.9) !important;
  543 + }
  544 + }
  545 +
  546 + .serial-number-row {
  547 + display: flex;
  548 + align-items: center;
  549 + }
  550 +
  551 + }
  552 +
  553 + &.mgb10 {
  554 + margin-bottom: 20rpx;
  555 + }
  556 +
  557 + }
  558 +
  559 + .title-header {
  560 + background-color: #fff;
  561 + display: flex;
  562 + align-items: center;
  563 + padding: 32rpx 32rpx 22rpx;
  564 +
  565 + &_icon {
  566 + width: 32rpx;
  567 + height: 28rpx;
  568 + margin-right: 16rpx;
  569 + }
  570 +
  571 + span {
  572 + color: rgba(0, 0, 0, 0.9);
  573 + font-size: 32rpx;
  574 + line-height: 44rpx;
  575 + font-weight: 600;
  576 + }
  577 + }
336 } 578 }
337 579
  580 +/* 只读 easyinput 根据内容自适应高度 */
  581 +::v-deep .uni-list-item__container {
  582 + align-items: flex-start;
  583 +}
338 </style> 584 </style>
@@ -15,7 +15,9 @@ @@ -15,7 +15,9 @@
15 </view> 15 </view>
16 </view> 16 </view>
17 17
18 - <view v-if="status === 'UN_SHIPMENTS' && $auth.hasPermi('shipping-plan-manage:invoice:modify') && items.length > 8" class="tip" >提醒:当前待处理明细超过 8 条,请尽快进行延期操作!</view> 18 + <view
  19 + v-if="status === 'UN_SHIPMENTS' && $auth.hasPermi('shipping-plan-manage:invoice:modify') && items.length > 8"
  20 + class="tip">提醒:当前待处理明细超过 8 条,请尽快进行延期操作!</view>
19 21
20 <view v-if="mode === 'add'" class="section"> 22 <view v-if="mode === 'add'" class="section">
21 <view v-for="(item, idx) in items" :key="'a-' + idx" class="block"> 23 <view v-for="(item, idx) in items" :key="'a-' + idx" class="block">
@@ -94,35 +96,43 @@ @@ -94,35 +96,43 @@
94 <view class="value value-spec"> 96 <view class="value value-spec">
95 <view v-if="item.thickness" class="value-spec_val">{{ item.thickness }}</view> 97 <view v-if="item.thickness" class="value-spec_val">{{ item.thickness }}</view>
96 <view v-if="item.thickness" class="value-spec_box"> 98 <view v-if="item.thickness" class="value-spec_box">
97 - <view v-if="item.thicknessTolPos" class="value-spec_box_1">{{ item.thicknessTolPos > 0 ? '+' + item.thicknessTolPos : item.thicknessTolPos }} 99 + <view v-if="item.thicknessTolPos" class="value-spec_box_1">{{ item.thicknessTolPos > 0 ? '+'
  100 + +
  101 + item.thicknessTolPos : item.thicknessTolPos }}
98 </view> 102 </view>
99 - <view v-if="item.thicknessTolNeg" class="value-spec_box_2">{{ item.thicknessTolNeg > 0 ? '+' + item.thicknessTolNeg : item.thicknessTolNeg }} 103 + <view v-if="item.thicknessTolNeg" class="value-spec_box_2">{{ item.thicknessTolNeg > 0 ? '+'
  104 + +
  105 + item.thicknessTolNeg : item.thicknessTolNeg }}
100 </view> 106 </view>
101 </view> 107 </view>
102 <view v-if="item.width" class="value-spec_val p12">*</view> 108 <view v-if="item.width" class="value-spec_val p12">*</view>
103 <view v-if="item.width" class="value-spec_val">{{ item.width }}</view> 109 <view v-if="item.width" class="value-spec_val">{{ item.width }}</view>
104 <view v-if="item.width" class="value-spec_box"> 110 <view v-if="item.width" class="value-spec_box">
105 - <view v-if="item.widthTolPos" class="value-spec_box_1">{{ item.widthTolPos > 0 ? '+' + item.widthTolPos : item.widthTolPos }} 111 + <view v-if="item.widthTolPos" class="value-spec_box_1">{{ item.widthTolPos > 0 ? '+' +
  112 + item.widthTolPos : item.widthTolPos }}
106 </view> 113 </view>
107 - <view v-if="item.widthTolNeg" class="value-spec_box_2">{{ item.widthTolNeg > 0 ? '+' + item.widthTolNeg : item.widthTolNeg }} 114 + <view v-if="item.widthTolNeg" class="value-spec_box_2">{{ item.widthTolNeg > 0 ? '+' +
  115 + item.widthTolNeg : item.widthTolNeg }}
108 </view> 116 </view>
109 </view> 117 </view>
110 <view v-if="item.length" class="value-spec_val p12">*</view> 118 <view v-if="item.length" class="value-spec_val p12">*</view>
111 <view v-if="item.length" class="value-spec_val">{{ item.length }}</view> 119 <view v-if="item.length" class="value-spec_val">{{ item.length }}</view>
112 <view v-if="item.length" class="value-spec_box"> 120 <view v-if="item.length" class="value-spec_box">
113 - <view v-if="item.lengthTolPos" class="value-spec_box_1">{{ item.lengthTolPos > 0 ? '+' + item.lengthTolPos : item.lengthTolPos }}</view>  
114 - <view v-if="item.lengthTolNeg" class="value-spec_box_2">{{ item.lengthTolNeg > 0 ? '+' + item.lengthTolNeg : item.lengthTolNeg }}</view> 121 + <view v-if="item.lengthTolPos" class="value-spec_box_1">{{ item.lengthTolPos > 0 ? '+' +
  122 + item.lengthTolPos : item.lengthTolPos }}</view>
  123 + <view v-if="item.lengthTolNeg" class="value-spec_box_2">{{ item.lengthTolNeg > 0 ? '+' +
  124 + item.lengthTolNeg : item.lengthTolNeg }}</view>
115 </view> 125 </view>
116 </view> 126 </view>
117 </view> 127 </view>
118 <view class="row"><text class="label">需发数量(kg)</text><text class="value">{{ item.quantity 128 <view class="row"><text class="label">需发数量(kg)</text><text class="value">{{ item.quantity
119 - }}</text> 129 + }}</text>
120 </view> 130 </view>
121 <view class="row"><text class="label">实发数量(kg)</text><text class="value">{{ item.actualShipmentQuantity 131 <view class="row"><text class="label">实发数量(kg)</text><text class="value">{{ item.actualShipmentQuantity
122 - }}</text> 132 + }}</text>
123 </view> 133 </view>
124 <view class="row"><text class="label">件数</text><text class="value">{{ item.num 134 <view class="row"><text class="label">件数</text><text class="value">{{ item.num
125 - }}</text></view> 135 + }}</text></view>
126 <view class="row"><text class="label">单价(元/kg)</text><text class="value">{{ item.salesPrice }}</text> 136 <view class="row"><text class="label">单价(元/kg)</text><text class="value">{{ item.salesPrice }}</text>
127 </view> 137 </view>
128 <view class="row"><text class="label">包装费(元/kg)</text><text class="value">{{ 138 <view class="row"><text class="label">包装费(元/kg)</text><text class="value">{{
@@ -132,12 +142,17 @@ @@ -132,12 +142,17 @@
132 }}</text> 142 }}</text>
133 </view> 143 </view>
134 <view class="row"><text class="label">加工经销</text><text class="value">{{ item.orderType }}</text></view> 144 <view class="row"><text class="label">加工经销</text><text class="value">{{ item.orderType }}</text></view>
135 - <view class="row"><text class="label">运费</text><text class="value">{{ item.contractType !== 'PROCESS_STD_AGMT' ? item.shippingCost : '' }}</text></view>  
136 - <view class="row"><text class="label">回程费</text><text class="value">{{ item.contractType === 'PROCESS_STD_AGMT' ? item.shippingCost : '' }}</text></view> 145 + <view class="row"><text class="label">运费</text><text class="value">{{ item.contractType !==
  146 + 'PROCESS_STD_AGMT' ?
  147 + item.shippingCost : '' }}</text></view>
  148 + <view class="row"><text class="label">回程费</text><text class="value">{{ item.contractType ===
  149 + 'PROCESS_STD_AGMT'
  150 + ? item.shippingCost : '' }}</text></view>
137 <view class="row"><text class="label">牌号</text><text class="value">{{ item.brand }}</text></view> 151 <view class="row"><text class="label">牌号</text><text class="value">{{ item.brand }}</text></view>
138 <view class="row"><text class="label">高新</text><text class="value">-</text></view> 152 <view class="row"><text class="label">高新</text><text class="value">-</text></view>
139 - <view v-if="status === 'UN_SHIPMENTS' && $auth.hasPermi('shipping-plan-manage:invoice:modify')" class="row row-opt">  
140 - <text class="row-opt_btn">申请延期</text> 153 + <view v-if="status === 'UN_SHIPMENTS' && $auth.hasPermi('shipping-plan-manage:invoice:modify')"
  154 + class="row row-opt">
  155 + <text class="row-opt_btn" @click="handleApplyDelay(item)">申请延期</text>
141 <text class="line"></text> 156 <text class="line"></text>
142 <text class="row-opt_btn">拆分</text> 157 <text class="row-opt_btn">拆分</text>
143 </view> 158 </view>
@@ -146,7 +161,7 @@ @@ -146,7 +161,7 @@
146 161
147 <view v-else-if="mode === 'fill'" class="section" v-show="!collapsedView"> 162 <view v-else-if="mode === 'fill'" class="section" v-show="!collapsedView">
148 <view v-for="(item, idx) in items" :key="'v-' + idx" class="block"> 163 <view v-for="(item, idx) in items" :key="'v-' + idx" class="block">
149 - <uni-list class="edit-list"> 164 + <uni-list class="edit-list">
150 <uni-list-item title="订单编号"> 165 <uni-list-item title="订单编号">
151 <template v-slot:footer> 166 <template v-slot:footer>
152 <view class="value">{{ item.orderNo }}</view> 167 <view class="value">{{ item.orderNo }}</view>
@@ -162,24 +177,30 @@ @@ -162,24 +177,30 @@
162 <view class="value value-spec"> 177 <view class="value value-spec">
163 <view v-if="item.thickness" class="value-spec_val">{{ item.thickness }}</view> 178 <view v-if="item.thickness" class="value-spec_val">{{ item.thickness }}</view>
164 <view v-if="item.thickness" class="value-spec_box"> 179 <view v-if="item.thickness" class="value-spec_box">
165 - <view v-if="item.thicknessTolPos" class="value-spec_box_1">{{ item.thicknessTolPos > 0 ? '+' + item.thicknessTolPos : item.thicknessTolPos }} 180 + <view v-if="item.thicknessTolPos" class="value-spec_box_1">{{ item.thicknessTolPos >
  181 + 0 ? '+' + item.thicknessTolPos : item.thicknessTolPos }}
166 </view> 182 </view>
167 - <view v-if="item.thicknessTolNeg" class="value-spec_box_2">{{ item.thicknessTolNeg > 0 ? '+' + item.thicknessTolNeg : item.thicknessTolNeg }} 183 + <view v-if="item.thicknessTolNeg" class="value-spec_box_2">{{ item.thicknessTolNeg >
  184 + 0 ? '+' + item.thicknessTolNeg : item.thicknessTolNeg }}
168 </view> 185 </view>
169 </view> 186 </view>
170 <view v-if="item.width" class="value-spec_val p12">*</view> 187 <view v-if="item.width" class="value-spec_val p12">*</view>
171 <view v-if="item.width" class="value-spec_val">{{ item.width }}</view> 188 <view v-if="item.width" class="value-spec_val">{{ item.width }}</view>
172 <view v-if="item.width" class="value-spec_box"> 189 <view v-if="item.width" class="value-spec_box">
173 - <view v-if="item.widthTolPos" class="value-spec_box_1">{{ item.widthTolPos > 0 ? '+' + item.widthTolPos : item.widthTolPos }} 190 + <view v-if="item.widthTolPos" class="value-spec_box_1">{{ item.widthTolPos > 0 ? '+'
  191 + + item.widthTolPos : item.widthTolPos }}
174 </view> 192 </view>
175 - <view v-if="item.widthTolNeg" class="value-spec_box_2">{{ item.widthTolNeg > 0 ? '+' + item.widthTolNeg : item.widthTolNeg }} 193 + <view v-if="item.widthTolNeg" class="value-spec_box_2">{{ item.widthTolNeg > 0 ? '+'
  194 + + item.widthTolNeg : item.widthTolNeg }}
176 </view> 195 </view>
177 </view> 196 </view>
178 <view v-if="item.length" class="value-spec_val p12">*</view> 197 <view v-if="item.length" class="value-spec_val p12">*</view>
179 <view v-if="item.length" class="value-spec_val">{{ item.length }}</view> 198 <view v-if="item.length" class="value-spec_val">{{ item.length }}</view>
180 <view v-if="item.length" class="value-spec_box"> 199 <view v-if="item.length" class="value-spec_box">
181 - <view v-if="item.lengthTolPos" class="value-spec_box_1">{{ item.lengthTolPos > 0 ? '+' + item.lengthTolPos : item.lengthTolPos }}</view>  
182 - <view v-if="item.lengthTolNeg" class="value-spec_box_2">{{ item.lengthTolNeg > 0 ? '+' + item.lengthTolNeg : item.lengthTolNeg }}</view> 200 + <view v-if="item.lengthTolPos" class="value-spec_box_1">{{ item.lengthTolPos > 0 ?
  201 + '+' + item.lengthTolPos : item.lengthTolPos }}</view>
  202 + <view v-if="item.lengthTolNeg" class="value-spec_box_2">{{ item.lengthTolNeg > 0 ?
  203 + '+' + item.lengthTolNeg : item.lengthTolNeg }}</view>
183 </view> 204 </view>
184 </view> 205 </view>
185 </template> 206 </template>
@@ -201,8 +222,7 @@ @@ -201,8 +222,7 @@
201 </uni-list-item> 222 </uni-list-item>
202 <uni-list-item title="件数"> 223 <uni-list-item title="件数">
203 <template v-slot:footer> 224 <template v-slot:footer>
204 - <uni-easyinput type="digit" v-model="item.num"  
205 - placeholder="请输入件数" :inputBorder="false" 225 + <uni-easyinput type="digit" v-model="item.num" placeholder="请输入件数" :inputBorder="false"
206 @input="onNonNegativeNumberInput($event, item, idx, 'num')" 226 @input="onNonNegativeNumberInput($event, item, idx, 'num')"
207 @blur="onNonNegativeNumberBlur(item, idx, 'num')" /> 227 @blur="onNonNegativeNumberBlur(item, idx, 'num')" />
208 </template> 228 </template>
@@ -229,12 +249,14 @@ @@ -229,12 +249,14 @@
229 </uni-list-item> 249 </uni-list-item>
230 <uni-list-item title="运费"> 250 <uni-list-item title="运费">
231 <template v-slot:footer> 251 <template v-slot:footer>
232 - <view class="value">{{ item.contractType !== 'PROCESS_STD_AGMT' ? item.shippingCost : '' }}</view> 252 + <view class="value">{{ item.contractType !== 'PROCESS_STD_AGMT' ? item.shippingCost : ''
  253 + }}</view>
233 </template> 254 </template>
234 </uni-list-item> 255 </uni-list-item>
235 <uni-list-item title="回程费"> 256 <uni-list-item title="回程费">
236 <template v-slot:footer> 257 <template v-slot:footer>
237 - <view class="value">{{ item.contractType === 'PROCESS_STD_AGMT' ? item.shippingCost : '' }}</view> 258 + <view class="value">{{ item.contractType === 'PROCESS_STD_AGMT' ? item.shippingCost : ''
  259 + }}</view>
238 </template> 260 </template>
239 </uni-list-item> 261 </uni-list-item>
240 <uni-list-item title="牌号"> 262 <uni-list-item title="牌号">
@@ -256,7 +278,7 @@ @@ -256,7 +278,7 @@
256 {{ item.collapsed ? '展开' : '收起' }} 278 {{ item.collapsed ? '展开' : '收起' }}
257 </div> 279 </div>
258 </view> 280 </view>
259 - 281 +
260 </view> 282 </view>
261 </view> 283 </view>
262 284
@@ -277,6 +299,18 @@ export default { @@ -277,6 +299,18 @@ export default {
277 items: [], 299 items: [],
278 collapsedView: false, 300 collapsedView: false,
279 roleCodes: [], 301 roleCodes: [],
  302 + applyDelayForm: {
  303 + id: '',
  304 + orderNo: '',
  305 + deliveryDate: '',
  306 + applyShipmentDate: '',
  307 + applyCount: '',
  308 + orderType: '',
  309 + workshopName: '',
  310 + customerName: '',
  311 + quantity: '',
  312 + delayReason: '',
  313 + }
280 } 314 }
281 }, 315 },
282 computed: { 316 computed: {
@@ -419,6 +453,9 @@ export default { @@ -419,6 +453,9 @@ export default {
419 this.$set(this.items, idx, { ...item }) 453 this.$set(this.items, idx, { ...item })
420 uni.showToast({ title: '发货日期必须大于订货日期', icon: 'none' }) 454 uni.showToast({ title: '发货日期必须大于订货日期', icon: 'none' })
421 } 455 }
  456 + },
  457 + handleApplyDelay(item) {
  458 + this.$emit('applyDelay', item.id)
422 } 459 }
423 } 460 }
424 } 461 }
@@ -807,13 +844,16 @@ export default { @@ -807,13 +844,16 @@ export default {
807 font-size: 30rpx; 844 font-size: 30rpx;
808 padding: 0 40rpx; 845 padding: 0 40rpx;
809 text-align: center; 846 text-align: center;
  847 +
810 &:first-child { 848 &:first-child {
811 color: $theme-primary; 849 color: $theme-primary;
812 } 850 }
  851 +
813 &:last-child { 852 &:last-child {
814 color: $theme-primary; 853 color: $theme-primary;
815 } 854 }
816 } 855 }
  856 +
817 .line { 857 .line {
818 display: block; 858 display: block;
819 width: 2rpx; 859 width: 2rpx;