Commit 6006e588 authored by dragondean@qq.com's avatar dragondean@qq.com

新建订单批量导入装箱单,调货,bug

parent 5e699b90
......@@ -366,4 +366,22 @@ export function getMergeLogByMergedOrderNo(params){
method: 'get',
params
})
}
// 导入装箱单
export function orderImport(data) {
return request({
url: '/ecw/order/import',
method: 'post',
data
})
}
// 下载装箱单模板
export function exportPackingList(){
return request({
url: '/ecw/order/export-packing-list',
method: 'get',
responseType: 'blob'
})
}
\ No newline at end of file
......@@ -52,3 +52,12 @@ export function exportReceiptExcel(query) {
responseType: 'blob'
})
}
// 根据订单ID获得应收款列表
export function getReceivableListByOrderId(params){
return request({
url: '/ecw/receivable/getReceivableListByOrderId',
method: 'get',
params
})
}
\ No newline at end of file
......@@ -15,41 +15,74 @@
import { getListTree } from "@/api/ecw/region";
export default {
props:{
country: Number,
city: Number,
province: Number
},
data(){
return {
formData:{
country: undefined,
province: undefined,
city: undefined
},
treeList: [],
provinceList: [],
cityList:[]
// provinceList: [],
// cityList:[]
}
},
watch:{
city(val){
this.$set(this.formData, 'city', val)
},
province(val){
this.$set(this.formData, 'province', val)
},
country(val){
this.$set(this.formData, 'country', val)
},
'formData.city'(city){
this.$emit('cityChange', city)
},
'formData.country'(country){
this.$emit('countryChange', country)
this.treeList.forEach(item => {
/* this.treeList.forEach(item => {
if(item.id == country){
this.provinceList = item.children || []
}
})
}) */
},
'formData.province'(province){
this.$emit('provinceChange', province)
this.provinceList.forEach(item => {
/* this.provinceList.forEach(item => {
if(item.id == province){
this.cityList = item.children || []
}
})
}) */
}
},
computed:{
provinceList(){
if(!this.formData.country) return []
let country = this.treeList.find(item => item.id == this.formData.country)
return country && country.children || []
},
cityList(){
if(!this.provinceList.length) return []
let province = this.provinceList.find(item => item.id == this.formData.province)
return province && province.children || []
}
},
created(){
getListTree({treeType: 1}).then(response => {
this.treeList = response.data
})
this.formData = {
country: this.country,
province: this.province,
city: this.city
}
}
}
</script>
\ No newline at end of file
......@@ -133,10 +133,10 @@
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.page" :limit.sync="queryParams.rows"
@pagination="getList" />
<transfer v-if="showTransferOrder" v-bind="showTransferOrder" @close="showTransferOrder=null" />
<release v-if="showReleaseOrderId" :order-id="showReleaseOrderId" @close="showReleaseOrderId=null" @success="onReleaseSuccess" />
<transfer-cargo v-if="showTransferCargoOrderId" :order-id="showTransferCargoOrderId" @close="showTransferCargoOrderId=null" />
<fallback v-if="showFallbackOrder !== null" :order="showFallbackOrder" :index="null" @close="showFallbackOrder=null" @success="onFallbackSuccess" />
<transfer v-if="showTransferOrder" v-bind="showTransferOrder" @close="showTransferOrder=null" />
<release v-if="showReleaseOrderId" :order-id="showReleaseOrderId" @close="showReleaseOrderId=null" @success="onReleaseSuccess" />
<transfer-cargo v-if="showTransferCargoOrderId" :order-id="showTransferCargoOrderId" @close="showTransferCargoOrderId=null" @success="onReansferCargoSuccess" />
<fallback v-if="showFallbackOrder !== null" :order="showFallbackOrder" @close="showFallbackOrder=null" @success="onFallbackSuccess" :index="null" />
</div>
</template>
......@@ -283,10 +283,6 @@ export default {
this.$message.success('操作成功')
this.handleQuery()
})
},
// 反复核
unReview(row){
},
onReleaseSuccess(){
this.showReleaseOrderId = null
......@@ -294,6 +290,11 @@ export default {
},
onFallbackSuccess(){
this.showFallbackOrder = null
this.handleQuery()
},
onReansferCargoSuccess(){
this.showTransferCargoOrderId = null
this.handleQuery()
}
}
};
......
......@@ -65,7 +65,7 @@
<el-button v-if="scope.row.status == 1" type="danger" size="mini" @click="cancel(scope.row.id)">取消</el-button>
<el-button v-if="scope.row.status == 1" type="success" size="mini" @click="review(scope.row.id)">放货复核</el-button>
<el-button v-if="scope.row.status == 3" type="danger" size="mini" @click="fallbackIndex=scope.$index">反复核</el-button>
<el-button v-if="scope.row.status == 3" type="success" size="mini" @click="$alert('// TODO')">调货</el-button>
<el-button v-if="scope.row.status == 3" type="success" size="mini" @click="cargoControlPickId=scope.row.id">调货</el-button>
<el-button v-if="[2,4].indexOf(scope.row.status) > -1" type="primary" size="mini" @click="showApprovalDetail(scope.row.id)">审核详情</el-button>
<el-button v-if="[2,4].indexOf(scope.row.status) > -1" type="danger" size="mini" @click="cancelApproval(scope.row.id)">取消审核</el-button>
......@@ -105,6 +105,12 @@
</el-table> -->
<fallback v-if="fallbackIndex !== null" :order="detail" :index="fallbackIndex" @close="fallbackIndex=null" @success="onFallbackSuccess" />
<edit v-if="editIndex !== null" @close="editIndex=null" :order="detail" :index="editIndex" @success="onEditSuccess" />
<transfer-cargo
v-if="cargoControlPickId !== null"
:order-id="detail.orderId"
:cargo-control-pick-id="cargoControlPickId"
@close="cargoControlPickId=null"
@success="onTransferCargoSuccess" />
</div>
</template>
<script>
......@@ -112,9 +118,11 @@ import edit from './components/CargoControlEdit.vue'
import {createPick, getPickRleaseInfo, review, cancel, cancelApproval} from '@/api/ecw/orderCargoControl'
import {parseTime} from '@/utils/ruoyi'
import Fallback from './components/Fallback'
import TransferCargo from '@/views/ecw/order/components/TransferCargo'
export default {
filters: {parseTime},
components: {edit, Fallback},
components: {edit, Fallback, TransferCargo},
data(){
return {
detail: null,
......@@ -122,6 +130,7 @@ export default {
rules: {},
editIndex: null, // 修改索引
fallbackIndex: null, // 反复核索引
cargoControlPickId: null, // 调货ID
}
},
created(){
......@@ -192,6 +201,10 @@ export default {
})
console.log({item})
return item[field]
},
onTransferCargoSuccess(){
this.cargoControlPickId = null
this.loadData()
}
}
}
......
......@@ -22,33 +22,33 @@
</el-col>
</el-row>
<el-table :data="[formData,formData]" border>
<el-table :data="selectedOrders" border>
<el-table-column label="订单号">
{{detail.sumNum}}
{{detail.orderNo}}
</el-table-column>
<el-table-column label="目的地">
<template slot-scope="{row}">
<el-input type="number" v-model.number="row.pickNum" placeholder="" clearable></el-input>
{{row.objectiveName}}
</template>
</el-table-column>
<el-table-column label="总控货数">
<template slot-scope="{row}">
<el-input type="number" v-model.number="row.pickNum" placeholder="" clearable></el-input>
{{row.sumNum}}
</template>
</el-table-column>
<el-table-column label="放货箱数">
<template slot-scope="{row}">
<el-input type="number" v-model.number="row.pickNum" placeholder="" clearable></el-input>
<el-input type="number" v-model.number="row.releaseNum" placeholder="" clearable></el-input>
</template>
</el-table-column>
<el-table-column label="体积(m³)">
<template slot-scope="{row}">
<el-input type="number" v-model.number="row.pickVolume" placeholder="" clearable></el-input>
{{row.sumVolume}}
</template>
</el-table-column>
<el-table-column label="重量(kg)">
<template slot-scope="{row}">
<el-input type="number" v-model.number="row.pickWeight" placeholder="" clearable></el-input>
{{row.sumWeight}}
</template>
</el-table-column>
</el-table>
......@@ -63,6 +63,8 @@
<el-input v-model="formData.code" placeholder="请输入手机验证码" clearable class="w-150 mr-10"></el-input>
<send-sms-code :order-id="detail.orderId" scene="5" />
</el-form-item>
<div class="page-title">审批流程</div>
<work-flow v-model="ccIdArr" xmlkey="transfer_goods" />
<el-form-item label="" style="margin-top:20px">
<el-button type="success" @click="submit">提交申请</el-button>
<el-button type="default" @click="closeDialog">关闭</el-button>
......@@ -72,20 +74,24 @@
</el-dialog>
</template>
<script>
import {createPick, getRleaseInfo, seasoningCondimentsSelect} from '@/api/ecw/orderCargoControl'
import {createPick, getRleaseInfo, seasoningCondimentsSelect, updateApply} from '@/api/ecw/orderCargoControl'
import AreaCodeSelector from '@/components/AreaCodeSelector'
import SendSmsCode from '@/views/ecw/order/components/SendSmsCode'
import WorkFlow from '@/components/WorkFlow'
export default {
props:{
orderId: [String, Number]
orderId: [String, Number],
cargoControlPickId: Number
},
components: {AreaCodeSelector, SendSmsCode},
components: {AreaCodeSelector, SendSmsCode, WorkFlow},
data(){
return {
show: false,
detail: null,
ccIdArr: [],
formData:{
orderIds:[]
applyType: 9, // 调货审核
ccIds: ''
},
rules:{
consigneeName: {required: true, message: '请填写收货人'},
......@@ -98,6 +104,9 @@ export default {
watch:{
'formData.orderIds'(val){
this.selectedOrders = this.orders.filter(item => val.indexOf(item.orderId) > -1)
},
ccIdArr(val){
this.formData.ccIds = val.join(',')
}
},
created(){
......@@ -121,7 +130,15 @@ export default {
return false
}
console.log('submit')
updateApply(Object.assign({
cargoControlPickId: this.cargoControlPickId,
orderBackPageVOList: this.selectedOrders,
orderId: this.orderId
}, this.formData)).then(res => {
this.$message.success('操作成功')
this.show = false
this.$emit('success')
})
})
......
......@@ -38,13 +38,13 @@
<el-descriptions-item label="运输方式" :span="2">
<dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="order.transportId" />
</el-descriptions-item>
<el-descriptions-item label="出货渠道" :span="2">{{order.logisticsInfoDto.startTitleZh}}</el-descriptions-item>
<el-descriptions-item label="出货渠道" :span="2">{{channelName}}</el-descriptions-item>
</el-descriptions>
</el-col>
<el-col :span="12">
<el-descriptions class="margin-top" border title="基础信息" :column="2">
<el-descriptions-item label="唛头">{{order.marks}}</el-descriptions-item>
<el-descriptions-item label="送货时间">{{order.consigneeVO.deliveryDate}}</el-descriptions-item>
<el-descriptions-item label="送货时间">{{order.deliveryDate}}</el-descriptions-item>
<el-descriptions-item label="是否控货">{{order.isCargoControl?'是':'否'}}</el-descriptions-item>
<el-descriptions-item label="填单信息">
{{order.costVO.totalNum}}箱 {{order.costVO.totalWeight}}Kg {{order.costVO.totalVolume}}m³
......@@ -132,10 +132,43 @@
<!--inWarehouseState 1待入库,2多了,3少了,4到齐-->
<el-button type="text" @click="showWarehouseReceipt=true" :disabled="order.inWarehouseState <= 1">查看入仓单</el-button>
<el-button type="text" @click.native="showLadingBill=true" :disabled="!order.tidanNo">查看提货单</el-button>
<el-button :disabled="true" type="text">装箱单未上传</el-button>
<el-button :disabled="!order.packingListUrl" type="text" @click="downloadPackingList">装箱单</el-button>
</el-tab-pane>
<el-tab-pane label="费用明细" name="four">
<el-table :data="feeList">
<el-table-column label="订单号" prop="orderNo"></el-table-column>
<el-table-column label="运输方式">
<dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="order.transportId" />
</el-table-column>
<el-table-column label="出货渠道">
{{channelName}}
</el-table-column>
<el-table-column label="始发地" prop="orderNo">
{{departure.titleZh || '-'}}
</el-table-column>
<el-table-column label="目的地">
{{objective.titleZh || '-'}}
</el-table-column>
<el-table-column label="品名" prop="titleZh"></el-table-column>
<el-table-column label="箱数" prop="num"></el-table-column>
<el-table-column label="体积/重量">
<template slot-scope="{row}">
{{row.volume}} / {{row.weight}}
</template>
</el-table-column>
<el-table-column label="收款类型">
<template slot-scope="{row}">
<dict-tag :type="DICT_TYPE.PAYMENT_TYPE" :value="row.collectionType" />
</template>
</el-table-column>
<el-table-column label="收入类型">
<template slot-scope="{row}">
<dict-tag :type="DICT_TYPE.FEE_TYPE" :value="row.feeType" />
</template>
</el-table-column>
<el-table-column label="单价金额" prop="unitPrice"></el-table-column>
<el-table-column label="总金额" prop="totalAmount"></el-table-column>
</el-table>
</el-tab-pane>
</el-tabs>
</el-card>
......@@ -152,6 +185,8 @@ import PrintWarehouseReceipt from './components/PrintWarehouseReceipt'
import PrintLadingBill from './components/PrintLadingBill'
import {getUnitList} from '@/api/ecw/unit'
import {getCurrencyList} from '@/api/ecw/currency'
import {getReceivableListByOrderId} from '@/api/ecw/receipt'
import { getChannel } from '@/api/ecw/channel';
export default {
name: "detail",
......@@ -184,7 +219,9 @@ export default {
showWarehouseReceipt: false, // 是否显示打印入仓单
showLadingBill: false, // 是否显示打印提单
currencyList: [],
unitList:[]
unitList:[],
feeList: [],
channelName: '/'
}
},
computed:{
......@@ -202,12 +239,27 @@ export default {
})
return map
},
objective(){
if(this.order && this.order.objectiveVO){
return JSON.parse(this.order.objectiveVO.objective)
}
return {}
},
departure(){
if(this.order && this.order.departureVO){
return JSON.parse(this.order.departureVO.departure)
}
return {}
}
},
watch:{
activeName(){
if(!this.feeList.length){
activeName(val){
if(!this.feeList.length && val == 'four'){
this.loadFeeList()
}
},
'order.channelId'(){
this.getChannel()
}
},
created() {
......@@ -229,8 +281,19 @@ export default {
that.order = response.data;
});
},
getChannel(){
if(!this.order || !this.order.channelId) return
getChannel(this.order.channelId).then(res => {
this.channelName = res.data.nameZh
})
},
loadFeeList(){
// TODO 暂无接口
getReceivableListByOrderId({id: this.orderId}).then(res => {
this.feeList = res.data
})
},
downloadPackingList(){
window.open(this.order.packingListUrl)
}
}
};
......
......@@ -98,8 +98,8 @@
<el-card class="mt-10">
<div slot="header" class="card-title">
<div class="card-name">商品信息</div>
<el-button type="primary" size="mini" @click="addProduct(null)">添加货物</el-button>
<!-- <el-button type="primary" size="mini" @click="showBatchImportDialog=true">批量添加货物</el-button> -->
<el-button type="primary" size="mini" @click="addProduct(null)" :disabled="!form.lineId">添加货物</el-button>
<el-button type="primary" size="mini" @click="showBatchImportDialog=true" :disabled="!form.lineId">批量添加货物</el-button>
</div>
<el-table :data="productList" border>
<el-table-column label="序号" width="60px" fixed>
......@@ -336,13 +336,16 @@
</el-descriptions-item>
<el-descriptions-item label="收货地区" :span="2" v-if="homeDeliveryService">
<area-selector
:country="form.consigneeVO ? form.consigneeVO.country : undefined"
:province="form.consigneeVO ? form.consigneeVO.province : undefined"
:city="form.consigneeVO ? form.consigneeVO.city : undefined"
@countryChange="onAreaChange('country', $event)"
@provinceChange="onAreaChange('province', $event)"
@cityChange="onAreaChange('city', $event)"
></area-selector>
</el-descriptions-item>
<el-descriptions-item label="收货详细地址" :span="2" v-if="homeDeliveryService">
<el-form-item label="" label-width="0" style="margin-bottom: 0" prop="consigneeAddress" required error="收货详细地址不能为空">
<el-form-item label="" label-width="0" style="margin-bottom: 0" prop="consigneeAddress">
<el-input v-model="form.consigneeAddress" placeholder=""></el-input>
</el-form-item>
</el-descriptions-item>
......@@ -412,31 +415,35 @@
</el-form>
<el-dialog title="批量导入" :visible.sync="showBatchImportDialog" width="1000px" :close-on-click-modal="false">
<el-steps :active="importData.length > 0 ? 1 : 0" finish-status="success" class="w-500" style="margin: 20px auto">
<el-steps :active="importList.length > 0 ? 1 : 0" finish-status="success" class="w-500" style="margin: 20px auto">
<el-step title="上传集装箱"></el-step>
<el-step title="开始导入"></el-step>
<el-step title="完成"></el-step>
</el-steps>
<div class="mt-20">
<el-input type="file" @input="onFileChoosed" class="w-200 mr-10"></el-input>
<el-button type="info" @click="downloadTpl">装箱单模板</el-button>
<el-upload :http-request="upload" :show-file-list="false" action="" class="mr-10" style="display:inline-block; ">
<el-button size="small" type="primary">点击上传</el-button>
</el-upload>
<el-button type="info" @click="downloadTpl" size="small" :loading="exportLoading">装箱单模板</el-button>
</div>
<el-table :data="importData" class="mt-10" height="300">
<el-table-column label="序号"></el-table-column>
<el-table-column label="产品名称"></el-table-column>
<el-table-column label="英文名称"></el-table-column>
<el-table-column label="品牌"></el-table-column>
<el-table-column label="箱数"></el-table-column>
<el-table-column label="重量"></el-table-column>
<el-table-column label="体积"></el-table-column>
<el-table-column label="有无单证"></el-table-column>
<el-table-column label="缺货箱数"></el-table-column>
<el-table-column label="数量"></el-table-column>
<el-table-column label="材质"></el-table-column>
<el-table :data="importList" class="mt-10" height="300">
<el-table-column label="序号">
<template slot-scope="scope">{{scope.$index + 1}}</template>
</el-table-column>
<el-table-column label="中文品名" prop="prodTitleZh"></el-table-column>
<el-table-column label="英文品名" prop="prodTitleEn"></el-table-column>
<el-table-column label="品牌" prop="brand"></el-table-column>
<el-table-column label="件数" prop="num"></el-table-column>
<el-table-column label="重量(kg)" prop="weight"></el-table-column>
<el-table-column label="体积(m³)" prop="volume"></el-table-column>
<!-- <el-table-column label="有无单证" prop="">// TODO</el-table-column> -->
<!-- <el-table-column label="缺货箱数" prop="lessNum"></el-table-column> -->
<el-table-column label="数量" prop="quantity"></el-table-column>
<el-table-column label="材质" prop="material"></el-table-column>
</el-table>
<div class="mt-10 center">
<el-button type="primary">下一步</el-button>
<el-button type="primary" @click="addToProductList">下一步</el-button>
<el-button type="default" @click="showBatchImportDialog=false">取消</el-button>
</div>
</el-dialog>
......@@ -444,7 +451,7 @@
</template>
<script>
import { createOrder, updateOrder, getOrder, getProductFeeList, getOrderDetail, getOrderCourierNumber } from "@/api/ecw/order";
import { createOrder, updateOrder, getOrder, getProductFeeList, getOrderDetail, getOrderCourierNumber, orderImport, exportPackingList } from "@/api/ecw/order";
import ProductSelector from '@/components/ProductSelector'
import {getProductAttrList} from '@/api/ecw/productAttr'
import {getChannelList} from '@/api/ecw/channel'
......@@ -459,13 +466,12 @@ import { getCustomer } from '@/api/ecw/customer';
import AreaSelector from '@/components/AreaSelector'
import {calculationPrice} from '@/api/ecw/product'
import {getCustomerAvailableCouponList} from '@/api/ecw/coupon'
import * as xlsx from 'xlsx'
import FileUpload from '@/components/FileUpload'
window.xlsx = xlsx
export default {
name: "OrderEdit",
components: {
ProductSelector, Selector, CustomerContactSelector, AreaSelector
ProductSelector, Selector, CustomerContactSelector, AreaSelector, FileUpload
},
data() {
return {
......@@ -495,7 +501,6 @@ export default {
sendstatus:0,
isCargoControl: false,
type:[]
},
// 表单校验
rules: {
......@@ -508,10 +513,12 @@ export default {
lineId : [{required: true, message: '请选择路线'}],
channelId : [{required: true, message: '请选择出货渠道'}],
deliveryDate : [{required: true, message: '请选择送货日期'}],
consigneeAddress : [{required: true, message: '请填写详细地址'}]
},
labelStyle: 'width:120px',
showBatchImportDialog: false, // 显示批量导入弹窗
importData:[]
importList:[],
exportLoading: false, // 装下单模板下载状态
};
},
computed:{
......@@ -620,9 +627,9 @@ export default {
},
'form.lineId'(lineId){
let router = this.routerList.find(item => item.id == lineId)
if(!router) return
this.$set(this.form, 'departureId', router.startCityId)
this.$set(this.form, 'objectiveId', router.destCityId)
// TODO 还需要回填渠道信息,暂时缺少渠道ID
},
/* // 发货联系人发生变化获取发货客户
consignorContact(){
......@@ -679,8 +686,38 @@ export default {
})
},
methods: {
upload(e){
console.log({upload: e})
let form = new FormData()
form.append('file', e.file)
orderImport(form).then(res => {
this.importList = res.data.list
this.$set(this.form, 'packingListUrl', res.data.packingListUrl)
})
},
addToProductList(){
console.log('addToProductList')
this.importList.forEach(item => {
this.productList.push({
prodId: item.prodId,
brand: item.brandType,
num: item.num,
quantity: item.quantity,
volume: item.volume,
weight: item.weight,
prodAttrArr:[]
})
})
// 重置
this.importList = []
this.showBatchImportDialog = false
},
downloadTpl(){
window.open('http://v4.groupage.cn/Download/%E8%A3%85%E7%AE%B1%E5%8D%95%E6%A8%A1%E6%9D%BF.xls')
this.exportLoading = true;
exportPackingList().then(response => {
this.$download.excel(response, '装箱单模板.xls');
this.exportLoading = false;
}).catch(() => { });
},
setLink(row){
this.$prompt('请输入商品链接', {inputValue: row.link}).then(({value}) => {
......
......@@ -8,7 +8,14 @@
</el-row>
<el-row>
<ueditor />
<el-col :span="12">
<ueditor v-model="html" />
</el-col>
<el-col :span="12">
<div v-html="html"></div>
<div class="">下面是通过watch更新</div>
<div v-html="watchHtml"></div>
</el-col>
</el-row>
<el-card style="margin:20px 0">
<div slot="header">测试审批抄送</div>
......@@ -37,9 +44,6 @@
</el-col>
</el-row>
</div>
</template>
......@@ -93,6 +97,13 @@ export default {
bpmnControlForm: {
prefix: "activiti"
},
html: "默认内容",
watchHtml: ''
}
},
watch:{
html(val){
this.watchHtml = val
}
},
created() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment