Commit bba4cf02 authored by dragondean@qq.com's avatar dragondean@qq.com
parents edc4d1cd 3b15b096
......@@ -58,6 +58,24 @@ export function createCost(data) {
return request({
url: '/ecw/box-cost/create',
method: 'post',
data: data
data
})
}
// 审核详情
export function approvalDetail(data) {
return request({
url: '/ecw/box-approval/approvalDetail',
method: 'post',
headers: { "Content-Type": "application/x-www-form-urlencoded" },
data: jsonToFormData(data),
})
}
function jsonToFormData(params) {
const formData = new FormData();
for (const [key, value] of Object.entries(params)) {
formData.append(key, value);
}
return formData;
}
......@@ -367,7 +367,7 @@ export function secGoodsList(params) {
}
/**
* 获得订单预装分页
* 获得预装分页
*
* @export
* @param {*} params
......@@ -375,7 +375,7 @@ export function secGoodsList(params) {
*/
export function preloadPage(params) {
return request({
url: "/ecw/order/preloadPage",
url: "/ecw/box-preload-goods/preloadPage",
method: "get",
params,
});
......@@ -385,7 +385,7 @@ export function preloadPage(params) {
* 创建预装部分
*
* @export
* @param {*} params
* @param {*} data
* @return {*}
*/
export function createSection(data) {
......@@ -400,7 +400,7 @@ export function createSection(data) {
* 删除预装部分
*
* @export
* @param {*} params
* @param {*} id
* @return {*}
*/
export function deleteSection(id) {
......@@ -414,7 +414,7 @@ export function deleteSection(id) {
* 删除预装货物
*
* @export
* @param {*} params
* @param {*} id
* @return {*}
*/
export function deleteGoods(id) {
......@@ -428,7 +428,7 @@ export function deleteGoods(id) {
* 预装
*
* @export
* @param {*} params
* @param {*} data
* @return {*}
*/
export function createGoods(data) {
......@@ -542,7 +542,7 @@ export function boxUpdate(data) {
* 获取卸柜数据
*
* @export
* @param {*} data
* @param {*} params
* @return {*}
*/
export function loadGoodsList(params) {
......@@ -600,6 +600,70 @@ export function createError(data) {
/***************************** 卸柜 end **********************************/
/***************************** 报关费用 start **********************************/
/**
* 搜索出货单下的订单
*
* @export
* @param {*} data
* @return {*}
*/
export function extraCostOrder(data) {
return request({
url: "/ecw/box-customs-extra-cost/searchByOrderNo",
method: "post",
data,
});
}
/**
* 创建额外报关费用
*
* @export
* @param {*} data
* @return {*}
*/
export function extraCostCreate(data) {
return request({
url: "/ecw/box-customs-extra-cost/create",
method: "post",
data,
});
}
/**
* 更新额外报关费用
*
* @export
* @param {*} data
* @return {*}
*/
export function extraCostUpdate(data) {
return request({
url: "/ecw/box-customs-extra-cost/update",
method: "put",
data,
});
}
/**
* 获得额外报关费用列表
*
* @export
* @param {*} data
* @return {*}
*/
export function extraCostList(params) {
return request({
url: "/ecw/box-customs-extra-cost/list",
method: "get",
params,
});
}
/***************************** 报关费用 end **********************************/
/**
* 服务提示消息回调
*
......
import request from '@/utils/request'
// 创建收款单
export function createReceipt(data) {
return request({
url: '/ecw/receipt/create',
method: 'post',
data: data
})
}
// 获取应收款列表
export function getReceivableList(query) {
return request({
url: '/ecw/receivable/page',
method: 'get',
params: query
})
}
// 根据获取应收款列表
// export function getReceivableListByIds(query) {
// return request({
// url: '/ecw/receivable/list',
// method: 'get',
// params: query
// })
// }
// 更新应付款
export function updatePayable(data) {
return request({
url: '/ecw/payable/update',
method: 'put',
data: data
})
}
// 删除应付款
export function deletePayable(id) {
return request({
url: '/ecw/payable/delete?id=' + id,
method: 'delete'
})
}
// 获取应付款列表
export function getPayableList(query) {
return request({
url: '/ecw/payable/page',
method: 'get',
params: query
})
}
// 获取应付款详情
export function getPayableInfoByIds(query) {
return request({
url: '/ecw/payable/get',
method: 'get',
params: query
})
}
// 创建付款单
export function createPayment(data) {
return request({
url: '/ecw/payment/create',
method: 'post',
data: data
})
}
// 获取付款单列表
export function getPaymentList(query) {
return request({
url: '/ecw/payment/page',
method: 'get',
params: query
})
}
\ No newline at end of file
......@@ -75,3 +75,11 @@ export function handlerExceptionByExceptionId(data){
data: data
})
}
// 根据商品ID获取商品详情
export function getOrderItemById(id) {
return request({
url: '/ecw/order-exception/getOrderItemById?id=' + id,
method: 'get'
})
}
......@@ -125,5 +125,13 @@ export function deptList(data) {
})
}
/** 修改其他服务 */
export function serviceConfig(data) {
return request({
url: '/ecw/warehouse/serviceConfig',
method: 'post',
data: data
})
}
This diff is collapsed.
......@@ -61,14 +61,14 @@ export default {
type: Boolean,
default: false
},
value: String
value: Array,
orderId: Number
},
data() {
return {
opened: false,
orderId: '',
area: [],
activeName: '0',
selectedWarehouse: [],
......@@ -94,7 +94,7 @@ export default {
methods: {
handleSubmit() {
this.$emit('input', this.selected.join(','))
this.$emit('input', this.inputValue)
this.opened = false
},
handleClose() {},
......@@ -106,7 +106,7 @@ export default {
warehouse.selected = true
// 区域被选,清空该区域下的位置
warehouse.positionList.forEach(g => {
if(warehouse.positionList) warehouse.positionList.forEach(g => {
g.children.forEach(k => {
k.selected = false
})
......@@ -154,7 +154,7 @@ export default {
e.children.forEach(f => {
// 区域
f.selected = false
f.positionList.forEach(g => {
if(f.positionList) f.positionList.forEach(g => {
// 位置
g.children.forEach(k => {
// 子位置
......@@ -168,6 +168,7 @@ export default {
},
computed: {
// code array
selected() {
const result = []
......@@ -176,17 +177,52 @@ export default {
e.children.forEach(f => {
// 区域
if (f.selected) result.push(f.code)
f.positionList.forEach(g => {
else if(f.positionList) f.positionList.forEach(g => {
// 位置
if (g.selected) result.push(k.code)
g.children.forEach(k => {
// 子位置
if (k.selected) result.push(k.code)
})
})
})
})
return result
},
inputValue(){
const result = []
this.area.forEach(e => {
// 仓库
e.children.forEach(f => {
// 区域
if (f.selected) result.push({
orderId: this.orderId,
wareId: f.pid,
areaId: f.id
})
else if(f.positionList) f.positionList.forEach(g => {
// 位置
if (g.selected) result.push({
orderId: this.orderId,
wareId: g.domainId,
areaId: g.areaId,
locationId: g.id
})
else g.children.forEach(k => {
// 子位置
if (k.selected) result.push({
orderId: this.orderId,
wareId: k.domainId,
areaId: k.areaId,
locationId: k.id
})
})
})
})
})
return result
}
}
......
......@@ -149,6 +149,22 @@ export const DICT_TYPE = {
ORDER_EXCEPTION_STATUS:'order_exception_status',//异常订单状态
PAYMENT_TYPE:'payment_type',//收款类型
ORDER_WAREHOUSE_IN_STATUS: 'order_warehouse_in_status', // 入仓状态
ORDER_NO_QUOTE_EXCEPTION_RESULT:'order_no_quote_exception_result',//未报价异常处理结果
ORDER_SUPERFLUOUS_BOX_EXCEPTION_RESULT:'order_superfluous_box_exception_result',//多箱异常处理结果
ORDER_LACI_BOX_EXCEPTION_RESULT:'order_lack_box_exception_result',//少箱异常处理结果
ORDER_PAY_EXCEPTION_RESULT:'order_pay_exception_result',//预付异常处理结果
ORDER_MISS_EXCEPTION_RESULT:'order_miss_exception_result',//货物丢失异常处理结果
ORDER_SUPERFLUOUS_GOODS_EXCEPTION_RESULT:'order_superfluous_goods_exception_result',//货物增多异常处理结果
ORDER_DAMAGE_EXCEPTION_RESULT:'order_damage_exception_result',//货物破损异常处理结果
ORDER_IN_WATER_EXCEPTION_RESULT:'order_in_water_exception_result',//货物浸水异常处理结果
ORDER_HEAVY_CARGO_EXCEPTION_RESULT:'order_heavy_cargo_exception_result',//重货异常处理结果
ORDER_DOC_EXCEPTION_RESULT:'order_doc_exception_result',//单证异常处理结果
ORDER_CONSIGNOR_EXCEPTION_RESULT:'order_consignor_exception_result',//发货人异常处理结果
ORDER_COD_EXCEPTION_RESULT:'order_cod_exception_result',//代收货款异常处理结果
ORDER_OTHER_EXCEPTION_RESULT:'order_other_exception_result',//其它异常处理结果
ORDER_BULKY_CARGO_EXCEPTION_RESULT:'order_bulky_cargo_exception_result',//泡货异常处理结果
PAYMENT_TYPE:'payment_type',//收款类型
ECASH_INIT:'ecash_init', //e-cash
FEE_TYPE:'receivable_fee_type',
......@@ -167,6 +183,7 @@ export const DICT_TYPE = {
BOX_SHIPPING_PRICE_UNIT: 'shipping_price_unit', // 金额单位
BOX_SHIPPING_TICKET_EXCEPTION: 'shipping_ticket_exception', // 票异常
BOX_SHIPPING_PROCESS: 'shipping_process', // 海运出货流程
BOX_SHIPPING_BRAND_TYPE: 'shipping_brand_type', // 出货品牌类型
}
/**
......
......@@ -145,6 +145,7 @@ import {listSimpleUsers} from "@/api/system/user";
import {getActivityList} from "@/api/bpm/activity";
import specialDiscount from "@/views/ecw/offer/specialDiscount"
import warehouseDetails from "@/views/ecw/order/components/warehouseDetails";
import shippingDetail from '@/views/ecw/box/shippingDetail'
// 流程实例的详情页,可用于审批
export default {
......@@ -152,7 +153,8 @@ export default {
components: {
Parser,
specialDiscount,
warehouseDetails
warehouseDetails,
shippingDetail
},
computed:{
matterNum(){
......
<template>
<div class="app-approvalShipping">
<h1>申请信息【出货信息】</h1>
<el-descriptions :column="6" border>
<el-descriptions-item label="自编号">{{boxBackVO.selfNo}}</el-descriptions-item>
<el-descriptions-item label="运输方式">
<dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="boxBackVO.transportType" />
</el-descriptions-item>
<el-descriptions-item label="出货渠道">
{{getShipChannelName(boxBackVO.shippingChannelId)}}
</el-descriptions-item>
<el-descriptions-item label="柜型">
{{cabinetLabel}}
</el-descriptions-item>
<el-descriptions-item label="体积/重量">
{{getVolumeWeight(loadDetail.totalStatistics)}}
</el-descriptions-item>
<el-descriptions-item label="货柜状态">
{{getCabinetStatus(boxBackVO)}}
</el-descriptions-item>
</el-descriptions>
<el-row style="marginTop:15px">
<el-button type="primary" @click="showOrder">订单列表</el-button>
</el-row>
<div>
<p>申请原因</p>
<div>
{{boxBackVO.preInstallInfo ? boxBackVO.preInstallInfo.applyReason : ''}}
</div>
</div>
<el-dialog :title="dialogConfig.title" :visible.sync="dialogConfig.visible" fullscreen :modal-append-to-body=false append-to-body>
<el-descriptions :column="6" border>
<el-descriptions-item label="自编号">{{boxBackVO.selfNo}}</el-descriptions-item>
<el-descriptions-item label="运输方式">
<dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="boxBackVO.transportType" />
</el-descriptions-item>
<el-descriptions-item label="出货渠道">
{{getShipChannelName(boxBackVO.shippingChannelId)}}
</el-descriptions-item>
<el-descriptions-item label="柜型">
{{cabinetLabel}}
</el-descriptions-item>
<el-descriptions-item label="体积/重量">
{{getVolumeWeight(loadDetail.totalStatistics)}}
</el-descriptions-item>
<el-descriptions-item label="货柜状态">
{{getCabinetStatus(boxBackVO)}}
</el-descriptions-item>
</el-descriptions>
<el-row style="marginTop:15px">
<el-table :data="loadDetail.sectionOrderList" border>
<el-table-column prop="sectionName" label="部分" align="center"></el-table-column>
<el-table-column prop="orderNo" label="订单号" align="center">
<template v-slot="{row}">
<el-button type="text" @click="jumpOrderDetail(row)">{{row.orderNo}}</el-button>
</template>
</el-table-column>
<el-table-column label="货物信息" align="center" width="500px">
<template v-slot="{row}">
<section class="table-goodList">
<div v-for="(item, index) in row.goodsList" :key="index" class="goodList-div">
{{index+1}}{{item.prodTitleZh}}
</div>
</section>
</template>
</el-table-column>
<el-table-column label="入仓货物属性" align="center">
<template v-slot="{row}">
<section class="table-goodList">
<div>合计:{{calcSum(row.goodsList)}}</div>
<div v-for="(item, index) in row.goodsList" :key="index" class="goodList-div">
{{item.volume}}{{item.weight}}kg
</div>
</section>
</template>
</el-table-column>
<el-table-column prop="installNum" label="实装箱数" align="center"></el-table-column>
<el-table-column prop="volume" label="体积m³" align="center"></el-table-column>
<el-table-column prop="weight" label="重量" align="center"></el-table-column>
<el-table-column prop="unloadNum" label="卸柜箱数" align="center" v-if="isShowColumn(boxBackVO)"></el-table-column>
</el-table>
</el-row>
</el-dialog>
</div>
</template>
<script>
import { approvalDetail } from "@/api/ecw/box";
import { getSeaStatus, getStatusName } from "./shippingSea/utils";
import { getCabinetPage } from "@/api/ecw/cabinet";
import { getChannelList } from "@/api/ecw/channel";
/**
* 出货审核详情
*/
export default {
name: "shippingDetail",
props: {
processId: {
type: [Number, String],
},
},
data() {
return {
boxBackVO: {},
loadDetail: {},
// 柜型
cabinetLabel: "",
//渠道
channelList: [],
// 弹出配置
dialogConfig: {
title: "",
visible: false,
},
};
},
created() {
getChannelList().then((res) => (this.channelList = res.data));
},
methods: {
/* 获取详情 */
getApprovalDetail(processId) {
approvalDetail({ approvalId: processId }).then((res) => {
this.boxBackVO = res.data.boxBackVO;
this.loadDetail = res.data.loadDetail;
});
},
/* 获取柜型 */
getCabinetLabel(cabinetId) {
getCabinetPage(null).then((response) => {
const cabinetList = response.data.list;
for (const cabinetItem of cabinetList) {
if (cabinetItem.id == cabinetId) {
this.cabinetLabel = cabinetItem.name;
break;
}
}
});
},
/* 打开订单列表 */
showOrder() {
this.$set(this.dialogConfig, "title", `${this.boxBackVO.selfNo} 订单列表`);
this.$set(this.dialogConfig, "visible", true);
},
/* 合计 */
calcSum(goodsList) {
let sum = 0;
goodsList.forEach((element) => {
sum = sum + element.num;
});
return sum;
},
/* 跳转订单详情 */
jumpOrderDetail(row) {
this.$router.push("/order/associated-order/" + row.orderId);
},
},
watch: {
processId(val) {
this.getApprovalDetail(val);
},
boxBackVO(val) {
// 柜型
this.getCabinetLabel(val.cabinetId);
},
},
computed: {
/* 渠道 */
getShipChannelName() {
return (shippingChannelId) => {
for (const channelItem of this.channelList) {
if (channelItem.channelId == shippingChannelId) {
return channelItem.nameZh;
}
return "/";
}
};
},
/* 货柜状态 */
getCabinetStatus() {
return (shippingVO) => {
return getStatusName(getSeaStatus(shippingVO));
};
},
/* 体积重量 */
getVolumeWeight() {
return (total) => {
return `${total?.num ?? 0} ${total?.volume ?? 0}m³ ${
total?.weight ?? 0
}kg`;
};
},
/* 是否显示卸柜箱数 */
isShowColumn() {
return (shippingVO) => {
return getSeaStatus(shippingVO) >= 142 ? true : false;
};
},
},
};
</script>
<style lang="scss" scoped>
</style>
......@@ -30,7 +30,7 @@
<el-button type="primary" @click="onSubmit(1)">保存</el-button>
<el-button type="success" @click="onSubmit(2)">封柜</el-button>
<el-button @click="cancel">关闭</el-button>
<el-button type="danger" @click="startCabinet">开始装柜</el-button>
<el-button type="danger" @click="startCabinet" :disabled="isStartCabinet">开始装柜</el-button>
</el-row>
</div>
</template>
......@@ -104,6 +104,13 @@ export default {
this.dialogVisible = true;
},
},
computed: {
isStartCabinet() {
const { currNode, shipmentObj } = this.$attrs;
const status = shipmentObj[currNode.keyName];
return status === 46 ? true : false;
},
},
};
</script>
......
......@@ -120,14 +120,10 @@
<el-dialog custom-class="shipping-dialog" :title="dialogConfig.title" :visible.sync="dialogConfig.dialogVisible" :fullscreen="dialogConfig.fullscreen" :width="dialogConfig.width" :modal-append-to-body=false append-to-body>
<!-- 已装未装订单 -->
<template v-if="dialogConfig.type === 'orderTable'">
<div style="display: flex;">
<el-table :data="orderList.loadList">
<el-table :data="orderList" border>
<el-table-column label="已装" align="center" prop="loadTag" />
</el-table>
<el-table :data="orderList.unLoadList">
<el-table-column label="未装" align="center" prop="unloadTag" />
</el-table>
</div>
</template>
<!-- 补单 -->
<supplementOrder v-if="dialogConfig.type === 'supplementOrder' && dialogConfig.dialogVisible" v-bind="$attrs" :shipmentObj="shipmentObj" @supplementFinish="supplementFinish" />
......@@ -240,7 +236,7 @@ export default {
fullscreen: false,
},
// 已装/未装
orderList: {},
orderList: [],
// 柜型
cabinetList: [],
// 二维码/条码编号
......@@ -295,14 +291,20 @@ export default {
orderClick(row) {
orderTagList({ orderId: row.orderId }).then((res) => {
const { data = [] } = res;
this.orderList = {
loadList: data.loadList.map((item) => ({
loadTag: item,
})),
unLoadList: data.unLoadList.map((item) => ({
unloadTag: item,
})),
};
this.orderList = [];
// 取最长的list
let dataLength = data.loadList.length;
if (data.unLoadList.length > dataLength) {
dataLength = data.unLoadList.length;
}
// 组装数据,用一个table组件渲染
for (let index = 0; index < dataLength; index++) {
this.orderList.push({
loadTag: data.loadList[index],
unloadTag: data.unLoadList[index],
});
}
});
this.shwoDialog({
type: "orderTable",
......
......@@ -43,7 +43,7 @@
<el-row class="right-title">
<div>货物筛选</div>
<div>当前装柜:{{partData.title}}</div>
<div>可预装方数:无返回m³,重量:无返回Kg</div>
<div>可预装方数:{{unloadStatistics.volume}}m³,重量:{{unloadStatistics.weight}}Kg</div>
</el-row>
<!-- 搜索工作栏 -->
......@@ -76,7 +76,7 @@
<div>
<dict-tag :type="DICT_TYPE.ECW_CUSTOMS_TYPE" :value="item.customsType" />
</div>
<div>入仓时间:{{item.rucangtime}}</div>
<div>入仓时间:{{formatDate(item.rucangTime)}}</div>
<div>
<el-button type="text" @click="handleGoods('all', item)">[全部预装]</el-button>
<el-button type="text" @click="foldTable(index, item)">[{{item.fold ? '展开' : '收起'}}]</el-button>
......@@ -84,12 +84,12 @@
</el-row>
<el-collapse-transition>
<div v-show="!item.fold">
<el-table v-loading="loading" :data="item.orderItemList" border>
<el-table v-loading="loading" :data="item.boxOrderItemList" border>
<el-table-column label="序号" type="index" align="center" width="50" />
<el-table-column label="品名" align="center" prop="prodTitleZh" min-width="500" />
<el-table-column label="品牌" align="center" prop="brandType" width="120">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.PRODUCT_RECORD_ATTRIBUTE" :value="scope.row.brandType" />
<dict-tag :type="DICT_TYPE.BOX_SHIPPING_BRAND_TYPE" :value="scope.row.brandType" />
</template>
</el-table-column>
<el-table-column label="箱数" align="center" prop="num" width="120" />
......@@ -103,7 +103,9 @@
<p v-if="scope.row.weight">{{scope.row.weight}}kg</p>
</template>
</el-table-column>
<el-table-column label="预装柜" align="center" prop="weight" width="120" />
<el-table-column label="预装柜" align="center" prop="" width="120">
无返回
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="100">
<template slot-scope="scope">
<el-button type="text" size="small" @click="handleGoods('singele',scope.row)">预装</el-button>
......@@ -125,11 +127,11 @@
<el-col :span="6" class="totle-info">
<div>
<p>总计:</p>
<p>111</p>
<p>无返回</p>
</div>
<div>
<p>容量:</p>
<p>111</p>
<p>无返回</p>
</div>
</el-col>
</el-row>
......@@ -149,6 +151,7 @@ import {
createGoods,
remove,
} from "@/api/ecw/boxSea";
import { formatDate } from "../../utils";
/**
* 补单
*/
......@@ -174,6 +177,7 @@ export default {
toBePreList: [],
total: 0,
loading: false,
unloadStatistics: {},
};
},
created() {
......@@ -211,8 +215,10 @@ export default {
...this.queryParams,
};
preloadPage({ ...params, ...this.pageParam }).then((res) => {
this.toBePreList = res.data.list;
this.total = res.data.total;
const { data } = res;
this.toBePreList = data.dataList?.list ?? [];
this.total = data.dataList?.total ?? 0;
this.unloadStatistics = data.unloadStatistics ?? {};
this.loading = false;
});
},
......@@ -317,6 +323,7 @@ export default {
})
.catch((_) => {});
},
formatDate,
},
computed: {
/** 目的地 */
......
<template>
<div>
<el-form ref="cusDeclarationForm" :rules="rules" :model="cusDeclarationObj" label-width="120px">
<el-form-item label="单证要求">我司全代 <el-button type="primary" style="margin-left:10px;" @click="downloadVGM">VGM声明</el-button>
<el-form-item label="单证要求">无返回 <el-button type="primary" style="margin-left:10px;" @click="downloadVGM">VGM声明</el-button>
</el-form-item>
<el-form-item label="柜重" prop="dcBoxWgt">
<el-input v-model="cusDeclarationObj.dcBoxWgt" placeholder="请输入柜重" clearable />
......@@ -70,31 +70,31 @@
<el-button type="primary" @click="onSubmit(1)">保存</el-button>
<el-button type="success" @click="onSubmit(2)">提交</el-button>
<el-button @click="cancel">关闭</el-button>
<el-button type="primary" @click="extraCost">额外费用</el-button>
<el-button type="primary" @click="extraCost" v-show="cusDeclarationObj.dcCustomsStatus === '2' || cusDeclarationObj.dcCustomsStatus === '3'">额外费用</el-button>
</el-row>
<!-- 对话框 -->
<el-dialog custom-class="shipping-dialog customsClearance" :title="dialogConfig.title" :visible.sync="dialogConfig.dialogVisible" width="700px" :modal-append-to-body=false append-to-body destroy-on-close>
<el-dialog custom-class="shipping-dialog customsClearance" :title="dialogConfig.title" :visible.sync="dialogConfig.dialogVisible" width="700px" :modal-append-to-body=false append-to-body>
<el-row>
<el-row>
<el-form label-width="100px">
<el-form-item label="订单号" class="two-element">
<el-input v-model="orderNo" placeholder="请输入订单号" clearable />
<el-button type="primary" icon="el-icon-search"></el-button>
<el-button type="primary" icon="el-icon-search" @click="searchOrder"></el-button>
</el-form-item>
</el-form>
</el-row>
<el-row>
<el-table :data="[{}]">
<el-table-column label="订单号" align="center" prop="selfNo" />
<el-table-column label="报关费用" align="center" prop="orderFees">
<el-table :data="costOrderList">
<el-table-column label="订单号" align="center" prop="orderNo" />
<el-table-column label="报关费用" align="center" prop="fee">
<template slot-scope="scope">
<el-input v-model="scope.row.orderFees" placeholder="请输入内容" />
<el-input-number v-model="scope.row.fee" controls-position="right" :min="1"></el-input-number>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button type="primary" size="small">确定</el-button>
<el-button type="primary" size="small" @click="createExtraCost(scope.row)">确定</el-button>
</template>
</el-table-column>
</el-table>
......@@ -102,22 +102,22 @@
<el-row class="cost-title">
<div>额外费用订单</div>
<div>
<el-button size="small">重置</el-button>
<el-button size="small" @click="restCostList()">重置</el-button>
</div>
</el-row>
<el-row>
<el-table :data="[{}]">
<el-table :data="costList">
<el-table-column type="selection" width="55" />
<el-table-column label="订单号" align="center" prop="selfNo" />
<el-table-column label="报关费用" align="center" prop="customsFees">
<el-table-column label="订单号" align="center" prop="orderNo" />
<el-table-column label="报关费用" align="center" prop="fee" width="220px">
<template slot-scope="scope">
<el-input v-model="scope.row.customsFees" placeholder="请输入内容" />
<el-input-number v-model="scope.row.fee" controls-position="right" :min="1"></el-input-number>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button type="primary" size="small">修改</el-button>
<el-button size="small">重置</el-button>
<el-button type="primary" size="small" @click="updateExtraCost(scope.row)">修改</el-button>
<el-button size="small" @click="restCostList(scope.row)">重置</el-button>
</template>
</el-table-column>
</el-table>
......@@ -129,7 +129,15 @@
<script>
import supplierSelect from "./common/supplierSelect.vue";
import { customsCreate, serviceMsg } from "@/api/ecw/boxSea";
import {
customsCreate,
serviceMsg,
extraCostList,
extraCostOrder,
extraCostCreate,
extraCostUpdate,
approvalCreate,
} from "@/api/ecw/boxSea";
import { formatNumberString, formatDateStr } from "../utils";
import ImageUpload from "@/components/ImageUpload";
......@@ -157,6 +165,10 @@ export default {
},
// 订单号
orderNo: "",
// 订单列表
costOrderList: [],
// 额外费用列表
costList: [],
};
},
created() {
......@@ -184,11 +196,105 @@ export default {
shipmentId: this.$attrs.shipmentObj.id,
operateType,
}).then((res) => {
// 查验
const { dcCustomsStatus, dcCheckStatus } = this.cusDeclarationObj;
if (dcCustomsStatus === "3") {
// 退场/部分退场
if (["1", "2"].includes(dcCheckStatus)) {
approvalCreate({
approvalStatus: 0,
approvalType: dcCheckStatus === "1" ? 5 : 6, // 5报关全退,6报关部分退
shipmentId: this.$attrs.shipmentObj.id,
}).then((res) => {
serviceMsg(res, this).then(() => {
this.cancel("submit");
});
});
}
} else {
serviceMsg(res, this).then(() => {
this.cancel("submit");
});
}
});
}
});
},
/* 查询订单号 */
searchOrder() {
if (!this.orderNo) {
this.$message.error("请输入订单号");
return;
}
extraCostOrder({
shipmentId: this.$attrs.shipmentObj.id,
orderNo: this.orderNo,
}).then((res) => {
this.costOrderList = [
{
orderNo: this.orderNo,
orderId: res.data,
},
];
this.searchCostList(res.data);
});
},
/* 查询额外费用订单 */
searchCostList(orderId) {
extraCostList({
shipmentId: this.$attrs.shipmentObj.id,
orderId: orderId,
}).then((res) => {
this.costList = res.data.map((item) => {
return { originalFee: item.fee, ...item };
});
});
},
/* 创建额外费用 */
createExtraCost(row) {
if (!row.fee) {
this.$message.error("请输入费用");
return;
}
extraCostCreate({
fee: row.fee,
orderId: row.orderId,
orderNo: row.orderNo,
shipmentId: this.$attrs.shipmentObj.id,
}).then((res) => {
serviceMsg(res, this).then(() => {
this.searchCostList(row.orderId);
});
});
},
/* 修改额外费用 */
updateExtraCost(row) {
if (!row.fee) {
this.$message.error("请输入费用");
return;
}
extraCostUpdate(row).then((res) => {
serviceMsg(res, this).then(() => {
this.searchCostList(row.orderId);
});
});
},
/* 重置 */
restCostList(row) {
this.costList = this.costList.map((item) => {
if (row && row.id === item.id) {
return {
...item,
fee: item.originalFee,
};
}
if (!row) {
return {
...item,
fee: item.originalFee,
};
}
return item;
});
},
/** 取消 */
......@@ -203,7 +309,12 @@ export default {
},
// 额外费用
extraCost() {
this.$set(this.dialogConfig, "title", "自编号");
const { shipmentObj } = this.$attrs;
// 清空额外费用
this.orderNo = "";
this.costOrderList = [];
this.costList = [];
this.$set(this.dialogConfig, "title", `${shipmentObj.selfNo} 报关费用`);
this.$set(this.dialogConfig, "dialogVisible", true);
},
// 计算VGM重量
......
......@@ -31,7 +31,7 @@
</el-select>
</el-form-item>
<el-form-item label="订单号" prop="toBePreOrderNo">
<el-input v-model="queryParams.orderNo" placeholder="请输入订单号码" clearable />
<el-input v-model="queryParams.toBePreOrderNo" placeholder="请输入订单号码" clearable />
</el-form-item>
<el-form-item label="已预装单号" prop="preOrderNo">
<el-input v-model="queryParams.preOrderNo" placeholder="请输入已预装单号" clearable />
......@@ -126,7 +126,7 @@
<el-table-column type="selection" align="center" width="55" fixed="left" />
<el-table-column label="订单号" align="center" prop="orderNo" width="120" />
<el-table-column label="目的地" align="center" prop="destWarehouseName" width="120" />
<el-table-column label="入仓时间" align="center" prop="rucangtime" width="120" />
<el-table-column label="入仓时间" align="center" prop="rucangTime" width="120" />
<el-table-column label="品名" align="center" prop="prodTitleZh" width="120" />
<el-table-column label="箱数" align="center" prop="num" />
<el-table-column label="体积/重量/重货比" align="center" width="140" prop="volumeWeight">
......@@ -142,7 +142,7 @@
</el-table-column>
<el-table-column label="备案" align="center" prop="productRecord" width="100">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.PRODUCT_RECORD_ATTRIBUTE" :value="scope.row.productRecord" />
<dict-tag :type="DICT_TYPE.BOX_SHIPPING_BRAND_TYPE" :value="scope.row.productRecord" />
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="160" class-name="small-padding fixed-width" fixed="right">
......@@ -169,15 +169,15 @@
<div class="preinstall-title preinstalled">
<div class="red-label">
<p>筛选后待预装数量:</p>
<p>无返回</p>
<p>{{unloadStatistics.num}}箱</p>
</div>
<div class="red-label">
<p>方数:</p>
<p>无返回</p>
<p>{{unloadStatistics.volume}}m³</p>
</div>
<div class="red-label">
<p>重量:</p>
<p>无返回</p>
<p>{{unloadStatistics.weight}}kg</p>
</div>
</div>
</el-row>
......@@ -199,7 +199,7 @@
</div>
<div>
<p>入仓时间:</p>
<p>{{item.rucangtime}}</p>
<p>{{formatDate(item.rucangTime)}}</p>
</div>
<div>
<p>重货比:</p>
......@@ -214,12 +214,12 @@
</el-dropdown>
</div>
</el-row>
<el-table v-loading="toBePreLoading" :data="item.orderItemList" border show-summary :summary-method="getSummaries">
<el-table v-loading="toBePreLoading" :data="item.boxOrderItemList" border show-summary :summary-method="getSummaries">
<el-table-column type="index" align="center" label="序号" width="50" />
<el-table-column label="品名" align="center" prop="prodTitleZh" />
<el-table-column label="备案" align="center" prop="brandType">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.PRODUCT_RECORD_ATTRIBUTE" :value="scope.row.brandType" />
<dict-tag :type="DICT_TYPE.BOX_SHIPPING_BRAND_TYPE" :value="scope.row.brandType" />
</template>
</el-table-column>
<el-table-column label="箱数" align="center" prop="num" />
......@@ -229,8 +229,14 @@
<p v-if="scope.row.weight">{{scope.row.weight}}kg</p>
</template>
</el-table-column>
<el-table-column label="报关方式" align="center" prop="" />
<el-table-column label="包装类型" align="center" prop="" />
<el-table-column label="报关方式" align="center" prop="">
<dict-tag :type="DICT_TYPE.ECW_CUSTOMS_TYPE" :value="item.customsType" />
</el-table-column>
<el-table-column label="包装类型" align="center" prop="">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.ECW_PACKAGE_TYPE" :value="scope.row.unit" />
</template>
</el-table-column>
<el-table-column label="材质" align="center" prop="material" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
......@@ -278,6 +284,7 @@ import {
approvalCreate,
} from "@/api/ecw/boxSea";
import userSelect from "./common/userSelect.vue";
import { formatDate } from "../utils";
/**
* 预装
......@@ -309,6 +316,7 @@ export default {
toBePreLoading: false,
toBePreList: [],
total: 0,
unloadStatistics: {},
// 显示搜索条件
showSearch: true,
......@@ -345,6 +353,7 @@ export default {
this.handleQuery("toBePre");
},
methods: {
formatDate,
/* 获取城市 */
importCityName(id) {
var arr = this.$attrs.warehouseList.filter((item) => item.id == id);
......@@ -358,9 +367,10 @@ export default {
getSecGoods() {
this.preLoading = true;
// 处理查询参数
let params = { ...this.queryParams };
let params = this.getParams();
// 已预装单号
params.orderNo = params.preOrderNo;
delete params.preOrderNo;
params.shipmentId = this.shipmentObj.id;
secGoodsList(params).then((res) => {
this.preList = res.data;
......@@ -371,12 +381,15 @@ export default {
getPreLoad() {
this.toBePreLoading = true;
// 处理查询参数
let params = { ...this.queryParams };
let params = this.getParams();
// 订单号
params.orderNo = params.toBePreOrderNo;
delete params.toBePreOrderNo;
preloadPage({ ...params, ...this.pageParam }).then((res) => {
this.toBePreList = res.data.list;
this.total = res.data.total;
const { data } = res;
this.toBePreList = data.dataList?.list ?? [];
this.total = data.dataList?.total ?? 0;
this.unloadStatistics = data.unloadStatistics ?? {};
this.toBePreLoading = false;
});
},
......@@ -525,6 +538,15 @@ export default {
this.pageParam.pageNo = 1;
this.getPreLoad();
},
getParams() {
const { rucangtime = [] } = this.queryParams;
delete this.queryParams.rucangtime;
return {
...this.queryParams,
rucangTimeStart: rucangtime[0],
rucangTimeEnd: rucangtime[1],
};
},
},
};
</script>
......
......@@ -16,7 +16,7 @@
import { approvalCreate, serviceMsg } from "@/api/ecw/boxSea";
/**
* 预装反审
* 反审
*/
export default {
name: "review",
......@@ -32,11 +32,12 @@ export default {
onSubmit() {
this.$refs["reviewForm"].validate((valid) => {
if (valid) {
const { currNode, shipmentObj } = this.$attrs;
approvalCreate({
shipmentId: this.$attrs.shipmentObj.id,
shipmentId: shipmentObj.id,
...this.reviewObj,
approvalStatus: 0,
approvalType: 4, // 预装反审
approvalType: currNode.type === "preinstall" ? 4 : 7, // 4预装反审 7卸柜反审核
}).then((res) => {
serviceMsg(res, this).then(() => {
this.cancel("submit");
......
......@@ -16,7 +16,7 @@
<el-button type="primary" @click="onSubmit(1)">保存</el-button>
<el-button type="success" @click="onSubmit(2)">提交</el-button>
<el-button @click="cancel">关闭</el-button>
<el-button type="danger" @click="startUnloading">开始卸柜</el-button>
<el-button type="danger" @click="startUnloading" :disabled="isStartUnloading">开始卸柜</el-button>
</el-row>
<!-- 开始卸柜 -->
......@@ -91,6 +91,13 @@ export default {
this.dialogVisible = true;
},
},
computed: {
isStartUnloading() {
const { currNode, shipmentObj } = this.$attrs;
const status = shipmentObj[currNode.keyName];
return status === 146 ? true : false;
},
},
};
</script>
......
......@@ -18,9 +18,9 @@
<el-select v-model="currPart" placeholder="请选择当前部分">
</el-select>
<p>
<span>13</span>
<span>10.83m3</span>
<span>210kg</span>
<span>无返回 </span>
<span>无返回 m3</span>
<span>无返回 kg</span>
</p>
</el-row>
......@@ -62,15 +62,16 @@
<div class="label-font">
<p>
<span>总计:</span>
<span>{{pageData.totalStatistics ? pageData.totalStatistics.num : 0}}箱</span>
<span>无返回</span>
<!-- <span>{{pageData.totalStatistics ? pageData.totalStatistics.num : 0}}箱</span>
<span>{{pageData.totalStatistics ? pageData.totalStatistics.volume : 0}}m3</span>
<span>{{pageData.totalStatistics ? pageData.totalStatistics.weight : 0}}kg</span>
<span>{{pageData.totalStatistics ? pageData.totalStatistics.weight : 0}}kg</span> -->
</p>
</div>
<div class="label-font">
<p>
<span>已卸:</span>
<span>0</span>
<span>无返回</span>
</p>
</div>
</el-row>
......
......@@ -32,7 +32,6 @@
import bookingWidget from "./nodePage/booking.vue";
import trailerWidget from "./nodePage/trailer.vue";
import preinstallWidget from "./nodePage/preinstall.vue";
import preinstallReviewWidget from "./nodePage/preinstallReview.vue";
import agentWidget from "./nodePage/agent.vue";
import cabinetWidget from "./nodePage/cabinet/index.vue";
import cusDeclarationWidget from "./nodePage/cusDeclaration.vue";
......@@ -46,6 +45,7 @@ import arrivalWidget from "./nodePage/arrival.vue";
import cusClearanceWidget from "./nodePage/cusClearance.vue";
import unloadingWidget from "./nodePage/unloading/index.vue";
import settlementWidget from "./nodePage/settlement.vue";
import ReviewWidget from "./nodePage/review.vue";
/**
* 海运流程图
......@@ -70,7 +70,7 @@ export default {
cusClearanceWidget,
unloadingWidget,
settlementWidget,
preinstallReviewWidget,
ReviewWidget,
},
props: {
shipmentObj: Object,
......@@ -129,15 +129,24 @@ export default {
// 预装
case "preinstall":
// 预装反审
const status = this.shipmentObj[node.keyName];
if ([23, 24].includes(status)) {
this.currentComponent = `preinstallReviewWidget`;
const preStatus = this.shipmentObj[node.keyName];
if ([23, 24].includes(preStatus)) {
this.currentComponent = `ReviewWidget`;
this.$set(this.dialogConfig, "width", "700px");
this.$set(this.dialogConfig, "title", "预装反审");
} else {
this.$set(this.dialogConfig, "fullscreen", true);
this.$set(this.dialogConfig, "title", "出货安排(预装)");
}
// 卸柜
case "unloading":
// 卸柜反审
const unStatus = this.shipmentObj[node.keyName];
if ([144, 145].includes(unStatus)) {
this.currentComponent = `ReviewWidget`;
this.$set(this.dialogConfig, "width", "700px");
this.$set(this.dialogConfig, "title", "卸柜反审");
}
break;
}
this.$set(this.dialogConfig, "dialogVisible", true);
......@@ -192,9 +201,10 @@ export default {
<style lang="scss">
.app-seaProcess {
.shipping-chart {
width: max-content;
display: flex;
padding: 10px 0;
padding: 10px 10px;
min-width: 1320px;
.chart-nodes {
display: flex;
align-items: center;
......
<template>
<div class="app-seaStepDetail">
<el-scrollbar :vertical="true">
<div class="shipping-step">
<el-scrollbar :vertical="true" viewClass="shipping-step">
<!-- <div class="shipping-step"> -->
<template v-for="(step, index) in flatSeaStep">
<div :key="index" v-if="shipmentObj[step.voName] && columnsMapping[step.voName]" class="step-table">
<div class="step-title">{{step.title}}</div>
......@@ -11,7 +11,7 @@
</div>
</div>
</template>
</div>
<!-- </div> -->
</el-scrollbar>
</div>
</template>
......@@ -30,348 +30,7 @@ export default {
data() {
return {
flatSeaStep: this.seaBaseData.flat(),
columnsMapping: {
bookSeaInfo: [
{
title: "SO NO",
key: "sono",
},
{
title: "船公司类型",
key: "shipCompanyType",
type: "supplier",
},
{
title: "驳船港",
key: "bargePortId",
type: "dock",
},
{
title: "大船港",
key: "bigPortId",
type: "dock",
},
{
title: "目的港",
key: "destPortId",
type: "dock",
},
{
title: "订舱公司",
key: "spaceCompanyId",
type: "supplier",
},
{
title: "预计驳船时间",
key: "bargeTime",
type: "date",
},
{
title: "预计开船时间",
key: "sailTime",
type: "date",
},
{
title: "业务员",
key: "operator",
},
],
preInstallInfo: [
{
title: "预装时间",
key: "createTime",
type: "date",
},
{
title: "业务员",
key: "operator",
},
],
trailerInfo: [
{
title: "货柜号",
key: "tlContainerNo",
},
{
title: "封条",
key: "tlStripSeal",
},
{
title: "拖车公司",
key: "tlCompanyId",
type: "supplier",
},
{
title: "拖车时间",
key: "tlTime",
type: "date",
},
{
title: "车牌",
key: "tlLicensePlate",
},
{
title: "司机",
key: "tlDriver",
},
{
title: "联系方式",
key: "tlDriverContact",
},
{
title: "业务员",
key: "operator",
},
],
agentInfo: [
{
title: "代理商",
key: "agentId",
type: "supplier",
},
{
title: "业务员",
key: "operator",
},
],
cabinetInfo: [
{
title: "到仓时间",
key: "ldInWarehouseTime",
type: "date",
},
{
title: "仓库类型",
key: "ldWarehouseType",
type: "warehouse",
},
{
title: "装柜时间",
key: "ldBoxTime",
type: "date",
},
{
title: "出仓时间",
key: "ldOutWarehouseTime",
type: "date",
},
{
title: "业务员",
key: "operator",
},
],
customsInfo: [
{
title: "报关方式",
key: "dcCustomsType",
type: "shipping_customs_type",
},
{
title: "报关行公司",
key: "dcCompanyId",
type: "supplier",
},
{
title: "截关时间",
key: "dcCutOffTime",
type: "date",
},
{
title: "状态",
key: "dcCustomsStatus",
type: "shipping_dcCustoms_status",
},
{
title: "放行时间",
key: "dcPassTime",
type: "date",
},
{
title: "新封条",
key: "dcStripSeal",
},
{
title: "柜重",
key: "dcBoxWgt",
},
{
title: "货重",
key: "dcGoodsWgt",
},
{
title: "VGM重量",
key: "dcVgmWgt",
},
{
title: "业务员",
key: "operator",
},
],
shipConfigInfo: [
{
title: "已配/免配",
key: "saExmtStatus",
type: "saExmtStatus",
},
{
title: "业务员",
key: "operator",
},
],
ladingBillInfo: [
{
title: "清关代理",
key: "agentId",
type: "supplier",
},
{
title: "提单品名",
key: "blMblNo",
},
{
title: "通知方",
key: "notifyingId",
},
{
title: "提单备注",
key: "remarks",
},
{
title: "数量",
key: "packageNum",
},
{
title: "体积",
key: "cbm",
},
{
title: "业务员",
key: "operator",
},
],
bargeInfo: [
{
title: "驳船",
key: "bgExmtStatus",
type: "bgExmtStatus",
},
{
title: "业务员",
key: "operator",
},
],
shippingInfo: [
{
title: "实际开船时间",
key: "dtRealShipTime",
type: "datetime",
},
{
title: "预计到港时间",
key: "dtEstArrivalTime",
type: "date",
},
{
title: "业务员",
key: "operator",
},
],
clearanceDocInfo: [
{
title: "agent list",
key: "cdAgentlistType",
type: "isFile",
},
{
title: "soncap",
key: "cdSoncapType",
type: "isFile",
},
{
title: "出单方式",
key: "cdOutBillType",
type: "billingMethod",
},
{
title: "寄送时间",
key: "cdSendTime",
type: "date",
},
{
title: "业务员",
key: "operator",
},
],
arrivalInfo: [
{
title: "实际到港时间",
key: "apRealTime",
type: "datetime",
},
{
title: "确认到港",
key: "apConfirmTime",
type: "datetime",
},
{
title: "卸港时间",
key: "apUnloadPortTime",
type: "date",
},
{
title: "业务员",
key: "operator",
},
],
clearanceInfo: [
{
title: "预计清关时间",
key: "clEstTime",
type: "date",
},
{
title: "清关时间",
key: "clClearTime",
type: "datetime",
},
{
title: "业务员",
key: "operator",
},
],
cabinetUnloadInfo: [
{
title: "到仓时间",
key: "ulWarehouseTime",
type: "date",
},
{
title: "卸货时间",
key: "ulBoxTime",
type: "date",
},
{
title: "业务员",
key: "operator",
},
],
settlementInfo: [
{
title: "可结算",
key: "slSettlementTime",
type: "date",
},
{
title: "已结算",
key: "slSettledTime",
type: "date",
},
{
title: "业务员",
key: "operator",
},
],
},
columnsMapping: _C.getColmnMapping(),
};
},
methods: {
......@@ -445,6 +104,8 @@ export default {
flex-wrap: wrap;
align-content: flex-start;
height: 550px;
min-width: 1300px;
padding: 10px 10px;
p {
margin: 0;
......
......@@ -43,7 +43,7 @@ import { getWarehouseList } from "@/api/ecw/warehouse";
import { getSupplierPage } from "@/api/ecw/supplier";
import { getDockPage } from "@/api/ecw/dock";
import { listUser } from "@/api/system/user";
import { getStatusName, seaBaseData } from "./utils";
import { getSeaStatus, getStatusName, seaBaseData } from "./utils";
/**
* 海运操作主页面
......@@ -117,34 +117,7 @@ export default {
watch: {
/* 监听发货对象 */
shipmentObj(val) {
let currNodeStatus = 11,
isBreak = false;
// 迭代每个节点
for (let i = 0; i < this.seaBaseData.length; i++) {
const nodes = this.seaBaseData[i];
for (let j = 0; j < nodes.length; j++) {
const node = nodes[j];
const { keyName, voName, status } = node;
if (!keyName) continue;
const { start, wait, end } = status;
if (start.includes(val[keyName]) && val[voName]) {
currNodeStatus = val[keyName];
}
if (wait.includes(val[keyName])) {
currNodeStatus = val[keyName];
isBreak = true;
break;
}
if (end.includes(val[keyName])) {
currNodeStatus = val[keyName];
}
}
if (isBreak) break;
}
this.statusLabel = getStatusName().get(currNodeStatus);
this.statusLabel = getStatusName(getSeaStatus(val));
},
},
};
......
import dayjs from "dayjs";
function getStatusName() {
/**
* 节点状态值
*
* @return {*}
*/
function getStatusName(statu) {
const statusName = new Map();
statusName.set(11, "未订舱");
......@@ -60,9 +65,14 @@ function getStatusName() {
statusName.set(152, "结算中");
statusName.set(153, "已结算");
return statusName;
return statusName.get(statu);
}
/**
* 海运流程
*
* @return {*}
*/
function seaBaseData() {
return [
[
......@@ -400,6 +410,359 @@ function seaBaseData() {
];
}
/**
* 详情显示列
*
* @return {*}
*/
function getColmnMapping() {
return {
bookSeaInfo: [
{
title: "SO NO",
key: "sono",
},
{
title: "船公司类型",
key: "shipCompanyType",
type: "supplier",
},
{
title: "驳船港",
key: "bargePortId",
type: "dock",
},
{
title: "大船港",
key: "bigPortId",
type: "dock",
},
{
title: "目的港",
key: "destPortId",
type: "dock",
},
{
title: "订舱公司",
key: "spaceCompanyId",
type: "supplier",
},
{
title: "预计驳船时间",
key: "bargeTime",
type: "date",
},
{
title: "预计开船时间",
key: "sailTime",
type: "date",
},
{
title: "业务员",
key: "operator",
},
],
preInstallInfo: [
{
title: "预装时间",
key: "createTime",
type: "date",
},
{
title: "业务员",
key: "operator",
},
],
trailerInfo: [
{
title: "货柜号",
key: "tlContainerNo",
},
{
title: "封条",
key: "tlStripSeal",
},
{
title: "拖车公司",
key: "tlCompanyId",
type: "supplier",
},
{
title: "拖车时间",
key: "tlTime",
type: "date",
},
{
title: "车牌",
key: "tlLicensePlate",
},
{
title: "司机",
key: "tlDriver",
},
{
title: "联系方式",
key: "tlDriverContact",
},
{
title: "业务员",
key: "operator",
},
],
agentInfo: [
{
title: "代理商",
key: "agentId",
type: "supplier",
},
{
title: "业务员",
key: "operator",
},
],
cabinetInfo: [
{
title: "到仓时间",
key: "ldInWarehouseTime",
type: "date",
},
{
title: "仓库类型",
key: "ldWarehouseType",
type: "warehouse",
},
{
title: "装柜时间",
key: "ldBoxTime",
type: "date",
},
{
title: "出仓时间",
key: "ldOutWarehouseTime",
type: "date",
},
{
title: "业务员",
key: "operator",
},
],
customsInfo: [
{
title: "报关方式",
key: "dcCustomsType",
type: "shipping_customs_type",
},
{
title: "报关行公司",
key: "dcCompanyId",
type: "supplier",
},
{
title: "截关时间",
key: "dcCutOffTime",
type: "date",
},
{
title: "状态",
key: "dcCustomsStatus",
type: "shipping_dcCustoms_status",
},
{
title: "放行时间",
key: "dcPassTime",
type: "date",
},
{
title: "新封条",
key: "dcStripSeal",
},
{
title: "柜重",
key: "dcBoxWgt",
},
{
title: "货重",
key: "dcGoodsWgt",
},
{
title: "VGM重量",
key: "dcVgmWgt",
},
{
title: "业务员",
key: "operator",
},
],
shipConfigInfo: [
{
title: "已配/免配",
key: "saExmtStatus",
type: "saExmtStatus",
},
{
title: "业务员",
key: "operator",
},
],
ladingBillInfo: [
{
title: "清关代理",
key: "agentId",
type: "supplier",
},
{
title: "提单品名",
key: "blMblNo",
},
{
title: "通知方",
key: "notifyingId",
},
{
title: "提单备注",
key: "remarks",
},
{
title: "数量",
key: "packageNum",
},
{
title: "体积",
key: "cbm",
},
{
title: "业务员",
key: "operator",
},
],
bargeInfo: [
{
title: "驳船",
key: "bgExmtStatus",
type: "bgExmtStatus",
},
{
title: "业务员",
key: "operator",
},
],
shippingInfo: [
{
title: "实际开船时间",
key: "dtRealShipTime",
type: "datetime",
},
{
title: "预计到港时间",
key: "dtEstArrivalTime",
type: "date",
},
{
title: "业务员",
key: "operator",
},
],
clearanceDocInfo: [
{
title: "agent list",
key: "cdAgentlistType",
type: "isFile",
},
{
title: "soncap",
key: "cdSoncapType",
type: "isFile",
},
{
title: "出单方式",
key: "cdOutBillType",
type: "billingMethod",
},
{
title: "寄送时间",
key: "cdSendTime",
type: "date",
},
{
title: "业务员",
key: "operator",
},
],
arrivalInfo: [
{
title: "实际到港时间",
key: "apRealTime",
type: "datetime",
},
{
title: "确认到港",
key: "apConfirmTime",
type: "datetime",
},
{
title: "卸港时间",
key: "apUnloadPortTime",
type: "date",
},
{
title: "业务员",
key: "operator",
},
],
clearanceInfo: [
{
title: "预计清关时间",
key: "clEstTime",
type: "date",
},
{
title: "清关时间",
key: "clClearTime",
type: "datetime",
},
{
title: "业务员",
key: "operator",
},
],
cabinetUnloadInfo: [
{
title: "到仓时间",
key: "ulWarehouseTime",
type: "date",
},
{
title: "卸货时间",
key: "ulBoxTime",
type: "date",
},
{
title: "业务员",
key: "operator",
},
],
settlementInfo: [
{
title: "可结算",
key: "slSettlementTime",
type: "date",
},
{
title: "已结算",
key: "slSettledTime",
type: "date",
},
{
title: "业务员",
key: "operator",
},
],
};
}
/**
* 常量字典
*/
const constantDict = {
// 配船状态
saExmtStatus: [
......@@ -447,6 +810,13 @@ const constantDict = {
],
};
/**
* string format number
*
* @param {*} obj
* @param {*} keys
* @return {*}
*/
function formatStringNumber(obj, keys) {
for (const [key, value] of Object.entries(obj)) {
if (keys.includes(key) && !Number.isNaN(Number(value))) {
......@@ -456,6 +826,13 @@ function formatStringNumber(obj, keys) {
return obj;
}
/**
* number format string
*
* @param {*} obj
* @param {*} keys
* @return {*}
*/
function formatNumberString(obj, keys) {
for (const [key, value] of Object.entries(obj)) {
if (keys.includes(key) && value) {
......@@ -465,6 +842,14 @@ function formatNumberString(obj, keys) {
return obj;
}
/**
* stringDate format Date
*
* @param {*} obj
* @param {*} keys
* @param {string} [format="YYYY-MM-DD"]
* @return {*}
*/
function formatDateStr(obj, keys, format = "YYYY-MM-DD") {
for (const [key, value] of Object.entries(obj)) {
if (keys.includes(key) && dayjs(value).isValid()) {
......@@ -474,6 +859,43 @@ function formatDateStr(obj, keys, format = "YYYY-MM-DD") {
return obj;
}
function formatDate(date, format = "YYYY-MM-DD") {
if (!date) return date;
return dayjs(date).format(format);
}
function getSeaStatus(val) {
let currNodeStatus = 11,
isBreak = false,
datas = seaBaseData();
// 迭代每个节点
for (let i = 0; i < datas.length; i++) {
const nodes = datas[i];
for (let j = 0; j < nodes.length; j++) {
const node = nodes[j];
const { keyName, voName, status } = node;
if (!keyName) continue;
const { start, wait, end } = status;
if (start.includes(val[keyName]) && val[voName]) {
currNodeStatus = val[keyName];
}
if (wait.includes(val[keyName])) {
currNodeStatus = val[keyName];
isBreak = true;
break;
}
if (end.includes(val[keyName])) {
currNodeStatus = val[keyName];
}
}
if (isBreak) break;
}
return currNodeStatus;
}
export const fileTypes = [
"doc",
"xls",
......@@ -487,9 +909,12 @@ export const fileTypes = [
export {
getStatusName,
getColmnMapping,
getSeaStatus,
seaBaseData,
constantDict,
formatStringNumber,
formatDateStr,
formatNumberString,
formatDate,
};
......@@ -42,6 +42,14 @@
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="简码" prop="code">
<el-input
v-model="form.code"
placeholder="请输入简码"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="归属仓库" prop="warehouseIds">
<!-- <el-select v-model="form.wareHouseIds">
......@@ -105,22 +113,22 @@
</el-radio-group>
</el-form-item> -->
</el-card>
<el-card shadow="never">
<div slot="header" class="clearfix">
<span>渠道收费规则</span>
</div>
<el-form-item label="清关单价" prop="customsClearUnit">
<el-input v-model="form.customsClearUnit" placeholder="请输入清关单价">
<span slot="append">$</span>
</el-input>
</el-form-item>
<el-form-item label="每0.5KG单价" prop="weightUnitPrice">
<el-input v-model="form.weightUnitPrice" placeholder="此字段名暂缺" >
<span slot="append">$</span>
</el-input>
</el-form-item>
</el-card>
<!-- <el-card shadow="never">-->
<!-- <div slot="header" class="clearfix">-->
<!-- <span>渠道收费规则</span>-->
<!-- </div>-->
<!-- -->
<!-- <el-form-item label="清关单价" prop="customsClearUnit">-->
<!-- <el-input v-model="form.customsClearUnit" placeholder="请输入清关单价">-->
<!-- <span slot="append">$</span>-->
<!-- </el-input>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="每0.5KG单价" prop="weightUnitPrice">-->
<!-- <el-input v-model="form.weightUnitPrice" placeholder="此字段名暂缺" >-->
<!-- <span slot="append">$</span>-->
<!-- </el-input>-->
<!-- </el-form-item>-->
<!-- </el-card>-->
</el-form>
<div>
<el-button type="primary" @click="submitForm">确 定</el-button>
......
......@@ -74,7 +74,7 @@
<!-- <el-table-column label="名称-英文" align="center" prop="nameEn" /> -->
<el-table-column label="内部名称" align="center" prop="internalNameZh" />
<!-- <el-table-column label="内部名称-英文" align="center" prop="internalNameEn" />
<el-table-column label="类型编码" align="center" prop="typeNumber" />
<el-table-column label="类型编码" align="center" prop="typeNumber" />-->
<!-- <el-table-column label="仓库id字符串" align="center" prop="warehouseIds" /> -->
<el-table-column label="仓库名" align="center" prop="warehouseNameList" width="180">
<template slot-scope="scope">
......@@ -88,6 +88,7 @@
</el-scrollbar>
</template>
</el-table-column>
<el-table-column label="简码" align="center" prop="code" />
<el-table-column label="排序" align="center" prop="sort" />
<el-table-column label="快递公司" align="center" prop="companyName" />
<el-table-column label="预计时间(天)" align="center" prop="etaTime" />
......@@ -202,6 +203,7 @@ export default {
internalNameZh: undefined,
internalNameEn: undefined,
typeNumber: undefined,
code: undefined,
warehouseIds: undefined,
sort: undefined,
expressId: undefined,
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<template>
<div class="app-container">
<div slot="header" class="card-title">付款单</div>
<!-- 搜索工作栏 -->
<el-card v-show="showSearch" class="card">
<el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
label-width="100px"
class="card"
>
<el-row :span="24">
<el-form-item label="柜号:">
<el-input
style="max-width: 188px"
v-model="queryParams.receiptNo"
placeholder="请输入收款单号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="自编号:">
<el-input
style="max-width: 188px"
v-model="queryParams.receiptNo"
placeholder="请输入收款单号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="付款单号:">
<el-input
style="max-width: 188px"
v-model="queryParams.receiptNo"
placeholder="请输入收款单号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="供应商:">
<el-select
v-model="queryParams.supplierId"
placeholder="请选择供应商"
>
<el-option
v-for="supplier in allSupplier"
:key="supplier.id"
:label="supplier.companyZh"
:value="supplier.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="状态:">
<dict-selector :type="DICT_TYPE.ECW_RECEIPT_STATE" v-model="queryParams.state" />
</el-form-item>
</el-row>
<el-row :span="24">
<el-form-item label="业务员:">
<el-select v-model="form.salesmanId" placeholder="请选择业务员">
<el-option
v-for="item in creatorData"
:key="item.id"
:label="item.nickname"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="创建时间:">
<el-date-picker
v-model="queryParams.beginCreateTime"
type="datetimerange"
range-separator="到"
start-placeholder="请选择日期"
end-placeholder="请选择日期">
</el-date-picker>
</el-form-item>
<el-form-item label="发票状态:">
<el-select
v-model="queryParams.invoiceStatus"
placeholder="请选择是否开票"
>
<el-option label="未开票" value="0" />
<el-option label="已开票" value="1" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">查找</el-button>
</el-form-item>
</el-row>
</el-form>
</el-card>
<el-table v-loading="loadings" :data="list" border class="card">
<el-table-column label="序号" align="center" prop="id" type="index">
<template slot-scope="scope">
<span>{{ scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column label="付款单号" align="center" prop="paymentNo" />
<el-table-column label="供应商" align="center" prop="supplierName" />
<el-table-column label="创建时间" align="center" prop="createTime">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="最后付款时间" align="center" prop="latestPayAt">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.latestPayAt) }}</span>
</template>
</el-table-column>
<el-table-column label="发票" align="center" prop="invoiceStatus">
<template slot-scope="scope">
<span>{{ scope.row.invoiceStatus === 0 ? '未开票' : '已开票' }}</span>
</template>
</el-table-column>
<el-table-column label="状态" align="center">
<template slot-scope="scope">
<span>{{ stateMap(scope.row.state) }}</span>
<!-- <dict-tag
:type="DICT_TYPE.ECW_RECEIPT_STATE"
:value="scope.row.state"
/> -->
</template>
</el-table-column>
<el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
<el-button v-if="scope.row.state == 1 || scope.row.state == 3" size="mini" @click="handleAdd(scope.row.id)" type="text">编辑</el-button>
<el-button v-if="scope.row.state == 1 || scope.row.state == 3" size="mini" type="text">审核</el-button>
<el-button v-if="scope.row.state == 2" size="mini" type="text">反审核</el-button>
<el-button v-if="scope.row.state == 2" size="mini" type="text">核销</el-button>
<el-button v-if="scope.row.state == 4" size="mini" type="text">反核销</el-button>
<!-- <el-button v-if="scope.row.state == 3" size="mini" type="text">开票</el-button> -->
<el-button size="mini" type="text" @click="toprint(scope.row.id)">打印</el-button>
<el-button v-if="scope.row.state == 1 || scope.row.state == 3" size="mini" type="text">删除</el-button>
<!-- <el-button size="mini" type="text" @click="open = true">导出订单</el-button> -->
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.page"
:limit.sync="queryParams.rows"
@pagination="getList"
/>
<!-- 对话框(添加 / 修改) -->
<el-dialog
title="费用登记"
:visible.sync="open"
width="500px"
style="margin-top: 20vh !important"
append-to-body
>
<div
slot="header"
class="card-title"
style="border-bottom: 2px solid #f8f8f8"
>
<span>导出账单</span>
<i class="el-icon-close" @click="cancel"></i>
</div>
<div class="dialog-footer">
<el-button type="primary" style="width: 130px" @click="submitForm"
>国内账单</el-button
>
<el-button
plain
type="primary"
style="width: 130px; margin: 0"
@click="submitForm"
>Debite note</el-button
>
</div>
</el-dialog>
</div>
</template>
<script>
import { userList } from "@/api/system/user";
import { DICT_TYPE } from "@/utils/dict";
import CustomerSelector from "@/components/CustomerSelector";
import { getSupplierPage } from "@/api/ecw/supplier";
import { getPaymentList } from "@/api/ecw/financial"
export default {
name: "paymentVoucher",
components: {
CustomerSelector,
},
data() {
return {
open: false,
showSearch: true,
loadings: false,
form: {},
creatorData: [],
allSupplier: [],
list: [],
total: 0,
dateType: [],
loading: "",
// params: {
// page: 1,
// rows: 20,
// },
// 查询参数
queryParams: {
page: 1,
rows: 20,
dateType: null,
date: null,
originId: null,
destinationId: null,
transportId: null,
isCargoControl: null,
orderExceptionStatus: null,
orderExceptionType: null,
orderNo: null,
consignorId: null,
marks: null,
prodId: null,
productRecord: null,
followUpSalesmanId: null,
},
};
},
created() {
let that = this;
userList("salesman").then((res) => (that.creatorData = res.data));
getSupplierPage({ pageNo: "1", pageSize: "10000" }).then((res) => {
const { data } = res;
this.allSupplier = data.list;
});
this.getList()
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 处理查询参数
let params = { ...this.queryParams };
this.addBeginAndEndTime(params, this.dateRangeCreateTime, "createTime");
// 执行查询
getPaymentList(params).then((response) => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.page = 1;
this.getList();
},
stateMap(state) {
switch (state) {
case 1:
return '待审核'
case 2:
return '已审核待核销'
case 3:
return '已核销'
case 4:
return '审批驳回'
}
},
/** 新增按钮操作 */
handleAdd(id) {
return this.$router.push("creatCollection?id=" + id);
},
toprint(id) {
return this.$router.push("printVoucher?id=" + id);
},
submitForm() {
this.open = false;
},
/** 取消按钮 */
cancel() {
this.open = false;
},
},
};
</script>
<style>
.card {
margin-top: 20px;
}
.dialog-footer {
padding: 30px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
height: 160px;
}
.card-title {
font-size: 18px;
font-weight: bold;
}
</style>
......@@ -4,26 +4,26 @@
<div style="text-align: center;font-weight: bold;font-size: 20px;">收款单</div>
<div style="margin-top: 20px;">
<div style="display: flex;width: 80%;align-items: center;margin-bottom: 10px;">
<div style="flex:1"><span style="width: 120px;text-align: right;">部门:</span><span>{{form?form.departmentName:''}}</span></div>
<div style="flex:1"><div style="width: 120px;text-align: right;">部门:</div><span>{{form?form.departmentName:''}}</span></div>
</div>
<div style="display: flex;width: 80%;align-items: center;margin-bottom: 10px;">
<div style="flex:1"><span style="width: 120px;text-align: right;">收款单号:</span><span>{{form?form.receiptNo:''}}</span></div>
<div style="flex:1"><span style="width: 120px;text-align: right;">收款日期:</span><span>{{form?form.payedAt:''}}</span></div>
<div style="flex:1"><div style="width: 120px;text-align: right;">收款单号:</div> <span>{{form?form.receiptNo:''}}</span></div>
<div style="flex:1"><div style="width: 120px;text-align: right;">收款日期:</div><span>{{form?form.payedAt:''}}</span></div>
</div>
<div style="display: flex;width: 80%;align-items: center;margin-bottom: 10px;">
<div style="flex:1"><span style="width: 120px;text-align: right;">客户名称:</span><span>{{form?form.customerName:''}}</span></div>
<div style="flex:1"><span style="width: 120px;text-align: right;">收款户名:</span><span>{{form?form.platformAccount:''}}</span></div>
<div style="flex:1"><div style="width: 120px;text-align: right;">客户名称:</div><span>{{form?form.customerName:''}}</span></div>
<div style="flex:1"><div style="width: 120px;text-align: right;">收款户名:</div><span>{{form?form.platformAccount:''}}</span></div>
</div>
<div style="display: flex;width: 80%;align-items: center;margin-bottom: 10px;">
<div style="flex:1"><span style="width: 120px;text-align: right;">银行名称:</span><span>{{form?form.accountBank:''}}</span></div>
<div style="flex:1"><span style="width: 120px;text-align: right;">银行账号:</span><span>{{form?form.accountBank:''}}</span></div>
<div style="flex:1"><div style="width: 120px;text-align: right;">银行名称:</div><span>{{form?form.accountBank:''}}</span></div>
<div style="flex:1"><div style="width: 120px;text-align: right;">银行账号:</div><span>{{form?form.accountBank:''}}</span></div>
</div>
<div style="display: flex;width: 80%;align-items: center;margin-bottom: 10px;">
<div style="flex:1"><span style="width: 120px;text-align: right;">水单号:</span><span>{{form?form.accountBank:''}}</span></div>
<div style="flex:1"><span style="width: 120px;text-align: right;">手续费:</span><span>{{form?form.accountBank:''}}</span></div>
<div style="flex:1"><div style="width: 120px;text-align: right;">水单号:</div><span>{{form?form.accountBank:''}}</span></div>
<div style="flex:1"><div style="width: 120px;text-align: right;">手续费:</div><span>{{form?form.accountBank:''}}</span></div>
</div>
<div style="display: flex;width: 80%;align-items: center;">
<div style="flex:1"><span style="width: 120px;text-align: right;">备注:</span><span>{{form?form.accountBank:''}}</span></div>
<div style="flex:1"><div style="width: 120px;text-align: right;">备注:</div><span>{{form?form.accountBank:''}}</span></div>
</div>
</div>
<table border="1" style="margin-top: 20px;width: 100%;text-align: center;border-collapse: collapse; ">
......
This diff is collapsed.
......@@ -174,14 +174,6 @@
</el-checkbox-group>
</el-form-item>
<el-form-item label="其他服务" prop="otherServiceList">
<el-checkbox-group v-model="form.otherServiceList">
<el-checkbox label="1">送货上门</el-checkbox>
<el-checkbox label="2">非控货订单代收货款</el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item label="网点详情" prop="contentZh">
<editor v-model="form.contentZh" :min-height="150"/>
</el-form-item>
......@@ -274,7 +266,6 @@ export default {
// 表单参数
form: {
checkList:[],
otherServiceList:[],
},
// 表单校验
rules: {
......@@ -471,8 +462,7 @@ export default {
worktime: undefined,
adminId: undefined,
aorder: undefined,
checkList: [],
otherServiceList: []
checkList: []
};
this.resetForm("form");
......@@ -508,9 +498,6 @@ export default {
let ckList = response.data.freight.split(',');
this.$set(this.form, 'checkList', ckList);
let otherService = response.data.otherService.split(",");
this.$set(this.form, 'otherServiceList', otherService);
this.open = true;
this.title = "修改服务网点";
});
......@@ -522,6 +509,9 @@ export default {
return;
}
console.log(this.form);
// return;
//逗号拼接运输方式
var freight = ''
for(let i = 0; i < this.form.checkList.length; i++) {
......@@ -530,11 +520,6 @@ export default {
freight = freight.substring(0, freight.length - 1);
this.form.freight = freight;
var otherService = this.form.otherServiceList.join(',');
this.form.otherService= otherService;
// console.log(otherService);
// return;
// 修改的提交
if (this.form.id != null) {
updateNode(this.form).then(response => {
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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