Commit 009129b4ac6556ce17d0e708b298a32e44deb079
1 parent
12743240
Exists in
master
and in
1 other branch
fix: 异常申诉
Showing
9 changed files
with
368 additions
and
12 deletions
Show diff stats
common/api.js
| @@ -152,6 +152,9 @@ module.exports = (vm) => { | @@ -152,6 +152,9 @@ module.exports = (vm) => { | ||
| 152 | buildMaQrcode:params => vm.$u.http.get( freightAdmin + '/woss/freightOrder/buildMaQrcode', {params}), | 152 | buildMaQrcode:params => vm.$u.http.get( freightAdmin + '/woss/freightOrder/buildMaQrcode', {params}), |
| 153 | supplementTrailerVehicle: params => vm.$u.http.get( freightAPI + '/freightOrder/supplementTrailerVehicle', params), // 绑定车挂 | 153 | supplementTrailerVehicle: params => vm.$u.http.get( freightAPI + '/freightOrder/supplementTrailerVehicle', params), // 绑定车挂 |
| 154 | getLatestRemark: params => vm.$u.http.get( freightAPI + '/freightOrder/getLatestRemark', params), // 使用的历史备注 | 154 | getLatestRemark: params => vm.$u.http.get( freightAPI + '/freightOrder/getLatestRemark', params), // 使用的历史备注 |
| 155 | + getFreightRisk: params => vm.$u.http.get( freightAPI + '/freightRiskException/page', {params}), // 风控异常 | ||
| 156 | + riskAppeal: params => vm.$u.http.post( freightAPI + '/freightRiskException/complaint', params), // 风控异常-申诉 | ||
| 157 | + maModifyRemark: params => vm.$u.http.post( freightAPI + '/freightOrder/maModifyRemark', params), // 修改备注 | ||
| 155 | }, | 158 | }, |
| 156 | freightMaRecord: { | 159 | freightMaRecord: { |
| 157 | add: params => vm.$u.http.post( freightAPI + '/freightMaRecord/add', params,{custom: {toast:true}}), // 出发到达记录日志 | 160 | add: params => vm.$u.http.post( freightAPI + '/freightMaRecord/add', params,{custom: {toast:true}}), // 出发到达记录日志 |
pages.json
| @@ -73,6 +73,18 @@ | @@ -73,6 +73,18 @@ | ||
| 73 | } | 73 | } |
| 74 | }, | 74 | }, |
| 75 | { | 75 | { |
| 76 | + "path": "pages/order/risk-abnormal", | ||
| 77 | + "style": { | ||
| 78 | + "navigationBarTitleText": "风控异常" | ||
| 79 | + } | ||
| 80 | + }, | ||
| 81 | + { | ||
| 82 | + "path": "pages/order/risk-appeal", | ||
| 83 | + "style": { | ||
| 84 | + "navigationBarTitleText": "异常申诉" | ||
| 85 | + } | ||
| 86 | + }, | ||
| 87 | + { | ||
| 76 | "path": "pages/order/select-remark", | 88 | "path": "pages/order/select-remark", |
| 77 | "style": { | 89 | "style": { |
| 78 | "navigationBarTitleText": "填写备注" | 90 | "navigationBarTitleText": "填写备注" |
pages/global/search-driver.vue
| @@ -28,6 +28,9 @@ | @@ -28,6 +28,9 @@ | ||
| 28 | </List> | 28 | </List> |
| 29 | </template> | 29 | </template> |
| 30 | <template #footer> | 30 | <template #footer> |
| 31 | + <view style="display: flex; justify-content: center; padding-bottom: 20upx"> | ||
| 32 | + <u-checkbox-group shape="circle" v-model="checkbox"><u-checkbox label="带入司机最近使用[车牌号]" name="have"></u-checkbox></u-checkbox-group> | ||
| 33 | + </view> | ||
| 31 | <u-button type="primary" @click="onSelect">确定</u-button> | 34 | <u-button type="primary" @click="onSelect">确定</u-button> |
| 32 | </template> | 35 | </template> |
| 33 | </Page> | 36 | </Page> |
| @@ -37,22 +40,31 @@ | @@ -37,22 +40,31 @@ | ||
| 37 | import payee from '../../components/card/payee.vue'; | 40 | import payee from '../../components/card/payee.vue'; |
| 38 | import UText from '../../uni_modules/uview-ui/components/u-text/u-text.vue'; | 41 | import UText from '../../uni_modules/uview-ui/components/u-text/u-text.vue'; |
| 39 | export default { | 42 | export default { |
| 40 | - name: 'change-payee', | 43 | + name: 'change-driver', |
| 41 | components: { UText, payee }, | 44 | components: { UText, payee }, |
| 42 | data() { | 45 | data() { |
| 43 | return { | 46 | return { |
| 47 | + checkbox: [], | ||
| 44 | choseIndex: '', | 48 | choseIndex: '', |
| 45 | list: [], | 49 | list: [], |
| 46 | query: '', | 50 | query: '', |
| 47 | }; | 51 | }; |
| 48 | }, | 52 | }, |
| 53 | + onLoad() { | ||
| 54 | + let useFlagCache = uni.getStorageSync('FREIGHT_MP_SELECT_DRIVER_USE_FLAG'); | ||
| 55 | + if (useFlagCache) { | ||
| 56 | + this.checkbox = ['have']; | ||
| 57 | + } | ||
| 58 | + }, | ||
| 49 | methods: { | 59 | methods: { |
| 50 | searchAPI(params) { | 60 | searchAPI(params) { |
| 51 | return uni.$u.api.filter.freightDriverCommonSelect({ query: this.query, ...params }); | 61 | return uni.$u.api.filter.freightDriverCommonSelect({ query: this.query, ...params }); |
| 52 | }, | 62 | }, |
| 53 | onSelect() { | 63 | onSelect() { |
| 64 | + let useFlagCache = this.checkbox.includes('have'); | ||
| 65 | + uni.setStorageSync('FREIGHT_MP_SELECT_DRIVER_USE_FLAG', useFlagCache); | ||
| 54 | let item = this.list[this.choseIndex]; | 66 | let item = this.list[this.choseIndex]; |
| 55 | - uni.$emit('select-driver', item); | 67 | + uni.$emit('select-driver', { ...item, useVehicle: this.checkbox.length > 0 }); |
| 56 | uni.navigateBack(); | 68 | uni.navigateBack(); |
| 57 | }, | 69 | }, |
| 58 | }, | 70 | }, |
pages/order/add.vue
| @@ -364,7 +364,6 @@ export default { | @@ -364,7 +364,6 @@ export default { | ||
| 364 | }, | 364 | }, |
| 365 | selectRemark() { | 365 | selectRemark() { |
| 366 | uni.$once('select-remark', remark => { | 366 | uni.$once('select-remark', remark => { |
| 367 | - console.info(remark); | ||
| 368 | this.form.remark = remark || ''; | 367 | this.form.remark = remark || ''; |
| 369 | }); | 368 | }); |
| 370 | uni.navigateTo({ | 369 | uni.navigateTo({ |
| @@ -376,9 +375,15 @@ export default { | @@ -376,9 +375,15 @@ export default { | ||
| 376 | this.form.driverName = driver.name; | 375 | this.form.driverName = driver.name; |
| 377 | this.form.driverMobile = driver.mobile; | 376 | this.form.driverMobile = driver.mobile; |
| 378 | this.form.mobile = driver.mobile; | 377 | this.form.mobile = driver.mobile; |
| 378 | + | ||
| 379 | if (driver.mobile) { | 379 | if (driver.mobile) { |
| 380 | this.mobileChange(); | 380 | this.mobileChange(); |
| 381 | } | 381 | } |
| 382 | + if (driver.useVehicle && driver.latestVehicleNo) { | ||
| 383 | + this.form.licenseNumber = driver.latestVehicleNo; | ||
| 384 | + this.typeCar = 'licenseNumber'; | ||
| 385 | + this.vehicleChange(driver.latestVehicleNo); | ||
| 386 | + } | ||
| 382 | }); | 387 | }); |
| 383 | uni.navigateTo({ | 388 | uni.navigateTo({ |
| 384 | url: `/pages/global/search-driver`, | 389 | url: `/pages/global/search-driver`, |
pages/order/card.vue
| @@ -11,7 +11,10 @@ | @@ -11,7 +11,10 @@ | ||
| 11 | <render-dict v-if="item.status" class="status" :style="{ color: colorMap[item.status] }" dict="FREIGHT_ORDER_STATUS" :value="item.status"></render-dict> | 11 | <render-dict v-if="item.status" class="status" :style="{ color: colorMap[item.status] }" dict="FREIGHT_ORDER_STATUS" :value="item.status"></render-dict> |
| 12 | </view> | 12 | </view> |
| 13 | </view> | 13 | </view> |
| 14 | - <view class="card-order__item"> {{ item.projectName }} | {{ item.loadTime }}装货 </view> | 14 | + <view class="card-order__item-title"> |
| 15 | + <view> {{ item.projectName }} | {{ item.loadTime }}装货 </view> | ||
| 16 | + <view v-if="item.waitHandleExceptionNumber" class="exception">{{ item.waitHandleExceptionNumber }}个异常待处理</view> | ||
| 17 | + </view> | ||
| 15 | <view class="card-order__steps"> | 18 | <view class="card-order__steps"> |
| 16 | <view class="step"> | 19 | <view class="step"> |
| 17 | <view class="step-item"> | 20 | <view class="step-item"> |
| @@ -52,6 +55,9 @@ | @@ -52,6 +55,9 @@ | ||
| 52 | <view class="amount"> | 55 | <view class="amount"> |
| 53 | 运费<text class="red">¥{{ item.freightAmount }}</text> | 56 | 运费<text class="red">¥{{ item.freightAmount }}</text> |
| 54 | </view> | 57 | </view> |
| 58 | + <view class="status" :style="{ color: payStatusColorMap[item.payStatus], background: bgPayStatusColorMap[item.payStatus] }"> | ||
| 59 | + <render-dict dict="ONLINE_FREIGHT_ORDER_PAY_PROCESS" :value="item.payStatus"></render-dict> | ||
| 60 | + </view> | ||
| 55 | <view class="action"> | 61 | <view class="action"> |
| 56 | <zb-tooltip placement="bottom" :visible="visible" @update:visible="e => (visible = e)"> | 62 | <zb-tooltip placement="bottom" :visible="visible" @update:visible="e => (visible = e)"> |
| 57 | <template #content> | 63 | <template #content> |
| @@ -105,6 +111,16 @@ export default { | @@ -105,6 +111,16 @@ export default { | ||
| 105 | COMPLETED: '#00B87A', | 111 | COMPLETED: '#00B87A', |
| 106 | CANCEL: '#999999', | 112 | CANCEL: '#999999', |
| 107 | }, | 113 | }, |
| 114 | + payStatusColorMap: { | ||
| 115 | + PAY_PART_SUCCESS: '#2673FB', | ||
| 116 | + PAY_SUCCESS: '#00B87A', | ||
| 117 | + NOT_PAY: '#999999', | ||
| 118 | + }, | ||
| 119 | + bgPayStatusColorMap: { | ||
| 120 | + PAY_PART_SUCCESS: 'rgba(38, 115, 251, 0.1)', | ||
| 121 | + PAY_SUCCESS: 'rgba(0, 184, 122, 0.1)', | ||
| 122 | + NOT_PAY: 'rgba(153, 153, 153, 0.1)', | ||
| 123 | + }, | ||
| 108 | }; | 124 | }; |
| 109 | }, | 125 | }, |
| 110 | methods: { | 126 | methods: { |
| @@ -185,6 +201,18 @@ export default { | @@ -185,6 +201,18 @@ export default { | ||
| 185 | color: $color-red; | 201 | color: $color-red; |
| 186 | } | 202 | } |
| 187 | } | 203 | } |
| 204 | + &__item-title { | ||
| 205 | + margin-top: $padding-xs; | ||
| 206 | + display: flex; | ||
| 207 | + font-size: 26upx; | ||
| 208 | + color: #999999; | ||
| 209 | + align-items: baseline; | ||
| 210 | + justify-content: space-between; | ||
| 211 | + .exception { | ||
| 212 | + font-size: 24upx; | ||
| 213 | + color: #ffcc00; | ||
| 214 | + } | ||
| 215 | + } | ||
| 188 | &__item { | 216 | &__item { |
| 189 | margin-top: $padding-xs; | 217 | margin-top: $padding-xs; |
| 190 | display: flex; | 218 | display: flex; |
| @@ -280,6 +308,12 @@ export default { | @@ -280,6 +308,12 @@ export default { | ||
| 280 | color: #ff4f3b; | 308 | color: #ff4f3b; |
| 281 | } | 309 | } |
| 282 | } | 310 | } |
| 311 | + .status { | ||
| 312 | + font-size: 24upx; | ||
| 313 | + padding: 0 $padding-base; | ||
| 314 | + border-radius: $radius-md; | ||
| 315 | + margin-left: $padding-base; | ||
| 316 | + } | ||
| 283 | .action { | 317 | .action { |
| 284 | flex: 1; | 318 | flex: 1; |
| 285 | display: flex; | 319 | display: flex; |
| @@ -304,7 +338,7 @@ export default { | @@ -304,7 +338,7 @@ export default { | ||
| 304 | display: flex; | 338 | display: flex; |
| 305 | align-items: center; | 339 | align-items: center; |
| 306 | justify-content: center; | 340 | justify-content: center; |
| 307 | - margin-left: $padding-sm; | 341 | + margin-left: $padding-base; |
| 308 | .sx-img { | 342 | .sx-img { |
| 309 | height: 12upx; | 343 | height: 12upx; |
| 310 | width: 14upx; | 344 | width: 14upx; |
pages/order/detail.vue
| @@ -86,7 +86,12 @@ | @@ -86,7 +86,12 @@ | ||
| 86 | </view> | 86 | </view> |
| 87 | <view class="card__item"> | 87 | <view class="card__item"> |
| 88 | <view class="card__item_field">订单备注</view> | 88 | <view class="card__item_field">订单备注</view> |
| 89 | - <view class="card__item_content">{{ item.remark ? item.remark : '' }}</view> | 89 | + <view class="card__item_content"> |
| 90 | + <view class="text"> {{ item.remark ? item.remark : '' }} </view> | ||
| 91 | + <view v-if="$permission('/freightOrder/modifyGoods')" class="action" @tap="modifyRemark"> | ||
| 92 | + <u--text text="修改" suffixIcon="arrow-right"></u--text> | ||
| 93 | + </view> | ||
| 94 | + </view> | ||
| 90 | </view> | 95 | </view> |
| 91 | <view class="card__item"> | 96 | <view class="card__item"> |
| 92 | <view class="card__item_field">回单照片</view> | 97 | <view class="card__item_field">回单照片</view> |
| @@ -180,6 +185,16 @@ | @@ -180,6 +185,16 @@ | ||
| 180 | </view> | 185 | </view> |
| 181 | </view> | 186 | </view> |
| 182 | </view> | 187 | </view> |
| 188 | + <view v-if="item.waitHandleExceptionNumber" class="card"> | ||
| 189 | + <view class="card__header" style="margin-bottom: 0; padding-bottom: 0; border-bottom: none"> | ||
| 190 | + <view class="label"> 风控异常 </view> | ||
| 191 | + <view class="action" @tap="toRisk"> | ||
| 192 | + <view class="color-red"> | ||
| 193 | + <u--text :text="item.waitHandleExceptionNumber + '个待处理异常'" suffixIcon="arrow-right"></u--text> | ||
| 194 | + </view> | ||
| 195 | + </view> | ||
| 196 | + </view> | ||
| 197 | + </view> | ||
| 183 | <view class="card"> | 198 | <view class="card"> |
| 184 | <view class="card__header"> | 199 | <view class="card__header"> |
| 185 | <view class="label"> 订单费用 </view> | 200 | <view class="label"> 订单费用 </view> |
| @@ -418,6 +433,11 @@ export default { | @@ -418,6 +433,11 @@ export default { | ||
| 418 | url: '/pages/global/search-payee', | 433 | url: '/pages/global/search-payee', |
| 419 | }); | 434 | }); |
| 420 | }, | 435 | }, |
| 436 | + toRisk() { | ||
| 437 | + uni.navigateTo({ | ||
| 438 | + url: '/pages/order/risk-abnormal?code=' + this.item.code, | ||
| 439 | + }); | ||
| 440 | + }, | ||
| 421 | modifyCustomerFun() { | 441 | modifyCustomerFun() { |
| 422 | uni.$u.api.freightOrder.modifyCustomerOrderCode({ customerOrderCode: this.customerOrderCode, code: this.item.code }).then(res => { | 442 | uni.$u.api.freightOrder.modifyCustomerOrderCode({ customerOrderCode: this.customerOrderCode, code: this.item.code }).then(res => { |
| 423 | if (res.success) { | 443 | if (res.success) { |
| @@ -426,6 +446,24 @@ export default { | @@ -426,6 +446,24 @@ export default { | ||
| 426 | } | 446 | } |
| 427 | }); | 447 | }); |
| 428 | }, | 448 | }, |
| 449 | + modifyRemark() { | ||
| 450 | + uni.$once('select-remark', remark => { | ||
| 451 | + this.modifyRemarkHttp(remark); | ||
| 452 | + }); | ||
| 453 | + uni.navigateTo({ | ||
| 454 | + url: `/pages/order/select-remark?remark=${this.item.remark}`, | ||
| 455 | + }); | ||
| 456 | + }, | ||
| 457 | + modifyRemarkHttp(remark) { | ||
| 458 | + uni.$u.api.freightOrder | ||
| 459 | + .maModifyRemark({ | ||
| 460 | + code: this.item.code, | ||
| 461 | + remark: remark, | ||
| 462 | + }) | ||
| 463 | + .then(r => { | ||
| 464 | + this.item.remark = remark || ''; | ||
| 465 | + }); | ||
| 466 | + }, | ||
| 429 | }, | 467 | }, |
| 430 | }; | 468 | }; |
| 431 | </script> | 469 | </script> |
| @@ -545,6 +583,7 @@ export default { | @@ -545,6 +583,7 @@ export default { | ||
| 545 | font-style: normal; | 583 | font-style: normal; |
| 546 | display: flex; | 584 | display: flex; |
| 547 | justify-content: space-between; | 585 | justify-content: space-between; |
| 586 | + overflow-wrap: anywhere; | ||
| 548 | &_text { | 587 | &_text { |
| 549 | font-weight: 400; | 588 | font-weight: 400; |
| 550 | font-size: 28upx; | 589 | font-size: 28upx; |
| @@ -0,0 +1,160 @@ | @@ -0,0 +1,160 @@ | ||
| 1 | +<template> | ||
| 2 | + <Page name="risk-abnormal" flank> | ||
| 3 | + <template #content> | ||
| 4 | + <List ref="list" v-model="list" :api="searchAPI"> | ||
| 5 | + <template v-for="(item, index) in list"> | ||
| 6 | + <view class="risk-card" :key="index"> | ||
| 7 | + <view class="risk-card__heard"> | ||
| 8 | + <view>异常编号:{{ item.orderCode }}</view> | ||
| 9 | + <view :style="{ color: statusColorMap[item.status] }"><render-dict dict="ONLINE_FREIGHT_RISK_EXCEPTION_STATUS" :value="item.status"></render-dict></view> | ||
| 10 | + </view> | ||
| 11 | + <view class="risk-card__body"> | ||
| 12 | + <view class="item"> | ||
| 13 | + <view class="item_field">异常类型</view> | ||
| 14 | + <view class="item_content"><render-dict dict="ONLINE_FREIGHT_RISK_EXCEPTION_TYPE" :value="item.exceptionType"></render-dict></view> | ||
| 15 | + </view> | ||
| 16 | + <view class="item"> | ||
| 17 | + <view class="item_field">异常描述</view> | ||
| 18 | + <view class="item_content">{{ item.exceptionDesc }}</view> | ||
| 19 | + </view> | ||
| 20 | + <view class="item"> | ||
| 21 | + <view class="item_field">异常时间</view> | ||
| 22 | + <view class="item_content" style="color: #999">{{ item.riskTime }}</view> | ||
| 23 | + </view> | ||
| 24 | + <template v-if="!['WAIT_HANDLE'].includes(item.status)"> | ||
| 25 | + <view class="item item-top-border"> | ||
| 26 | + <view class="item_field">申诉说明</view> | ||
| 27 | + <view class="item_content">{{ item.complaintDesc }}</view> | ||
| 28 | + </view> | ||
| 29 | + <view class="item"> | ||
| 30 | + <view class="item_field">申诉时间</view> | ||
| 31 | + <view class="item_content" style="color: #999">{{ item.complaintTime }}</view> | ||
| 32 | + </view> | ||
| 33 | + <view class="item"> | ||
| 34 | + <view class="item_field">申诉举证</view> | ||
| 35 | + <view class="item_content"> | ||
| 36 | + <text class="color-primary" @click="previewImage(item.complaintAttachment)">查看图片</text> | ||
| 37 | + </view> | ||
| 38 | + </view> | ||
| 39 | + </template> | ||
| 40 | + <view v-if="['FAIL'].includes(item.status)" class="err-item"> | ||
| 41 | + <view class="item"> | ||
| 42 | + <view class="item_field">审核说明</view> | ||
| 43 | + <view class="item_content">{{ item.auditDesc }}</view> | ||
| 44 | + </view> | ||
| 45 | + <view class="item"> | ||
| 46 | + <view class="item_field">审核时间</view> | ||
| 47 | + <view class="item_content">{{ item.auditTime }}</view> | ||
| 48 | + </view> | ||
| 49 | + </view> | ||
| 50 | + </view> | ||
| 51 | + <view v-if="['WAIT_HANDLE', 'FAIL'].includes(item.status)" class="risk-card__foot"> | ||
| 52 | + <u-button @click="toRisk(item.id)" type="primary">去申诉</u-button> | ||
| 53 | + </view> | ||
| 54 | + </view> | ||
| 55 | + </template> | ||
| 56 | + </List> | ||
| 57 | + </template> | ||
| 58 | + </Page> | ||
| 59 | +</template> | ||
| 60 | + | ||
| 61 | +<script> | ||
| 62 | +export default { | ||
| 63 | + name: 'risk-abnormal', | ||
| 64 | + data() { | ||
| 65 | + return { | ||
| 66 | + statusColorMap: { | ||
| 67 | + WAIT_HANDLE: '#ed6a0c', | ||
| 68 | + HANDLING: '#1989fa', | ||
| 69 | + SUCCESS: '#07c160', | ||
| 70 | + FAIL: '#FDD108', | ||
| 71 | + }, | ||
| 72 | + code: '', | ||
| 73 | + list: [], | ||
| 74 | + }; | ||
| 75 | + }, | ||
| 76 | + onLoad(options) { | ||
| 77 | + this.code = options.code; | ||
| 78 | + }, | ||
| 79 | + methods: { | ||
| 80 | + // 预览图片 | ||
| 81 | + previewImage(value) { | ||
| 82 | + uni.previewImage({ urls: value.replace(/^(\s|\,)+|(\s|\,)+$/g, '').split(',') }); | ||
| 83 | + }, | ||
| 84 | + searchAPI(params) { | ||
| 85 | + return uni.$u.api.freightOrder.getFreightRisk({ orderCodes: this.code, ...params }); | ||
| 86 | + }, | ||
| 87 | + toRisk(id) { | ||
| 88 | + uni.navigateTo({ | ||
| 89 | + url: '/pages/order/risk-appeal?id=' + id, | ||
| 90 | + events: { | ||
| 91 | + refreshData: () => { | ||
| 92 | + this.onSearch(); | ||
| 93 | + }, | ||
| 94 | + }, | ||
| 95 | + }); | ||
| 96 | + }, | ||
| 97 | + }, | ||
| 98 | +}; | ||
| 99 | +</script> | ||
| 100 | + | ||
| 101 | +<style lang="scss"> | ||
| 102 | +.page-risk-abnormal { | ||
| 103 | + &__content { | ||
| 104 | + .risk-card { | ||
| 105 | + background: $color-white; | ||
| 106 | + border-radius: $radius-md; | ||
| 107 | + box-shadow: $shadow-normal; | ||
| 108 | + font-size: $font-md; | ||
| 109 | + margin-bottom: $padding-md; | ||
| 110 | + &__heard { | ||
| 111 | + display: flex; | ||
| 112 | + align-items: center; | ||
| 113 | + justify-content: space-between; | ||
| 114 | + border-bottom: 1px solid $color-border; | ||
| 115 | + padding: $padding-sm; | ||
| 116 | + } | ||
| 117 | + &__body { | ||
| 118 | + padding: 0 $padding-sm 1upx; | ||
| 119 | + .item { | ||
| 120 | + display: flex; | ||
| 121 | + font-size: 26upx; | ||
| 122 | + color: #999999; | ||
| 123 | + align-content: baseline; | ||
| 124 | + margin: $padding-sm 0; | ||
| 125 | + &_field { | ||
| 126 | + font-weight: 400; | ||
| 127 | + font-size: 28upx; | ||
| 128 | + color: #999999; | ||
| 129 | + width: 170upx; | ||
| 130 | + text-align: left; | ||
| 131 | + } | ||
| 132 | + &_content { | ||
| 133 | + flex: 1; | ||
| 134 | + font-weight: 400; | ||
| 135 | + font-size: 28upx; | ||
| 136 | + color: #2b2a27; | ||
| 137 | + text-align: left; | ||
| 138 | + font-style: normal; | ||
| 139 | + display: flex; | ||
| 140 | + justify-content: space-between; | ||
| 141 | + overflow-wrap: anywhere; | ||
| 142 | + } | ||
| 143 | + } | ||
| 144 | + .err-item { | ||
| 145 | + background: $color-border; | ||
| 146 | + padding: 1upx $padding-sm; | ||
| 147 | + margin-bottom: $padding-sm; | ||
| 148 | + } | ||
| 149 | + .item-top-border { | ||
| 150 | + border-top: 1px dashed $color-border; | ||
| 151 | + padding-top: $padding-sm; | ||
| 152 | + } | ||
| 153 | + } | ||
| 154 | + &__foot { | ||
| 155 | + padding: 0 $padding-sm $padding-sm; | ||
| 156 | + } | ||
| 157 | + } | ||
| 158 | + } | ||
| 159 | +} | ||
| 160 | +</style> |
| @@ -0,0 +1,90 @@ | @@ -0,0 +1,90 @@ | ||
| 1 | +<template> | ||
| 2 | + <Page name="risk-appeal"> | ||
| 3 | + <template #content> | ||
| 4 | + <u-form :model="form" ref="uForm" labelWidth="100"> | ||
| 5 | + <view class="card"> | ||
| 6 | + <u-form-item label="申诉说明" required> </u-form-item> | ||
| 7 | + <u-textarea v-model="form.desc" border="none" placeholder="申诉说明" /> | ||
| 8 | + </view> | ||
| 9 | + <view class="card"> | ||
| 10 | + <u-form-item label="申诉举证" required> </u-form-item> | ||
| 11 | + <z-upload v-model="form.attachment" :limit="20"></z-upload> | ||
| 12 | + </view> | ||
| 13 | + </u-form> | ||
| 14 | + </template> | ||
| 15 | + <template #footer> | ||
| 16 | + <u-button type="primary" @tap="submit" :loading="loading">申诉</u-button> | ||
| 17 | + </template> | ||
| 18 | + </Page> | ||
| 19 | +</template> | ||
| 20 | + | ||
| 21 | +<script> | ||
| 22 | +import ZUpload from '../../components/zee/z-upload.vue'; | ||
| 23 | +import dayjs from 'dayjs'; | ||
| 24 | + | ||
| 25 | +export default { | ||
| 26 | + name: 'risk-appeal', | ||
| 27 | + components: { ZUpload }, | ||
| 28 | + data() { | ||
| 29 | + return { | ||
| 30 | + loading: false, | ||
| 31 | + form: { | ||
| 32 | + desc: '', | ||
| 33 | + attachment: '', | ||
| 34 | + }, | ||
| 35 | + id: '', | ||
| 36 | + }; | ||
| 37 | + }, | ||
| 38 | + onLoad(options) { | ||
| 39 | + this.id = options.id; | ||
| 40 | + }, | ||
| 41 | + methods: { | ||
| 42 | + submit() { | ||
| 43 | + if (!this.form.desc) { | ||
| 44 | + uni.showToast({ title: '备注不能为空', icon: 'none' }); | ||
| 45 | + return; | ||
| 46 | + } | ||
| 47 | + if (!this.form.attachment) { | ||
| 48 | + uni.showToast({ title: '申诉举证附件不能为空', icon: 'none' }); | ||
| 49 | + return; | ||
| 50 | + } | ||
| 51 | + if (this.loading) return; | ||
| 52 | + this.loading = true; | ||
| 53 | + uni.$u.api.freightOrder | ||
| 54 | + .riskAppeal({ ...this.form, idList: [this.id] }) | ||
| 55 | + .then(res => { | ||
| 56 | + if (res.success) { | ||
| 57 | + this.getOpenerEventChannel().emit('refreshData'); | ||
| 58 | + setTimeout(() => uni.navigateBack(), 500); | ||
| 59 | + } | ||
| 60 | + }) | ||
| 61 | + .catch(e => { | ||
| 62 | + this.loading = false; | ||
| 63 | + }); | ||
| 64 | + }, | ||
| 65 | + }, | ||
| 66 | +}; | ||
| 67 | +</script> | ||
| 68 | + | ||
| 69 | +<style lang="scss"> | ||
| 70 | +.page-risk-appeal { | ||
| 71 | + &__content { | ||
| 72 | + padding-top: 0 !important; | ||
| 73 | + } | ||
| 74 | + &__footer { | ||
| 75 | + background: $color-white; | ||
| 76 | + } | ||
| 77 | + .card { | ||
| 78 | + color: #999999; | ||
| 79 | + margin: $padding-md; | ||
| 80 | + padding: $padding-md; | ||
| 81 | + background-color: $color-white; | ||
| 82 | + border-radius: $radius-md; | ||
| 83 | + box-shadow: $shadow-normal; | ||
| 84 | + //.u-form-item { | ||
| 85 | + // padding-left: $padding-md !important; | ||
| 86 | + // padding-right: $padding-sm !important; | ||
| 87 | + //} | ||
| 88 | + } | ||
| 89 | +} | ||
| 90 | +</style> |
pages/order/select-remark.vue
| @@ -5,8 +5,8 @@ | @@ -5,8 +5,8 @@ | ||
| 5 | <view class="his-title">历史备注</view> | 5 | <view class="his-title">历史备注</view> |
| 6 | <view class="his-card"> | 6 | <view class="his-card"> |
| 7 | <view @click="clickItem(item)" class="his-item" v-for="(item, index) in hisList" :key="index"> | 7 | <view @click="clickItem(item)" class="his-item" v-for="(item, index) in hisList" :key="index"> |
| 8 | - <text>{{ item }}</text> | ||
| 9 | - </view> | 8 | + <text>{{ item }}</text> |
| 9 | + </view> | ||
| 10 | </view> | 10 | </view> |
| 11 | </template> | 11 | </template> |
| 12 | <template #footer> | 12 | <template #footer> |
| @@ -23,7 +23,8 @@ export default { | @@ -23,7 +23,8 @@ export default { | ||
| 23 | hisList: [], | 23 | hisList: [], |
| 24 | }; | 24 | }; |
| 25 | }, | 25 | }, |
| 26 | - onLoad() { | 26 | + onLoad(option) { |
| 27 | + this.remark = option.remark || ''; | ||
| 27 | this.getHis(); | 28 | this.getHis(); |
| 28 | }, | 29 | }, |
| 29 | methods: { | 30 | methods: { |
| @@ -57,9 +58,9 @@ export default { | @@ -57,9 +58,9 @@ export default { | ||
| 57 | padding: $padding-xs 0; | 58 | padding: $padding-xs 0; |
| 58 | color: $color-text-minor; | 59 | color: $color-text-minor; |
| 59 | border-bottom: 1px solid $color-border; | 60 | border-bottom: 1px solid $color-border; |
| 60 | - text { | ||
| 61 | - overflow-wrap: anywhere; | ||
| 62 | - } | 61 | + text { |
| 62 | + overflow-wrap: anywhere; | ||
| 63 | + } | ||
| 63 | } | 64 | } |
| 64 | .his-item:last-child { | 65 | .his-item:last-child { |
| 65 | border-bottom: none; | 66 | border-bottom: none; |