| | |
| | | <GlobalWindow |
| | | title="手动派单" |
| | | :visible.sync="visible" |
| | | width="700px" |
| | | width="60%" |
| | | @confirm="handleConfirm" |
| | | @close="handleClose" |
| | | > |
| | |
| | | <div class="info-row"> |
| | | <div class="info-item"> |
| | | <span class="label">订单编号:</span> |
| | | <span class="value">{{ orderInfo.orderNo }}</span> |
| | | <span class="value" v-if="orderInfo.order">{{ orderInfo.order.code || '' }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">实付金额:</span> |
| | | <span class="value">¥{{ (orderInfo.payAmount / 100).toFixed(2) }}</span> |
| | | <span class="value" v-if="orderInfo.order">¥{{ ((orderInfo.order.payAmount ||0) / 100).toFixed(2) }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">配送方式:</span> |
| | | <span class="value"> |
| | | <span v-if="orderInfo.deliveryType === 1">普通配送</span> |
| | | <span v-else-if="orderInfo.deliveryType === 2">急速达</span> |
| | | <span v-else-if="orderInfo.deliveryType === 3">异地寄送</span> |
| | | <span v-else>-</span> |
| | | <span class="value" v-if="orderInfo.order"> |
| | | <span v-if="orderInfo.order.type === 0">就地寄存</span> |
| | | <span v-if="orderInfo.order.type === 1">同城配送</span> |
| | | <span style="margin-left: 20px;border: 1px solid #0c6ce3;border-radius: 5px;font-size: 12px;padding:2px 10px;color: #0c6ce3 " v-if="orderInfo.order.type === 1 && orderInfo.order.isUrgent === 0">普通配送</span> |
| | | <span style="margin-left: 20px;border: 1px solid orange;border-radius: 5px;font-size: 12px;padding:2px 10px;color: orange " v-if="orderInfo.order.type === 1 && orderInfo.order.isUrgent === 1">急速达</span> |
| | | </span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <el-button type="primary" @click="showLogList" >加急日志</el-button> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <el-table :data="orderInfo.goodsList" stripe class="goods-table"> |
| | | <el-table-column prop="goodsName" label="物品名称" min-width="100px"></el-table-column> |
| | | <el-table-column prop="goodsSize" label="物品尺寸" min-width="80px"></el-table-column> |
| | | <el-table style="border: 1px solid #f2f2f2;" :data="orderInfo.detailList" stripe class="goods-table"> |
| | | <el-table-column prop="luggageName" label="物品名称" min-width="100px"></el-table-column> |
| | | <el-table-column prop="luggageDetail" label="物品尺寸" min-width="80px"></el-table-column> |
| | | <el-table-column label="配送价(元)" min-width="100px"> |
| | | <template slot-scope="{row}">¥{{ (row.deliveryPrice / 100).toFixed(2) }}</template> |
| | | <template slot-scope="{row}"><span >¥{{ ((row.unitPrice||0) / 100).toFixed(2) }}</span></template> |
| | | </el-table-column> |
| | | <el-table-column prop="quantity" label="数量" min-width="60px"></el-table-column> |
| | | <el-table-column prop="num" label="数量" min-width="60px"></el-table-column> |
| | | <el-table-column label="小计(元)" min-width="100px"> |
| | | <template slot-scope="{row}">¥{{ ((row.deliveryPrice * row.quantity) / 100).toFixed(2) }}</template> |
| | | <template slot-scope="{row}"><span class="yellowstate">¥{{ (((row.subtotal || 0)) / 100).toFixed(2) }}</span></template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="100px" class="dispatch-form"> |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="100px" class="dispatch-form" inline> |
| | | <el-form-item label="配送司机" prop="driverId"> |
| | | <el-select v-model="form.driverId" placeholder="请选择配送司机" style="width: 100%"> |
| | | <el-option label="司机A" :value="1"></el-option> |
| | | <el-option label="司机B" :value="2"></el-option> |
| | | <el-select v-model="form.driverId" placeholder="请选择配送司机" filterable style="width: 400px;"> |
| | | <el-option v-for="item in driverList" :label="item.name" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="加急费" prop="urgentFee"> |
| | | <el-input-number v-model="form.urgentFee" :min="0" :precision="2" controls-position="right" style="width: 100%"></el-input-number> |
| | | <el-input-number v-model="form.urgentFee" :min="0" :precision="2" controls-position="right" style="width: 400px;"></el-input-number> |
| | | </el-form-item> |
| | | <el-form-item label="备注说明" prop="remark"> |
| | | <el-input type="textarea" v-model="form.remark" placeholder="请输入备注说明" :rows="3"></el-input> |
| | | <el-input type="textarea" v-model="form.remark" placeholder="请输入备注说明" style="width: 400px;" :rows="3"></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | <orderProgress ref ='orderProgress'></orderProgress> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import { getById, dispatch as dispatchOrder, logListPage } from '@/api/business/orderManagement' |
| | | import { paidDepositList } from '@/api/business/driver' |
| | | import orderProgress from '@/components/business/orderProgress' |
| | | |
| | | export default { |
| | | name: 'OperaDispatch', |
| | | components: { GlobalWindow }, |
| | | components: { GlobalWindow, orderProgress }, |
| | | data () { |
| | | const numRule = (rule, value, callBack) => { |
| | | if (value ==='') { |
| | | callBack(new Error('加急费不能为空')) |
| | | } else if (value < 0.1) { |
| | | callBack(new Error('请输入正确的加急费')) |
| | | } else { |
| | | callBack() |
| | | } |
| | | } |
| | | return { |
| | | visible: false, |
| | | orderInfo: { |
| | |
| | | deliveryType: '', |
| | | goodsList: [] |
| | | }, |
| | | driverList: [], |
| | | form: { |
| | | driverId: '', |
| | | urgentFee: 0, |
| | | remark: '' |
| | | driverId: 0, |
| | | orderId: 0, |
| | | remark: '', |
| | | urgentFee: 10 |
| | | }, |
| | | rules: { |
| | | driverId: [{ required: true, message: '请选择配送司机', trigger: 'change' }] |
| | | urgentFee: [{ required: true,validator:numRule, trigger: 'change' }] |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | open (row) { |
| | | this.orderInfo = { |
| | | orderNo: row.orderNo, |
| | | payAmount: row.payAmount || 0, |
| | | deliveryType: row.deliveryType || '', |
| | | goodsList: row.goodsList || [] |
| | | } |
| | | var that = this |
| | | this.form = { |
| | | driverId: '', |
| | | urgentFee: 0, |
| | | remark: '' |
| | | driverId: null, |
| | | orderId: row.id, |
| | | remark: '', |
| | | urgentFee: 0 |
| | | } |
| | | this.orderInfo = { order: row } |
| | | that.orderInfo.detailList = that.orderInfo.detailList || [] |
| | | getById(row.id).then(res => { |
| | | res = res || {} |
| | | res.detailList = res.detailList || [] |
| | | res.order = res.order || {} |
| | | that.orderInfo = res |
| | | that.orderInfo.order = that.orderInfo.order || {} |
| | | that.loadDriverList() |
| | | }).catch(e => { |
| | | this.$tip.apiFailed(e) |
| | | this.visible = false |
| | | }) |
| | | this.visible = true |
| | | }, |
| | | showLogList () { |
| | | var that = this |
| | | if (!this.orderInfo.order || !this.orderInfo.order.id) { |
| | | return |
| | | } |
| | | logListPage({ |
| | | capacity: 10000, |
| | | model: { |
| | | objTypeList: [2, 3], |
| | | orderId: this.orderInfo.order.id |
| | | }, |
| | | page: 1 |
| | | }).then(res => { |
| | | var orderLogList = res.records || [] |
| | | if (orderLogList.length) { |
| | | this.$refs.orderProgress.open('订单派单日志', orderLogList || []) |
| | | } else { |
| | | this.$message.warning('未查询到任何派单记录!') |
| | | } |
| | | }).catch(e => { |
| | | }) |
| | | }, |
| | | loadDriverList () { |
| | | var that = this |
| | | paidDepositList().then(res => { |
| | | that.driverList = res || [] |
| | | }).catch(e => { |
| | | }) |
| | | }, |
| | | handleClose () { |
| | | this.visible = false |
| | |
| | | handleConfirm () { |
| | | this.$refs.form.validate(valid => { |
| | | if (!valid) return |
| | | this.$emit('confirm', { |
| | | orderId: this.orderInfo.id, |
| | | ...this.form |
| | | dispatchOrder(this.form).then(res => { |
| | | this.$tip.apiSuccess(res || '派单成功') |
| | | this.$emit('success') |
| | | this.visible = false |
| | | }).catch(e => { |
| | | this.$tip.apiFailed(e) |
| | | }) |
| | | this.visible = false |
| | | }) |
| | | } |
| | | } |
| | |
| | | border-radius: 4px; |
| | | } |
| | | .info-item { |
| | | display: flex; |
| | | /*display: flex;*/ |
| | | font-size: 14px; |
| | | } |
| | | .info-item .label { |