Commit 0c0aab7d authored by Marcus's avatar Marcus

Merge remote-tracking branch 'origin/dev' into dev

parents f130867a 3b656c9b
......@@ -6,7 +6,7 @@ VUE_APP_TITLE = 捷道管理系统-测试站
# 捷道管理系统/开发环境
VUE_APP_BASE_API = 'https://api.sit.jdshangmen.com'
VUE_APP_BASE_API = 'https://api.jd.jdshangmen.com'
# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true
......
......@@ -62,7 +62,7 @@ export default {
padding-right: 30px;
padding-left: 5px;
}
$sizes: 0, 10,20,30,50,75,100,150,200,300,500,800,1000;
$sizes: 0, 5, 10,20,30,50,75,100,150,200,300,500,800,1000;
@for $i from 1 through length($sizes){
$item: nth($sizes, $i);
.ml-#{$item}{
......
......@@ -49,7 +49,7 @@ export function exportboxExcel(query) {
url: "/shipment/box/export-excel",
method: "get",
params: query,
timeout: 5 * 60000,
timeout: 20 * 60000,
responseType: "blob",
});
}
......@@ -343,3 +343,29 @@ export function updateUrl(data) {
data,
});
}
export function dealCustomsSplitNotify(notifyId){
return request({
url: `/shipment/box/dealCustomsSplitNotify?notifyId=${notifyId}`,
method: "get",
})
}
// 自编号报表分页
export function boxSettlementPage(params) {
return request({
url: "/shipment/box/pageSettlement",
method: "get",
params,
});
}
// 导出自编号汇总excel
export function exportSettlementExcel(params) {
return request({
url: "/shipment/box/export-shipment-summary",
method: "get",
responseType: "blob",
params,
});
}
import request from '@/utils/request'
// 创建汇率管理
export function createExchangeRate(data) {
return request({
url: '/ecw/exchange-rate/create',
method: 'post',
data: data
})
}
// 更新汇率管理
export function updateExchangeRate(data) {
return request({
url: '/ecw/exchange-rate/update',
method: 'put',
data: data
})
}
// 删除汇率管理
export function deleteExchangeRate(id) {
return request({
url: '/ecw/exchange-rate/delete?id=' + id,
method: 'delete'
})
}
// 获得汇率管理
export function getExchangeRate(id) {
return request({
url: '/ecw/exchange-rate/get?id=' + id,
method: 'get'
})
}
// 获得汇率管理分页
export function getExchangeRatePage(query) {
return request({
url: '/ecw/exchange-rate/page',
method: 'get',
params: query
})
}
// 汇率日志查询
export function getExchangeRateLogList(params){
return request({
url:'/ecw/exchange-rate-log/page',
method:'get',
params,
})
}
// 导出汇率管理 Excel
export function exportExchangeRateExcel(query) {
return request({
url: '/ecw/exchange-rate/export-excel',
method: 'get',
params: query,
responseType: 'blob'
})
}
......@@ -62,7 +62,14 @@ export function getReceivableDiscountLogById(query) {
params: query
})
}
// 根据订单ID获得需要预付应收款列表
export function getReceivableByOrderId(query) {
return request({
url: '/ecw/receivable/getReceivableByOrderId',
method: 'get',
params: query
})
}
// 根据订单ID获得需要预付应收款列表
export function getFirstReceivableListByOrderId(query) {
return request({
......
......@@ -103,4 +103,13 @@ export function getWarehousingVolume(params){
})
}
// 获取装柜或出仓重量
export function getBoxedWeight(params){
return request({
url:'/ecw/future-box/getBoxedWeight',
method:'get',
params
})
}
......@@ -96,6 +96,44 @@ export function feeApplicationListByOrderId(query){
data:data,
})
}
// 批量申请费用
export function feeApplicationCreateBatch(data){
return request({
url:'order/fee-application/create/batch',
method:'post',
data:data,
})
}
// 根据订单ID获取是否有正在申请的费用申请
export function getFeeApplicationApproveByOrderId(orderId){
return request({
url:'/order/fee-application/get/isApprove',
method:'get',
params: {id: orderId}
})
}
// 根据流程主键ID得到批量申请费用
export function getBatchFeeByBusinessId(businessId){
return request({
url:'/order/fee-application/getBatchFeeByBusinessId',
method:'get',
params: {businessId}
})
}
// 查询批量申请费用
export function feeApplicationGetBatch(params){
return request({
url:'/order/fee-application/get/batch',
method:'get',
params
})
}
//费用申请修改
export function applicationUpdate(data){
return request({
......@@ -422,6 +460,33 @@ export function getOrderSpecialByApproveId(approveId) {
})
}
// 特价申请-批量
export function createOrderSpecialBatch(data) {
return request({
url: '/ecw/order/special/apply/batch',
method: 'put',
data: data
})
}
// 获得订单特价申请详情-批量
export function getOrderSpecialBatch(orderId, type) {
console.log(orderId, type)
return request({
url: '/ecw/order/special/info/batch/' + orderId + '/' + type,
method: 'get'
})
}
// 根据订单项商品ID与审批类型获得订单商品的特价申请详情-批量
export function getOrderSpecialByApproveIdBatch(approveId) {
return request({
url: '/ecw/order/special/batch/info?approveId=' + approveId,
method: 'get'
})
}
// 订单号检索功能
export function getOrderNoSearch(params) {
return request({
......@@ -757,7 +822,7 @@ export function splitItemUpdate(data){
data
})
}
// 可出订单列表
// 待备货(可出)订单列表
export function canShipmentPage(params){
return request({
url: '/air/order/can/shipment/page',
......@@ -809,6 +874,16 @@ export function exportReadyStock(params){
})
}
// 导出可出订单
export function exportCanShipment(params){
return request({
url: '/ecw/order/export/can-shipment/search',
method: 'get',
params,
responseType: 'blob'
})
}
// 无需打包
export function noNeedPack(orderItemId){
return request({
......@@ -849,4 +924,79 @@ export function orderItemPackLogPage(params){
method: 'get',
params
})
}
\ No newline at end of file
}
// 上传报关资料
export function warehousePictureCreate(data) {
return request({
url: '/order/warehouse-picture/create',
method: 'post',
data
})
}
// 删除报关资料
export function warehousePictureDelete(id) {
return request({
url: '/order/warehouse-picture/delete?id=' + id,
method: 'delete'
})
}
//上传
export function uploadFile(data) {
return request({
url: '/infra/file/up',
method: 'post',
data: data
})
}
//上传
export function uploadOrgname(data) {
return request({
url: '/infra/file/org-name/up',
method: 'post',
data: data
})
}
/*根据订单ID查询目的国*/
export function getDestCountryByOrderId(params){
return request({
url: '/ecw/order/getDestCountryByOrderId',
method: 'get',
params:params
})
}
// 订单费用汇总
export function orderSummary(orderId){
return request({
url: '/ecw/orderCount/orderSummary/' + orderId,
method: 'get'
})
}
// 订单明细汇总
export function orderDetailSummary(orderId){
return request({
url: '/ecw/orderCount/orderDetailSummary/' + orderId,
method: 'get'
})
}
// 自编号的订单费用汇总
export function orderSummaryByContainerNumber(params){
return request({
url: '/ecw/orderCount/containerNumber/orderSummary',
method: 'get',
params
})
}
// 导出自编号订单汇总列表
export function exportOrderSummaryByContainerNumber(params){
return request({
url: '/ecw/order/export/export-order-summary',
method: 'get',
params,
timeout: 5 * 60000,
responseType: 'blob'
})
}
......@@ -148,4 +148,12 @@ export function exportCargoControl(params){
responseType: 'arraybuffer',
params
})
}
\ No newline at end of file
}
// 控货日志
export function getControlLogList(orderId){
return request({
url: '/order/order-control-log/list/' + orderId,
method: 'get'
})
}
......@@ -56,7 +56,14 @@ export function getOrderExceptionPage(query) {
params: query
})
}
// 获得新订单异常分页
export function getExceptionPage(query) {
return request({
url: '/ecw/order-exception/exceptionPage',
method: 'get',
params: query
})
}
// 导出订单异常 Excel
export function exportOrderExceptionExcel(query) {
return request({
......@@ -107,7 +114,7 @@ export function exportExcel(params) {
return request({
url: '/ecw/order-exception/export-excel',
method: 'get',
timeout: 3*60*1000,
timeout: 30*60*1000,
params,
// timeout: 3*60*1000,
responseType: 'arraybuffer'
......@@ -138,4 +145,13 @@ export function getExceptionDetailByBusinessId(query) {
method: 'get',
params: query
})
}
\ No newline at end of file
}
// 参数查询获得订单统计
export function getStatistics(query) {
return request({
url: '/ecw/order-exception/statistics',
method: 'get',
params: query
})
}
......@@ -145,3 +145,12 @@ export function deleteAllSplit(orderId) {
params: {orderId}
})
}
// 获取拆单订单的总货值与箱数拆分记录
export function splitItemWorthCheck(orderId, orderSplitItemId) {
return request({
url: '/order/split-item/worth/check',
method: 'get',
params: {orderId, orderSplitItemId}
})
}
......@@ -46,6 +46,7 @@
<script>
import { getToken } from "@/utils/auth";
import {warehousePictureCreate} from "@/api/ecw/order";
export default {
props: {
......@@ -65,6 +66,15 @@ export default {
type: Boolean,
default: true
},
// 类型 1入仓 2 调拨出仓 3调拨到仓 4 订单转异
type: {
type: Number,
default: undefined
},
id: {
type: Number,
default: undefined
},
readonly: {
type: Boolean,
default: false
......@@ -121,9 +131,11 @@ export default {
methods: {
// 删除图片
handleRemove(index) {
this.fileList.splice(index, 1);
this.$emit("input", this.listToString(this.fileList));
if (this.id && this.type) {
this.$emit("delete", this.fileList[index].url);
}
this.fileList.splice(index, 1);
this.$emit("input", this.listToString(this.fileList));
},
// 上传成功回调
handleUploadSuccess(res) {
......@@ -133,8 +145,21 @@ export default {
this.fileList = this.fileList.concat(this.uploadList);
this.uploadList = [];
this.number = 0;
this.$emit("input", this.listToString(this.fileList));
this.$modal.closeLoading();
if (this.id && this.type) {
warehousePictureCreate({
"bizId": this.id,
"type": this.type,
"url": res.data
}).then(() => {
this.$emit("input", this.listToString(this.fileList));
this.$emit("refresh");
this.$modal.closeLoading();
})
} else {
this.$emit("input", this.listToString(this.fileList));
this.$emit("refresh");
this.$modal.closeLoading();
}
}
}else {
this.handleUploadError();
......
......@@ -13,8 +13,8 @@
<el-button type="primary" @click="reLoad">{{$t('搜索')}}</el-button>
<div v-if="showAll">
<el-checkbox :label="$t('全选(最多500)')" @change="toggleAll" :disabled="isAllProduct"></el-checkbox>
<el-checkbox :label="$t('全选库内商品(共{cnt}个)', {cnt: total})" v-model="isAllProduct"></el-checkbox>
<el-checkbox :label="$t('全选') + `(${total > 500 ? $t('最多500') : $t('{total}个', {total})})`" @change="toggleAll" :disabled="isAllProduct"></el-checkbox>
<el-checkbox :label="$t('全选库内商品(共{cnt}个)', {cnt: allTotal})" v-model="isAllProduct"></el-checkbox>
</div>
</div>
<div class="list">
......@@ -61,7 +61,8 @@ export default {
list: [],
page: 1,
pages: 1,
total: 0, // 商品总数
total: 0, // 当前筛选条件的商品总数
allTotal: 0, // 全库商品总数
queryParams: {
pageNo: 1,
pageSize: 500,
......@@ -115,6 +116,11 @@ export default {
if(this.defaultIds.length){
this.loadDefaultProds()
}
// 获取全库商品总数
getProductPage({pageNo: 1, pageSize: 1}).then(res => {
this.allTotal = res.data.total
})
},
methods: {
/* setAllProduct(status){
......@@ -209,4 +215,4 @@ export default {
text-overflow: ellipsis;
}
}
</style>
\ No newline at end of file
</style>
......@@ -5,7 +5,7 @@
:clearable="clearable"
remote
reserve-keyword
placeholder="请选择"
:placeholder="placeholder ? placeholder : $t('请选择')"
:loading="loading">
<el-option
v-for="(item, index) in list"
......@@ -22,6 +22,7 @@ export default {
props:{
value: [String, Number],
clearable: Boolean,
placeholder: String,
manage:{
type:Boolean,
default:false
......
......@@ -293,7 +293,10 @@ export default {
},
// 用于储位回显选中
isSelected(warehouse, area, position = 0){
return !!this.value.find(e => warehouse === e.wareId && area === e.areaId && (position === e.locationId || undefined === e.locationId))
return !!this.value.find(e => {
// 最后一个条件不能用!e.locationId来判断,会导致选择了没有locationId的全部被选中,上次改这里忘记什么原因了,下次复现再来调整
return warehouse === e.wareId && area === e.areaId && (position === e.locationId || e.locationId == undefined)
})
},
}
}
......
......@@ -2641,7 +2641,7 @@
"上级区域": "Superior Area",
"选择上级区域": "Select superior area",
"请输入简称": "Please enter the abbreviation",
"国家城市代码": "Country City Code",
"国家代码-城市代码": "Country City Code",
"显示顺序": "Display order",
"请输入显示顺序": "Please enter the display order",
"部门状态": "Department Status",
......
......@@ -485,6 +485,12 @@ export const constantRoutes = [
props: true,
name: 'shippingAir',
meta: {titleZh: '空运出货操作', titleEn: "Ocean shipment operation", icon: '', activeMenu: '/shipment/boxAir'}
},
{
path: 'batch_markup',
component: (resolve) => import('@/views/ecw/box/batchMarkup'),
name: 'batchMarkup',
meta: {titleZh: '批量加价', titleEn: "Batch Markup", icon: '', activeMenu: '/boxSeaAir'}
}
]
},
......
......@@ -2,7 +2,14 @@ import router from '@/router'
const state = {
visitedViews: [],
cachedViews: []
cachedViews: [],
}
// 获取页面的缓存名称
const getViewName = (view) => {
if(!view.meta?.componentPath){
return view.fullPath
}
return view.meta.componentPath.split('/').map(item => item.substring(0, 1).toUpperCase() + item.substring(1).toLowerCase()).join('')
}
const mutations = {
......@@ -16,7 +23,7 @@ const mutations = {
},
ADD_CACHED_VIEW: (state, view) => {
if (view.meta && view.meta.componentPath) {
let cacheName = view.meta.componentPath.split('/').map(item => item.substring(0, 1).toUpperCase() + item.substring(1).toLowerCase()).join('')
let cacheName = getViewName(view)
if (state.cachedViews.includes(cacheName)) return
state.cachedViews.push(cacheName)
}
......@@ -31,7 +38,9 @@ const mutations = {
}
},
DEL_CACHED_VIEW: (state, view) => {
const index = state.cachedViews.indexOf(view.name)
console.log('DEL_CACHED_VIEW', view)
const viewName = getViewName(view)
const index = state.cachedViews.indexOf(viewName)
index > -1 && state.cachedViews.splice(index, 1)
},
......
......@@ -122,6 +122,7 @@ export const DICT_TYPE = {
ECW_FEE_SOURCE: 'fee_source', // 费用来源
STOCK_UP_EXCEPTION_TYPE: 'stock_up_exception_type', // 备货异常类型,
ORDER_ITEM_PACK_STATUS: 'order_item_pack_status', // 空运备货打包状态
RECEIPT_FEE_TYPE:'receipt_fee_type',
//--------ecw---------
CUSTOMER_STATUS: 'customer_status',
CUSTOMER_SOURCE: 'customer_source',
......@@ -193,7 +194,7 @@ export const DICT_TYPE = {
ECW_AUTH_TYPE:'auth_type',//品牌授权
NEED_ORDER_INQUIRY: 'need_order_inquiry', // 是否需要単询
EXCEPTION_SELECT_FILED:'exception_select_filed',
ECASH_INIT:'ecash_init', //e-cash
FEE_TYPE:'receivable_fee_type',
// PAY_TYPE:'payment_type',
......@@ -224,7 +225,7 @@ export const DICT_TYPE = {
BOX_CUSTOMS_ERROR_TYPE: "customs_error_type",// 报关异常状态
BOX_SHIPPING_ERROR_TYPE: "shipping_error_type",// 起运异常状态
BOX_ARRIVAL_ERROR_TYPE: "arrival_error_type",// 到港异常状态
SETTLEMENT_STATUS: 'settlement_status', // 结算状态
APP_TYPE:"app_type", //系统类型
AIR_SHIPMENT_PROCESS:'air_shipment_process'
......
......@@ -6,6 +6,7 @@ import errorCode from '@/utils/errorCode'
import Cookies from "js-cookie";
import {getTenantEnable} from "@/utils/ruoyi";
import { getLocale } from '@/utils/db';
import i18n from "@/i18n";
// 是否显示重新登录
export let isRelogin = { show: false };
......@@ -114,9 +115,15 @@ service.interceptors.response.use(res => {
// 额外情况
return Promise.reject(res.data)
} else if (code !== 200) {
Notification.error({
title: msg
})
// 如果内容很长则用alert提示,不然可能显示不全,自动隐藏也会导致看不完整就消失了
if(msg.length > 300){
MessageBox.alert(msg, i18n.t('错误提示'), i18n.t('确定'))
}else{
Notification.error({
title: msg
})
}
return Promise.reject(msg || 'error')
} else {
return res.data
......
......@@ -25,11 +25,11 @@
</el-form-item>
</el-form>
<div style="margin-left: 10%; margin-bottom: 20px; font-size: 14px;">
<el-button icon="el-icon-edit-outline" type="success" size="mini" @click="handleAudit(item, true)">{{$t('通过')}}
<el-button :loading="loading" icon="el-icon-edit-outline" type="success" size="mini" @click="handleAudit(item, true)">{{$t('通过')}}
</el-button>
<el-button icon="el-icon-circle-close" type="danger" size="mini" @click="handleAudit(item, false)">{{$t('不通过')}}
<el-button :loading="loading" icon="el-icon-circle-close" type="danger" size="mini" @click="handleAudit(item, false)">{{$t('不通过')}}
</el-button>
<el-button icon="el-icon-edit-outline" type="primary" size="mini" @click="handleUpdateAssignee(item)">{{$t('转办')}}
<el-button :loading="loading" icon="el-icon-edit-outline" type="primary" size="mini" @click="handleUpdateAssignee(item)">{{$t('转办')}}
</el-button>
<!-- <el-button icon="el-icon-edit-outline" type="primary" size="mini" @click="handleDelegate(item)">{{ $t('委派') }}</el-button>-->
<!-- <el-button icon="el-icon-refresh-left" type="warning" size="mini" @click="handleBack(item)">{{ $t('退回') }}</el-button>-->
......@@ -181,11 +181,18 @@ export default {
id: this.processInstance.businessKey,
type: 2
},
// 原来的费用申请
free_apply: {
component: "warehouseDetails",
processId: this.processInstance.businessKey,
type: 2
},
// 2.0空运加的批量申请
batch_free_apply: {
component: () => import('@/views/ecw/order/components/BatchFeeApplication'),
businessId: this.processInstance.businessKey,
processInstanceId: this.$route.query.id
},
retired_warehouse: {
component: "warehouseDetails",
processId: this.processInstance.businessKey,
......@@ -422,6 +429,8 @@ export default {
},
data() {
return {
// 提交中
loading: false,
// 遮罩层
processInstanceLoading: true,
// 流程实例
......@@ -655,12 +664,15 @@ export default {
comment: this.auditForms[index].comment,
copyUserIds: this.auditForms[index].copyUserIds
}
this.loading = true
if (pass) {
approveTask(data).then(response => {
let p = this.matterNum
//this.$store.commit('GET_MAATER', --p)
this.$modal.msgSuccess("审批通过成功!");
this.getDetail(); // 获得最新详情
}).finally(() => {
this.loading = false
});
} else {
rejectTask(data).then(response => {
......@@ -668,6 +680,8 @@ export default {
//this.$store.commit('GET_MAATER', --p)
this.$modal.msgSuccess("审批不通过成功!");
this.getDetail(); // 获得最新详情
}).finally(() => {
this.loading = false
});
}
});
......
......@@ -71,6 +71,8 @@ export default {
this.form = { ...this.shipmentObj };
if(this.form.destinationClearance && this.form.destinationClearance != 3){
this.form.destinationClearanceSelect = 1
}else{
this.form.destinationClearanceSelect = 3
}
this.getChannelList()
},
......
......@@ -102,7 +102,7 @@
<span>{{ new Date(scope.row.createTime).format('yyyy-MM-dd hh:mm:ss') }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('操作')" align="center" class-name="small-padding fixed-width">
<el-table-column :label="$t('操作')" align="center" class-name="small-padding fixed-width" width="200px">
<template slot-scope="scope">
<!-- <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)"
v-hasPermi="['shipment:box:query']">{{$t('查看')}}</el-button>
......@@ -110,7 +110,7 @@
v-hasPermi="['shipment:box:update']">{{$t('修改')}}</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['shipment:box:delete']">{{$t('删除')}}</el-button> -->
<el-dropdown trigger="click" @command="(command) => handleCommand(scope.row, command)">
<el-dropdown trigger="click" @command="(command) => handleCommand(scope.row, command)" style="marginRight:10px;">
<el-button type="primary"> {{ $t('操作') }}<i class="el-icon-arrow-down el-icon--right"></i> </el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="edit">{{$t('编辑')}}</el-dropdown-item>
......@@ -123,6 +123,20 @@
</el-dropdown-menu>
</el-dropdown>
<el-dropdown trigger="click" @command="(command)=>handleCommand(scope.row, command)" v-hasPermi="['shipment:box:download:downloadPreloadGoodsList','shipment:box:download:downloadLoadGoodsList','shipment:box:download:downloadReceivableList','shipment:box:download:downloadAgentListFiles','shipment:box:download:downloadSoncapFiles','shipment:box:download:zipDownload','shipment:box:download:downloadLadingCopy']">
<el-button type="primary">
{{$t('下载')}}<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="downloadPreloadGoodsList" v-hasPermi="['shipment:box:download:downloadPreloadGoodsList']">{{$t('预装单')}}</el-dropdown-item>
<el-dropdown-item command="downloadLoadGoodsList" v-hasPermi="['shipment:box:download:downloadLoadGoodsList']">{{$t('已装单')}}</el-dropdown-item>
<el-dropdown-item command="downloadReceivableList" v-hasPermi="['shipment:box:download:downloadReceivableList']">{{$t('应收汇总表')}}</el-dropdown-item>
<el-dropdown-item command="downloadAgentListFiles" v-hasPermi="['shipment:box:download:downloadAgentListFiles']">agent list</el-dropdown-item>
<el-dropdown-item command="downloadSoncapFiles" v-hasPermi="['shipment:box:download:downloadSoncapFiles']">soncap</el-dropdown-item>
<el-dropdown-item command="zipDownload" v-hasPermi="['shipment:box:download:zipDownload']">{{$t('提货单')}}</el-dropdown-item>
<el-dropdown-item command="downloadLadingCopy" v-hasPermi="['shipment:box:download:downloadLadingCopy']">{{$t('提单Copy')}}</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</el-table>
......@@ -180,7 +194,7 @@
</template>
<script>
import { deletebox, getbox, getboxPage, exportboxExcel } from '@/api/ecw/box'
import {deletebox, getbox, getboxPage, exportboxExcel, getNoticeList, dealCustomsSplitNotify} from '@/api/ecw/box'
import { getChannelList } from '@/api/ecw/channel'
import { getWarehouseList } from '@/api/ecw/warehouse'
import costForm from './costForm.vue'
......@@ -328,13 +342,27 @@ export default {
getWarehouseList().then((res) => (this.warehouseList = res.data))
this.getList()
this.getChannelList()
this.queryNotice()
},
methods: {
formatDate,
getChannelList() {
getChannelList().then((res) => (this.channelList = res.data))
},
queryNotice() {
getNoticeList({
transportTypeList: this.transportTypes.map((item) => item.value),
}).then((res) => {
const { data } = res;
this.noticeList = data ?? [];
if (data.length) {
this.$set(this.dialogCfg, "title", this.$t("出货操作提醒"));
this.$set(this.dialogCfg, "dialogType", "notice");
this.$set(this.dialogCfg, "width", "650px");
this.$set(this.dialogCfg, "open", true);
}
});
},
/** 查询列表 */
getList() {
this.loading = true
......@@ -391,7 +419,10 @@ export default {
this.$set(this.dialogCfg, 'fullscreen', false)
this.$set(this.dialogCfg, 'open', true)
this.currRow = {
transportType: '3'
transportType: '3',
destinationClearanceSelect: 1,
destinationClearance: 1,
deliveryType: 1
}
},
/** 修改按钮操作 */
......@@ -435,53 +466,105 @@ export default {
return exportboxExcel(params)
})
.then((response) => {
this.$download.excel(response, '${table.classComment}.xls')
this.$download.excel(response, this.$t("空运管理") + ".xls");
this.exportLoading = false
})
.catch(() => {})
},
/** 查看按钮操作 */
handleCommand(row, command) {
switch (command) {
case "detail":
this.$router.push("/boxAir/query/" + row.id);
break;
case 'air':
this.$router.push('/boxAir/shippingAir/' + row.id)
break
async handleCommand(row, command) {
console.log(command, row);
switch (command) {
case "detail":
this.$router.push("/boxAir/query/" + row.id);
break;
case 'air':
this.$router.push('/boxAir/shippingAir/' + row.id)
break
case 'edit':
this.handleUpdate(row)
break
case 'edit':
this.handleUpdate(row)
break
case 'delete':
this.handleDelete(row);
break;
case "editLadingBill":
const cabinetLabel = this.getCabinetName(row.cabinetId);
const title = this.$t(
"查看提单 {selfNo} 柜号:{cubNo} 柜型:{cabinetLabel}",
{
selfNo: row.selfNo,
cubNo: row.cubNo,
cabinetLabel: cabinetLabel,
}
);
this.$set(this.dialogCfg, "title", title);
this.$set(this.dialogCfg, "fullscreen", true);
break;
const cabinetLabel = this.getCabinetName(row.cabinetId);
const title = this.$t(
"查看提单 {selfNo} 柜号:{cubNo} 柜型:{cabinetLabel}",
{
selfNo: row.selfNo,
cubNo: row.cubNo,
cabinetLabel: cabinetLabel,
}
);
this.$set(this.dialogCfg, "title", title);
this.$set(this.dialogCfg, "fullscreen", true);
break;
case 'batchMarkup':
this.$router.push('batch_markup?shipmentId=' + row.id)
this.$router.push('/boxAir/batch_markup?shipmentId=' + row.id)
break
case "downloadPreloadGoodsList":
downloadFile(
command,
{shipmentId: row.id},
this.$t("预装单") + `(${row.selfNo}).xlsx`,
"xlsx"
);
break;
case "downloadLoadGoodsList":
downloadFile(
command,
{shipmentId: row.id},
this.$t("已装单") + `(${row.selfNo}).xlsx`,
"xlsx"
);
break;
case "downloadReceivableList":
downloadFile(
command,
{shipmentId: row.id},
this.$t("应收汇总表") + `(${row.selfNo}).xlsx`,
"xlsx"
);
break;
case "zipDownload":
downloadFile(
command,
{shipmentId: row.id},
this.$t("提货单") + `(${row.selfNo}).zip`,
"zip"
);
break;
case "downloadAgentListFiles":
case "downloadSoncapFiles":
case "downloadLadingCopy":
downloadFileByUrl(command, {shipmentId: row.id});
break;
case "handle":
const { noticeType } = row;
if ([1, 2, 3, 4, 8].includes(noticeType)) {
this.$router.push("/boxAir/shippingAir/" + row.id);
}
if ([5, 6, 7].includes(noticeType)) {
this.$router.push("/boxAir/query/" + row.id);
}
if([9].includes(noticeType)){
await dealCustomsSplitNotify(row.notifyId)
}
this.closeDialog();
break;
}
if (["editLadingBill", "cost", "error"].includes(command)) {
this.currRow = row;
this.$set(this.dialogCfg, "dialogType", command);
this.$set(this.dialogCfg, "width", "600px");
this.$set(this.dialogCfg, "open", true);
}
},
}
if (["editLadingBill", "cost", "error"].includes(command)) {
this.currRow = row;
this.$set(this.dialogCfg, "dialogType", command);
this.$set(this.dialogCfg, "width", "600px");
this.$set(this.dialogCfg, "open", true);
}
},
}
}
</script>
......
......@@ -88,10 +88,13 @@
{{row.orderReportNumber || 0}}
</template>
</el-table-column>
<el-table-column :label="$t('已装柜方数')" align="center" prop="loadingNumber" >
<el-table-column :label="$t('装柜或出仓方数')" align="center" prop="loadingNumber" >
<template slot-scope="{row}">
{{row.loadingNumber || 0}}
</template>
</el-table-column>
<el-table-column label="装柜或出仓重量" prop="loadingWeight">
</el-table-column>
<el-table-column :label="$t('创建时间')" align="center" prop="createTime" width="180">
<template slot-scope="scope">
......@@ -105,8 +108,8 @@
<div>{{row.hqNumber}}个40HQ</div>
</template>
</el-table-column>
<el-table-column :label="$t('未来计划方数')" align="center" prop="futurePlanNumber" />
<el-table-column :label="$t('未来实际方数')" align="center" prop="actualNumber" />
<el-table-column :label="$t('未来计划')" align="center" prop="futurePlanNumber" />
<el-table-column :label="$t('未来实际')" align="center" prop="actualNumber" />
<el-table-column :label="$t('创建人')" align="center" prop="createName" />
<el-table-column :label="$t('操作')" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
......@@ -158,26 +161,29 @@
<el-form-item :label="$t('自单代报订单方数')">
{{form.orderReportNumber}} m³
</el-form-item>
<el-form-item :label="$t('已装柜方数')">
<el-form-item :label="$t('装柜或出仓方数')">
{{form.loadingNumber}} m³
</el-form-item>
<el-form-item :label="$t('装柜或出仓重量')">
{{form.loadingWeight}} kG
</el-form-item>
<el-form-item label="">
<div>
{{$t('未来')}} <el-input v-model="form.futureNumber" class="w-100"></el-input> {{$t('天货柜数')}}
{{$t('未来')}} <el-input v-model="form.futureNumber" class="w-100"></el-input> {{$t('天')}}
</div>
<div class="mt-10">
<div v-if="form.transportType !== '3'" class="mt-10">
<el-input v-model="form.gpNumber" class="w-100" /> &times; 40GP
<el-input v-model="form.hqNumber" class="w-100 ml-10" /> &times; 40HQ
</div>
<div class="mt-10">
{{$t('未来{futureNumber}天计划方数',{futureNumber: form.futureNumber})}}:
<el-input v-model="form.futurePlanNumber" class="w-100"></el-input>
{{$t('未来{futureNumber}天计划{unit}',{futureNumber: form.futureNumber,unit:form.transportType === '1' ? '立方' : '重量'})}}:
<el-input v-model="form.futurePlanNumber" class="w-100"></el-input> {{form.transportType === '1' ? 'm3' : 'kg'}}
</div>
<div class="mt-10">
{{$t('未来{futureNumber}天实际方数',{futureNumber: form.futureNumber})}}:
<el-input v-model="form.actualNumber" class="w-100"></el-input>
{{$t('未来{futureNumber}天实际{unit}',{futureNumber: form.futureNumber,unit:form.transportType === '1' ? '立方' : '重量'})}}:
<el-input v-model="form.actualNumber" class="w-100"></el-input> {{form.transportType === '1' ? 'm3' : 'kg'}}
</div>
</el-form-item>
</el-form>
......@@ -190,7 +196,21 @@
</template>
<script>
import { createFutureBox, updateFutureBox, deleteFutureBox, getFutureBox, getFutureBoxPage, exportFutureBoxExcel, getBoxedVolume, getToBeWareHousedVolume,getWareHousedVolume,getExceptionVolume, getOrderReportVolume,getWarehousingVolume} from "@/api/ecw/futureBox";
import {
createFutureBox,
updateFutureBox,
deleteFutureBox,
getFutureBox,
getFutureBoxPage,
exportFutureBoxExcel,
getBoxedVolume,
getToBeWareHousedVolume,
getWareHousedVolume,
getExceptionVolume,
getOrderReportVolume,
getWarehousingVolume,
getBoxedWeight
} from "@/api/ecw/futureBox";
import {getCabinetPage} from "@/api/ecw/cabinet";
import { getChannelList } from '@/api/ecw/channel';
import { getWarehouseList } from "@/api/ecw/warehouse"
......@@ -387,6 +407,10 @@ export default {
getWarehousingVolume(data).then(res => {
this.$set(this.form, 'warehousingNumber', res.data || 0)
})
// 获取装柜出货重量
getBoxedWeight(data).then(res =>{
this.$set(this.form,'loadingWeight', res.data || 0)
})
},
setDefaultVolume(){
this.$set(this.form, 'loadingNumber', 0)
......@@ -434,6 +458,7 @@ export default {
actualNumber: undefined,
shippingChannelId: undefined,
status: undefined,
loadingWeight:undefined,
};
this.resetForm("form");
},
......
......@@ -213,7 +213,7 @@ import {
getbox,
getboxPage,
exportboxExcel,
getNoticeList,
getNoticeList, dealCustomsSplitNotify,
} from "@/api/ecw/box";
import {
downloadFile,
......@@ -247,6 +247,11 @@ export default {
{ value: "5", label: this.$t("清关时间") },
{ value: "6", label: this.$t("卸柜时间") },
],
ladingBillStatusData: [
this.$t("未完成"),
this.$t("部分完成"),
this.$t("已完成"),
],
// 遮罩层
loading: true,
// 导出遮罩层
......@@ -283,11 +288,6 @@ export default {
// 通知列表
noticeList: [],
allUsers: [],
ladingBillStatusData: [
this.$t("未完成"),
this.$t("部分完成"),
this.$t("已完成"),
],
};
},
computed: {
......@@ -446,7 +446,7 @@ export default {
}
},
/** 查看按钮操作 */
handleCommand(row, command) {
async handleCommand(row, command) {
this.$set(this.dialogCfg, "fullscreen", false);
switch (command) {
......@@ -533,6 +533,9 @@ export default {
if ([5, 6, 7].includes(noticeType)) {
this.$router.push("/boxSea/query/" + row.id);
}
if([9].includes(noticeType)){
await dealCustomsSplitNotify(row.notifyId)
}
this.closeDialog();
break;
}
......
......@@ -178,6 +178,10 @@ export default {
},
// 先获取订单信息,pdf用 订单号+唛头命名
createPdf(){
// 空运的由接口生成pdf,所以直接提交即可
if(this.$route.fullPath.toLowerCase().indexOf('air') > -1){
return this.submit()
}
getOrder(this.currRow.orderId).then(res => {
this.afterCreatePdf(res.data)
})
......@@ -218,11 +222,16 @@ export default {
},
submit(imgUrl) {
let params = {
imgUrl,
billContent: this.billContent,
orderId: this.currRow.orderId,
copyUserId: this.selectedUsers,
};
// 有pdf地址则提交,没有则指定后端生成
if(imgUrl){
params.imgUrl = imgUrl
}else{
params.needBackend = true
}
if (["makeBill", "resetBill"].includes(this.dialogCfg.type)) {
createBillService({ ...params, status: 1 }).then((res) => {
serviceMsg(res, this).then((res) => {
......
......@@ -110,7 +110,7 @@
<div class="status-line"></div>
<div class="status-number">{{logList.length - index}}</div>
<div class="status-info">
<div>{{$l(item, 'title')}}</div>
<div>{{$l(item, 'title')}} <el-button v-if="item.approvalId>0" type="text" @click="handleApproval(item.bpmProcessId)">{{$t('查看审批')}}</el-button></div>
<div>
<p>{{formatDate(item.createTime)}}</p>
<p>{{item.operator}}</p>
......@@ -574,6 +574,9 @@ export default {
);
}
},
handleApproval(id) {
this.$router.push({path: '/bpm/process-instance/detail', query: {id: id}})
}
},
computed: {
visitedViews() {
......@@ -636,7 +639,7 @@ export default {
} else {
return getTotlContent(secStatistics);
}
},
}
},
};
</script>
......
......@@ -234,7 +234,7 @@ export default {
{ required: true, message: this.$t("必填"), trigger: "change" },
],
overMachineStatus: [
{pattern: /^[12]$/, message: this.$t("必填")}
{ required: true, pattern: /^[12]$/, message: this.$t("必填")}
],
},
// 弹窗配置
......
......@@ -44,7 +44,7 @@
<el-table-column :label="$t('储位')" align="center" prop="positionNo" width="250px">
<template slot-scope="{ row }">
<div v-for="item in row.orderItemDOS" :key="item.orderItemId">
{{ notset(item.positionNo) }}
{{ notset(getpositionNo(item.warehouseInInfoVO.orderLocationMergeVOSet)) }}
</div>
</template>
</el-table-column>
......@@ -184,6 +184,14 @@ export default {
})
return arr.toString()
},
getpositionNo(arr){
if(!arr) return arr
let data = []
arr.forEach(item=>{
data.push(item.areaName+item.locationName)
})
return data.toString()
},
removePkg(row) {
deleteRelate(this.pkgData.id, row.orderId).then(() => {
this.$message.success(this.$t('移出成功'))
......
......@@ -15,19 +15,19 @@
</div>
<div style="width: 140px">
<p style="margin-top: 1mm; text-align: center">
<span style="text-align: center; font-weight: 600; font-size: 4mm">EC001141212</span>
<span style="text-align: center; font-weight: 600; font-size: 4mm">{{ tagData.mergePkgNo }}</span>
</p>
<div style="border: 1px solid #999;margin-left: 10px;" />
<div style="border-top: 1px solid #999;margin-left: 10px;" />
<p style="margin-top: 1mm; text-align: center">
<span style="text-align: center; font-weight: 600; font-size: 4mm">{{ tagData.company }}</span>
</p>
<div style="border: 1px solid #999;margin-left: 10px;" />
<div style="border-top: 1px solid #999;margin-left: 10px;" />
<p style="margin-top: 1mm; text-align: center">
<span style="text-align: center; font-weight: 600; font-size: 4mm">{{ tagData.startWarehouse }} -> {{ tagData.endWarehouse }}</span>
</p>
<div style="border: 1px solid #999;margin-left: 10px;" />
<div style="border-top: 1px solid #999;margin-left: 10px;" />
<div style="display: flex;margin-top: 10px;">
<div style="border-right: 2px solid #999;width: 45px;">
<div style="border-right: 1px solid #999;width: 45px;">
<p style="margin-top: 1mm; text-align: center">
<span style="text-align: center; font-weight: 600; font-size: 4mm">{{ tagData.transportName }}</span>
</p>
......@@ -40,10 +40,10 @@
</div>
</div>
</div>
<div style="border: 1px solid #999;margin: 10px;" />
<div>
<div style="border-top: 1px solid #999;margin: 10px;" />
<!--<div>
<img :src="tagData.barcodeUrl" style="width:250px;height: 50px;" />
</div>
</div>-->
<div style="height: 50px;">
<p style="margin-top: 1mm; text-align: center">
<span style="text-align: center; font-weight: 600; font-size: 3mm">E&C Logistics: www.groupage.com</span>
......@@ -110,4 +110,4 @@ export default {
border: 1px solid #999;
border-radius: 5px;
}
</style>
\ No newline at end of file
</style>
......@@ -112,7 +112,7 @@ export default {
if(!arr) return arr
let data = []
arr.forEach(item=>{
data.push(item.locationName)
data.push(item.areaName+item.locationName)
})
return data.toString()
},
......
......@@ -98,6 +98,7 @@ export default {
// 提单补料对象
subMaterialObj: {
markNo: "N/M",
issueType: '2'
},
// 出单方式
method: constantDict.billingMethod,
......@@ -126,7 +127,9 @@ export default {
});
const voName = this.$attrs.currNode.voName;
let oldData = { ...this.shipmentObj[voName] };
oldData = formatNumberString(oldData, ["issueType"]);this.subMaterialObj = {
if(!oldData.issueType || oldData.issueType == 0) oldData.issueType = 2
oldData = formatNumberString(oldData, ["issueType"]);
this.subMaterialObj = {
...oldData,
packageUnit: oldData.packageUnit === 0 ? undefined : oldData.packageUnit,
};
......
......@@ -666,11 +666,11 @@ const constantDict = {
billingMethod: [
{
value: "1",
label: i18n.$t("电放"),
label: i18n.$t("正本"),
},
{
value: "2",
label: i18n.$t("正本"),
label: i18n.$t("电放"),
},
],
// 是否有文件
......
......@@ -10,13 +10,14 @@
</el-select>
</el-form-item>
<el-form-item :label="$t('装柜时间')" prop="ldBoxTime">
<!-- {{cabinetObj.ldBoxTime?new Date(cabinetObj.ldBoxTime).format('yyyy-MM-dd hh:mm:ss'):new Date().format('yyyy-MM-dd hh:mm:ss')}} -->
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="cabinetObj.ldBoxTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-form-item>
<el-form-item :label="$t('出仓时间')">
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="cabinetObj.ldOutWarehouseTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-form-item>
<el-form-item :label="$t('装柜图片')">
<ImageUpload :limit="1" :isShowTip=false v-model="cabinetObj.ldPictures" />
<ImageUpload :limit="1" :isShowTip=false v-model="cabinetObj.ldPictures" @input="saveImage" />
</el-form-item>
</el-form>
......@@ -55,11 +56,7 @@ export default {
// 装柜对象
cabinetObj: {},
// 校验
rules: {
ldBoxTime: [
{ required: true, message: this.$t("必填"), trigger: "change" },
],
},
rules: {},
};
},
created() {
......@@ -136,6 +133,27 @@ export default {
startCabinet() {
this.dialogVisible = true;
},
//自动保存图片
saveImage() {
const { ldPictures } = this.cabinetObj;
let pictures = ldPictures?.split(",") ?? [];
let newPictures = [];
for (const item of pictures) {
if (item) {
newPictures.push({
type: "image",
url: item,
});
}
}
cabinetCreate({
shipmentId: this.$attrs.shipmentObj.id,
ldPictures: newPictures.length ? JSON.stringify(newPictures) : "",
operateType: 1,
}).then(()=>{
this.$emit("getBoxInfo");
})
}
},
computed: {
isStartCabinet() {
......
......@@ -50,6 +50,11 @@
<el-form-item :label="$t('始发地')">
<p>{{importCityName(queryParams.startWarehouseId)}}</p>
</el-form-item>
<el-form-item :label="$t('国家')" prop="destination">
<el-select v-model="queryParams.destCountryId" :placeholder="$t('请选择国家')" @change="clearDestWarehouseIdList">
<el-option v-for="item in countryList" :key="item.id" :label="$l(item, 'title')" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item :label="$t('目的地')" prop="destination">
<el-select v-model="queryParams.destWarehouseIdList" :placeholder="$t('请选择目的地')" multiple>
<el-option v-for="item in importWarehouseList" :label="item.titleZh" :value="item.id" :key="item.id"></el-option>
......@@ -154,6 +159,7 @@ import {
createGoods,
remove,
} from "@/api/ecw/boxSea";
import { getWarehouseList } from "@/api/ecw/warehouse"
import {
formatDate,
getTotlContent,
......@@ -161,6 +167,7 @@ import {
getCapacity,
sumStatistics,
} from "../../utils";
import { getListTree } from "@/api/ecw/region";
/**
* 补单
*/
......@@ -169,6 +176,10 @@ export default {
inheritAttrs: false,
data() {
return {
//国家列表
countryList:[],
//仓库列表
warehouseList: [],
// 二维码/条码编号
cabinetNo: "",
// 表格数据
......@@ -192,9 +203,22 @@ export default {
};
},
created() {
this.queryAllData();
this.getCountry()
},
methods: {
//获取国家
async getCountry() {
let countryList = await getListTree({treeType: 1})
this.countryList = countryList.data
let warehouseList = await getWarehouseList()
this.warehouseList = warehouseList.data
let warehouse = this.warehouseList.find(item=>item.id == this.$attrs.shipmentObj.destWarehouseId)
console.log(warehouse,'warehouse')
if(warehouse){
this.$set(this.queryParams,'destCountryId', warehouse.guojia)
}
this.queryAllData();
},
/* 查询已预装 */
getSecGoods() {
loadSecGoodsList({ shipmentId: this.$attrs.shipmentObj.id }).then(
......@@ -335,17 +359,25 @@ export default {
if (res.code === 566) {
this.$confirm(res.msg+this.$t('是否需要一起预装?'), this.$t("提示"), {
dangerouslyUseHTMLString: true,
type: "warning",
distinguishCancelAndClose: true,
confirmButtonText: '预装关联单',
cancelButtonText: '仅当前订单'
})
.then((_) => {
createGoods({ ...params, relationStatus: 2 }).then((res) => {
createGoods({ ...params, relationStatus: 2, singleLoad: false }).then((res) => {
serviceMsg(res, this).then(() => {
this.queryAllData();
});
});
})
.catch((_) => {
this.queryAllData();
.catch((action) => {
if(action =='cancel'){
createGoods({ ...params, relationStatus: 2, singleLoad: true }).then((res) => {
serviceMsg(res, this).then(() => {
this.queryAllData();
});
});
}
});
}
});
......@@ -432,12 +464,16 @@ export default {
formatDate,
getTotlContent,
sumStatistics,
//切换国家时清除目的仓
clearDestWarehouseIdList() {
this.queryParams.destWarehouseIdList = []
}
},
computed: {
/** 目的地 */
importWarehouseList() {
return this.$attrs.warehouseList.filter(
(item) => item.tradeType == "1" || item.type == "3"
(item) => (item.tradeType == "1" || item.type == "3") && item.guojia == this.queryParams.destCountryId
);
},
/* 容量 */
......
......@@ -264,6 +264,7 @@ export default {
},
methods: {
getCustomsOrderList(dcCustomsType) {
if(!dcCustomsType) dcCustomsType = '1'
customsOrderList({
shipmentId: this.shipmentObj.id,
customsTypes: dcCustomsType === "3" ? "2,3" : dcCustomsType,
......@@ -547,6 +548,7 @@ export default {
},
watch: {
"cusDeclarationObj.dcCustomsType"(val) {
console.log(val,'val')
this.getCustomsOrderList(val);
},
"cusDeclarationObj.documentInfo"(val) {
......
......@@ -699,7 +699,7 @@ export default {
type: "warning",
})
.then((_) => {
createGoods({ ...params, relationStatus: 1 }).then((res) => {
createGoods({ ...params, relationStatus: 1, singleLoad: true }).then((res) => {
serviceMsg(res, this).then(() => {
this.queryAllData();
});
......@@ -713,17 +713,25 @@ export default {
if (res.code === 566) {
this.$confirm(res.msg+this.$t('是否需要一起预装?'), this.$t("提示"), {
dangerouslyUseHTMLString: true,
type: "warning",
distinguishCancelAndClose: true,
confirmButtonText: '预装关联单',
cancelButtonText: '仅当前订单'
})
.then((_) => {
createGoods({ ...params, relationStatus: 2 }).then((res) => {
createGoods({ ...params, relationStatus: 2, singleLoad: false }).then((res) => {
serviceMsg(res, this).then(() => {
this.queryAllData();
});
});
})
.catch((_) => {
this.queryAllData();
.catch((action) => {
if(action =='cancel'){
createGoods({ ...params, relationStatus: 2, singleLoad: true }).then((res) => {
serviceMsg(res, this).then(() => {
this.queryAllData();
});
});
}
});
}
});
......
......@@ -35,7 +35,7 @@
</el-form-item>
<el-form-item :label="$t('包装数量与单位')" class="two-element">
<el-input v-model="subMaterialObj.packageNum" :placeholder="$t('请输入包装数量')"></el-input>
<dict-selector v-model="subMaterialObj.packageUnit" type="packaging_type" />
<dict-selector v-model="subMaterialObj.packageUnit" type="goods_package_type" />
</el-form-item>
<el-form-item :label="$t('货物毛重(KGS)')">
<el-input v-model="subMaterialObj.kgs" :placeholder="$t('请输入货物毛重') + '(KGS)'"></el-input>
......
......@@ -178,7 +178,7 @@ export default {
list.push({
...oItem,
warehouseInInfo,
multiSpecification: item.multiSpecification,
multiSpecification: oItem.multiSpecification,
positionNo: oItem.positionNo,
tallyStatus: item.tallyStatus,
tallyTime: item.tallyTime,
......
<template>
<div style="width: 100%;min-width: 100px">
<el-select v-model="val">
<el-select @change="(e) =>{$emit('change', e)}" :disabled="disabled" v-model="val">
<el-option :value="item.id" :label="$l(item, 'title') + item.fuhao" v-for="(item) in options"></el-option>
</el-select>
</div>
......@@ -10,6 +10,10 @@
export default {
name: "currency-select",
props:{
disabled:{
type:Boolean,
default:false
},
options:{
type:Array,
default:()=>[]
......
<template>
<div>
<template v-if="!readonly">
<el-row type="flex" align="align" :gutter="10" >
<el-col :span="6">空运订单重量上限(kg)</el-col>
<el-col :span="6" ><el-input v-model="value1.airWeightLimit"></el-input></el-col>
......@@ -8,12 +9,13 @@
</el-col>
</el-row>
<h1>空运清关费</h1>
</template>
<div v-for="(item ,index) in value1[keyArr]">
<el-row :gutter="10">
<el-col :span="4">
第{{index + 1 }}阶梯定价方案:
</el-col>
<el-col :span="6">
<el-col :span="6" v-if="!readonly">
<el-button type="primary" @click="addInterval" v-if="index === 0" >
添加区间
</el-button>
......@@ -29,7 +31,7 @@
<el-col :span="9">
<div style="display: flex;align-items: center;">
<el-input v-model="item.startNum"></el-input> - <el-input v-model="item.endNum" ></el-input > /
<weight-select v-model="item.weightUnit" :options="unitList"></weight-select>
<weight-select @change="changeWeight" :disabled="index > 0" v-model="item.weightUnit" :options="unitList"></weight-select>
</div>
</el-col>
</el-row>
......@@ -40,8 +42,8 @@
<el-col :span="9">
<div style="display: flex;align-items: center;">
<el-input v-model="item.clearancePrice"></el-input>
<currency-select :options="currencyList" v-model="item.clearancePriceUnit"></currency-select>
/ <weight-select :options="unitList" v-model="item.clearanceVolumeUnit"></weight-select>
<currency-select @change="setCurrency" :disabled="index > 0" :options="currencyList" v-model="item.clearancePriceUnit"></currency-select>
/ <weight-select :disabled="index > 0" @change="setAirFreightWeight" :options="unitList" v-model="item.clearanceVolumeUnit"></weight-select>
</div>
</el-col>
</el-row>
......@@ -54,6 +56,7 @@ import {getCurrencyPage} from "@/api/ecw/currency";
import CurrencySelect from "@/views/ecw/channel/componrnts/currency-select.vue";
import {getUnitList} from "@/api/ecw/unit";
import WeightSelect from "@/views/ecw/channel/componrnts/weight-select.vue";
import Template from "@/views/cms/template/index.vue";
export default {
props:{
value:{
......@@ -63,10 +66,11 @@ export default {
keyArr:{
type:String,
default:'channelPriceStepClearanceList'
}
},
readonly: Boolean
},
name: "packaging-type",
components: {WeightSelect, CurrencySelect},
components: {Template, WeightSelect, CurrencySelect},
created() {
getCurrencyPage(this.params).then(res => this.currencyList = res.data.list)
getUnitList().then(res => this.unitList = res.data)
......@@ -91,16 +95,31 @@ export default {
})
},
methods:{
changeWeight(e){
this.value1[this.keyArr].forEach(item => {
item.weightUnit = e
})
},
setCurrency(e){
this.value1[this.keyArr].forEach(item => {
item.clearancePriceUnit = e
})
},
setAirFreightWeight(e){
this.value1[this.keyArr].forEach(item => {
item.clearanceVolumeUnit = e
})
},
addInterval(){
let p = {
"channelId":'',
"clearancePrice":'',
"clearancePriceUnit":'',
"clearanceVolumeUnit":6,
"clearancePriceUnit": this.value1[this.keyArr].length && this.value1[this.keyArr][0].clearancePriceUnit ? this.value1[this.keyArr][0].clearancePriceUnit : '',
"clearanceVolumeUnit":this.value1[this.keyArr].length ? this.value1[this.keyArr][0].clearanceVolumeUnit : 6,
"endNum":'',
"packagingId":'',
"startNum":'',
"weightUnit":6
"weightUnit": this.value1[this.keyArr].length ? this.value1[this.keyArr][0].weightUnit : 6
}
this.value1[this.keyArr].push(p)
this.$forceUpdate();
......
<template>
<div style="min-width: 100px;width: 100%;">
<el-select v-model="val">
<el-select @change="(e) =>{$emit('change',e)}" :disabled="disabled" v-model="val">
<el-option v-for="(item, index) in options" :value="item.id" :key="index" :label="$l(item ,'title')" ></el-option>
</el-select>
</div>
......@@ -10,6 +10,10 @@
export default {
name: "weight-select",
props:{
disabled:{
type:Boolean,
default:false
},
options:{
type:Array,
default:()=>[]
......
......@@ -72,7 +72,7 @@
<el-form-item :label="$t('快递')" prop="expressId">
<!-- <el-input v-model="form.expressId" placeholder="请输入快递ID" /> -->
<el-select v-model="form.expressId">
<el-option v-for="item in expressList" :value="item.id" :label="item.companyName" :key="item.id"/>
<el-option v-for="item in expressList" :value="item.id+''" :label="item.companyName" :key="item.id"/>
</el-select>
</el-form-item>
</el-col>
......@@ -283,8 +283,7 @@ export default {
this.form.channelPackagingList = [];
this.dialogVisible = false;
getChannel(val).then((res) => {
console.log(res.data,'data')
res.data.channelPackagingList.forEach((item,index) =>{
(res.data.channelPackagingList || []).forEach((item,index) =>{
this.form.channelPackagingList[index] = { airWeightLimit:item.airWeightLimit, packagingTypes: item.packagingTypes ? item.packagingTypes.split(',') : [], channelPriceStepClearanceList:[],}
// if(!this.form.channelPackagingList[index]){
// this.form.channelPackagingList[index] = { airWeightLimit:item.airWeightLimit, packagingTypes:item.packagingTypes ? item.packagingTypes.split(',') : [], channelPriceStepClearanceList:[],}
......
......@@ -204,7 +204,7 @@ export default {
/** 删除按钮操作 */
handleDelete(row) {
const channelId = row.channelId;
this.$modal.confirm(this.$t('是否确认删除渠道管理编号为{channelId}的数据项?'),{channelId} ).then(function() {
this.$modal.confirm(this.$t('是否确认删除渠道管理编号为{channelId}的数据项?',{channelId})).then(function() {
return deleteChannel(channelId);
}).then(() => {
this.getList();
......
......@@ -42,12 +42,12 @@
v-hasPermi="['ecw:currency:create']">{{ $t('新增') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['ecw:currency:export']">{{ $t('导出') }}</el-button>
<!-- <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"-->
<!-- v-hasPermi="['ecw:currency:export']">{{ $t('导出') }}</el-button>-->
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
100外币兑人民币(CNY)汇率表
<!-- 100外币兑人民币(CNY)汇率表-->
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="" align="center" prop="id" />
......@@ -59,8 +59,8 @@
<el-switch v-model="scope.row.status" :active-value="0" :inactive-value="1" @change="handleStatusChange(scope.row)" />
</template>
</el-table-column>
<el-table-column label="100外币兑人民币汇率" align="center" prop="huilv" />
<el-table-column label="100人民币兑外币汇率" align="center" prop="exchangeToFc" />
<!-- <el-table-column label="100外币兑人民币汇率" align="center" prop="huilv" />-->
<!-- <el-table-column label="100人民币兑外币汇率" align="center" prop="exchangeToFc" />-->
<el-table-column :label="$t('排序')" align="center" prop="aorder" />
<!-- <el-table-column label="" align="center" prop="createAt" width="180">-->
<!-- <template slot-scope="scope">-->
......@@ -100,12 +100,12 @@
<!-- <el-form-item :label="$t('状态')" prop="show">-->
<!-- <el-input v-model="form.show" :placeholder="$t('请输入状态')" />-->
<!-- </el-form-item>-->
<el-form-item label="100外币兑人民币汇率" prop="huilv">
<el-input v-model="form.huilv" placeholder="请输入100外币兑人民币汇率" />
</el-form-item>
<el-form-item label="100人民币兑外币汇率" prop="exchangeToFc">
<el-input v-model="form.exchangeToFc" placeholder="请输入100人民币兑外币汇率" />
</el-form-item>
<!-- <el-form-item label="100外币兑人民币汇率" prop="huilv">-->
<!-- <el-input v-model="form.huilv" placeholder="请输入100外币兑人民币汇率" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="100人民币兑外币汇率" prop="exchangeToFc">-->
<!-- <el-input v-model="form.exchangeToFc" placeholder="请输入100人民币兑外币汇率" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="100人民币兑外币汇率" prop="huilv">
{{ form.huilv ? (10000 / form.huilv).toFixed(6) : ''}}
</el-form-item> -->
......@@ -179,6 +179,9 @@ export default {
form: {},
// 表单校验
rules: {
titleZh:{required:true,message:'请输入中文名称',target:'blur'},
titleEn:{required:true,message:'请输入英文名称',target:'blur'},
fuhao:{required:true,message:'请输入货币符号 ',target:'blur'},
},
statusDictDatas: getDictDatas(DICT_TYPE.COMMON_STATUS),
......@@ -228,7 +231,18 @@ export default {
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.queryParams = {
pageNo: 1,
pageSize: 10,
titleZh: null,
titleEn: null,
fuhao: null,
status: null,
huilv: null,
aorder: null,
createAt: null,
updateAt: null,
};
this.handleQuery();
},
/** 新增按钮操作 */
......@@ -309,6 +323,36 @@ export default {
this.exportLoading = false;
}).catch(() => {});
}
},
watch:{
'queryParams.titleZh':{
handler(value){
if(value === ''){
this.queryParams.titleZh = undefined
}
}
},
'queryParams.titleEn':{
handler(value){
if(value === ''){
this.queryParams.titleEn = undefined
}
},
},
'queryParams.fuhao':{
handler(value){
if(value === ''){
this.queryParams.fuhao = undefined
}
},
},
'queryParams.status':{
handler(value){
if(value === ''){
this.queryParams.status = undefined
}
}
}
}
};
</script>
......@@ -4,7 +4,7 @@
<el-dialog title="更多联系人" :visible.sync="visible">
<div v-if="info">
<div style="text-align: center;margin-bottom: 20px;" v-for="(item, index) in info" :key="index">
联系人{{index + 1}}{{$l('name', item)}}联系方式{{index + 1}}:+{{item.areaCode}} {{item.phoneNew}}<br/>
联系人{{index + 1}}{{$l(item, 'name')}} &ensp;&ensp;&ensp; 联系方式{{index + 1}}:+{{item.areaCode}} {{item.phoneNew}}<br/>
邮箱:{{item.email}}
</div>
......
<template>
<div>
<div v-for="(item, index) in info.customerHandoverDetailDtoList">
<div style="color: blue"> 客户编号{{index + 1}}{{item.customerNumber}} 客户名称{{index + 1}}{{item.customerName}} </div>
<router-link :to="'/customer/query/' + item.customerId"><div style="color: blue"> 客户编号{{index + 1}}{{item.customerNumber}} 客户名称{{index + 1}}{{item.customerName}} </div></router-link>
<div>就客户经理{{index + 1}}{{item.oldCustomerServiceName || '-'}} <span v-if="item.oldCustomerServiceDeptName">{{item.oldCustomerServiceDeptName}}</span></div>
</div>
<div style="color: blue">新客户经理:{{info.newCustomerServiceName || '-'}} <span v-if="info.newCustomerServiceDeptName">{{info.newCustomerServiceDeptName}}</span> </div>
<div>新客户经理:{{info.newCustomerServiceName || '-'}} <span v-if="info.newCustomerServiceDeptName">{{info.newCustomerServiceDeptName}}</span> </div>
<div>
申请理由:{{info.reason}}
</div>
......
......@@ -2,7 +2,8 @@
<el-dialog
center
:title="$t('客服')"
:visible.sync="show"
:visible="show"
@close="close"
width="30%">
<div style="width: 100%;min-height: 200px;text-align: center">
<el-select filterable v-model="service">
......@@ -66,12 +67,18 @@ export default {
if(r.code === 0){
this.$emit('update:show',false)
this.$emit('update:customerIds',[])
this. service = '';
this. service = '';
this.textarea = '';
this.$message.success(this.$t('用户批量转移成功!'))
}
})
},
close(){
this. service = '';
this.textarea = '';
this.$emit('update:show',false)
},
}
}
</script>
......
......@@ -231,6 +231,7 @@ import { parseTime } from '@/utils/ruoyi';
cubeNum: [{required: true, message: this.$t("立方数不能为空"), trigger: "blur"}],
startTime: [{required: true, message: this.$t("起始时间不能为空"), trigger: "change"}],
endTime: [{required: true, message: this.$t("截止时间不能为空"), trigger: "change"}],
cubeUnit:[{required: true, message: this.$t("目标单位不能为空"), trigger: "change"}]
}
};
},
......
This diff is collapsed.
......@@ -13,7 +13,7 @@
</div>
</el-form-item>
<el-form-item :label="$t('收款账户')" prop="accountNo">
<span>{{ addForm.accountNo+'('+addForm.accountName+')' }}</span>
<span>{{ addForm.accountNo}}{{'('+addForm.accountName+')' }}</span>
</el-form-item>
<el-form-item :label="$t('实收日期')" prop="amountDate">
<span>{{ addForm.amountDate }}</span>
......@@ -23,7 +23,7 @@
<span>{{ addForm.amount }}</span>
</el-form-item>
<el-form-item label-width="0px" prop="currencyId">
<span>({{getCurrencyLabel(showCurrencyId)}})</span>
<span>({{getCurrencyLabel(addForm.currencyId)}})</span>
</el-form-item>
</div>
<el-form-item
......@@ -39,7 +39,7 @@
<template slot="label">
{{ $t('兑核销基准币种金额') }}{{getCurrencyLabel(showCurrencyId)}}
</template>
<span>{{ addForm.writeOffAmount?parseFloat(addForm.writeOffAmount).toFixed(6):'' }}</span>
<span>{{ addForm.writeOffAmount?parseFloat(addForm.writeOffAmount).toFixed(2):'' }}</span>
</el-form-item>
<el-form-item :label="$t('水单附件')" prop="attr">
<div>
......@@ -114,11 +114,12 @@
this.detailed = res.data.map(v => ({
...v,
amountDate: this.parseTime(v.amountDate, '{y}-{m}-{d}'),
accountNo: +v.accountNo,
rate:parseFloat(v.rate).toFixed(6),
rate:parseFloat(v.rate).toFixed(2),
attr: v.attr ? v.attr.split(',').map(t => ({ name: t.slice(t.lastIndexOf('/') + 1), url: t })) : []
}))
console.log(this.detailed)
this.addForm = this.detailed.find((itt) => itt.id == this.bankId);
console.log(this.addForm)
this.handleAddReceiptItem()
})
},
......
......@@ -213,7 +213,7 @@
<el-table-column :label="$t('应付金额')" align="center" prop="totalAmount"/>
<el-table-column :label="$t('币种')" align="center" prop="currencyId">
<template slot-scope="scope">
{{ getCurrencyLabel(scope.row.currencyId) }}
{{ getCurrencyLabel(scope.row.currencyId) }}
<!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" /> -->
</template>
</el-table-column>
......@@ -474,6 +474,7 @@ import {getWarehouseList} from '@/api/ecw/warehouse'
import WorkFlow from '@/components/WorkFlow/'
import {getCustomer, getCustomerPage} from "@/api/ecw/customer";
import Template from "@/views/cms/template/index.vue";
import {getExchangeRatePage} from "@/api/ecw/exchangeRate";
export default {
name: "commission-requestFunds",
......@@ -515,10 +516,12 @@ export default {
dialogVisible: false,
interdict:false,
bankAccountList:[],
rateList:[],
};
},
async created() {
await getCurrencyPage(this.params).then(res => this.currencyList = res.data.list)
await getExchangeRatePage({page:1,rows: 100}).then(res => this.rateList = res.data.list)
getWarehouseList().then(res => this.warehouseList = res.data)
let that = this;
if (that.$route.query.payableId && that.$route.query.payableId !== '0') {
......@@ -742,8 +745,8 @@ export default {
},
handleSelectionChange(val) {
this.multipleSelection = val.map(v => {
var rate = NP.divide(this.currencyList.find(vs => vs.id === v.currencyId).huilv, 100).toFixed(6)
return Object.assign(v, {exchangeRate: rate})
let p = this.rateList.find(i =>i.sourceCurrencyId === v.currencyId && i.targetCurrencyId === 3)
return Object.assign(v, {exchangeRate: p.currencyRate})
});
},
hiddenDialog() {
......
......@@ -10,7 +10,9 @@
<el-descriptions-item :label="$t('业务员')">{{ form.salesmanName }}</el-descriptions-item>
<el-descriptions-item :label="$t('期望收款金额')">
<template>
<div sytle="display:flex">
<div v-for="itemAmount in collectionAmount" :key="itemAmount.currencyNameZh">{{ itemAmount.amount}}{{$i18n.locale=='zh_CN'?itemAmount.currencyNameZh:itemAmount.currencyNameEn}}</div>
</div>
</template>
</el-descriptions-item>
<el-descriptions-item v-if="reason" :label="$t('申请理由')">{{reason}}</el-descriptions-item>
......
......@@ -16,7 +16,7 @@
</el-descriptions-item>
<el-descriptions-item v-if="reason" :label="$t('申请理由')">{{reason}}</el-descriptions-item>
</el-descriptions>
</div>
<el-descriptions :column="3" border>
<el-descriptions-item >
......@@ -50,6 +50,7 @@
{{ WriteOffProportion }}%
</el-descriptions-item>
</el-descriptions>
<div style="margin: 20px 0;font-size:16px" v-if="form.financeRemark">{{$t('备注')}}:{{form.financeRemark}}</div>
<div class="btn">
<el-button
size="mini"
......
This diff is collapsed.
......@@ -454,6 +454,7 @@ import { getCurrencyPage } from "@/api/ecw/currency";
import NP from 'number-precision'
import {getWarehouseList} from '@/api/ecw/warehouse'
import WorkFlow from '@/components/WorkFlow/'
import { getExchangeRatePage } from "@/api/ecw/exchangeRate";
export default {
name: "EcwFinancialCreatpayment",
......@@ -492,18 +493,46 @@ export default {
currencyList: [],
warehouseList:[],
selectedUsers:[],
dialogVisible:false
dialogVisible:false,
rateList:[],
};
},
activated(){
console.log(11)
// this.getList();
if (this.$route.query.payableId && this.$route.query.payableId != 0) {
this.payableId = this.$route.query.payableId;
getPayableInfoByIds({ id: this.payableId }).then(res => {
this.handleSelectionChange([res.data])
this.list = this.multipleSelection
this.$set(this.form, 'supplierId', res.data.supplierId)
this.selectChange(this.form.supplierId)
})
}
if (this.$route.query.id && this.$route.query.id !== '0') {
this.id = this.$route.query.id;
getPaymentInfoByIds({ id: this.id }).then(res => {
this.form = {
...res.data,
latestPayAt: this.parseTime(res.data.latestPayAt, '{y}-{m}-{d}'),
applicationAt: this.parseTime(res.data.applicationAt, '{y}-{m}-{d}'),
invoiceStatus: String(res.data.invoiceStatus),
}
this.$set(this.form,'supplierBankAccount',res.data.supplierBankAccount)
console.log(this.form)
})
getPaymentItem({ id: this.id }).then(res => {
this.list = [...res.data]
this.defaultList = [...res.data]
})
}
},
async created() {
await getCurrencyPage(this.params).then(res => this.currencyList = res.data.list)
await getExchangeRatePage({page:1,rows: 100}).then(res => this.rateList = res.data.list)
getWarehouseList().then(res => this.warehouseList = res.data)
let that = this;
if (that.$route.query.payableId && that.$route.query.payableId !== '0') {
if (that.$route.query.payableId && that.$route.query.payableId != 0) {
this.payableId = this.$route.query.payableId;
getPayableInfoByIds({ id: this.payableId }).then(res => {
this.handleSelectionChange([res.data])
......@@ -714,10 +743,18 @@ export default {
},
handleSelectionChange(val) {
this.multipleSelection = val.map(v => {
var rate = NP.divide(this.currencyList.find(vs => vs.id === v.currencyId).huilv, 100).toFixed(6)
// var rate = NP.divide(this.currencyList.find(vs => vs.id === v.currencyId).huilv, 100).toFixed(6)
var rate = this.getRate(v.currencyId)
return Object.assign(v, { exchangeRate: rate })
});
},
//获取汇率
getRate(sourceCurrencyId){
var targetCurrencyId = this.currencyList.find(vs=>vs.titleEn=='RMB').id
var rate = this.rateList.find(v=>(v.sourceCurrencyId === sourceCurrencyId&&v.targetCurrencyId===targetCurrencyId))
if(rate) return rate.currencyRate
return ''
},
hiddenDialog() {
this.open = false;
},
......
......@@ -2,7 +2,11 @@
<div class="app-container" >
<div id="print" style="font-size: 18px;">
<div style="text-align: center;font-weight: bold;font-size: 26px;padding: 22px 0;border-top: 1px solid #666;border-left:1px solid #666;border-right: 1px solid #666;">{{$t('捷道货运收款单')}}</div>
<div style="position:relative;text-align: center;font-weight: bold;font-size: 26px;padding: 22px 0;border-top: 1px solid #666;border-left:1px solid #666;border-right: 1px solid #666;">
<div style="position:absolute;left:4px;top:4px">{{$t('广州市捷道国际货运代理有限公司')}}
</div>
<span>{{$t('收款单')}}</span>
</div>
<table border="1" style="width: 100%;text-align: center;border-collapse: collapse; ">
<tr>
<td style="font-weight: bold;width:12.5%">{{$t('部门')}}</td>
......@@ -27,26 +31,26 @@
<th style="width: 12.5%;">{{$t('序号')}}</th>
<th style="width: 12.5%;">{{$t('提单号')}}</th>
<th style="width: 12.5%;">{{$t('订单号')}}</th>
<th style="width: 12.5%;">{{$t('品名')}}</th>
<!-- <th style="width: 12.5%;">{{$t('品名')}}</th> -->
<th style="width: 12.5%;">{{$t('收入类型')}}</th>
<th style="width: 12.5%;">{{$t('金额')}}</th>
<th style="width: 12.5%;">{{$t('币种')}}</th>
<th style="width: 12.5%;">{{$t('金额')}}</th>
<th style="width: 12.5%;">{{$t('优惠金额')}}</th>
</tr>
<tr v-for="(item, index) in list" :key="index">
<tr v-for="(item, index) in list" :key="item.id">
<td>{{ index + 1 }}</td>
<td>{{ orderData.tidanNo||''}}</td>
<td>{{ item.orderNo }}</td>
<td>{{ $i18n.locale=='zh_CN'?item.titleZh:item.titleEn }}</td>
<td><dict-tag :value="item.feeType" :type="DICT_TYPE.FEE_TYPE"></dict-tag></td>
<td> {{item.totalAmount}}</td>
<!-- <td>{{ $i18n.locale=='zh_CN'?item.titleZh:item.titleEn }}</td> -->
<td><dict-tag :value="item.feeType" :type="DICT_TYPE.RECEIPT_FEE_TYPE"></dict-tag></td>
<td>{{getCurrencyLabel(item.currencyId)}}</td>
<td> {{item.totalAmount}}</td>
<td>{{ item.discountTotal||0 }}</td>
</tr>
<tr v-for="(items, indexs) in receiptAccountList" :key="indexs">
<td>{{getCurrencyLabel(items.currencyId)}}{{$t('应收合计')}}</td>
<td ><span v-if="items.discountTotal>0">{{ `${items.receivableAmount - items.discountTotal }(${items.receivableAmount} - ${items.discountTotal})` }}</span>
<span v-else>{{ `${items.receivableAmount - items.discountTotal }` }}</span>
<span v-else>{{ `${items.receivableAmount}` }}</span>
</td>
<td>{{$t('汇率')}}</td>
<td>{{ items.collectionRate}}</td>
......@@ -64,7 +68,7 @@
<p style="margin: 0;word-break: break-all;">A/C NO{{bankTiem.accountNo}}</p>
</div>
<div style="padding:6px 0;width: 87.5%;text-align: center;">
<p style="margin: 0;">{{$t('实收')}}{{getCurrencyLabel(bankTiem.currencyId)}}{{bankTiem.amount}}¥</p>
<p style="margin: 0;">{{$t('实收')}}{{getCurrencyLabel(bankTiem.currencyId)}}{{bankTiem.amount}}{{getCurrencyFuhao(bankTiem.currencyId)}}</p>
<!-- <p style="margin: 0;">未收:¥{{bankTiem.noReceipt}}</p> -->
</div>
</div>
......@@ -212,6 +216,11 @@
if(label.length>0) return this.$i18n.locale=='zh_CN'?label[0].titleZh:label[0].titleEn
return ''
},
getCurrencyFuhao(id){
var label = this.currencyList.filter(item=>item.id == id)
if(label.length>0) return label[0].fuhao
return ''
},
getList() {
getReceivableItem({ id: this.id }).then(res => {
this.detailed = res.data
......
This diff is collapsed.
......@@ -233,7 +233,7 @@
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
<el-button size="mini" type="text" v-hasPermi="['ecw:receivable:collection']" @click="handleAdd(scope.row.id)" >{{ $t('收款') }}</el-button>
<el-button size="mini" type="text" v-hasPermi="['ecw:receivable:collection']" @click="handleAdd(scope.row)" >{{ $t('收款') }}</el-button>
</template>
</el-table-column>
</el-table>
......@@ -350,8 +350,9 @@ export default {
this.getList();
},
/** 新增按钮操作 */
handleAdd(id) {
return this.$router.push("creatCollection?receiptId=" + id);
handleAdd(row) {
if(!row) return this.$router.push("creatCollection");
return this.$router.push("creatCollection?orderId=" + row.orderId);
},
submitForm() {},
},
......
This diff is collapsed.
This diff is collapsed.
......@@ -64,6 +64,15 @@
</el-date-picker>
</el-form-item>
</el-col>
<el-form-item :label="$t('编号')">
<el-input
style="max-width: 188px"
v-model="queryParams.numberNo"
:placeholder="$t('订单号和提单号,自编号')"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">{{ $t('查找') }}</el-button>
</el-form-item>
......
......@@ -1019,6 +1019,10 @@ export default {
item.transportId = this.form.transportId
})
if(this.form.transportVO?.packageTypeArr){
this.form.transportVO.packageType = this.form.transportVO.packageTypeArr.join(',')
}
// 修改的提交
if (this.form.offerId != null) {
let data = Object.assign({}, this.form, {
......
......@@ -259,8 +259,10 @@ export default {
this.params.orderNo = this.list[0].orderNo
orderWarehouseInAdjustApply(this.params).then(r => {
if (r.code === 0) {
this.$emit('getList')
this.$emit('update:dialogVisible', false)
this.$message.success(this.$t('调仓申请提交成功,请耐心等待审核'));
}
})
},
......@@ -271,6 +273,7 @@ export default {
}).then(({ value }) => {
warehouseApprovalCancel(this.applyStatus.orderWarehouseApprovalBackVO.id,value) .then(r => {
if(r.data){
this.$emit('getList')
this.$message.success(this.$t('取消调仓成功'))
this.$emit('update:dialogVisible',false)
......
......@@ -145,6 +145,7 @@
<el-button type="text" size="mini" @click="cargoTransfer(scope.row)" v-hasPermi="['ecw:cargo_control:cargo_transfer']">{{$t('调货')}}</el-button>
<el-button type="text" size="mini" @click="showFallbackOrder=scope.row" v-if="scope.row.isReleaseAfterGoods" v-hasPermi="['ecw:cargo_control:fallback']">{{$t('反复核')}}</el-button>
</template>
<el-button type="text" size="mini" @click="showLogOrderId=scope.row.orderId" v-hasPermi="['ecw:cargo_control:log']">{{$t('控货日志')}}</el-button>
<el-button type="text" size="mini" @click="toDetail(scope.row)" v-hasPermi="['ecw:cargo_control:show']">{{$t('查看')}}</el-button>
</template>
</el-table-column>
......@@ -157,6 +158,8 @@
<release v-if="showReleaseOrderId" :order-id="showReleaseOrderId" @close="showReleaseOrderId=null" @success="onReleaseSuccess" />
<transfer-cargo v-if="showTransferCargoOrderId" :order-id="showTransferCargoOrderId" @close="showTransferCargoOrderId=null" @success="onTransferCargoSuccess" :cargoControlPickId="pickInfo ? pickInfo.id : 0" />
<fallback v-if="showFallbackOrder !== null" :order="showFallbackOrder" @close="showFallbackOrder=null" @success="onFallbackSuccess" :index="null" />
<!--控货日志-->
<cargo-log-list v-if="showLogOrderId" :order-id="showLogOrderId" @close="showLogOrderId=null" />
</div>
</template>
......@@ -173,9 +176,11 @@ import { getCargoControlOrderPage, batchReview, orderReview, getPickRleaseInfo,
import TransferCargo from '@/views/ecw/order/components/TransferCargo'
import Fallback from './components/Fallback'
import {getWarehouseList} from '@/api/ecw/warehouse'
import CargoLogList from "@/views/ecw/order/components/CargoLogList.vue";
export default {
name: "EcwOrderCargocontrol",
components: {
CargoLogList,
CustomerSelector, ProductSelector, Selector, Transfer, Release,CargoControlEdit, TransferCargo, Fallback
},
data() {
......@@ -215,6 +220,7 @@ export default {
showTransferCargoOrderId: null, // 调货ID
showFallbackOrder: null, // 调货订单
pickInfo: null, // 当前操作的提货信息
showLogOrderId: null, // 显示控货日志的订单ID
};
},
computed: {
......
......@@ -53,11 +53,16 @@
<el-table-column :label="$t('提单号')" prop="tidanNo"></el-table-column>
<el-table-column :label="$t('备注')" prop="remarks"></el-table-column>
<el-table-column :label="$t('操作人')" prop="operator"></el-table-column>
<el-table-column :label="$t('日期')" prop="createTime">
<el-table-column :label="$t('放货日期')" prop="createTime">
<template slot-scope="{row}">
{{row.createTime|parseTime}}
</template>
</el-table-column>
<el-table-column :label="$t('复核日期')" prop="createTime">
<template slot-scope="{row}">
{{row.checkTime|parseTime}}
</template>
</el-table-column>
<el-table-column :label="$t('状态')" prop="status">
<template slot-scope="{row}">
<dict-tag :type="DICT_TYPE.ECW_RELEASE_STATUS" :value="row.status" />
......@@ -70,7 +75,7 @@
<el-button v-if="scope.row.status == 1" type="success" size="mini" @click="review(scope.row.id)">{{$t('放货复核')}}</el-button>
<el-button v-if="scope.row.status == 3" type="danger" size="mini" @click="fallbackIndex=scope.$index">{{$t('反复核')}}</el-button>
<el-button v-if="scope.row.status == 3" type="success" size="mini" @click="cargoControlPickId=scope.row.id">{{$t('调货')}}</el-button>
<el-button v-if="[2,4, 5, 6].indexOf(scope.row.status) > -1" type="primary" size="mini" @click="showApprovalDetail(scope.row.formId)">{{$t('审核详情')}}</el-button>
<el-button v-if="[2,4, 5, 6].indexOf(scope.row.status) > -1" type="danger" size="mini" @click="cancelApproval(scope.row.id)">{{$t('取消审核')}}</el-button>
</template>
......
......@@ -33,7 +33,20 @@
</div>
</div>
</el-descriptions-item>
<!-- 优惠申请 -->
<el-descriptions-item :label="$t('申请理由')" v-if="type == 31 || type == 32" :span="4">
<div class="bold" v-for="(item,index) in detail.batchApplyOrderItemDetailVOList" :key="index">
<div>{{index+1}}.【{{$l(item, 'prodTitle')}}</div>
<div>
{{item.charging ? $t('原全包价') : $t('原运费')}}{{item.orgFreight}} {{ currencyMap[item.freightCurrency] }} / {{ unitMap[item.freightVolume] }}
{{item.charging ? $t('新全包价') : $t('新运费')}}{{item.freight}} {{ currencyMap[item.freightCurrency] }} / {{ unitMap[item.freightVolume] }}
</div>
<div v-if="!item.charging">
{{$t('原清关费')}}{{item.orgClearanceFreight}} {{ currencyMap[item.clearanceFreightCurrency] }} / {{ unitMap[item.clearanceFreightVolume] }}
{{$t('新清关费')}}{{item.clearanceFreight}} {{ currencyMap[item.clearanceFreightCurrency] }} / {{ unitMap[item.clearanceFreightVolume] }}
</div>
</div>
</el-descriptions-item>
<!-- 重泡货 -->
<el-descriptions-item :label="$t('申请理由')" v-if="type == 4 || type ==5" :span="4">
<div class="bold" v-if="type == 4">
......@@ -142,7 +155,7 @@ export default {
}
},
type(){
if([1,2,3,4,5].indexOf(this.type) > -1){
if([1,2,3,4,5,31,32].indexOf(this.type) > -1){
// 加载费用体积单位
getUnitList().then(res => this.unitList = res.data)
getCurrencyList().then(res => this.currencyList = res.data)
......@@ -176,6 +189,7 @@ export default {
getApproval(this.id).then(res => {
this.type = res.data.type
this.detail = JSON.parse(res.data.details)
console.log(this.detail)
})
},
getOrder(){
......
<template>
<div>
<h1>{{ $t('申请信息【订单信息】') }}</h1>
<el-descriptions :column="4" border>
<el-descriptions-item :label="$t('订单号')">{{ order.orderNo }}</el-descriptions-item>
<el-descriptions-item :label="$t('运输方式')">
<dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="order.transportId"></dict-tag>
</el-descriptions-item>
<el-descriptions-item :label="$t('出货方式')">
{{ order.channelName }}
</el-descriptions-item>
<el-descriptions-item :label="$t('订单状态')">
{{ order.statusMsg }}
</el-descriptions-item>
<el-descriptions-item :label="$t('唛头')">
{{ order.marks }}
</el-descriptions-item>
<el-descriptions-item :label="$t('始发仓')">{{ order.logisticsInfoDto.startTitleZh }}</el-descriptions-item>
<el-descriptions-item :label="$t('目的仓')">{{ order.logisticsInfoDto.destTitleZh }}</el-descriptions-item>
</el-descriptions>
<div style="font-size: 14px">
<p>{{ $t('申请理由') }}</p>
<div v-for="(item, index) in feeList" :key="item.id">
{{index + 1}}、【<dict-tag :type="DICT_TYPE.FEE_TYPE" :value="item.feeType" />】,
<dict-tag :value="item.payType" :type="DICT_TYPE.PAYMENT_TYPE" ></dict-tag>
{{ item.applicationFee }}{{ currencyName(item.applicationFeeCurrency) }}
{{$t('备注')}}{{ item.remarks || $t('')}}
</div>
</div>
</div>
</template>
<script>
import {
warehouseApprovalGetByFormId,
warehouseApprovalGetById,
warehouseAreaPositionList
} from "@/api/ecw/batchSingleApplication";
import {
applicationGetOrderByProcessId,
feeApplicationGet, feeApplicationGetBatch, getBatchFeeByBusinessId, getBatchFeeByProcessId,
getOrder,
getOrderPage,
getWarehouseUpdateApprovalInfo, qetBatchFeeByBusinessId
} from '@/api/ecw/order'
import { getChannelList } from '@/api/ecw/channel';
import Template from "@/views/cms/template";
import {getSupplierPage} from "@/api/ecw/supplier";
import { DICT_TYPE } from "@/utils/dict";
import { getCurrencyList } from "@/api/ecw/currency";
import {arrryToKeyedObjectBy} from '@/utils/index'
export default {
components: {Template},
props:{
businessId: [Number, String],
processInstanceId: String
},
name: "BatchFeeApplicationDetail",
data(){
return{
order: null,
feeList: [],
currencyList:[]
}
},
computed:{
currencyMap(){
return arrryToKeyedObjectBy(this.currencyList, 'id')
},
currencyName(){
return id => {
let obj = this.currencyMap[id]
if(obj) return this.$l(obj, 'title')
return this.$t('未知')
}
}
},
created() {
getCurrencyList().then(res => {
this.currencyList = res.data
})
getBatchFeeByBusinessId(this.businessId).then(res => {
console.log({res})
this.feeList = res.data
return getOrder(res.data[0].orderId)
}).then(res => {
this.order = res.data
})
},
methods:{
}
}
</script>
......@@ -33,7 +33,7 @@
</el-tab-pane>
</el-tabs>
<el-form-item label="">
<el-button type="primary" @click="submit">{{$t('提交')}}</el-button>
<el-button type="primary" @click="submit" :loading="loading">{{$t('提交')}}</el-button>
</el-form-item>
</el-form>
</el-dialog>
......@@ -47,6 +47,8 @@ export default {
},
data(){
return {
// 提交中状态
loading: false,
current: 'createBatch',
show: false,
form:{
......@@ -94,10 +96,12 @@ export default {
})
}
}
this.loading = true;
({createBatch, createSplitBatch}[this.current])(data).then(res => {
this.$message.success(this.$t("操作成功"));
this.$emit('success')
}).finally(() => {
this.loading = false
})
})
},
......
......@@ -25,18 +25,27 @@
<el-descriptions-item :label="$t('申请原因')" v-if="applyType == 8">
<dict-tag :type="DICT_TYPE.ECW_PICK_RECURRENT_NUCLEAR_TYPE" :value="detail.recurrentNuclearType" />
</el-descriptions-item>
<!-- 调货 -->
<el-descriptions-item :label="$t('申请原因')" v-if="applyType == 9">
{{$l(detail, 'reason')}}
</el-descriptions-item>
<!-- 取消放货 -->
<el-descriptions-item :label="$t('申请原因')" v-if="applyType == 10">
<el-descriptions-item :label="$t('申请原因')" v-if="applyType == 10" :span="2">
<dict-tag :type="DICT_TYPE.ECW_CANCEL_PICK_TYPE" :value="detail.cancelPickType" />
</el-descriptions-item>
<el-descriptions-item v-if="voucherList.length" :label="$t('凭证')" :span="3">
<div v-for="(item, index) in voucherList" :key="index" style="padding:5px">
<video v-if="isVideo(item)" :src="item" @click="playVideo(item)" style="width: 100px; height: 100px;"></video>
<el-image v-else :src="item" style="width: 100px; height: 100px;" :preview-src-list="voucherImages"></el-image>
</div>
</el-descriptions-item>
</el-descriptions>
<el-dialog :visible="!!videoUrl" :before-close="closeVideoPlayer">
<video v-if="!!videoUrl" :src="videoUrl" style="width: 500px; height: 500px" controls></video>
</el-dialog>
</div>
</template>
<script>
......@@ -44,7 +53,9 @@ import {getPickUpdateApproveInfo} from '@/api/ecw/orderCargoControl'
import {getOrder} from '@/api/ecw/order'
import {getChannelListByIds} from '@/api/ecw/channel'
import {parseTime} from '@/utils/ruoyi'
import Template from "@/views/cms/template/index.vue";
export default {
components: {Template},
filters: {parseTime},
props:{
id: [String, Number],
......@@ -55,7 +66,8 @@ export default {
detail: null,
order: null,
channels: [],
channelName: '/'
channelName: '/',
videoUrl: null
}
},
watch:{
......@@ -74,7 +86,24 @@ export default {
let channel = this.channels.find(item => item.channelId == id)
return channel ? channel.nameZh : '/'
}
}
},
// 凭证
voucherList(){
if(!this.detail || !this.detail.voucher) return []
return this.detail.voucher.split(',')
},
// 图片类型的凭证
voucherImages(){
return this.voucherList.filter(item => {
return !this.isVideo(item)
})
},
// 判断是否是视频链接
isVideo(){
return (url) => {
return ['mp4'].indexOf(url.split('.').pop().toLowerCase()) > -1
}
}
},
created(){
if(this.id){
......@@ -92,11 +121,20 @@ export default {
})
},
getChannel(){
if(!this.order || !this.order.channelId) return
if(!this.order || !this.order.channelId) return
getChannel(this.order.channelId).then(res => {
this.channelName = this.$l(res.data, 'name')
})
},
// 播放视频
playVideo(url){
console.log('play video', url)
this.videoUrl = url
},
// 关闭视频播放器
closeVideoPlayer(){
this.videoUrl = null
}
}
}
</script>
......@@ -108,4 +146,4 @@ export default {
font-weight: bold;
}
}
</style>
\ No newline at end of file
</style>
<template>
<el-dialog :title="$t('控货日志')" visible :before-close="closeDialog" :close-on-click-modal="false" width="1000px">
<el-table :data="list">
<el-table-column :label="$t('操作时间')" prop="createTime" width="200">
<template slot-scope="{row}">{{row.createTime|parseTime}}</template>
</el-table-column>
<el-table-column :label="$t('操作人')" prop="creatorName" width="100"></el-table-column>
<el-table-column :label="$t('操作人类型')" prop="content" width="100">
<template slot-scope="{row}">{{row.userType == 1 ? $t('会员') : $t('管理员')}}</template>
</el-table-column>
<el-table-column :label="$t('操作类型')" prop="type" width="200"></el-table-column>
<el-table-column :label="$t('备注')" prop="msg"></el-table-column>
</el-table>
</el-dialog>
</template>
<script>
import {
getControlLogList,
} from '@/api/ecw/orderCargoControl'
import {parseTime} from '@/utils/ruoyi'
export default {
props:{
orderId: Number
},
filters: {parseTime},
data(){
return {
show: false,
list:[]
}
},
created(){
this.show = true
this.loadData()
},
methods:{
loadData(){
getControlLogList(this.orderId).then(res => this.list = res.data)
},
closeDialog(){
this.show = false
this.$emit('close');
}
}
}
</script>
<style lang="scss" scoped>
</style>
<template>
<el-dialog
:title="title"
visible
:before-close="closeDialog"
:close-on-click-modal="false"
width="800px"
>
<div v-for="item in fileList" :key="item.id" class="file-list">
<span>{{ getFileName(item.url) }}</span>
<div @click="deleteFile(item.id)">{{ $t('删除') }}</div>
<div @click="downloadFile(item.url)">{{ $t('下载') }}</div>
</div>
<div style="margin-top: 30px;display:flex;">
<el-upload action="#" accept="png" :http-request="requestUpload" :show-file-list="false" :before-upload="beforeUploadimg1">
<el-button size="small">
{{ $t('上传新附件') }}
<i class="el-icon-upload el-icon--right" />
</el-button>
</el-upload>
<el-button style="margin-left: 60px;" @click="closeDialog">{{ $t('返回') }}</el-button>
</div>
</el-dialog>
</template>
<script>
import { warehousePictureList, warehousePictureCreate, warehousePictureDelete,uploadOrgname } from '@/api/ecw/order'
export default {
props: {
orderId: [String, Number],
orderNo: [String, Number]
},
data() {
return {
show: false,
detail: null,
fileList: []
}
},
computed: {
title() {
let t = this.$t('报关资料')
if (this.orderNo) {
t += '-' + this.orderNo
}
return t
}
},
created() {
this.show = true
this.loadData()
},
methods: {
loadData() {
warehousePictureList({ bizId: this.orderId, type: 6 }).then((res) => {
this.fileList = res.data
})
},
getFileName(url) {
if (!url) return '/'
var file = url.split('/')
return file[file.length - 1]
},
closeDialog() {
this.show = false
this.$emit('close')
},
// 覆盖默认的上传行为
requestUpload() {
},
// 上传预处理
beforeUploadimg1(file) {
if (this.fileList.length >= 10) {
this.$message.error(this.$t('您最多上传10个附件'))
return
}
console.log(file)
var type = file.name.split('.')
if (['xls', 'doc', 'ppt', 'txt', 'pdf', 'jpg', 'png', 'jpeg', 'docx', 'xlsx'].indexOf(type[type.length - 1]) === -1) {
this.$message.error(this.$t('附件仅限doc/xls/ppt/txt/pdf/jpg/png/jpeg/docx/xlsx格式'))
} else {
// 上传
const formData = new FormData()
formData.append('file', file)
// formData.append('path', this.uuid())
uploadOrgname(formData).then(response => {
if (response.data) {
this.createImage(response.data)
}
})
}
},
createImage(url) {
warehousePictureCreate({ bizId: this.orderId, type: 6, url: url }).then(res => {
this.$message.success(this.$t('上传成功'))
this.loadData()
})
},
downloadFile(url) {
window.open(url, '_self')
},
deleteFile(id) {
this.$confirm(this.$t('确定删除附件吗?')).then(function() {
return warehousePictureDelete(id)
}).then(() => {
this.loadData()
this.$message({
message: this.$t('删除成功'),
type: 'success'
})
}).catch(() => {})
},
uuid() {
var s = []
var hexDigits = '0123456789abcdef'
for (var i = 0; i < 36; i++) {
s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1)
}
s[14] = '4' // bits 12-15 of the time_hi_and_version field to 0010
s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1) // bits 6-7 of the clock_seq_hi_and_reserved to 01
s[8] = s[13] = s[18] = s[23] = '-'
var uuid = s.join('')
return uuid
}
}
}
</script>
<style lang="scss" scoped>
.title {
font-size: 16px;
margin: 20px 0;
display: flex;
align-items: center;
&:before {
content: '';
width: 5px;
height: 15px;
background: #666;
margin-right: 10px;
}
}
.file-list{
display: flex;
align-items: center;
color: #297CE7;
margin-left: 30px;
font-size:16px;
margin-bottom:10px;
div{
cursor: pointer;
margin-left: 30px;
}
}
</style>
This diff is collapsed.
......@@ -3,7 +3,7 @@
</template>
<script>
import {sendSmsCode} from '@/api/ecw/orderCargoControl'
const timeout = null
let timeout = null
export default {
props:{
orderId: [String, Number],
......@@ -46,10 +46,10 @@ export default {
countDown(){
this.leftTime --
if(this.leftTime <= 0){
return false
return false
}
timeout = setTimeout(this.countDown, 1000)
}
}
}
</script>
\ No newline at end of file
</script>
......@@ -42,6 +42,15 @@
{{getLocationName(row.orderLocationBackVOList)}}
</template>
</el-table-column>
<el-table-column :label="$t('入仓影像')" prop="orderLocationBackVOList" >
<template slot-scope="{row}">
<image-display :pictureUrls="warehouseItem.pictureUrls" :type="5">
<el-button type="text">
查看
</el-button>
</image-display>
</template>
</el-table-column>
</el-table>
</el-dialog>
</template>
......@@ -50,8 +59,10 @@ import { getOrder, getOrderWarehouseIn } from '@/api/ecw/order'
import { DICT_TYPE } from '@/utils/dict'
import { parseTime } from '@/utils/ruoyi'
import WarehouseAreaSelect from "@/components/WarehouseAreaSelect"
import ImageDisplay from "@/views/ecw/order/components/imageDisplay.vue";
export default {
components: {
ImageDisplay,
WarehouseAreaSelect
},
filters: {parseTime},
......
<template>
<div style="display: inline-block">
<div @click="visible = true">
<slot></slot>
</div>
<el-dialog
append-to-body
title="提示"
:visible.sync="visible"
width="80%">
<div style="display: flex;flex-wrap: wrap;">
<el-image style="width: 200px;height: 200px;margin-right: 10px;margin-bottom: 10px" v-for="(item) in list" :src="bizId ? item.url : item">
<video controls width="148px" height="148px" slot="error" :src="bizId ? item.url : item" ></video>
</el-image>
</div>
</el-dialog>
</div>
</template>
<script>
import {warehousePictureList} from "@/api/ecw/order";
export default {
props:{
bizId:[String, Number],
type:[Number],
pictureUrls:{
type: Array,
default:()=>[]
}
},
name: "imageDisplay",
data(){
return {
visible:false,
list:[],
}
},
created() {
},
methods:{
getList(){
warehousePictureList({bizId:this.bizId,type:this.type}).then(r =>{
this.list = r.data
;
})
}
},
watch:{
visible(val){
if(val){
if(this.bizId){
this.getList()
}else {
this.list = this.pictureUrls
}
}
}
}
}
</script>
<style scoped>
</style>
<template>
<div>
<template v-if="charging">
{{$t('全包价')}}:{{freight}}{{currencyMap[freightCurrency]}}
</template>
<template v-else>
<div>{{$t('运费')}}{{freight}}{{currencyMap[freightCurrency]}}</div>
<div>{{$t('清关费')}}{{clearance}}{{currencyMap[clearanceCurrency]}}</div>
</template>
</div>
</template>
<script>
export default {
props:{
// 货币映射
currencyMap:{
type:Object,
default(){
return {}
}
},
// 运费
freight: [String, Number],
// 运费货币
freightCurrency: Number,
// 清关费
clearance: [String, Number],
// 运费货币
clearanceCurrency: Number,
// 是否全包价
charging: Boolean
}
}
</script>
......@@ -12,13 +12,10 @@
</el-form-item>
<el-form-item :label="$t('特殊要求备注')"><el-input type="textarea" style="width: 300px;" v-model="todoDetail"></el-input></el-form-item>
<el-form-item v-for="(item,index) in this.getDictDatas(this.DICT_TYPE.ORDER_SPECIAL_NEEDS)" v-if="advanceType.indexOf(item.value) > -1" :key="item.value" :label="item.label + '预计金额'">
<el-input style="width: 300px;" v-model="specialNeedsList[index].transFee">
<div style="width: 100px;" slot="append" >
<el-select v-model="specialNeedsList[index].transCurrency">
<el-option v-for="item in JSON.parse(currency)" :key="item.id" :label="item.titleZh" :value="item.id" />
</el-select>
</div>
</el-input>
<el-input-number style="width: 300px;" v-model.number="specialNeedsList[index].transFee" type="number" :min="0" step-strictly></el-input-number>
<el-select v-model="specialNeedsList[index].transCurrency">
<el-option v-for="item in JSON.parse(currency)" :key="item.id" :label="item.titleZh" :value="item.id" />
</el-select>
<div style="display: inline-block;margin-left: 20px;">
<span style="margin-right: 10px;">{{ $t('付款类型') }}</span>
<dict-selector :placeholder="$t('请选择付款类型')" v-model="specialNeedsList[index].payType" :type="DICT_TYPE.PAYMENT_TYPE" ></dict-selector>
......
......@@ -7,7 +7,8 @@
:visible.sync="dialogVisible"
width="50%">
<div style="display: flex;flex-wrap: wrap;">
<div v-for="item in list" style="padding: 10px"><el-image
<div v-for="item in list" style="padding: 10px">
<el-image
style="width: 100px; height: 100px"
:src="item"
:preview-src-list="list">
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -125,7 +125,7 @@
<selector :options="channelList" :label-field="$l('name')" value-field="channelId" v-model="queryParams.channelId"></selector>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{$t('搜索')}}</el-button>
<el-button type="primary" icon="el-icon-search" @click="handleQuery" :loading="loading">{{$t('搜索')}}</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">{{$t('重置')}}</el-button>
</el-form-item>
</el-form>
......@@ -496,8 +496,8 @@
<print-lading-bill v-if="printLadingBillOrderId !== null" :order-id="printLadingBillOrderId" @close="printLadingBillOrderId=null" />
<batch-pickup v-if="showBatchPickup" @close="onBatchClose" @success="onBatchClose"/>
<withdrawal v-if="show" :dialog-visible="show" :orderId="orderId" ></withdrawal>
<batch-single-application :order-list="orderId" :dialog-visible.sync="warehouseBol"></batch-single-application>
<fee-application :order-id="orderId" :currencys="JSON.stringify(currencyList)" :dialog-visible.sync="feeApplicationBol"></fee-application>
<batch-single-application @getList="getList" :order-list="orderId" :dialog-visible.sync="warehouseBol"></batch-single-application>
<fee-application v-if="feeApplicationBol" :order-id="orderId" :currencys="JSON.stringify(currencyList)" :dialog-visible.sync="feeApplicationBol"></fee-application>
<merge-log :order-no="showMergedLogOrderNo" v-if="showMergedLogOrderNo !== null" @close="showMergedLogOrderNo=null" />
<pickup-log v-if="showPickupLogOrderNo" :order-no="showPickupLogOrderNo" @close="showPickupLogOrderNo=null" @delete="getList" />
<SplitRevoke v-if="splitRevokeOrderId" :order-id="splitRevokeOrderId" @close="splitRevokeOrderId=null;getList()"></SplitRevoke>
......
......@@ -133,6 +133,8 @@
<el-button v-else-if="scope.row.orderExceptionStatus==2&&scope.row.orderExceptionType=='order_pick_up_exception'" v-hasPermi="['ecw:exception:pickUp']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('查看')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionStatus==2&&scope.row.orderExceptionType=='not_customer_service_exception'" v-hasPermi="['ecw:exception:notCustomer']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('查看')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionStatus==2&&scope.row.orderExceptionType=='goods_add_exception'" v-hasPermi="['ecw:exception:goodsAddException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('查看')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionStatus==2&&scope.row.orderExceptionType=='fee_exception'" v-hasPermi="['ecw:exception:feeException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('查看')}}</el-button>
<!-- v2.0 -->
<el-button v-else-if="scope.row.orderExceptionStatus==2&&scope.row.orderExceptionType=='line_loop_exception'" v-hasPermi="['ecw:exception:lineLoopException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('查看')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionStatus==2&&scope.row.orderExceptionType=='customs_fee_not_quote_exception'" v-hasPermi="['ecw:exception:notQuoteException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('查看')}}</el-button>
......@@ -142,7 +144,7 @@
<el-button v-else-if="scope.row.orderExceptionStatus==2&&scope.row.orderExceptionType=='in_warehousing_diff_exception'" v-hasPermi="['ecw:exception:inWarehousingException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('查看')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionStatus==2&&scope.row.orderExceptionType=='stock_up_exception'" v-hasPermi="['ecw:exception:stockUpException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('查看')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionStatus==2&&scope.row.orderExceptionType=='channel_exception'" v-hasPermi="['ecw:exception:channelException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('查看')}}</el-button>
<el-tag style="margin-left:10px" v-if="scope.row.orderExceptionStatus==2">{{$t('已完成')}}</el-tag>
<el-button v-else-if="scope.row.orderExceptionType=='order_superfluous_box_exception'" v-hasPermi="['ecw:exception:superfluousBox']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('处理')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionType=='order_lack_box_exception'" v-hasPermi="['ecw:exception:lackBox']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('处理')}}</el-button>
......@@ -161,6 +163,7 @@
<el-button v-else-if="scope.row.orderExceptionType=='order_pick_up_exception'" v-hasPermi="['ecw:exception:pickUp']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('处理')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionType=='not_customer_service_exception'" v-hasPermi="['ecw:exception:notCustomer']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('处理')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionType=='goods_add_exception'" v-hasPermi="['ecw:exception:goodsAddException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('处理')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionType=='fee_exception'" v-hasPermi="['ecw:exception:feeException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('处理')}}</el-button>
<!-- v2.0 -->
<el-button v-else-if="scope.row.orderExceptionType=='line_loop_exception'" v-hasPermi="['ecw:exception:lineLoopException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('处理')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionType=='customs_fee_not_quote_exception'" v-hasPermi="['ecw:exception:notQuoteException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('处理')}}</el-button>
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -33,9 +33,9 @@
<el-table-column :label="$t('重量') + '(kg)'" prop="weight" />
<el-table-column :label="$t('数量(个)')" prop="quantity" />
<el-table-column :label="$t('入仓快递单号')" prop="expressNo" />
<!--<el-table-column :label="$t('首次入仓时间')" prop="inTime" >
<el-table-column :label="$t('首次入仓时间')" prop="inTime" >
<template slot-scope="{row}">{{row.inTime|parseTime}}</template>
</el-table-column>-->
</el-table-column>
<el-table-column :label="$t('储位')" prop="orderLocationBackVOList" >
<template slot-scope="{row}">
<!--{{getLocationName(row.orderLocationList)}}-->
......@@ -52,10 +52,12 @@
<script>
import WarehouseAreaSelect from "@/components/WarehouseAreaSelect/index.vue";
import {parseTime} from "@/utils/ruoyi";
export default {
name: "WarehouseRecord",
components: {WarehouseAreaSelect},
filters: {parseTime},
props:{
list:{
type: Array,
......@@ -73,6 +75,7 @@ export default {
this.show = true
},
methods:{
parseTime,
// 获取储位名称
getLocationName(locationArr){
if(!locationArr || !locationArr.length) return ''
......
This diff is collapsed.
......@@ -464,7 +464,7 @@ export default {
}
})
this.protectRowCount = protectRowCount*/
this.handleAdd()
// this.handleAdd()
// this.handleAdd(1)
}
},
......
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